Repository: vizorvr/patches Branch: develop Commit: 0f8c9ef0191e Files: 1779 Total size: 24.4 MB Directory structure: gitextract_k_vny2so/ ├── .dockerignore ├── .foreverignore ├── .gitignore ├── .jshintrc ├── .travis.yml ├── Dockerfile ├── LICENSE ├── README.md ├── WindowsInstallationReadme.md ├── app.js ├── bin/ │ ├── bundler.sh │ ├── deploy.sh │ └── test-functional.sh ├── browser/ │ ├── data/ │ │ ├── audio/ │ │ │ └── inedible_candy.ogg │ │ ├── editor-icons/ │ │ │ ├── directional-light/ │ │ │ │ └── directional.obj │ │ │ ├── hemisphere-light/ │ │ │ │ └── hemisphere.obj │ │ │ ├── point-light/ │ │ │ │ └── point.obj │ │ │ └── vr-camera/ │ │ │ └── Head1.obj │ │ ├── fonts/ │ │ │ ├── Source Sans Pro_Bold.json │ │ │ ├── Source Sans Pro_Regular.json │ │ │ ├── helvetiker_bold.typeface.js │ │ │ └── helvetiker_regular.typeface.js │ │ ├── graphs/ │ │ │ ├── create-360.json │ │ │ ├── default.json │ │ │ └── example.json │ │ └── video/ │ │ ├── attribution.txt │ │ └── water_loop.ogv │ ├── embed.html │ ├── help/ │ │ ├── introduction.html │ │ ├── plugin_api.html │ │ └── style.css │ ├── no_webgl.html │ ├── patchTemplates/ │ │ ├── 360photo.hbs │ │ ├── audio.hbs │ │ ├── scene.hbs │ │ ├── texture-plane.hbs │ │ └── video-plane.hbs │ ├── patches/ │ │ ├── 3d_plain_scene_loader.json │ │ ├── 3d_plain_scene_loader_with_camera_and_light_out.json │ │ ├── 3d_scene_loader_with_camera_and_transforms.json │ │ ├── 3d_scene_loader_with_mousecontrol.json │ │ ├── 3d_scene_material_light_transforms.json │ │ ├── 3d_scene_with_camera_material_lights.json │ │ ├── 3d_scene_with_material_lights_transforms_camera_input.json │ │ ├── 3d_scene_with_texture_out.json │ │ ├── _add-360-photo.json │ │ ├── _add-3d-model.json │ │ ├── _add-ambient-light.json │ │ ├── _add-box.json │ │ ├── _add-cylinder.json │ │ ├── _add-directional-light.json │ │ ├── _add-dodecahedron.json │ │ ├── _add-floor.json │ │ ├── _add-hemisphere-light.json │ │ ├── _add-particle-emitter.json │ │ ├── _add-particle-geometry.json │ │ ├── _add-plane-no-shading.json │ │ ├── _add-point-light.json │ │ ├── _add-ring.json │ │ ├── _add-room.json │ │ ├── _add-sky-sphere.json │ │ ├── _add-sphere.json │ │ ├── _add-text.json │ │ ├── _add-torus.json │ │ ├── _add_object_preset_Labv4-Genius_02.json │ │ ├── _add_object_preset_Labv4_Happy_02.json │ │ ├── _add_object_preset_Labv8lights.json │ │ ├── _add_object_preset_Labv9.json │ │ ├── _add_object_preset_LabvTV.json │ │ ├── _add_object_preset_Labvboombox.json │ │ ├── _add_object_preset_Labvbox.json │ │ ├── _add_object_preset_Labvdesk.json │ │ ├── _add_object_preset_Labvglasses.json │ │ ├── _add_object_preset_Labvglobe.json │ │ ├── _add_object_preset_Labvlight2.json │ │ ├── _add_object_preset_Labvmic.json │ │ ├── _add_object_preset_Labvrocket.json │ │ ├── _add_object_preset_Labvstool.json │ │ ├── _add_object_preset_Labvtrash.json │ │ ├── _add_object_preset_Labvwrench.json │ │ ├── _add_object_preset_Labvzapper.json │ │ ├── _add_object_preset_Mountain_02.json │ │ ├── _add_object_preset_Mountain_PineTree_02.json │ │ ├── _add_object_preset_Mountain_bush_01.json │ │ ├── _add_object_preset_Mountain_crystal_01.json │ │ ├── _add_object_preset_Mountain_green_01.json │ │ ├── _add_object_preset_Mountain_plumptree_01.json │ │ ├── _add_object_preset_Mountain_plumptree_02.json │ │ ├── _add_object_preset_Mountain_rocks_01.json │ │ ├── _add_object_preset_Mountain_scope_01.json │ │ ├── _add_object_preset_Mountain_shroom_01.json │ │ ├── _add_object_preset_Mountain_small_base_01.json │ │ ├── _add_object_preset_Mountain_small_base_02.json │ │ ├── _add_object_preset_Mountain_water_02.json │ │ ├── _add_object_preset_island-leaftreea.json │ │ ├── _add_object_preset_island-palmtree.json │ │ ├── _add_object_preset_island-stone-a.json │ │ ├── _add_object_preset_island-stone-b.json │ │ ├── _add_object_preset_island-stone-c.json │ │ ├── _add_object_preset_island-stone-d.json │ │ ├── _add_object_preset_island-valley-baserock.json │ │ ├── _add_stereo_cubemap.json │ │ ├── _animate-on-trigger.json │ │ ├── _animation-move-in-a-circle-and-turn.json │ │ ├── _audio-player-and-fft.json │ │ ├── _audio-player.json │ │ ├── _basic-clock.json │ │ ├── _example-gaze-button.json │ │ ├── _example-gaze-clicking.json │ │ ├── _example-inputs-to-array.json │ │ ├── _example-particle-spawn-from-mesh.json │ │ ├── _example-rotating-cube.json │ │ ├── _example-switch-box-position-on-gaze-click.json │ │ ├── _increment_or_decrement_on_trigger.json │ │ ├── _oscillate-between-2-values.json │ │ ├── _oscillate-sawtooth.json │ │ ├── _oscillate-with-in-tween.json │ │ ├── _oscillate-with-out-tween.json │ │ ├── _stopwatch.json │ │ ├── _template-360-photo.json │ │ ├── _template-basic-vr-scene.json │ │ ├── _template-minimal-vr-scene.json │ │ ├── _util-display-number.json │ │ ├── audio_audio_player.json │ │ ├── audio_audio_player_old.json │ │ ├── background_skybox.json │ │ ├── camera_orbit_camera.json │ │ ├── camera_perspective_camera_setup.json │ │ ├── camera_with_mouse_controls.json │ │ ├── camera_with_zoom_only.json │ │ ├── components/ │ │ │ ├── rotation-all-axes.json │ │ │ ├── rotation-y-axis.json │ │ │ └── wobble-y-axis.json │ │ ├── display_osc.json │ │ ├── instancing_array.json │ │ ├── instancing_cube.json │ │ ├── instancing_ifs.json │ │ ├── instancing_ifs_with_camera_and_light_out.json │ │ ├── instancing_texture.json │ │ ├── interaction_keypress_number_up_down.json │ │ ├── interaction_up_and_down_counter_with_init_and_clamp.json │ │ ├── interaction_up_down_counter_simple.json │ │ ├── material_all_texture_types.json │ │ ├── material_chain_with_hsla_and_blend_out.json │ │ ├── material_chain_with_image_out.json │ │ ├── material_full_material_chain.json │ │ ├── material_light_chain.json │ │ ├── material_material_and_light.json │ │ ├── material_material_and_light_no_texture.json │ │ ├── material_material_and_point_light_chain.json │ │ ├── material_point_light_chain.json │ │ ├── material_texture.json │ │ ├── matrix_circular_motion.json │ │ ├── matrix_rotate_animated.json │ │ ├── matrix_rotate_with_knobs.json │ │ ├── matrix_scale.json │ │ ├── matrix_shaky_translate_to_xy.json │ │ ├── matrix_transforms_setup.json │ │ ├── matrix_translate.json │ │ ├── newset_3d_scene_loader.json │ │ ├── newset_3d_scene_loader_with_camera.json │ │ ├── newset_3d_scene_with_full_controls.json │ │ ├── newset_camera_setup.json │ │ ├── newset_matrix_transform_setup.json │ │ ├── newset_point_light.json │ │ ├── newset_synch_add.json │ │ ├── newset_synch_substract.json │ │ ├── newset_synch_synchtrack.json │ │ ├── newset_transform_translate.json │ │ ├── patches.json │ │ ├── shader_fog.json │ │ ├── synch_add.json │ │ ├── synch_substract.json │ │ ├── synch_synchtrack.json │ │ ├── template_master_camera_and_master_time.json │ │ ├── three_ambient_light.json │ │ ├── three_base.json │ │ ├── three_box.json │ │ ├── three_circle.json │ │ ├── three_cylinder.json │ │ ├── three_directional_light.json │ │ ├── three_dodecahedron.json │ │ ├── three_obj_loader.json │ │ ├── three_plane_basic.json │ │ ├── three_plane_lambert.json │ │ ├── three_point_light.json │ │ ├── three_position_rotation_scale.json │ │ ├── three_sphere.json │ │ ├── three_vr_camera.json │ │ ├── time_accumulating_time.json │ │ ├── time_circular_motion_to_xyz.json │ │ ├── time_oscillate_2_values_in_tween.json │ │ ├── time_oscillate_2_values_out_tween.json │ │ ├── time_oscillate_between_2_values.json │ │ ├── time_oscillate_with_sawtooth.json │ │ ├── time_oscillate_with_triangle.json │ │ ├── time_shaky_random.json │ │ ├── time_timer_from_0_to_1 (1).json │ │ ├── time_timer_from_0_to_1 (2).json │ │ ├── time_timer_from_0_to_1.json │ │ ├── time_timer_from_1_to_0.json │ │ ├── transform_circular_movement_to_xy.json │ │ ├── util_1_step_stepsequencer.json │ │ ├── util_4_step_stepsequencer.json │ │ ├── util_8_step_stepsequencer.json │ │ ├── util_9_step_stepsequencer.json │ │ ├── util_accumulator.json │ │ ├── util_aspect_ratio.json │ │ ├── util_clamped_accumulator.json │ │ ├── util_clone_material_with_new_texture.json │ │ ├── util_concatenate_x2.json │ │ ├── util_concatenate_x3.json │ │ ├── util_float_array_sequencer.json │ │ ├── util_float_array_sequencer_oscillator_out.json │ │ ├── util_float_array_sequencer_with_interpolation.json │ │ ├── util_get_mesh_from_scene.json │ │ ├── util_knob_with_min_max.json │ │ ├── util_random_with_speed.json │ │ ├── uv_offset.json │ │ ├── uv_scale.json │ │ ├── video_video_player.json │ │ ├── vive-hands.json │ │ ├── vr_3d_object_loader.json │ │ └── wasdzc-keyboard-movement.json │ ├── plugins/ │ │ ├── absolute_modulator.plugin.js │ │ ├── accumulate_modulator.plugin.js │ │ ├── ace/ │ │ │ ├── ace.js │ │ │ ├── mode-css.js │ │ │ ├── mode-glsl.js │ │ │ ├── mode-html.js │ │ │ ├── mode-javascript.js │ │ │ ├── mode-json.js │ │ │ ├── mode-svg.js │ │ │ ├── src-noconflict/ │ │ │ │ ├── ace.js │ │ │ │ ├── ext-beautify.js │ │ │ │ ├── ext-chromevox.js │ │ │ │ ├── ext-elastic_tabstops_lite.js │ │ │ │ ├── ext-emmet.js │ │ │ │ ├── ext-error_marker.js │ │ │ │ ├── ext-keybinding_menu.js │ │ │ │ ├── ext-language_tools.js │ │ │ │ ├── ext-linking.js │ │ │ │ ├── ext-modelist.js │ │ │ │ ├── ext-old_ie.js │ │ │ │ ├── ext-searchbox.js │ │ │ │ ├── ext-settings_menu.js │ │ │ │ ├── ext-spellcheck.js │ │ │ │ ├── ext-split.js │ │ │ │ ├── ext-static_highlight.js │ │ │ │ ├── ext-statusbar.js │ │ │ │ ├── ext-textarea.js │ │ │ │ ├── ext-themelist.js │ │ │ │ ├── ext-whitespace.js │ │ │ │ ├── keybinding-emacs.js │ │ │ │ ├── keybinding-vim.js │ │ │ │ ├── mode-abap.js │ │ │ │ ├── mode-actionscript.js │ │ │ │ ├── mode-ada.js │ │ │ │ ├── mode-apache_conf.js │ │ │ │ ├── mode-applescript.js │ │ │ │ ├── mode-asciidoc.js │ │ │ │ ├── mode-assembly_x86.js │ │ │ │ ├── mode-autohotkey.js │ │ │ │ ├── mode-batchfile.js │ │ │ │ ├── mode-c9search.js │ │ │ │ ├── mode-c_cpp.js │ │ │ │ ├── mode-cirru.js │ │ │ │ ├── mode-clojure.js │ │ │ │ ├── mode-cobol.js │ │ │ │ ├── mode-coffee.js │ │ │ │ ├── mode-coldfusion.js │ │ │ │ ├── mode-csharp.js │ │ │ │ ├── mode-css.js │ │ │ │ ├── mode-curly.js │ │ │ │ ├── mode-d.js │ │ │ │ ├── mode-dart.js │ │ │ │ ├── mode-diff.js │ │ │ │ ├── mode-django.js │ │ │ │ ├── mode-dockerfile.js │ │ │ │ ├── mode-dot.js │ │ │ │ ├── mode-eiffel.js │ │ │ │ ├── mode-ejs.js │ │ │ │ ├── mode-elixir.js │ │ │ │ ├── mode-elm.js │ │ │ │ ├── mode-erlang.js │ │ │ │ ├── mode-forth.js │ │ │ │ ├── mode-ftl.js │ │ │ │ ├── mode-gcode.js │ │ │ │ ├── mode-gherkin.js │ │ │ │ ├── mode-gitignore.js │ │ │ │ ├── mode-glsl.js │ │ │ │ ├── mode-golang.js │ │ │ │ ├── mode-groovy.js │ │ │ │ ├── mode-haml.js │ │ │ │ ├── mode-handlebars.js │ │ │ │ ├── mode-haskell.js │ │ │ │ ├── mode-haxe.js │ │ │ │ ├── mode-html.js │ │ │ │ ├── mode-html_ruby.js │ │ │ │ ├── mode-ini.js │ │ │ │ ├── mode-io.js │ │ │ │ ├── mode-jack.js │ │ │ │ ├── mode-jade.js │ │ │ │ ├── mode-java.js │ │ │ │ ├── mode-javascript.js │ │ │ │ ├── mode-json.js │ │ │ │ ├── mode-jsoniq.js │ │ │ │ ├── mode-jsp.js │ │ │ │ ├── mode-jsx.js │ │ │ │ ├── mode-julia.js │ │ │ │ ├── mode-latex.js │ │ │ │ ├── mode-less.js │ │ │ │ ├── mode-liquid.js │ │ │ │ ├── mode-lisp.js │ │ │ │ ├── mode-livescript.js │ │ │ │ ├── mode-logiql.js │ │ │ │ ├── mode-lsl.js │ │ │ │ ├── mode-lua.js │ │ │ │ ├── mode-luapage.js │ │ │ │ ├── mode-lucene.js │ │ │ │ ├── mode-makefile.js │ │ │ │ ├── mode-markdown.js │ │ │ │ ├── mode-mask.js │ │ │ │ ├── mode-matlab.js │ │ │ │ ├── mode-mel.js │ │ │ │ ├── mode-mushcode.js │ │ │ │ ├── mode-mysql.js │ │ │ │ ├── mode-nix.js │ │ │ │ ├── mode-objectivec.js │ │ │ │ ├── mode-ocaml.js │ │ │ │ ├── mode-pascal.js │ │ │ │ ├── mode-perl.js │ │ │ │ ├── mode-pgsql.js │ │ │ │ ├── mode-php.js │ │ │ │ ├── mode-plain_text.js │ │ │ │ ├── mode-powershell.js │ │ │ │ ├── mode-praat.js │ │ │ │ ├── mode-prolog.js │ │ │ │ ├── mode-properties.js │ │ │ │ ├── mode-protobuf.js │ │ │ │ ├── mode-python.js │ │ │ │ ├── mode-r.js │ │ │ │ ├── mode-rdoc.js │ │ │ │ ├── mode-rhtml.js │ │ │ │ ├── mode-ruby.js │ │ │ │ ├── mode-rust.js │ │ │ │ ├── mode-sass.js │ │ │ │ ├── mode-scad.js │ │ │ │ ├── mode-scala.js │ │ │ │ ├── mode-scheme.js │ │ │ │ ├── mode-scss.js │ │ │ │ ├── mode-sh.js │ │ │ │ ├── mode-sjs.js │ │ │ │ ├── mode-smarty.js │ │ │ │ ├── mode-snippets.js │ │ │ │ ├── mode-soy_template.js │ │ │ │ ├── mode-space.js │ │ │ │ ├── mode-sql.js │ │ │ │ ├── mode-stylus.js │ │ │ │ ├── mode-svg.js │ │ │ │ ├── mode-tcl.js │ │ │ │ ├── mode-tex.js │ │ │ │ ├── mode-text.js │ │ │ │ ├── mode-textile.js │ │ │ │ ├── mode-toml.js │ │ │ │ ├── mode-twig.js │ │ │ │ ├── mode-typescript.js │ │ │ │ ├── mode-vala.js │ │ │ │ ├── mode-vbscript.js │ │ │ │ ├── mode-velocity.js │ │ │ │ ├── mode-verilog.js │ │ │ │ ├── mode-vhdl.js │ │ │ │ ├── mode-xml.js │ │ │ │ ├── mode-xquery.js │ │ │ │ ├── mode-yaml.js │ │ │ │ ├── snippets/ │ │ │ │ │ ├── abap.js │ │ │ │ │ ├── actionscript.js │ │ │ │ │ ├── ada.js │ │ │ │ │ ├── apache_conf.js │ │ │ │ │ ├── applescript.js │ │ │ │ │ ├── asciidoc.js │ │ │ │ │ ├── assembly_x86.js │ │ │ │ │ ├── autohotkey.js │ │ │ │ │ ├── batchfile.js │ │ │ │ │ ├── c9search.js │ │ │ │ │ ├── c_cpp.js │ │ │ │ │ ├── cirru.js │ │ │ │ │ ├── clojure.js │ │ │ │ │ ├── cobol.js │ │ │ │ │ ├── coffee.js │ │ │ │ │ ├── coldfusion.js │ │ │ │ │ ├── csharp.js │ │ │ │ │ ├── css.js │ │ │ │ │ ├── curly.js │ │ │ │ │ ├── d.js │ │ │ │ │ ├── dart.js │ │ │ │ │ ├── diff.js │ │ │ │ │ ├── django.js │ │ │ │ │ ├── dockerfile.js │ │ │ │ │ ├── dot.js │ │ │ │ │ ├── eiffel.js │ │ │ │ │ ├── ejs.js │ │ │ │ │ ├── elixir.js │ │ │ │ │ ├── elm.js │ │ │ │ │ ├── erlang.js │ │ │ │ │ ├── forth.js │ │ │ │ │ ├── ftl.js │ │ │ │ │ ├── gcode.js │ │ │ │ │ ├── gherkin.js │ │ │ │ │ ├── gitignore.js │ │ │ │ │ ├── glsl.js │ │ │ │ │ ├── golang.js │ │ │ │ │ ├── groovy.js │ │ │ │ │ ├── haml.js │ │ │ │ │ ├── handlebars.js │ │ │ │ │ ├── haskell.js │ │ │ │ │ ├── haxe.js │ │ │ │ │ ├── html.js │ │ │ │ │ ├── html_ruby.js │ │ │ │ │ ├── ini.js │ │ │ │ │ ├── io.js │ │ │ │ │ ├── jack.js │ │ │ │ │ ├── jade.js │ │ │ │ │ ├── java.js │ │ │ │ │ ├── javascript.js │ │ │ │ │ ├── json.js │ │ │ │ │ ├── jsoniq.js │ │ │ │ │ ├── jsp.js │ │ │ │ │ ├── jsx.js │ │ │ │ │ ├── julia.js │ │ │ │ │ ├── latex.js │ │ │ │ │ ├── less.js │ │ │ │ │ ├── liquid.js │ │ │ │ │ ├── lisp.js │ │ │ │ │ ├── livescript.js │ │ │ │ │ ├── logiql.js │ │ │ │ │ ├── lsl.js │ │ │ │ │ ├── lua.js │ │ │ │ │ ├── luapage.js │ │ │ │ │ ├── lucene.js │ │ │ │ │ ├── makefile.js │ │ │ │ │ ├── markdown.js │ │ │ │ │ ├── mask.js │ │ │ │ │ ├── matlab.js │ │ │ │ │ ├── mel.js │ │ │ │ │ ├── mushcode.js │ │ │ │ │ ├── mysql.js │ │ │ │ │ ├── nix.js │ │ │ │ │ ├── objectivec.js │ │ │ │ │ ├── ocaml.js │ │ │ │ │ ├── pascal.js │ │ │ │ │ ├── perl.js │ │ │ │ │ ├── pgsql.js │ │ │ │ │ ├── php.js │ │ │ │ │ ├── plain_text.js │ │ │ │ │ ├── powershell.js │ │ │ │ │ ├── praat.js │ │ │ │ │ ├── prolog.js │ │ │ │ │ ├── properties.js │ │ │ │ │ ├── protobuf.js │ │ │ │ │ ├── python.js │ │ │ │ │ ├── r.js │ │ │ │ │ ├── rdoc.js │ │ │ │ │ ├── rhtml.js │ │ │ │ │ ├── ruby.js │ │ │ │ │ ├── rust.js │ │ │ │ │ ├── sass.js │ │ │ │ │ ├── scad.js │ │ │ │ │ ├── scala.js │ │ │ │ │ ├── scheme.js │ │ │ │ │ ├── scss.js │ │ │ │ │ ├── sh.js │ │ │ │ │ ├── sjs.js │ │ │ │ │ ├── smarty.js │ │ │ │ │ ├── snippets.js │ │ │ │ │ ├── soy_template.js │ │ │ │ │ ├── space.js │ │ │ │ │ ├── sql.js │ │ │ │ │ ├── stylus.js │ │ │ │ │ ├── svg.js │ │ │ │ │ ├── tcl.js │ │ │ │ │ ├── tex.js │ │ │ │ │ ├── text.js │ │ │ │ │ ├── textile.js │ │ │ │ │ ├── toml.js │ │ │ │ │ ├── twig.js │ │ │ │ │ ├── typescript.js │ │ │ │ │ ├── vala.js │ │ │ │ │ ├── vbscript.js │ │ │ │ │ ├── velocity.js │ │ │ │ │ ├── verilog.js │ │ │ │ │ ├── vhdl.js │ │ │ │ │ ├── xml.js │ │ │ │ │ ├── xquery.js │ │ │ │ │ └── yaml.js │ │ │ │ ├── theme-ambiance.js │ │ │ │ ├── theme-chaos.js │ │ │ │ ├── theme-chrome.js │ │ │ │ ├── theme-clouds.js │ │ │ │ ├── theme-clouds_midnight.js │ │ │ │ ├── theme-cobalt.js │ │ │ │ ├── theme-crimson_editor.js │ │ │ │ ├── theme-dawn.js │ │ │ │ ├── theme-dreamweaver.js │ │ │ │ ├── theme-eclipse.js │ │ │ │ ├── theme-github.js │ │ │ │ ├── theme-idle_fingers.js │ │ │ │ ├── theme-katzenmilch.js │ │ │ │ ├── theme-kr_theme.js │ │ │ │ ├── theme-kuroir.js │ │ │ │ ├── theme-merbivore.js │ │ │ │ ├── theme-merbivore_soft.js │ │ │ │ ├── theme-mono_industrial.js │ │ │ │ ├── theme-monokai.js │ │ │ │ ├── theme-pastel_on_dark.js │ │ │ │ ├── theme-solarized_dark.js │ │ │ │ ├── theme-solarized_light.js │ │ │ │ ├── theme-terminal.js │ │ │ │ ├── theme-textmate.js │ │ │ │ ├── theme-tomorrow.js │ │ │ │ ├── theme-tomorrow_night.js │ │ │ │ ├── theme-tomorrow_night_blue.js │ │ │ │ ├── theme-tomorrow_night_bright.js │ │ │ │ ├── theme-tomorrow_night_eighties.js │ │ │ │ ├── theme-twilight.js │ │ │ │ ├── theme-vibrant_ink.js │ │ │ │ ├── theme-xcode.js │ │ │ │ ├── worker-coffee.js │ │ │ │ ├── worker-css.js │ │ │ │ ├── worker-html.js │ │ │ │ ├── worker-javascript.js │ │ │ │ ├── worker-json.js │ │ │ │ ├── worker-lua.js │ │ │ │ ├── worker-php.js │ │ │ │ └── worker-xquery.js │ │ │ ├── theme-chrome.js │ │ │ ├── worker-css.js │ │ │ └── worker-json.js │ │ ├── action_button.plugin.js │ │ ├── add_modulator.plugin.js │ │ ├── add_on_trigger_float.plugin.js │ │ ├── add_on_trigger_vector3.plugin.js │ │ ├── ambisonics/ │ │ │ ├── README.txt │ │ │ └── ambisonics.umd.js │ │ ├── and_modulator.plugin.js │ │ ├── animate_float_on_trigger.plugin.js │ │ ├── animate_vector3_on_trigger.plugin.js │ │ ├── annotation.plugin.js │ │ ├── array_blend_modulator_float.plugin.js │ │ ├── array_blend_modulator_vector3.plugin.js │ │ ├── array_clear.plugin.js │ │ ├── array_function.plugin.js │ │ ├── array_get.plugin.js │ │ ├── array_length.plugin.js │ │ ├── array_remove.plugin.js │ │ ├── array_set.plugin.js │ │ ├── array_switch_modulator.plugin.js │ │ ├── aspect_ratio_generator.plugin.js │ │ ├── atan2_modulator.plugin.js │ │ ├── atan_modulator.plugin.js │ │ ├── audio_ambisonic_buffermerger.plugin.js │ │ ├── audio_ambisonic_foaconverter.plugin.js │ │ ├── audio_ambisonic_foadecoder.plugin.js │ │ ├── audio_ambisonic_foaencoder.plugin.js │ │ ├── audio_ambisonic_foamirror.plugin.js │ │ ├── audio_ambisonic_foarotator.plugin.js │ │ ├── audio_ambisonic_foavmic.plugin.js │ │ ├── audio_ambisonic_toaconverter.plugin.js │ │ ├── audio_ambisonic_toadecoder.plugin.js │ │ ├── audio_ambisonic_toaencoder.plugin.js │ │ ├── audio_ambisonic_toamirror.plugin.js │ │ ├── audio_ambisonic_toarotator.plugin.js │ │ ├── audio_ambisonic_toavmic.plugin.js │ │ ├── audio_analyse_modulator.plugin.js │ │ ├── audio_buffer_source_modulator.plugin.js │ │ ├── audio_delay_modulator.plugin.js │ │ ├── audio_gain_modulator.plugin.js │ │ ├── audio_get_current_time_modulator.plugin.js │ │ ├── audio_get_duration_modulator.plugin.js │ │ ├── audio_oneshot_on_trigger.plugin.js │ │ ├── audio_player.plugin.js │ │ ├── audio_source_player.plugin.js │ │ ├── audio_spatial_listener.plugin.js │ │ ├── audio_spatial_panner.plugin.js │ │ ├── bool_display.plugin.js │ │ ├── camera_forward_vector.plugin.js │ │ ├── ceiling_modulator.plugin.js │ │ ├── change_trigger.plugin.js │ │ ├── clamp_modulator.plugin.js │ │ ├── clamped_accumulate_modulator.plugin.js │ │ ├── clock_generator.plugin.js │ │ ├── color_add_modulator.plugin.js │ │ ├── color_blend_modulator.plugin.js │ │ ├── color_display.plugin.js │ │ ├── color_multiply_modulator.plugin.js │ │ ├── color_picker.plugin.js │ │ ├── concatenate_matrix_modulator.plugin.js │ │ ├── const_float_generator.plugin.js │ │ ├── const_text_generator.plugin.js │ │ ├── convert_bool_float_modulator.plugin.js │ │ ├── convert_color_hsl_modulator.plugin.js │ │ ├── convert_color_rgb_modulator.plugin.js │ │ ├── convert_float_bool_modulator.plugin.js │ │ ├── convert_hsl_color_modulator.plugin.js │ │ ├── convert_oscilator_unit_modulator.plugin.js │ │ ├── convert_rgb_color_modulator.plugin.js │ │ ├── convert_string_float_modulator.plugin.js │ │ ├── convert_vector_xyz_modulator.plugin.js │ │ ├── cos_modulator.plugin.js │ │ ├── cosine_modulator.plugin.js │ │ ├── crypto_cw_get_balances.plugin.js │ │ ├── crypto_dw_get_balances.plugin.js │ │ ├── csg/ │ │ │ └── csg.js │ │ ├── cubemap_assembler.plugin.js │ │ ├── curve_interpolate_modulator.plugin.js │ │ ├── data_info_display.plugin.js │ │ ├── delta_modulator.plugin.js │ │ ├── delta_t_generator.plugin.js │ │ ├── divide_modulator.plugin.js │ │ ├── entity.plugin.js │ │ ├── entity_component.plugin.js │ │ ├── envelope/ │ │ │ └── envelopeEditor.js │ │ ├── envelope_modulator.plugin.js │ │ ├── equals_modulator.plugin.js │ │ ├── exp_modulator.plugin.js │ │ ├── float_display.plugin.js │ │ ├── floor_modulator.plugin.js │ │ ├── format_string_float.plugin.js │ │ ├── from_mesh_custom_shader.plugin.js │ │ ├── from_mesh_shader.plugin.js │ │ ├── ga_pageview.plugin.js │ │ ├── gamepad_generator.plugin.js │ │ ├── get_matrix_modulator.plugin.js │ │ ├── google_analytics.plugin.js │ │ ├── graph.plugin.js │ │ ├── grid_mesh_generator.plugin.js │ │ ├── gte_modulator.plugin.js │ │ ├── if_else_modulator.plugin.js │ │ ├── if_modulator.plugin.js │ │ ├── initialise_generator.plugin.js │ │ ├── input_proxy.plugin.js │ │ ├── inputs_to_array.plugin.js │ │ ├── invert_matrix_modulator.plugin.js │ │ ├── is_in_vr.plugin.js │ │ ├── key_press_generator.plugin.js │ │ ├── knob_float_generator.plugin.js │ │ ├── label_generator.plugin.js │ │ ├── led_display.plugin.js │ │ ├── less_than_modulator.plugin.js │ │ ├── load_graph.plugin.js │ │ ├── load_graph_on_trigger.plugin.js │ │ ├── log_display.plugin.js │ │ ├── log_modulator.plugin.js │ │ ├── loop.plugin.js │ │ ├── lowpass_filter_modulator.plugin.js │ │ ├── lte_modulator.plugin.js │ │ ├── matrix_clone_modulator.plugin.js │ │ ├── matrix_display.plugin.js │ │ ├── max_modulator.plugin.js │ │ ├── member_array_length_modulator.plugin.js │ │ ├── member_to_bool_modulator.plugin.js │ │ ├── member_to_float_modulator.plugin.js │ │ ├── member_to_object_modulator.plugin.js │ │ ├── member_to_string_modulator.plugin.js │ │ ├── member_to_typed_array_modulator.plugin.js │ │ ├── mesh_get_primitive_count.plugin.js │ │ ├── mesh_set_max_primitive_count.plugin.js │ │ ├── min_modulator.plugin.js │ │ ├── modulate_modulator.plugin.js │ │ ├── module_player/ │ │ │ └── pt.js │ │ ├── module_player.plugin.js │ │ ├── more_than_modulator.plugin.js │ │ ├── mouse_button_generator.plugin.js │ │ ├── mouse_position_generator.plugin.js │ │ ├── mouse_wheel_generator.plugin.js │ │ ├── multiply_modulator.plugin.js │ │ ├── nand_modulator.plugin.js │ │ ├── ne_modulator.plugin.js │ │ ├── near_eq_modulator.plugin.js │ │ ├── negate_modulator.plugin.js │ │ ├── not_modulator.plugin.js │ │ ├── object_add.plugin.js │ │ ├── object_display.plugin.js │ │ ├── object_stringify.plugin.js │ │ ├── on_three_object_raydown.plugin.js │ │ ├── on_three_object_rayout.plugin.js │ │ ├── on_three_object_rayover.plugin.js │ │ ├── on_three_object_rayup.plugin.js │ │ ├── open_url_on_trigger.plugin.js │ │ ├── or_modulator.plugin.js │ │ ├── osc/ │ │ │ └── osc-proxy.js │ │ ├── osc_float.plugin.js │ │ ├── osc_receiver.plugin.js │ │ ├── osc_xy_float.plugin.js │ │ ├── osc_xyz_float.plugin.js │ │ ├── output_proxy.plugin.js │ │ ├── parse_json_modulator.plugin.js │ │ ├── perspective_camera.plugin.js │ │ ├── photosphere_orientation_reader.plugin.js │ │ ├── pi_generator.plugin.js │ │ ├── planar_projection_matrix.plugin.js │ │ ├── plot_display.plugin.js │ │ ├── plugins.json │ │ ├── radial_point_geometry.plugin.js │ │ ├── random_float_generator.plugin.js │ │ ├── record_framebuffer.plugin.js │ │ ├── reset_framebuffer_recorder.plugin.js │ │ ├── rotation_from_direction.plugin.js │ │ ├── rotation_matrix.plugin.js │ │ ├── rotation_xyz_matrix.plugin.js │ │ ├── round_modulator.plugin.js │ │ ├── runtime_event_read.plugin.js │ │ ├── runtime_event_write.plugin.js │ │ ├── runtime_event_write_continuous.plugin.js │ │ ├── sample_and_hold_modulator.plugin.js │ │ ├── sawtooth_modulator.plugin.js │ │ ├── scale_matrix.plugin.js │ │ ├── scene_get_bounding_box.plugin.js │ │ ├── scene_get_mesh_by_index.plugin.js │ │ ├── scene_get_mesh_count.plugin.js │ │ ├── scene_lighting.plugin.js │ │ ├── scene_renderer_emitter.plugin.js │ │ ├── set_matrix_modulator.plugin.js │ │ ├── sin_modulator.plugin.js │ │ ├── sine_modulator.plugin.js │ │ ├── slider_float_generator.plugin.js │ │ ├── socket.io/ │ │ │ └── socket.io-1.3.7.js │ │ ├── sqrt_modulator.plugin.js │ │ ├── square_modulator.plugin.js │ │ ├── stereo_cube_map.plugin.js │ │ ├── stop_emitter.plugin.js │ │ ├── streamr/ │ │ │ └── streamr-client.js │ │ ├── streamr_client.plugin.js │ │ ├── string_concatenate_modulator.plugin.js │ │ ├── subtract_modulator.plugin.js │ │ ├── switch_modulator.plugin.js │ │ ├── tan_modulator.plugin.js │ │ ├── text_display.plugin.js │ │ ├── text_editor_generator.plugin.js │ │ ├── texture_from_text_generator.plugin.js │ │ ├── texture_height_modulator.plugin.js │ │ ├── texture_width_modulator.plugin.js │ │ ├── three_ambient_light.plugin.js │ │ ├── three_clickable_object.plugin.js │ │ ├── three_cube_material.plugin.js │ │ ├── three_directional_light.plugin.js │ │ ├── three_environment_settings.plugin.js │ │ ├── three_gaze_clicker.plugin.js │ │ ├── three_geometry_box.plugin.js │ │ ├── three_geometry_circle.plugin.js │ │ ├── three_geometry_cylinder.plugin.js │ │ ├── three_geometry_dodecahedron.plugin.js │ │ ├── three_geometry_plane.plugin.js │ │ ├── three_geometry_ring.plugin.js │ │ ├── three_geometry_sphere.plugin.js │ │ ├── three_geometry_torus.plugin.js │ │ ├── three_group.plugin.js │ │ ├── three_hemisphere_light.plugin.js │ │ ├── three_line_material.plugin.js │ │ ├── three_line_segments.plugin.js │ │ ├── three_loader_model.plugin.js │ │ ├── three_loader_scene.plugin.js │ │ ├── three_material.plugin.js │ │ ├── three_material_depth.plugin.js │ │ ├── three_material_extractor.plugin.js │ │ ├── three_material_lambert.plugin.js │ │ ├── three_material_modifier.plugin.js │ │ ├── three_material_phong.plugin.js │ │ ├── three_material_shader.plugin.js │ │ ├── three_material_standard.plugin.js │ │ ├── three_mesh.plugin.js │ │ ├── three_meshline_material.plugin.js │ │ ├── three_meshline_mesh.plugin.js │ │ ├── three_object3d_attribute_extractor.plugin.js │ │ ├── three_object3d_bbox_extractor.plugin.js │ │ ├── three_orbit_camera.plugin.js │ │ ├── three_particle_emitter.plugin.js │ │ ├── three_perspective_camera.plugin.js │ │ ├── three_point_cloud_material.plugin.js │ │ ├── three_point_cloud_mesh.plugin.js │ │ ├── three_point_light.plugin.js │ │ ├── three_procedural_ground.plugin.js │ │ ├── three_scene.plugin.js │ │ ├── three_screen_space_transform_extractor.plugin.js │ │ ├── three_spot_light.plugin.js │ │ ├── three_text_geometry.plugin.js │ │ ├── three_uv_modifier.plugin.js │ │ ├── three_vr_camera.plugin.js │ │ ├── three_webgl_renderer.plugin.js │ │ ├── three_webgl_texture_renderer.plugin.js │ │ ├── threesixty_photo_entity.plugin.js │ │ ├── toggle-button/ │ │ │ └── style.css │ │ ├── toggle_button.plugin.js │ │ ├── toggle_modulator.plugin.js │ │ ├── touch_end_generator.plugin.js │ │ ├── touch_start_generator.plugin.js │ │ ├── touching_generator.plugin.js │ │ ├── translation_matrix.plugin.js │ │ ├── translation_xyz_matrix.plugin.js │ │ ├── transpose_matrix_modulator.plugin.js │ │ ├── triangle_modulator.plugin.js │ │ ├── trigger_revolver.plugin.js │ │ ├── tween_in_modulator.plugin.js │ │ ├── tween_out_modulator.plugin.js │ │ ├── typed_array_generator.plugin.js │ │ ├── typed_array_get_as_modulator.plugin.js │ │ ├── typed_array_get_modulator.plugin.js │ │ ├── typed_array_item_to_bool_modulator.plugin.js │ │ ├── typed_array_item_to_float_modulator.plugin.js │ │ ├── typed_array_item_to_object_modulator.plugin.js │ │ ├── typed_array_item_to_string_modulator.plugin.js │ │ ├── typed_array_item_to_typed_array_modulator.plugin.js │ │ ├── typed_array_length_modulator.plugin.js │ │ ├── typed_array_set_as_modulator.plugin.js │ │ ├── typed_array_set_modulator.plugin.js │ │ ├── typed_array_to_texture_modulator.plugin.js │ │ ├── url_array_generator.plugin.js │ │ ├── url_audio_buffer_generator.plugin.js │ │ ├── url_audio_generator.plugin.js │ │ ├── url_cubemap_generator.plugin.js │ │ ├── url_json_generator.plugin.js │ │ ├── url_stereo_cubemap_generator.plugin.js │ │ ├── url_stereo_latlongmap_generator.plugin.js │ │ ├── url_texture_generator.plugin.js │ │ ├── url_video_generator.plugin.js │ │ ├── variable_local_read.plugin.js │ │ ├── variable_local_write.plugin.js │ │ ├── variable_local_write_conditional.plugin.js │ │ ├── vector.plugin.js │ │ ├── vector_add.plugin.js │ │ ├── vector_cross.plugin.js │ │ ├── vector_display.plugin.js │ │ ├── vector_distance.plugin.js │ │ ├── vector_dot.plugin.js │ │ ├── vector_magnitude.plugin.js │ │ ├── vector_multiply.plugin.js │ │ ├── vector_normalize.plugin.js │ │ ├── vector_scale.plugin.js │ │ ├── vector_subtract.plugin.js │ │ ├── vector_to_screenspace.plugin.js │ │ ├── vector_transform.plugin.js │ │ ├── video_get_current_time_modulator.plugin.js │ │ ├── video_get_duration_modulator.plugin.js │ │ ├── video_player.plugin.js │ │ ├── viewport_size_generator.plugin.js │ │ ├── vive_controller.plugin.js │ │ ├── vr_acceleration_generator.plugin.js │ │ ├── vr_camera_info_generator.plugin.js │ │ ├── vr_hmd_available_generator.plugin.js │ │ ├── vr_hmd_info_generator.plugin.js │ │ ├── vr_sensor_available_generator.plugin.js │ │ ├── vr_sensor_info_generator.plugin.js │ │ ├── vr_velocity_generator.plugin.js │ │ ├── wschannel/ │ │ │ └── wschannel.js │ │ ├── wschannel_receive.plugin.js │ │ ├── wschannel_send.plugin.js │ │ └── xor_modulator.plugin.js │ ├── postMessage.html │ ├── scene.json │ ├── scripts/ │ │ ├── abstractPlugins/ │ │ │ ├── abstractAnimateValueOnTriggerPlugin.js │ │ │ ├── abstractArrayBlendModulatorPlugin.js │ │ │ ├── abstractEntityPlugin.js │ │ │ ├── abstractGraphPlugin.js │ │ │ ├── abstractObjectRayPlugin.js │ │ │ ├── abstractTextAreaPlugin.js │ │ │ ├── abstractThreeLoaderObjPlugin.js │ │ │ ├── abstractThreeMaterialPlugin.js │ │ │ └── abstractThreeMeshPlugin.js │ │ ├── account-controller.js │ │ ├── application.js │ │ ├── autoSlotGroup.js │ │ ├── blendFunctions.js │ │ ├── chat.js │ │ ├── collapsible-select-control.js │ │ ├── commands/ │ │ │ ├── fork.js │ │ │ ├── graphEditCommands.js │ │ │ └── undoManager.js │ │ ├── connection.js │ │ ├── contextMenu.js │ │ ├── core.js │ │ ├── datatypes/ │ │ │ └── environmentSettings.js │ │ ├── documentation/ │ │ │ └── pluginDocsCache.js │ │ ├── draggable.js │ │ ├── editConnection.js │ │ ├── editorChannel.js │ │ ├── embed.js │ │ ├── event-emitter.js │ │ ├── file-select-control.js │ │ ├── fontSelector.js │ │ ├── glTFUtils.js │ │ ├── graph.js │ │ ├── graphApi.js │ │ ├── gridFsClient.js │ │ ├── hardware.js │ │ ├── loaders/ │ │ │ ├── assetLoader.js │ │ │ ├── audioBufferLoader.js │ │ │ ├── imageLoader.js │ │ │ ├── loader.js │ │ │ ├── modelLoader.js │ │ │ ├── multiObjectLoader.js │ │ │ ├── sceneLoader.js │ │ │ ├── textureLoader.js │ │ │ └── videoLoader.js │ │ ├── mid-pane.js │ │ ├── models.js │ │ ├── movable.js │ │ ├── node-ui-enum.js │ │ ├── node-ui.js │ │ ├── node.js │ │ ├── noise.js │ │ ├── patchManager.js │ │ ├── peopleManager.js │ │ ├── player-run.js │ │ ├── player.js │ │ ├── plugin-group.js │ │ ├── plugin-manager-bundled.js │ │ ├── plugin-manager.js │ │ ├── plugin.js │ │ ├── screenshot/ │ │ │ └── ScreenshotRenderer.js │ │ ├── shader-editor.js │ │ ├── site/ │ │ │ ├── accountpages.js │ │ │ └── userpages.js │ │ ├── stores/ │ │ │ ├── graphStore.js │ │ │ ├── peopleStore.js │ │ │ └── store.js │ │ ├── subGraphPlugin.js │ │ ├── textureCache.js │ │ ├── threeObject3dPlugin.js │ │ ├── threesixty.js │ │ ├── treeview.js │ │ ├── ui/ │ │ │ ├── pageStore.js │ │ │ ├── pagination.js │ │ │ ├── playerUI.js │ │ │ ├── tabbed.js │ │ │ ├── ui-cards.js │ │ │ ├── ui-helpscreen.js │ │ │ ├── uiAbstractProperties.js │ │ │ ├── uiAbstractProxy.js │ │ │ ├── uiDragAwareHelper.js │ │ │ ├── uiDragToAdjust.js │ │ │ ├── uiEnterValue.js │ │ │ ├── uiPropertiesNode.js │ │ │ ├── uiPropertiesObj3d.js │ │ │ ├── uiProxyCheckbox.js │ │ │ ├── uiProxyTextField.js │ │ │ ├── uiProxyToggleButton.js │ │ │ ├── uiProxyVec3.js │ │ │ ├── uiTextArea.js │ │ │ └── xhrForm.js │ │ ├── ui-breadcrumb.js │ │ ├── ui-core-statestore.js │ │ ├── ui-core.js │ │ ├── ui-minislides.js │ │ ├── ui-site.js │ │ ├── ui-upload.js │ │ ├── ui.js │ │ ├── util.js │ │ ├── variables.js │ │ ├── vizor2Teaser.js │ │ ├── webVRAdapter.js │ │ ├── worldEditor/ │ │ │ ├── abstractWorldEditorHelperObject.js │ │ │ ├── boundingBoxHelper.js │ │ │ ├── boundingSphereHelper.js │ │ │ ├── directionalLightHelper.js │ │ │ ├── hemisphereLightHelper.js │ │ │ ├── objectPlacementHelper.js │ │ │ ├── pointLightHelper.js │ │ │ ├── sceneLightingHelper.js │ │ │ ├── skeletonHelper.js │ │ │ ├── spotLightHelper.js │ │ │ ├── vrCameraHelperObject.js │ │ │ ├── worldEditor.js │ │ │ ├── worldEditorCameraSelector.js │ │ │ ├── worldEditorOriginGrid.js │ │ │ ├── worldEditorOrthographicCamera.js │ │ │ ├── worldEditorPerspectiveCamera.js │ │ │ └── worldEditorRadialHelper.js │ │ └── wschannel.js │ ├── style/ │ │ └── icons/ │ │ ├── source.css │ │ └── style.css │ ├── test/ │ │ ├── fixtures/ │ │ │ ├── 357-color-convert-plugins.json │ │ │ ├── arrayfunction.json │ │ │ ├── init-revolver.json │ │ │ ├── issue195.json │ │ │ ├── paste-clock.json │ │ │ ├── paste-complex.json │ │ │ ├── paste.json │ │ │ ├── pause-subgraph.json │ │ │ ├── preloader1.json │ │ │ ├── subGraphCutUndo.json │ │ │ ├── subGraphFloatOutput.json │ │ │ ├── tasty1.json │ │ │ └── variables.json │ │ ├── functional/ │ │ │ ├── config.js │ │ │ ├── features/ │ │ │ │ ├── editor.feature │ │ │ │ ├── fork.feature │ │ │ │ ├── helpscreen.feature │ │ │ │ └── publish.feature │ │ │ ├── hooks/ │ │ │ │ ├── after.js │ │ │ │ ├── afterEach.js │ │ │ │ ├── before.js │ │ │ │ └── beforeEach.js │ │ │ ├── run.js │ │ │ ├── steps/ │ │ │ │ ├── given.js │ │ │ │ ├── then.js │ │ │ │ └── when.js │ │ │ └── support/ │ │ │ ├── action/ │ │ │ │ ├── clearInputField.js │ │ │ │ ├── clickElement.js │ │ │ │ ├── closeAllButFirstTab.js │ │ │ │ ├── closeLastOpenedWindow.js │ │ │ │ ├── dragElement.js │ │ │ │ ├── focusLastOpenedWindow.js │ │ │ │ ├── handleModal.js │ │ │ │ ├── moveToElement.js │ │ │ │ ├── openEditor.js │ │ │ │ ├── openWebsite.js │ │ │ │ ├── pause.js │ │ │ │ ├── pressButton.js │ │ │ │ ├── programMode.js │ │ │ │ ├── readCookie.js │ │ │ │ ├── resizeScreenSize.js │ │ │ │ ├── scroll.js │ │ │ │ ├── selectOption.js │ │ │ │ ├── selectOptionByIndex.js │ │ │ │ ├── setCookie.js │ │ │ │ ├── setInputField.js │ │ │ │ ├── setPromptText.js │ │ │ │ ├── signIn.js │ │ │ │ ├── submitForm.js │ │ │ │ ├── waitForEditor.js │ │ │ │ ├── waitForVisible.js │ │ │ │ └── waitfor.js │ │ │ ├── check/ │ │ │ │ ├── checkClass.js │ │ │ │ ├── checkContainsText.js │ │ │ │ ├── checkContent.js │ │ │ │ ├── checkCookieContent.js │ │ │ │ ├── checkCookieExists.js │ │ │ │ ├── checkDimension.js │ │ │ │ ├── checkElementExists.js │ │ │ │ ├── checkFocus.js │ │ │ │ ├── checkInURLPath.js │ │ │ │ ├── checkIsOpenedInNewWindow.js │ │ │ │ ├── checkModal.js │ │ │ │ ├── checkModalText.js │ │ │ │ ├── checkNewWindow.js │ │ │ │ ├── checkNodeCount.js │ │ │ │ ├── checkOffset.js │ │ │ │ ├── checkPatchVisible.js │ │ │ │ ├── checkProperty.js │ │ │ │ ├── checkSelected.js │ │ │ │ ├── checkTitle.js │ │ │ │ ├── checkURL.js │ │ │ │ ├── checkURLPath.js │ │ │ │ ├── checkWithinViewport.js │ │ │ │ ├── compareText.js │ │ │ │ ├── isEnabled.js │ │ │ │ ├── isExisting.js │ │ │ │ ├── isVisible.js │ │ │ │ ├── waitForFork.js │ │ │ │ └── waitForPlayer.js │ │ │ ├── configure.js │ │ │ ├── init.js │ │ │ └── step-definitions.js │ │ ├── integration/ │ │ │ ├── 357-color-converters.js │ │ │ ├── array_function.js │ │ │ ├── array_switch_modulator.js │ │ │ ├── connections.js │ │ │ ├── graphShapes.js │ │ │ ├── helpers.js │ │ │ ├── init-revolver.js │ │ │ ├── inputsToArray.js │ │ │ ├── issue195.js │ │ │ ├── loadAllPlugins.js │ │ │ ├── paste.js │ │ │ ├── pause.js │ │ │ ├── pluginDocs.js │ │ │ ├── runtimeEvents.js │ │ │ ├── subGraphCutUndo.js │ │ │ ├── subGraphPlugin.js │ │ │ ├── uiSlotValues.js │ │ │ ├── variables.js │ │ │ └── webVRAdapter.js │ │ └── unit/ │ │ ├── assetLoader.js │ │ ├── blendFunctions.js │ │ ├── breadcrumb.js │ │ ├── chat.js │ │ ├── collapsibleSelectControl.js │ │ ├── connection.js │ │ ├── editConnection.js │ │ ├── editorChannel.js │ │ ├── fork.js │ │ ├── graphStore.js │ │ ├── node.js │ │ ├── node_inputs.js │ │ ├── pageStore.js │ │ ├── peopleStore.js │ │ ├── playerUI.js │ │ ├── plugins/ │ │ │ ├── array_function.js │ │ │ ├── array_get.js │ │ │ ├── array_remove.js │ │ │ ├── array_set.js │ │ │ ├── array_switch_modulator.js │ │ │ ├── helpers.js │ │ │ ├── material_modifier.js │ │ │ ├── object_add.js │ │ │ └── object_stringify.js │ │ ├── subGraphPlugin.js │ │ ├── undo.js │ │ ├── variables.js │ │ └── wsendpoint.js │ └── vendor/ │ ├── bootstrap-3.1.1-dist/ │ │ └── js/ │ │ └── bootstrap.js │ ├── borismus/ │ │ ├── ray-input.js │ │ ├── webvr-manager.js │ │ └── webvr-polyfill.js │ ├── flux.js │ ├── font-awesome-4.2.0/ │ │ ├── css/ │ │ │ └── font-awesome.css │ │ ├── fonts/ │ │ │ └── FontAwesome.otf │ │ ├── less/ │ │ │ ├── bordered-pulled.less │ │ │ ├── core.less │ │ │ ├── fixed-width.less │ │ │ ├── font-awesome.less │ │ │ ├── icons.less │ │ │ ├── larger.less │ │ │ ├── list.less │ │ │ ├── mixins.less │ │ │ ├── path.less │ │ │ ├── rotated-flipped.less │ │ │ ├── spinning.less │ │ │ ├── stacked.less │ │ │ └── variables.less │ │ └── scss/ │ │ ├── _bordered-pulled.scss │ │ ├── _core.scss │ │ ├── _fixed-width.scss │ │ ├── _icons.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── _mixins.scss │ │ ├── _path.scss │ │ ├── _rotated-flipped.scss │ │ ├── _spinning.scss │ │ ├── _stacked.scss │ │ ├── _variables.scss │ │ └── font-awesome.scss │ ├── jquery.fastfix.js │ ├── jquery.mousewheel.js │ ├── spite/ │ │ └── THREE.MeshLine.js │ ├── three/ │ │ ├── CardboardEffect.js │ │ ├── DDSLoader.js │ │ ├── EditorControls.js │ │ ├── Font.js │ │ ├── FontLoader.js │ │ ├── MTLLoader.js │ │ ├── MorphAnimMesh.js │ │ ├── OBJLoader.js │ │ ├── OrbitControls.js │ │ ├── SceneLoader.js │ │ ├── THREEx.FullScreen.js │ │ ├── TransformControls.js │ │ ├── VRControls.js │ │ ├── VREffect.js │ │ ├── loaders/ │ │ │ ├── ColladaLoader2.js │ │ │ ├── FBXLoader.js │ │ │ └── gltf/ │ │ │ ├── glTF-parser.js │ │ │ ├── glTFAnimation.js │ │ │ ├── glTFLoader.js │ │ │ ├── glTFLoaderUtils.js │ │ │ ├── glTFShaders.js │ │ │ └── gltfUtilities.js │ │ └── three.js │ ├── toji/ │ │ └── webgl-utils/ │ │ ├── LICENSE.md │ │ └── src/ │ │ └── wglu-stats.js │ ├── webgl-debug.js │ └── when.js ├── common/ │ └── graphAnalyser.js ├── config/ │ ├── config.js │ ├── passport.js │ ├── secrets.js │ └── settings.js ├── controllers/ │ ├── assetController.js │ ├── controllerHelpers.js │ ├── documentationController.js │ ├── editLogController.js │ ├── graphController.js │ ├── homeController.js │ ├── imageController.js │ ├── patchController.js │ ├── sceneController.js │ ├── threesixty.js │ ├── userController.js │ └── vizor2TeaserController.js ├── docker-compose.yml ├── documentation/ │ └── browser/ │ └── plugins/ │ ├── absolute_modulator.md │ ├── accumulate_modulator.md │ ├── action_button.md │ ├── add_modulator.md │ ├── add_on_trigger_float.md │ ├── add_on_trigger_vector3.md │ ├── and_modulator.md │ ├── animate_float_on_trigger.md │ ├── animate_vector3_on_trigger.md │ ├── annotation.md │ ├── array_blend_modulator_float.md │ ├── array_blend_modulator_vector3.md │ ├── array_clear.md │ ├── array_function.md │ ├── array_get.md │ ├── array_length.md │ ├── array_remove.md │ ├── array_set.md │ ├── array_switch_modulator.md │ ├── atan2_modulator.md │ ├── atan_modulator.md │ ├── audio_ambisonic_buffermerger.md │ ├── audio_ambisonic_foaconverter.md │ ├── audio_ambisonic_foadecoder.md │ ├── audio_ambisonic_foaencoder.md │ ├── audio_ambisonic_foamirror.md │ ├── audio_ambisonic_foarotator.md │ ├── audio_ambisonic_foavmic.md │ ├── audio_ambisonic_toaconverter.md │ ├── audio_ambisonic_toadecoder.md │ ├── audio_ambisonic_toaencoder.md │ ├── audio_ambisonic_toamirror.md │ ├── audio_ambisonic_toarotator.md │ ├── audio_ambisonic_toavmic.md │ ├── audio_analyse_modulator.md │ ├── audio_buffer_source_modulator.md │ ├── audio_delay_modulator.md │ ├── audio_gain_modulator.md │ ├── audio_get_current_time_modulator.md │ ├── audio_get_duration_modulator.md │ ├── audio_oneshot_on_trigger.md │ ├── audio_player.md │ ├── audio_source_player.md │ ├── audio_spatial_listener.md │ ├── audio_spatial_panner.md │ ├── bool_display.md │ ├── camera_forward_vector.md │ ├── ceiling_modulator.md │ ├── change_trigger.md │ ├── clamp_modulator.md │ ├── clamped_accumulate_modulator.md │ ├── clock_generator.md │ ├── color_add_modulator.md │ ├── color_blend_modulator.md │ ├── color_display.md │ ├── color_multiply_modulator.md │ ├── color_picker.md │ ├── const_float_generator.md │ ├── const_text_generator.md │ ├── convert_bool_float_modulator.md │ ├── convert_color_hsl_modulator.md │ ├── convert_color_rgb_modulator.md │ ├── convert_float_bool_modulator.md │ ├── convert_hsl_color_modulator.md │ ├── convert_oscilator_unit_modulator.md │ ├── convert_rgb_color_modulator.md │ ├── convert_string_float_modulator.md │ ├── convert_vector_xyz_modulator.md │ ├── cos_modulator.md │ ├── cosine_modulator.md │ ├── cubemap_assembler.md │ ├── data_info_display.md │ ├── delta_modulator.md │ ├── delta_t_generator.md │ ├── divide_modulator.md │ ├── entity.md │ ├── entity_component.md │ ├── envelope_modulator.md │ ├── equals_modulator.md │ ├── exp_modulator.md │ ├── float_display.md │ ├── floor_modulator.md │ ├── format_string_float.md │ ├── ga_pageview.md │ ├── gamepad_generator.md │ ├── google_analytics.md │ ├── graph.md │ ├── gte_modulator.md │ ├── if_else_modulator.md │ ├── if_modulator.md │ ├── initialise_generator.md │ ├── input_proxy.md │ ├── inputs_to_array.md │ ├── is_in_vr.md │ ├── key_press_generator.md │ ├── knob_float_generator.md │ ├── label_generator.md │ ├── led_display.md │ ├── less_than_modulator.md │ ├── load_graph_on_trigger.md │ ├── log_display.md │ ├── log_modulator.md │ ├── loop.md │ ├── lowpass_filter_modulator.md │ ├── lte_modulator.md │ ├── matrix_display.md │ ├── max_modulator.md │ ├── member_array_length_modulator.md │ ├── member_to_bool_modulator.md │ ├── member_to_float_modulator.md │ ├── member_to_object_modulator.md │ ├── member_to_string_modulator.md │ ├── member_to_typed_array_modulator.md │ ├── min_modulator.md │ ├── modulate_modulator.md │ ├── module_player.md │ ├── more_than_modulator.md │ ├── mouse_button_generator.md │ ├── mouse_position_generator.md │ ├── mouse_wheel_generator.md │ ├── multiply_modulator.md │ ├── nand_modulator.md │ ├── ne_modulator.md │ ├── near_eq_modulator.md │ ├── negate_modulator.md │ ├── not_modulator.md │ ├── object_add.md │ ├── object_display.md │ ├── object_stringify.md │ ├── on_three_object_gaze_clicked.md │ ├── on_three_object_gaze_in.md │ ├── on_three_object_gaze_out.md │ ├── on_three_object_raydown.md │ ├── on_three_object_rayout.md │ ├── on_three_object_rayover.md │ ├── on_three_object_rayup.md │ ├── open_url_on_trigger.md │ ├── or_modulator.md │ ├── output_proxy.md │ ├── parse_json_modulator.md │ ├── photosphere_orientation_reader.md │ ├── pi_generator.md │ ├── plot_display.md │ ├── radial_point_geometry.md │ ├── random_float_generator.md │ ├── rotation_from_direction.md │ ├── round_modulator.md │ ├── runtime_event_read.md │ ├── runtime_event_write.md │ ├── runtime_event_write_continuous.md │ ├── sample_and_hold_modulator.md │ ├── sawtooth_modulator.md │ ├── scene_lighting.md │ ├── sin_modulator.md │ ├── sine_modulator.md │ ├── slider_float_generator.md │ ├── sqrt_modulator.md │ ├── square_modulator.md │ ├── stereo_cube_map.md │ ├── stop_emitter.md │ ├── streamr_client.md │ ├── string_concatenate_modulator.md │ ├── subtract_modulator.md │ ├── switch_modulator.md │ ├── tan_modulator.md │ ├── text_display.md │ ├── text_editor_generator.md │ ├── texture_from_text_generator.md │ ├── three_ambient_light.md │ ├── three_clickable_object.md │ ├── three_cube_material.md │ ├── three_directional_light.md │ ├── three_environment_settings.md │ ├── three_gaze_clicker.md │ ├── three_geometry_box.md │ ├── three_geometry_circle.md │ ├── three_geometry_cylinder.md │ ├── three_geometry_dodecahedron.md │ ├── three_geometry_plane.md │ ├── three_geometry_ring.md │ ├── three_geometry_sphere.md │ ├── three_geometry_torus.md │ ├── three_group.md │ ├── three_hemisphere_light.md │ ├── three_line_material.md │ ├── three_line_segments.md │ ├── three_loader_model.md │ ├── three_loader_scene.md │ ├── three_material.md │ ├── three_material_depth.md │ ├── three_material_extractor.md │ ├── three_material_lambert.md │ ├── three_material_modifier.md │ ├── three_material_phong.md │ ├── three_material_shader.md │ ├── three_material_standard.md │ ├── three_mesh.md │ ├── three_meshline_material.md │ ├── three_meshline_mesh.md │ ├── three_object3d_attribute_extractor.md │ ├── three_object3d_bbox_extractor.md │ ├── three_orbit_camera.md │ ├── three_particle_emitter.md │ ├── three_perspective_camera.md │ ├── three_point_cloud_material.md │ ├── three_point_cloud_mesh.md │ ├── three_point_light.md │ ├── three_procedural_ground.md │ ├── three_scene.md │ ├── three_screen_space_transform_extractor.md │ ├── three_spot_light.md │ ├── three_text_geometry.md │ ├── three_uv_modifier.md │ ├── three_vr_camera.md │ ├── three_webgl_renderer.md │ ├── three_webgl_texture_renderer.md │ ├── threesixty_photo_entity.md │ ├── toggle_button.md │ ├── toggle_modulator.md │ ├── touch_end_generator.md │ ├── touch_start_generator.md │ ├── touching_generator.md │ ├── triangle_modulator.md │ ├── trigger_revolver.md │ ├── tween_in_modulator.md │ ├── tween_out_modulator.md │ ├── typed_array_generator.md │ ├── typed_array_get_as_modulator.md │ ├── typed_array_get_modulator.md │ ├── typed_array_item_to_bool_modulator.md │ ├── typed_array_item_to_float_modulator.md │ ├── typed_array_item_to_object_modulator.md │ ├── typed_array_item_to_string_modulator.md │ ├── typed_array_item_to_typed_array_modulator.md │ ├── typed_array_length_modulator.md │ ├── typed_array_set_as_modulator.md │ ├── typed_array_set_modulator.md │ ├── typed_array_to_texture_modulator.md │ ├── url_array_generator.md │ ├── url_audio_buffer_generator.md │ ├── url_audio_generator.md │ ├── url_cubemap_generator.md │ ├── url_json_generator.md │ ├── url_stereo_cubemap_generator.md │ ├── url_stereo_latlongmap_generator.md │ ├── url_texture_generator.md │ ├── url_video_generator.md │ ├── variable_local_read.md │ ├── variable_local_write.md │ ├── variable_local_write_conditional.md │ ├── vector.md │ ├── vector_add.md │ ├── vector_cross.md │ ├── vector_display.md │ ├── vector_distance.md │ ├── vector_dot.md │ ├── vector_magnitude.md │ ├── vector_multiply.md │ ├── vector_normalize.md │ ├── vector_scale.md │ ├── vector_subtract.md │ ├── vector_to_screenspace.md │ ├── vector_transform.md │ ├── video_get_current_time_modulator.md │ ├── video_get_duration_modulator.md │ ├── video_player.md │ ├── viewport_size_generator.md │ ├── vive_controller.md │ └── xor_modulator.md ├── gulpfile.js ├── less/ │ ├── bootstrap/ │ │ ├── .csscomb.json │ │ ├── .csslintrc │ │ ├── alerts.less │ │ ├── badges.less │ │ ├── bootstrap.less │ │ ├── breadcrumbs.less │ │ ├── button-groups.less │ │ ├── buttons.less │ │ ├── carousel.less │ │ ├── close.less │ │ ├── code.less │ │ ├── component-animations.less │ │ ├── dropdowns.less │ │ ├── forms.less │ │ ├── glyphicons.less │ │ ├── grid.less │ │ ├── input-groups.less │ │ ├── jumbotron.less │ │ ├── labels.less │ │ ├── list-group.less │ │ ├── media.less │ │ ├── mixins/ │ │ │ ├── alerts.less │ │ │ ├── background-variant.less │ │ │ ├── border-radius.less │ │ │ ├── buttons.less │ │ │ ├── center-block.less │ │ │ ├── clearfix.less │ │ │ ├── forms.less │ │ │ ├── gradients.less │ │ │ ├── grid-framework.less │ │ │ ├── grid.less │ │ │ ├── hide-text.less │ │ │ ├── image.less │ │ │ ├── labels.less │ │ │ ├── list-group.less │ │ │ ├── nav-divider.less │ │ │ ├── nav-vertical-align.less │ │ │ ├── opacity.less │ │ │ ├── pagination.less │ │ │ ├── panels.less │ │ │ ├── progress-bar.less │ │ │ ├── reset-filter.less │ │ │ ├── resize.less │ │ │ ├── responsive-visibility.less │ │ │ ├── size.less │ │ │ ├── tab-focus.less │ │ │ ├── table-row.less │ │ │ ├── text-emphasis.less │ │ │ ├── text-overflow.less │ │ │ └── vendor-prefixes.less │ │ ├── mixins.less │ │ ├── modals.less │ │ ├── navbar.less │ │ ├── navs.less │ │ ├── normalize.less │ │ ├── pager.less │ │ ├── pagination.less │ │ ├── panels.less │ │ ├── popovers.less │ │ ├── print.less │ │ ├── progress-bars.less │ │ ├── responsive-embed.less │ │ ├── responsive-utilities.less │ │ ├── scaffolding.less │ │ ├── tables.less │ │ ├── theme.less │ │ ├── thumbnails.less │ │ ├── tooltip.less │ │ ├── type.less │ │ ├── utilities.less │ │ ├── variables.less │ │ └── wells.less │ ├── browse.less │ ├── build_editor.less │ ├── build_site.less │ ├── build_site360.less │ ├── build_vizor2teaser.less │ ├── chat.less │ ├── collapsible-select-control.less │ ├── core.less │ ├── editor.less │ ├── editor_shell.less │ ├── editors.less │ ├── file-select-control.less │ ├── footer.less │ ├── homepage.less │ ├── libraries.less │ ├── mixin.less │ ├── mobilemenu.less │ ├── modals.less │ ├── notifications.less │ ├── people.less │ ├── playerpage.less │ ├── scrollbars.less │ ├── site.less │ ├── threesixty.less │ ├── tree.less │ ├── userpulldown.less │ ├── variables.less │ └── widgets/ │ ├── hideshow.less │ ├── madeByVizor.less │ ├── minislides.less │ ├── pagination.less │ ├── tabbed.less │ ├── toggle.less │ └── widgets.less ├── lib/ │ ├── cloudStorage.js │ ├── editorChannelServer.js │ ├── framedump-server.js │ ├── graphOptimizer.js │ ├── gridfs-storage.js │ ├── hbs-helpers.js │ ├── imageProcessor.js │ ├── mailer.js │ ├── osc-server.js │ ├── parsePluginSlots.js │ ├── previewImageProcessor.js │ ├── sandbox.js │ ├── sceneProcessor.js │ ├── streamFile.js │ ├── stringUtil.js │ ├── templateCache.js │ └── wschannel-server.js ├── modelRoutes.js ├── models/ │ ├── asset-helper.js │ ├── audio.js │ ├── editLog.js │ ├── graph.js │ ├── image.js │ ├── json.js │ ├── patch.js │ ├── scene.js │ ├── serial.js │ ├── user.js │ └── video.js ├── newrelic.js ├── package.json ├── patches-exporter/ │ ├── export.handlebars │ └── index.js ├── services/ │ ├── assetService.js │ └── graphService.js ├── test/ │ ├── controllers/ │ │ ├── assetController.js │ │ ├── documentationController.js │ │ └── graphController.js │ ├── fixtures/ │ │ ├── component-rotation-y.json │ │ ├── graph.json │ │ ├── loaders.json │ │ ├── slider-float.json │ │ ├── te-2rb.json │ │ ├── te-2rb.optimized.json │ │ └── teapot-claraio.json │ ├── integration/ │ │ ├── account.js │ │ ├── avatars.js │ │ ├── editLog.js │ │ ├── graph-save.js │ │ ├── graphDelete.js │ │ ├── graphPaging.js │ │ ├── graphRank.js │ │ ├── headers.js │ │ ├── models/ │ │ │ └── editLog.js │ │ ├── multiuserEditing.js │ │ ├── patch-save.js │ │ ├── sceneUpload.js │ │ ├── serial.js │ │ ├── upload.js │ │ └── uploadAnonymous.js │ ├── services/ │ │ ├── assetService.js │ │ └── graphService.js │ └── unit/ │ ├── editorChannelServer.js │ ├── graphAnalyser.js │ ├── graphOptimizer.js │ ├── gridfs-storage.js │ ├── imageProcessor.js │ ├── migrations/ │ │ └── 0.6.0-slotname.js │ └── sceneProcessor.js ├── tools/ │ ├── blender/ │ │ ├── io_export_curve.py │ │ └── io_export_engi.py │ ├── cdnMakePublic.js │ ├── compress-plugin-icons.py │ ├── convert-audio.py │ ├── convert-sequence │ ├── create-test-examples.js │ ├── edit-graph.py │ ├── extract-plugin-docs.js │ ├── imgopt/ │ │ ├── README.txt │ │ ├── imgopt │ │ ├── jfifremove │ │ └── jfifremove.c │ ├── layoutBundler.js │ ├── migration/ │ │ ├── 0.11.0/ │ │ │ ├── 0.11.0-userstats.js │ │ │ └── run.js │ │ ├── 0.13.0/ │ │ │ ├── 0.13.0-import-patches.js │ │ │ ├── 0.13.0-rename-collection.js │ │ │ ├── 0.13.0-sanitise-patches.js │ │ │ └── run.js │ │ ├── 0.14.7/ │ │ │ └── 0.14.7-user-created-date.js │ │ ├── 0.16/ │ │ │ └── gridfs-to-cdn.js │ │ ├── 0.6.0/ │ │ │ ├── 0.6.0-slotname-db.js │ │ │ ├── 0.6.0-slotname-presets.js │ │ │ ├── migrate.js │ │ │ └── run.js │ │ └── 0.7.0/ │ │ └── 0.7.0-redis.js │ ├── optimize-plugin │ ├── optimize-scene │ ├── player.html │ ├── publish-seq │ ├── pull.js │ ├── pushPlayerToGrid.js │ ├── test-opt-plugins │ ├── test-runner.js │ ├── upload.js │ └── validate-seq ├── vendor/ │ └── three/ │ └── fbx/ │ ├── LICENSE │ ├── README.md │ └── convert_to_threejs.py └── views/ ├── assetBrowser/ │ └── assetsFrame.handlebars ├── chat/ │ ├── message.handlebars │ └── meta.handlebars ├── editor.handlebars ├── error.handlebars ├── filebrowser/ │ ├── frame.handlebars │ ├── generic.handlebars │ ├── graph-frame.handlebars │ ├── graph.handlebars │ ├── patch.handlebars │ ├── publishModal.handlebars │ ├── save-frame.handlebars │ ├── tags.handlebars │ ├── texture.handlebars │ └── upload.handlebars ├── graph/ │ ├── index.handlebars │ └── show.handlebars ├── home.handlebars ├── layouts/ │ ├── editor.handlebars │ ├── errorlayout.handlebars │ ├── main.handlebars │ ├── min.handlebars │ ├── player.handlebars │ └── threesixty.handlebars ├── partials/ │ ├── account/ │ │ ├── forgotpassword.handlebars │ │ ├── login.handlebars │ │ └── signup.handlebars │ ├── assets/ │ │ ├── commonActions.handlebars │ │ ├── graphCard.handlebars │ │ ├── graphCardJS.handlebars │ │ ├── newCard.handlebars │ │ └── projectCard.handlebars │ ├── breadcrumb.handlebars │ ├── browse/ │ │ ├── graphList.handlebars │ │ └── graphSmall.handlebars │ ├── controls/ │ │ ├── svgButton.handlebars │ │ ├── svgLink.handlebars │ │ └── toggle.handlebars │ ├── editor/ │ │ ├── nodeInspector.handlebars │ │ └── objectProperties.handlebars │ ├── embedYoutube.handlebars │ ├── error.handlebars │ ├── flash.handlebars │ ├── homeMobileMenu.handlebars │ ├── mailinglist.handlebars │ ├── mixpanel.handlebars │ ├── noWebGL.handlebars │ ├── notification.handlebars │ ├── pagination.handlebars │ ├── peopleMenu.handlebars │ ├── playerCanvas.handlebars │ ├── playerShareDialog.handlebars │ ├── profile.handlebars │ └── userpulldown.handlebars ├── patch_editor/ │ ├── help_shortcuts.handlebars │ ├── helpscreen.handlebars │ ├── intro.handlebars │ ├── ui_plugin__default.handlebars │ ├── ui_plugin_input_proxy.handlebars │ ├── ui_plugin_output_proxy.handlebars │ ├── ui_plugin_url_texture_generator_with_url.handlebars │ ├── ui_plugin_variable_local_read.handlebars │ └── ui_plugin_variable_local_write.handlebars ├── patches/ │ ├── patches.handlebars │ └── results.handlebars ├── server/ │ ├── pages/ │ │ ├── about.handlebars │ │ ├── account/ │ │ │ ├── forgotPassword.handlebars │ │ │ ├── login.handlebars │ │ │ ├── profile.handlebars │ │ │ ├── setPassword.handlebars │ │ │ └── signup.handlebars │ │ └── userpage.handlebars │ └── partials/ │ ├── account/ │ │ ├── account.handlebars │ │ ├── changepassword.handlebars │ │ ├── deleteAccount.handlebars │ │ ├── editBio.handlebars │ │ ├── editDefaults.handlebars │ │ ├── editEmail.handlebars │ │ ├── editName.handlebars │ │ ├── editPassword.handlebars │ │ ├── editPics.handlebars │ │ ├── editUsername.handlebars │ │ └── editWebsite.handlebars │ ├── editor/ │ │ └── asset_panel.handlebars │ ├── editorSvgSprite.handlebars │ ├── gtm.handlebars │ ├── home/ │ │ ├── _footer.handlebars │ │ ├── _header.handlebars │ │ ├── aboutIntro.handlebars │ │ ├── aboutPresskit.handlebars │ │ ├── aboutTeam.handlebars │ │ ├── getNewsletter.handlebars │ │ ├── homeFeatured.handlebars │ │ ├── homeHero.handlebars │ │ ├── homeIntro.handlebars │ │ └── homeVizor360.handlebars │ ├── madeWithVizor.handlebars │ ├── navbar.handlebars │ ├── siteSvgSprite.handlebars │ └── userpage/ │ ├── nav.handlebars │ └── userpageHeader.handlebars ├── ui/ │ └── shader.handlebars └── vizor2Teaser.handlebars ================================================ FILE CONTENTS ================================================ ================================================ FILE: .dockerignore ================================================ .git node_modules/ .DS_Store npm-debug.log yarn-error.log .eslintcache ================================================ FILE: .foreverignore ================================================ builtAssets newrelic* ================================================ FILE: .gitignore ================================================ .DS_Store .idea browser/ajaxconsole.html browser/build browser/data/scenes/** browser/data/textures/** browser/dist/** browser/tools/node_modules views/layouts/*-bundled.handlebars engistart.bat engistart.bat - Shortcut.lnk node_modules npm-debug.log browser/style/site.css browser/style/less.css browser/style/threesixty.css browser/style/site360.css browser/style/editor.css browser/style/vizor2teaser.css dummy.txt /builtAssets ================================================ FILE: .jshintrc ================================================ { // JSHint Default Configuration File (as on JSHint website) // See http://jshint.com/docs/ for more details "maxerr" : 50, // {int} Maximum error before stopping // Enforcing "bitwise" : false, // true: Prohibit bitwise operators (&, |, ^, etc.) "camelcase" : false, // true: Identifiers must be in camelCase "curly" : false, // true: Require {} for every new block or scope "eqeqeq" : true, // true: Require triple equals (===) for comparison "forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty() "freeze" : true, // true: prohibits overwriting prototypes of native objects such as Array, Date etc. "immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());` "indent" : 4, // {int} Number of spaces to use for indentation "latedef" : false, // true: Require variables/functions to be defined before being used "newcap" : false, // true: Require capitalization of all constructor functions e.g. `new F()` "noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee` "noempty" : false, // true: Prohibit use of empty blocks "nonbsp" : true, // true: Prohibit "non-breaking whitespace" characters. "nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment) "plusplus" : false, // true: Prohibit use of `++` & `--` "quotmark" : false, // Quotation mark consistency: // false : do nothing (default) // true : ensure whatever is used is consistent // "single" : require single quotes // "double" : require double quotes "undef" : false, // true: Require all non-global variables to be declared (prevents global leaks) "unused" : true, // Unused variables: // true : all variables, last function parameter // "vars" : all variables only // "strict" : all variables, all function parameters "strict" : false, // true: Requires all functions run in ES5 Strict Mode "maxparams" : false, // {int} Max number of formal params allowed per function "maxdepth" : false, // {int} Max depth of nested blocks (within functions) "maxstatements" : false, // {int} Max number statements per function "maxcomplexity" : false, // {int} Max cyclomatic complexity per function "maxlen" : false, // {int} Max number of characters per line // Relaxing "asi" : true, // true: Tolerate Automatic Semicolon Insertion (no semicolons) "boss" : false, // true: Tolerate assignments where comparisons would be expected "debug" : false, // true: Allow debugger statements e.g. browser breakpoints. "eqnull" : false, // true: Tolerate use of `== null` "es5" : false, // true: Allow ES5 syntax (ex: getters and setters) "esnext" : true, // true: Allow ES.next (ES6) syntax (ex: `const`) "moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features) // (ex: `for each`, multiple try/catch, function expression…) "evil" : false, // true: Tolerate use of `eval` and `new Function()` "expr" : false, // true: Tolerate `ExpressionStatement` as Programs "funcscope" : false, // true: Tolerate defining variables inside control statements "globalstrict" : false, // true: Allow global "use strict" (also enables 'strict') "iterator" : false, // true: Tolerate using the `__iterator__` property "lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block "laxbreak" : false, // true: Tolerate possibly unsafe line breakings "laxcomma" : false, // true: Tolerate comma-first style coding "loopfunc" : false, // true: Tolerate functions being defined in loops "multistr" : false, // true: Tolerate multi-line strings "noyield" : false, // true: Tolerate generator functions with no yield statement in them. "notypeof" : false, // true: Tolerate invalid typeof operator values "proto" : false, // true: Tolerate using the `__proto__` property "scripturl" : false, // true: Tolerate script-targeted URLs "shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;` "sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation "supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;` "validthis" : false, // true: Tolerate using this in a non-constructor function // Environments "browser" : true, // Web Browser (window, document, etc) "browserify" : false, // Browserify (node.js code in the browser) "couch" : false, // CouchDB "devel" : true, // Development/debugging (alert, confirm, etc) "dojo" : false, // Dojo Toolkit "jasmine" : false, // Jasmine "jquery" : false, // jQuery "mocha" : true, // Mocha "mootools" : false, // MooTools "node" : false, // Node.js "nonstandard" : false, // Widely adopted globals (escape, unescape, etc) "phantom" : false, // PhantomJS "prototypejs" : false, // Prototype and Scriptaculous "qunit" : false, // QUnit "rhino" : false, // Rhino "shelljs" : false, // ShellJS "typed" : false, // Globals for typed array constructions "worker" : false, // Web Workers "wsh" : false, // Windows Scripting Host "yui" : false, // Yahoo User Interface // Custom Globals "globals" : {} // additional predefined global variables } ================================================ FILE: .travis.yml ================================================ language: node_js node_js: - "0.10" services: - mongodb before_install: - sudo apt-get update -qq - sudo apt-get install -qq graphicsmagick notifications: flowdock: 5eb79fdf198910d3285b728440497b0c ================================================ FILE: Dockerfile ================================================ FROM vizor/boron ENV HOME=/root \ ENGI_BIND_IP=0.0.0.0 \ NODE_ENV=production \ TMPDIR=/tmp EXPOSE 8000 RUN npm config set loglevel error --silent # install our dependencies and nodejs RUN npm install -g forever # use changes to package.json to force Docker not to use the cache # when we change our application's dependencies: ADD package.json /tmp/package.json RUN cd /tmp && \ yarn --pure-lockfile && \ yarn cache clean && \ mkdir -p /opt/app && \ mv /tmp/node_modules /opt/app/ COPY . /opt/app WORKDIR /opt/app RUN ./node_modules/.bin/gulp golive \ && sh bin/bundler.sh CMD forever ./app.js ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) 2011-2014 Engi authors. Copyright (c) 2015 Pixelface, Ltd. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # Patches ==== Patches is a visual programming environment for WebGL, WebVR and other HTML5 APIs. It features live preview, data flow visualization, network communication, publishing, unlimited undo, and a catalog of ready-made patches that can be used as modular building blocks. Complex logic can be nested in subgraphs and they can be rendered directly to a specific render target, or simply used as a texture. Loops are modeled as nested graphs that are evaluated once per loop iteration. **Try the cloud version of Patches now at [patches.vizor.io](http://patches.vizor.io).** Be sure to [watch the tutorials](http://bit.do/vizor), [read the documentation](http://patches.vizor.io/help/introduction.html) and [read tutorials on Patches](http://blog.vizor.io/). [Plugin API documentation](http://patches.vizor.io/help/plugin_api.html) is available, but unstable. ### Installing on macOS/OSX Installing a local instance of Patches requires [MongoDB](http://mongodb.org) (MongoDB Server should be 3.2.12), [Redis](http://redis.io), [node.js](https://nodejs.org) (Get [v6.11](https://nodejs.org/en/download/)) and graphicsmagick. To install the required packages, issue the following commands (on Mac using Homebrew): ``` $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" $ brew install graphicsmagick $ brew install mongodb $ brew install redis $ brew services start mongodb $ brew services start redis $ npm install && npm install -g gulp $ gulp ``` NOTE: Currently using Web Sockets or OSC requires running Patches locally. ### Building To build the LESS, plugins, etc [continuously]: ``` $ gulp [watch] ``` Running the tests: ``` $ npm install -g mocha $ npm test ``` ### Quick list of versions for running with Ubuntu Linux OS: Ubuntu **16.04.2** MongoDB shell version: **3.2.18** Redis server **v=3.0.6** Node **v6.11.5** NPM **5.5.1** Also, if you do not want to downgrade your node version then upgrade the **mongodb** package to **2.2.24** and the **gridfs-stream** package to the latest version. One more detail, the exiftool can be installed like this `sudo apt-get install libimage-exiftool-perl` ### How to run Patches locally using Windows Please consult [WindowsInstallationReadme.md](WindowsInstallationReadme.md) ### Running Patches 0. Make sure you have the right export for ENGI_BIND_IP configured in your .bash_profile ```    export ENGI_BIND_IP=0.0.0.0 ``` 1. Make sure MongoDB and Redis are running. ``` $ brew services start mongodb $ brew services start redis ``` 2. Gulp one more time, then run the server: ``` $ gulp $ npm start ``` 3. Open in the browser: [http://localhost:8000/edit](http://localhost:8000/edit) If you have access to an Oculus Rift DK1 or DK2 and want to play with the VR features, you currently need one of Toji's special Chromium builds. You can find them here: http://blog.tojicode.com/2014/07/bringing-vr-to-chrome.html # Contributing We welcome your contributions! Please create and work in a fork, submitting a pull request when (and if) you're ready for a review. Contributors may note some inconsistencies in style. We're in the process of migrating; new work should be done in JavaScript ES5 using Airbnb code style (exception: tabs instead of spaces). # A note on plugins Patches features hundreds of plugins, including ways to obtain or create data: * Cameras: Perspective, orthographic and screen space. Obtain aspect radio and viewport size. * Input: Gamepad, VR headset, keyboard, mouse position, button state and scroll wheel. * Loading assets: HTML5 audio, images, JSON, 3d scenes and HTML5 video. Select files directly from UI or provide URLs to load as strings from the graph. * Matrices: Translation, rotation, scale and planar projection. * Meshes: Cube, grid, null (transform visualization), plane, quad, sphere and user defined (Blender exporter is included). * Open Sound Control: Receive float / xy float. * Shaders: Diffuse only, automatically generated from mesh and material, user defined, normal as color and texture with UV-transforms. * System state: Initialized, assets started, failed, and successfully loaded. Graphs can emit these signals via plugins to integrate with the global asset load logic when procedurally generating data. * Text rendering. * Time: Absolute, frame delta. * Typed array generation. * Web Sockets. * Crypto: Check the current balances of a named CounterWallet. * Virtual Reality: Camera / MHD / Sensor info. Sensor velocity / acceleration. Full Oculus Rift support. * Various plugins to provide UI for direct manipulation or input of values: Knobs, sliders, input fields for labels and constant values, toggle and action buttons, color pickers, text editors, PRNGs and many other similar plugins for providing data directly from the graph view. ...Ways to modify data: * Audio: Get duration and current playback position. Analysis (FFT), gain, buffer source. * Color: Add, mix, multiply and set alpha. * Data type conversions. Format or parse strings, compose complex types from primitives, convert between primitive types and split / merge cameras to / from constituent matrices. * Curves: Looping cubic interpolation of keypoints. * Filters: First order low pass, sample and hold, toggle. * Instanced meshes: Clear transforms, rotate, scale, translate. * Light sources (point, directional): Diffuse color, direction, intensity, position, specular color and type. * Logic: And, equals, if, if...else, less than, more than, nand, not, or, switch and xor. * Materials: Alpha clip, ambient color, blend mode (none, add, sub, mul, normal), diffuse color, double sided, attach lights, shininess, textures (diffuse, emission, specular and normal maps), z-buffer (use / write). * Math: Add, clamp, divide, module, multiply, negate, subtract, delta, abs, cos, exp, log, max, min, sin, sqrt, tan, ceil, floor and round. * Matrix: Concatenate, get component, invert, set component and transpose. * Mesh: Primitive type (points, lines, line strip, line loop, triangles, tristrip, trifan). Obtain or set the maximum primitive count to render. * Object: Convert named member to float, bool, string, object or typed array. Access any array item of the those same types by index and object member name. * Oscillators: Cosine, sawtooth, sine, square, triangle. * Scene: Get bounding box, get mesh, get mesh count. * String: Concatenate, parse JSON. * Tweens: In / out (circular, cubic, exponential, quadratic, quartic, quintic and sinusoidal). * Typed arrays: Array to mesh, array to texture, get element, get element as type, length, set element, set element as type. * Virtual Reality: Create Oculus Rift compatible left / right camera from an input camera. * Vector: Add, cross, dot product, magnitude, multiply, normalize, scale and transform. * Video: Current time and duration. ...Ways to utilize data: * 3D: Render scene, render mesh, create instanced meshes (arrays, cubic volumes, using iterated function systems or distribution textures) and record the current framebuffer. * Audio: Player / Source player. * Debug visualization: On-canvas visualization of booleans, colors, arbitrary data, floats, matrices, objects, function plots, text and vectors. * Sequencing: Stop playback. * Video: Player. ...And ways to structure logic or store state: * Create infinitely nested sub-graphs or loops. * Create named in- and output proxies in a graph to have them automatically reflected as a slot on the parent node of the graph the proxy is in. * Create named registers to store values of any supported data type between graph updates as state storage or feedback loops. Created sequences can be imported and exported as JSON, embeddable into any context with the included standalone player, or simulated in a bare core instance. The latter permits sequences to be leveraged in other JavaScript projects as a domain-specific visual scripting language by providing the embedded graph with appropriate values from its host, updating the graph and acting on the emitted output values. Created sequences can be automatically exported to an optimized file set, ready to deploy to any Web server. # License Patches is released under the [MIT License](http://opensource.org/licenses/MIT) # Contact Us [@vizor_vr on Twitter](https://twitter.com/vizor_vr) [@VizorPatches on Twitter](https://twitter.com/VizorPatches) [E-Mail](mailto:info@vizor.io) ================================================ FILE: WindowsInstallationReadme.md ================================================ # Instructions for running Vizor Patches locally using Windows ## Written by Maya Lekova 1. MongoDB 1. Installation instructions can be found [here](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/). 1. Redis 1. Download an installer for the [Windows version](https://github.com/MicrosoftArchive/redis) by Microsoft Open Tech group and follow the steps 1. Check in "Services" that "Redis" is running. By default it runs on port *6379* 1. Node.js 1. Install nvm-windows: [instructions](https://github.com/coreybutler/nvm-windows#node-version-manager-nvm-for-windows) 1. `nvm install 6.11` 1. `nvm use 6.11` 1. Running `node -v` should give you "v6.11.x" 1. Graphicsmagick 1. Download from the "windows" section of their [website](http://www.graphicsmagick.org/download.html). Q8 x64 version is suitable for setting up Patches. 1. Open a new cmd window and ensure the installation is successful by running `gm help` 1. Additional setup for building the sse4_crc32 module *(optional)* 1. Download and install [Python](https://www.python.org/downloads/release/python-2714/) 1. Verify by opening new cmd and running `python --version` 1. Install Visual Studio version lower than 2017 (with 2017 there's an [issue reported](https://github.com/anandsuresh/sse4_crc32/issues/65)). If the version is >2005 use the appropriate version of cmd to get it building. 1. Setting up the repo 1. Download some nice Git client compatible with your version of Windows (personally I use [Git for Windows](http://gitforwindows.org/)) and clone the repo 1. `npm install && npm install -g gulp` 1. Few deprecated modules appear and (if no success in the previous step) sse4_crc32 may fail completely. *Note about MongoDB:* For the server I use a cloud-hosted version on [mLab](https://mlab.com/). It provides 0.5GB of storage with MongoDB version 3.4.x. MongoDB server used to be easily installable on consumer versions of Windows, but now on their website there's only installer for Windows Server 2008. If you choose similar cloud provider, the connection string `mongodb://:@:/` should be set as an environment variable `MONGODB` prior to running patches and also some modifications in `gridfs-storage.js` are needed in order to support authentication. ================================================ FILE: app.js ================================================ if (process.env.NEWRELIC) require('newrelic'); var _ = require('lodash'); var http = require('http'); var express = require('express'); var cookieParser = require('cookie-parser'); var compress = require('compression'); var connectAssets = require('connect-assets'); var sessions = require('client-sessions'); var bodyParser = require('body-parser'); var morgan = require('morgan'); var errorHandler = require('errorhandler'); var csrf = require('lusca').csrf(); var methodOverride = require('method-override'); var crypto = require('crypto') var streamFile = require('./lib/streamFile'); var flash = require('express-flash'); var fsPath = require('path'); var EventEmitter = require('events').EventEmitter; var mongoose = require('mongoose'); mongoose.Promise = global.Promise // http://mongoosejs.com/docs/promises.html var passport = require('passport'); var expressValidator = require('express-validator'); var exphbs = require('express-handlebars'); var diyHbsHelpers = require('diy-handlebars-helpers'); var hbsHelpers = require('./lib/hbs-helpers'); var templateCache = require('./lib/templateCache').templateCache // Framework controllers (see below for asset controllers) var homeController = require('./controllers/homeController'); var vizor2TeaserController = require('./controllers/vizor2TeaserController') var userController = require('./controllers/userController'); // Threesixty site controller var threesixtyController = require('./controllers/threesixty'); // API keys + Passport configuration var secrets = require('./config/secrets'); var passportConf = require('./config/passport'); var OscServer = require('./lib/osc-server').OscServer; var WsChannelServer = require('./lib/wschannel-server').WsChannelServer; var EditorChannelServer = require('./lib/editorChannelServer').EditorChannelServer; var config = require('./config/config.js'); let CloudFileSystemImpl if (config.server.useCDN) CloudFileSystemImpl = require('./lib/cloudStorage') else CloudFileSystemImpl = require('./lib/gridfs-storage') var argv = require('minimist')(process.argv.slice(2)); var listenHost = process.env.ENGI_BIND_IP || argv.i || config.server.host; var listenPort = process.env.ENGI_BIND_PORT || argv.p || config.server.port; var minute = 60 * 1000; var hour = 60 * minute; var day = hour * 24; var week = day * 7; var csrfExclude = [ '/this-url-will-bypass-csrf' ]; var app = express(); // keep track of process startup time process.startTime = Date.now() app.events = new EventEmitter() // view engine setup app.set('views', fsPath.join(__dirname, 'views')); var releaseMode = process.env.NODE_ENV === 'production' var hbs = exphbs.create({ defaultLayout: releaseMode ? 'main-bundled' : 'main', partialsDir: [ {dir:'views/partials'}, {dir:'views/server/partials', namespace: 'srv'} ], helpers: _.extend( diyHbsHelpers, hbsHelpers, templateCache.helper() ) }) templateCache.setHbs(hbs.handlebars) templateCache.compile() app.engine('handlebars', hbs.engine); app.set('view engine', 'handlebars'); app.use((req, res, next) => { // Google Cloud Load Balancer: redirect to https if not secure var fwdProto = req.get('x-forwarded-proto') if (!fwdProto) return next() if (fwdProto !== 'https') return res.redirect('https://' + req.get('host') + req.url) next() }) app.use((req,res,next) => { // allow some context through to handlebars engine/helpers automatically hbs.handlebars._request = {} for (var key of ['hostname', 'ip', 'query', 'headers', 'method', 'params', 'secure', 'xhr', 'url', 'originalUrl']) { hbs.handlebars._request[key] = Object.freeze(_.extend(req[key])) } Object.freeze(hbs.handlebars._request) next() }) app.use(compress()) app.use(connectAssets({ paths: [ fsPath.join(__dirname, 'browser/style') ], helperContext: app.locals })); if (!releaseMode) app.use(morgan('dev')) app.use(bodyParser.json({ limit: 1024 * 1024 * 128 })); app.use(bodyParser.urlencoded( { extended: true, limit: 1024 * 1024 * 128 })); app.use(expressValidator()); app.use(methodOverride()); // parse the domain out from the FQDN and use it as the cookie domain // this way 360.vizor.io and vizor.io will use the same cookie var fqdn = process.env.FQDN || '' var domainFromFqdn = fqdn.split('.').splice(-2).join('.') app.use(cookieParser()); app.use(sessions({ cookieName: 'vs070', requestKey: 'session', cookie: { domain: domainFromFqdn, }, secret: secrets.sessionSecret, duration: week, activeDuration: day })); app.use(passport.initialize()); app.use(passport.session()); app.use(flash()); // app.use(function(req, res, next) // { // // CSRF protection. // if (_.contains(csrfExclude, req.path)) // return next(); // csrf(req, res, next); // }); app.use(function(req, res, next) { if (!req.user) { req.session.userId = crypto.randomBytes(12).toString('hex') } else { req.session.userId = req.user._id } res.locals.user = req.user res.locals.KEY_MIXPANEL = process.env.KEY_MIXPANEL res.locals.KEY_GTM = process.env.KEY_GTM next(); }); app.use(function(req, res, next) { // Remember original destination before login. var path = req.path.split('/')[1]; if (/auth||assets|login|logout|signup|img|fonts|favicon/i.test(path)) { return next(); } req.session.returnTo = req.path; next(); }); app.use(function(req, res, next) { res.header('Access-Control-Allow-Origin', '*') if (req.headers['access-control-request-headers']) res.header('Access-Control-Allow-Headers', req.headers['access-control-request-headers']) next(); }); app.use(function(req, res, next) { if (req.url.indexOf('?_') > -1) req.url = req.url.substring(0, req.url.indexOf('?_')); next(); }); // old static flat files app.use('/data', express.static( fsPath.join(__dirname, 'browser', 'data'), { maxAge: week * 52 } ) ) // accounts app.get('/login', userController.getLogin); app.post('/login', userController.postLogin); app.post('/login.json', userController.postLogin); app.get('/logout', userController.logout); app.get('/forgot', userController.getForgot); app.post('/forgot', userController.postForgot); app.get('/reset/:token', userController.getReset); app.post('/reset/:token', userController.postReset); app.get('/signup', userController.getSignup); app.post('/signup', userController.postSignup); app.post('/account/exists', userController.checkUserName); app.post('/account/email/exists', userController.checkEmailExists); app.get('/account', passportConf.isAuthenticated, userController.getAccount) app.post('/account/profile', passportConf.isAuthenticated, userController.postUpdateProfile); app.get('/account/profile', passportConf.isAuthenticated, userController.getAccountProfile); app.post('/account/password', passportConf.isAuthenticated, userController.postUpdatePassword); app.post('/account/delete', passportConf.isAuthenticated, userController.postDeleteAccount); app.get('/account/unlink/:provider', passportConf.isAuthenticated, userController.getOauthUnlink); app.get('/about', homeController.about) // begin 360 routing app.get('/v/:graph', function(req, res, next) { switch (req.hostname) { case '360.vizor.io': case '360.vizor.lol': res.locals.layout = 'threesixty' } next() }) app.get('/featured', function(req, res, next) { switch (req.hostname) { case '360.vizor.io': case '360.vizor.lol': return threesixtyController.featured(req, res, next) default: return next() } }) app.get('/', function(req, res, next) { switch (req.hostname) { case '360.vizor.io': case '360.vizor.lol': return res.redirect(301, 'https://vizor.io/new') default: return homeController.index(req, res, next) } }) app.get('/threesixty', threesixtyController.index) app.get('/threesixty/featured', threesixtyController.featured) // end 360 routing mongoose.connect(secrets.db); mongoose.connection.on('error', function(err) { throw err }) mongoose.connection.on('connected', (connection) => { setupModelRoutes(mongoose.connection.db) }) function setupModelRoutes(mongoConnection) { var modelRoutes = require('./modelRoutes.js') const cloudStorage = new CloudFileSystemImpl() // stat() files in cloud storage app.get(/^\/stat\/.*/, function(req, res) { var path = req.path.replace(/^\/stat/, ''); cloudStorage.stat(path) .then(function(stat) { if (!stat) return res.json({ error: 404 }) delete stat._id res.header('Cache-Control', 'public') return res.json(stat) }) }) // get files from cloud storage app.get(/^\/data\/.*/, function(req, res, next) { return streamFile(req, res, next, cloudStorage) .catch(next) }); // allow strong caching for bundles etc. app.get([ '/dist/*', '/vendor/*', '/images/*', '/fonts/*', '/docs/*' ], function(req, res, next) { res.setHeader('Cache-Control', 'public, max-age=604800'); next(); }); // minimal caching for frequently updating things app.use([ '/style/*', '/plugins/plugins.json', '/vizor/patches', // system patch list ], function(req, res, next) { res.setHeader('Cache-Control', 'public, must-revalidate, max-age=300'); next(); } ); if (!releaseMode) { app.use(function(req, res, next) { res.setHeader('Cache-Control', 'no-cache') next() }) } // drop the second parameter (timestamp) in meta-scripts app.use('/meta-scripts', function(req, res, next) { req.url = '/' + req.url.split('/').splice(2).join('/') next() }, express.static( fsPath.join(__dirname, 'browser', 'scripts'), { maxAge: week * 52 } )) app.use(['/node_modules'], express.static(fsPath.join(__dirname, 'node_modules')) ) app.use(express.static(fsPath.join(__dirname, 'browser'), { maxAge: hour })) // remap /scripts to /dist in production app.use('/scripts', express.static( fsPath.join(__dirname, 'browser', 'dist'), { maxAge: week * 52 } ) ) app.use('/common', express.static(fsPath.join(__dirname, 'common'), { maxAge: hour })) // -------------------------------------------------- /** * wire up model routes **/ modelRoutes.setupDefaultRoutes( app, cloudStorage, mongoConnection, passportConf ) // -------------------------------------------------- var httpServer = http.createServer(app) httpServer.listen(listenPort, listenHost) if (config.server.enableOSC) new OscServer().listen(httpServer) if (config.server.enableChannels) { new WsChannelServer().listen(httpServer) var ecs = new EditorChannelServer() ecs.listen(httpServer) } app.use(function(err, req, res, next) { console.error(err.message, err.stack); res.status(err.status || 500); if (req.xhr) return res.json({ success: false, message: err.message }); res.render('error', { layout: 'errorlayout', message: err.message, error: {} }); }); app.use(errorHandler()); app.events.emit('ready') } module.exports = app; ================================================ FILE: bin/bundler.sh ================================================ echo Bundler starting node ./tools/layoutBundler main & node ./tools/layoutBundler player & node ./tools/layoutBundler editor & node ./tools/layoutBundler threesixty & wait echo Bundler completed ================================================ FILE: bin/deploy.sh ================================================ alias d='docker' # source environment variables from local file . ./env if [ -e $FQDN ]; then echo "No environment?" exit 1 fi echo ---------------------------------------- echo Deploying $FQDN echo ---------------------------------------- # update from git git pull --rebase # build docker container d build -t $FQDN:v1 . echo ---------------------------------------- echo Destroying old $FQDN echo ---------------------------------------- # destroy existing container d stop $FQDN d rm $FQDN echo ---------------------------------------- echo Provisioning $FQDN echo ---------------------------------------- # run provisioning step d run --rm \ -e "NODE_ENV=$NODE_ENV" \ -e "MONGODB=$MONGODB" \ -e "GRIDFS=$GRIDFS" \ --link mongo:mongo \ $FQDN:v1 \ node ./node_modules/gulp/bin/gulp push echo ---------------------------------------- echo Running $FQDN echo ---------------------------------------- # start container d run -d --name $FQDN \ -e "FQDN=$FQDN" \ -e "KEY_SPARKPOST=$KEY_SPARKPOST" \ -e "NODE_ENV=$NODE_ENV" \ -e "NEWRELIC=$NEWRELIC" \ -e "SESSION_SECRET=$SESSION_SECRET" \ -e "ENGI_BIND_PORT=$PORT" \ -e "KEY_MIXPANEL=$KEY_MIXPANEL" \ -e "KEY_GTM=$KEY_GTM" \ -e "WSS_HOST=$WSS_HOST" \ -e "WSS_SECURE=$WSS_SECURE" \ -e "MONGODB=$MONGODB" \ -e "GRIDFS=$GRIDFS" \ -e "REDIS=$REDIS" \ -p 127.0.0.1:$PORT:$PORT \ --link mongo:mongo \ --link redis:redis \ $FQDN:v1 ================================================ FILE: bin/test-functional.sh ================================================ DEST=ops@ex40.kschzt.com:/var/www/fail.vizor.lol node ./tools/create-test-examples.js node ./browser/test/functional/run.js RETVAL=$? echo EXITED $RETVAL if [ -e "$CI_BUILD_NUMBER" ]; then ls -l $CI_BUILD_NUMBER scp -r $CI_BUILD_NUMBER $DEST/$CI_BUILD_NUMBER echo Artefacts at http://fail.vizor.lol/$CI_BUILD_NUMBER fi exit $RETVAL ================================================ FILE: browser/data/editor-icons/directional-light/directional.obj ================================================ # Blender v2.76 (sub 0) OBJ File: 'Work.blend' # www.blender.org o Cube.018_Cube.003 v -5.831393 -5.065597 0.496826 v -9.494683 -8.728898 0.496826 v -5.065563 -5.831427 0.496826 v -8.728852 -9.494727 0.496826 v -5.831394 -5.065598 -0.504465 v -9.494682 -8.728898 -0.504465 v -5.065563 -5.831427 -0.504465 v -8.728852 -9.494727 -0.504465 v -9.597547 -8.979668 0.496826 v -8.979622 -9.597586 0.496826 v -8.979622 -9.597586 -0.504465 v -9.597546 -8.979668 -0.504465 v -5.019949 -5.586864 0.496826 v -5.586830 -5.019982 0.496826 v -5.019949 -5.586864 -0.504465 v -5.586830 -5.019982 -0.504465 v -9.111768 -9.111813 0.496826 v -5.448478 -5.448513 0.496826 v -9.111768 -9.111813 -0.504465 v -5.448478 -5.448513 -0.504465 v -9.367414 -9.367458 0.496826 v -9.367414 -9.367458 -0.504465 v -5.208155 -5.208187 0.496826 v -5.208155 -5.208187 -0.504465 v 5.065583 -5.831410 0.496825 v 8.728887 -9.494699 0.496824 v 5.831412 -5.065580 0.496825 v 9.494715 -8.728870 0.496824 v 5.065585 -5.831413 -0.504467 v 8.728887 -9.494699 -0.504467 v 5.831412 -5.065580 -0.504466 v 9.494716 -8.728870 -0.504467 v 8.979654 -9.597559 0.496824 v 9.597572 -8.979640 0.496824 v 9.597573 -8.979640 -0.504467 v 8.979654 -9.597559 -0.504468 v 5.586849 -5.019966 0.496825 v 5.019966 -5.586849 0.496825 v 5.586849 -5.019966 -0.504466 v 5.019966 -5.586849 -0.504466 v 9.111800 -9.111785 0.496824 v 5.448498 -5.448496 0.496825 v 9.111800 -9.111785 -0.504467 v 5.448498 -5.448496 -0.504466 v 9.367446 -9.367431 0.496824 v 9.367446 -9.367431 -0.504467 v 5.208177 -5.208174 0.496825 v 5.208177 -5.208174 -0.504466 v -0.541512 -7.705341 0.496825 v -0.541507 -12.886021 0.496824 v 0.541535 -7.705339 0.496825 v 0.541543 -12.886021 0.496825 v -0.541512 -7.705341 -0.504466 v -0.541507 -12.886021 -0.504467 v 0.541535 -7.705339 -0.504466 v 0.541543 -12.886021 -0.504467 v -0.436918 -13.136077 0.496824 v 0.436953 -13.136074 0.496825 v 0.436953 -13.136074 -0.504467 v -0.436917 -13.136077 -0.504467 v 0.400857 -7.500153 0.496825 v -0.400836 -7.500154 0.496825 v 0.400857 -7.500153 -0.504466 v -0.400836 -7.500154 -0.504466 v 0.000018 -12.886021 0.496824 v 0.000012 -7.705341 0.496825 v 0.000018 -12.886021 -0.504467 v 0.000012 -7.705341 -0.504466 v 0.000018 -13.247559 0.496824 v 0.000018 -13.247559 -0.504467 v 0.000010 -7.365470 0.496825 v 0.000010 -7.365470 -0.504466 v -0.171379 -16.336731 0.107349 v -0.171379 -17.976595 0.107349 v 0.171443 -16.336731 0.107349 v 0.171447 -17.976595 0.107349 v -0.138272 -18.055748 0.107349 v 0.138340 -18.055744 0.107349 v 0.126914 -16.271782 0.107349 v -0.126850 -16.271782 0.107349 v 0.000034 -17.976595 0.107349 v 0.000030 -16.336731 0.107349 v 0.000034 -18.091028 0.107349 v 0.000030 -16.229153 0.107349 v -0.171379 -16.336731 -0.108220 v -0.171379 -17.976595 -0.108220 v 0.000034 -17.976595 -0.108220 v 0.171447 -17.976595 -0.108220 v 0.171443 -16.336731 -0.108220 v 0.000030 -16.336731 -0.108220 v 0.000034 -18.091028 -0.108220 v 0.138340 -18.055744 -0.108220 v -0.138272 -18.055748 -0.108220 v 0.000030 -16.229153 -0.108220 v -0.126850 -16.271782 -0.108220 v 0.126914 -16.271782 -0.108220 v -0.171378 -21.363804 0.107349 v -0.171378 -23.003670 0.107349 v 0.171440 -21.363804 0.107349 v 0.171444 -23.003670 0.107349 v -0.138271 -23.082819 0.107349 v 0.138337 -23.082819 0.107349 v 0.126911 -21.298853 0.107349 v -0.126849 -21.298853 0.107349 v 0.000035 -23.003670 0.107349 v 0.000031 -21.363804 0.107349 v 0.000035 -23.118103 0.107349 v 0.000031 -21.256224 0.107349 v -0.171378 -21.363804 -0.108220 v -0.171378 -23.003670 -0.108220 v 0.000035 -23.003670 -0.108220 v 0.171444 -23.003670 -0.108220 v 0.171440 -21.363804 -0.108220 v 0.000031 -21.363804 -0.108220 v 0.000035 -23.118103 -0.108220 v 0.138337 -23.082819 -0.108220 v -0.138271 -23.082819 -0.108220 v 0.000031 -21.256224 -0.108220 v -0.126849 -21.298853 -0.108220 v 0.126911 -21.298853 -0.108220 v -0.171377 -26.390879 0.107349 v -0.171377 -28.030743 0.107349 v 0.171441 -26.390879 0.107349 v 0.171445 -28.030743 0.107349 v -0.138270 -28.109894 0.107349 v 0.138338 -28.109890 0.107349 v 0.126912 -26.325926 0.107349 v -0.126848 -26.325926 0.107349 v 0.000036 -28.030743 0.107349 v 0.000032 -26.390879 0.107349 v 0.000036 -28.145176 0.107349 v 0.000032 -26.283298 0.107349 v -0.171377 -26.390879 -0.108221 v -0.171377 -28.030743 -0.108221 v 0.000036 -28.030743 -0.108221 v 0.171445 -28.030743 -0.108220 v 0.171441 -26.390879 -0.108220 v 0.000032 -26.390879 -0.108221 v 0.000036 -28.145176 -0.108221 v 0.138338 -28.109890 -0.108221 v -0.138270 -28.109894 -0.108221 v 0.000032 -26.283298 -0.108220 v -0.126848 -26.325926 -0.108221 v 0.126912 -26.325926 -0.108220 v -0.171377 -31.417948 0.107348 v -0.171376 -33.057812 0.107348 v 0.171442 -31.417948 0.107348 v 0.171446 -33.057812 0.107348 v -0.138269 -33.136971 0.107348 v 0.138339 -33.136967 0.107348 v 0.126913 -31.353001 0.107348 v -0.126848 -31.353001 0.107348 v 0.000037 -33.057812 0.107348 v 0.000033 -31.417948 0.107348 v 0.000037 -33.172253 0.107348 v 0.000033 -31.310371 0.107348 v -0.171376 -31.417948 -0.108221 v -0.171376 -33.057812 -0.108221 v 0.000037 -33.057812 -0.108221 v 0.171446 -33.057812 -0.108221 v 0.171442 -31.417948 -0.108221 v 0.000033 -31.417948 -0.108221 v 0.000037 -33.172253 -0.108221 v 0.138339 -33.136967 -0.108221 v -0.138269 -33.136971 -0.108221 v 0.000033 -31.310371 -0.108221 v -0.126848 -31.353001 -0.108221 v 0.126913 -31.353001 -0.108221 v -0.171376 -36.445023 0.107348 v -0.171375 -38.084888 0.107348 v 0.171442 -36.445023 0.107348 v 0.171447 -38.084888 0.107348 v -0.138269 -38.164043 0.107348 v 0.138340 -38.164040 0.107348 v 0.126914 -36.380077 0.107348 v -0.126847 -36.380077 0.107348 v 0.000038 -38.084888 0.107348 v 0.000033 -36.445023 0.107348 v 0.000038 -38.199326 0.107348 v 0.000033 -36.337448 0.107348 v -0.171376 -36.445023 -0.108221 v -0.171375 -38.084888 -0.108221 v 0.000038 -38.084888 -0.108221 v 0.171447 -38.084888 -0.108221 v 0.171442 -36.445023 -0.108221 v 0.000033 -36.445023 -0.108221 v 0.000038 -38.199326 -0.108221 v 0.138340 -38.164040 -0.108221 v -0.138269 -38.164043 -0.108221 v 0.000033 -36.337448 -0.108221 v -0.126847 -36.380077 -0.108221 v 0.126914 -36.380077 -0.108221 v -0.171379 -41.472099 0.107348 v -0.171379 -43.111961 0.107348 v 0.171443 -41.472099 0.107348 v 0.171447 -43.111961 0.107348 v -0.138272 -43.191116 0.107348 v 0.138341 -43.191113 0.107348 v 0.126914 -41.407150 0.107348 v -0.126846 -41.407150 0.107348 v 0.000038 -43.111961 0.107348 v 0.000034 -41.472099 0.107348 v 0.000038 -43.226398 0.107348 v 0.000034 -41.364521 0.107348 v -0.171379 -41.472099 -0.108222 v -0.171379 -43.111961 -0.108222 v 0.000038 -43.111961 -0.108222 v 0.171447 -43.111961 -0.108222 v 0.171443 -41.472099 -0.108222 v 0.000034 -41.472099 -0.108222 v 0.000038 -43.226398 -0.108222 v 0.138341 -43.191113 -0.108222 v -0.138272 -43.191116 -0.108222 v 0.000034 -41.364521 -0.108222 v -0.126846 -41.407150 -0.108222 v 0.126914 -41.407150 -0.108222 v -0.171378 -46.499172 0.107347 v -0.171378 -48.139042 0.107347 v 0.171444 -46.499172 0.107347 v 0.171448 -48.139042 0.107347 v -0.138271 -48.218189 0.107347 v 0.138341 -48.218185 0.107347 v 0.126915 -46.434223 0.107347 v -0.126849 -46.434223 0.107347 v 0.000035 -48.139042 0.107347 v 0.000035 -46.499172 0.107347 v 0.000035 -48.253475 0.107347 v 0.000035 -46.391594 0.107347 v -0.171378 -46.499172 -0.108222 v -0.171378 -48.139042 -0.108222 v 0.000035 -48.139042 -0.108222 v 0.171448 -48.139042 -0.108222 v 0.171444 -46.499172 -0.108222 v 0.000035 -46.499172 -0.108222 v 0.000035 -48.253475 -0.108222 v 0.138341 -48.218185 -0.108222 v -0.138271 -48.218189 -0.108222 v 0.000035 -46.391594 -0.108222 v -0.126849 -46.434223 -0.108222 v 0.126915 -46.434223 -0.108222 v -0.171377 -51.526249 0.107347 v -0.171377 -53.166115 0.107347 v 0.171445 -51.526249 0.107347 v 0.171445 -53.166115 0.107347 v -0.138270 -53.245266 0.107347 v 0.138338 -53.245262 0.107347 v 0.126916 -51.461296 0.107347 v -0.126848 -51.461296 0.107347 v 0.000036 -53.166115 0.107347 v 0.000032 -51.526249 0.107347 v 0.000036 -53.280548 0.107347 v 0.000032 -51.418671 0.107347 v -0.171377 -51.526249 -0.108222 v -0.171377 -53.166115 -0.108222 v 0.000036 -53.166115 -0.108222 v 0.171445 -53.166115 -0.108222 v 0.171445 -51.526249 -0.108222 v 0.000032 -51.526249 -0.108222 v 0.000036 -53.280548 -0.108222 v 0.138338 -53.245262 -0.108222 v -0.138270 -53.245266 -0.108222 v 0.000032 -51.418671 -0.108222 v -0.126848 -51.461296 -0.108222 v 0.126916 -51.461296 -0.108222 v -0.171376 -56.553322 0.107346 v -0.171376 -58.193188 0.107346 v 0.171442 -56.553322 0.107346 v 0.171446 -58.193188 0.107346 v -0.138269 -58.272335 0.107346 v 0.138339 -58.272335 0.107346 v 0.126913 -56.488373 0.107346 v -0.126847 -56.488373 0.107346 v 0.000037 -58.193188 0.107346 v 0.000033 -56.553322 0.107346 v 0.000037 -58.307621 0.107346 v 0.000033 -56.445744 0.107346 v -0.171376 -56.553322 -0.108223 v -0.171376 -58.193188 -0.108223 v 0.000037 -58.193188 -0.108223 v 0.171446 -58.193188 -0.108223 v 0.171442 -56.553322 -0.108223 v 0.000033 -56.553322 -0.108223 v 0.000037 -58.307621 -0.108223 v 0.138339 -58.272335 -0.108223 v -0.138269 -58.272335 -0.108223 v 0.000033 -56.445744 -0.108223 v -0.126847 -56.488373 -0.108223 v 0.126913 -56.488373 -0.108223 v -0.171376 -61.580391 0.107346 v -0.171375 -63.220253 0.107346 v 0.171443 -61.580391 0.107346 v 0.171447 -63.220253 0.107346 v -0.138268 -63.299408 0.107346 v 0.138340 -63.299400 0.107346 v 0.126914 -61.515446 0.107346 v -0.126847 -61.515446 0.107346 v 0.000038 -63.220253 0.107346 v 0.000034 -61.580391 0.107346 v 0.000038 -63.334686 0.107346 v 0.000033 -61.472809 0.107346 v -0.171376 -61.580391 -0.108223 v -0.171375 -63.220253 -0.108223 v 0.000038 -63.220253 -0.108223 v 0.171447 -63.220253 -0.108223 v 0.171443 -61.580391 -0.108223 v 0.000034 -61.580391 -0.108223 v 0.000038 -63.334686 -0.108223 v 0.138340 -63.299400 -0.108223 v -0.138268 -63.299408 -0.108223 v 0.000034 -61.472809 -0.108223 v -0.126847 -61.515446 -0.108223 v 0.126914 -61.515446 -0.108223 v -1.490295 1.504831 -0.948654 v -1.490295 1.504831 0.943109 v -2.107608 0.014509 -0.948654 v -2.107608 0.014509 0.943109 v -1.490295 -1.475814 -0.948654 v -1.490295 -1.475814 0.943109 v 0.000028 -2.093127 -0.948654 v 0.000028 -2.093127 0.943109 v 0.000027 1.501835 1.529593 v 0.000027 1.501835 -1.535137 v 1.490350 -1.475813 -0.948654 v 1.490350 -1.475813 0.943109 v 1.051728 1.066210 1.529592 v 1.051728 1.066210 -1.535138 v 1.487353 0.014509 1.529593 v 1.487354 0.014509 -1.535137 v 2.107663 0.014509 -0.948654 v 2.107663 0.014509 0.943109 v 1.051728 -1.037192 1.529592 v 1.051728 -1.037191 -1.535138 v 0.000028 -1.472817 1.529592 v 0.000028 -1.472817 -1.535138 v 1.490350 1.504832 -0.948654 v 1.490350 1.504832 0.943109 v -1.051673 -1.037192 1.529592 v -1.051673 -1.037192 -1.535138 v -1.487299 0.014509 1.529592 v -1.487298 0.014509 -1.535138 v 0.000027 2.122145 -0.948654 v 0.000027 2.122145 0.943109 v -1.051673 1.066209 1.529592 v -1.051673 1.066210 -1.535138 v -1.624150 1.638690 0.331064 v -1.624150 1.638690 -0.336609 v -2.296909 0.014509 -0.336609 v -2.296909 0.014509 0.331063 v -1.624150 -1.609668 -0.336609 v -1.624150 -1.609668 0.331063 v 0.000028 -2.282428 -0.336609 v 0.000028 -2.282428 0.331063 v 1.624205 -1.609668 -0.336609 v 1.624205 -1.609668 0.331064 v 2.296964 0.014509 -0.336608 v 2.296964 0.014509 0.331064 v 1.624205 1.638687 -0.336608 v 1.624205 1.638687 0.331064 v 0.000027 2.311446 -0.336608 v 0.000027 2.311446 0.331064 v -1.750510 1.765046 0.308911 v -1.750510 1.765046 -0.293912 v -2.475609 0.014509 -0.293912 v -2.475609 0.014509 0.308911 v -1.750509 -1.736028 -0.293912 v -1.750509 -1.736028 0.308911 v 0.000028 -2.461127 -0.293912 v 0.000028 -2.461127 0.308911 v 1.750565 -1.736028 -0.293912 v 1.750565 -1.736028 0.308911 v 2.475659 0.014509 -0.293911 v 2.475659 0.014509 0.308911 v 1.750564 1.765046 -0.293911 v 1.750564 1.765046 0.308911 v 0.000027 2.490145 -0.293911 v 0.000027 2.490145 0.308911 v -1.406158 1.420694 0.285351 v -1.406158 1.420694 -0.256968 v -1.988617 0.014509 -0.256968 v -1.988617 0.014509 0.285351 v -1.406157 -1.391676 -0.256968 v -1.406157 -1.391676 0.285351 v 0.000028 -1.974136 -0.256968 v 0.000028 -1.974136 0.285351 v 1.406213 -1.391676 -0.256968 v 1.406213 -1.391676 0.285351 v 1.988672 0.014509 -0.256968 v 1.988672 0.014509 0.285351 v 1.406212 1.420694 -0.256968 v 1.406212 1.420694 0.285351 v 0.000027 2.003154 -0.256968 v 0.000027 2.003154 0.285351 v -2.243056 0.943627 -0.293912 v -2.243056 0.943627 0.308911 v -1.801812 0.760855 -0.256968 v -1.801812 0.760855 0.285351 v -2.243056 -0.914605 0.308911 v -2.243056 -0.914605 -0.293912 v -1.801812 -0.731837 0.285351 v -1.801812 -0.731837 -0.256968 v -0.929086 -2.228574 0.308911 v -0.929086 -2.228574 -0.293912 v -0.746318 -1.787331 0.285351 v -0.746318 -1.787331 -0.256968 v 0.929142 -2.228574 -0.293912 v 0.929142 -2.228574 0.308911 v 0.746374 -1.787330 -0.256968 v 0.746374 -1.787330 0.285351 v 2.243111 -0.914605 -0.293911 v 2.243111 -0.914605 0.308911 v 1.801867 -0.731837 -0.256968 v 1.801867 -0.731837 0.285351 v 2.243110 0.943627 0.308911 v 2.243110 0.943627 -0.293911 v 1.801867 0.760855 0.285351 v 1.801867 0.760855 -0.256968 v 0.929141 2.257593 0.308911 v 0.929141 2.257593 -0.293911 v 0.746373 1.816349 0.285351 v 0.746373 1.816349 -0.256968 v -0.929087 2.257592 -0.293911 v -0.929087 2.257592 0.308911 v -0.746319 1.816348 -0.256968 v -0.746319 1.816348 0.285351 v 0.000027 0.514278 1.767159 v 0.000027 0.514278 -1.772704 v 0.353416 0.367897 1.767159 v 0.353416 0.367898 -1.772704 v 0.499797 0.014509 1.767159 v 0.499797 0.014509 -1.772704 v 0.353416 -0.338880 1.767159 v 0.353416 -0.338879 -1.772704 v 0.000027 -0.485260 1.767159 v 0.000028 -0.485260 -1.772704 v -0.353361 -0.338880 1.767159 v -0.353361 -0.338879 -1.772704 v -0.499742 0.014509 1.767159 v -0.499742 0.014509 -1.772704 v -0.353361 0.367897 1.767159 v -0.353361 0.367898 -1.772704 v 0.000027 0.014509 1.842744 v 0.000028 0.014509 -1.843360 vt 0.635567 0.741023 vt 0.635567 0.368290 vt 0.552395 0.371370 vt 0.524671 0.365210 vt 0.524671 0.737943 vt 0.746463 0.365210 vt 0.635567 0.362129 vt 0.437896 0.751829 vt 0.424034 0.155764 vt 0.507206 0.377556 vn -0.000000 0.000000 1.000000 vn 0.707100 -0.707100 0.000000 vn -0.000000 0.000000 -1.000000 vn -0.707100 0.707100 -0.000000 vn 0.983000 -0.183300 0.000000 vn 0.379500 -0.925200 0.000000 vn -0.510300 -0.860000 0.000000 vn -0.925200 0.379500 -0.000000 vn 0.895500 0.445100 0.000000 vn -0.183400 0.983000 -0.000000 vn 0.445100 0.895500 0.000000 vn -0.860000 -0.510300 -0.000000 vn 0.707100 0.707100 0.000000 vn -0.707100 -0.707100 0.000000 vn 0.183400 0.983000 0.000000 vn 0.925200 0.379500 0.000000 vn 0.860000 -0.510300 0.000000 vn -0.379500 -0.925200 0.000000 vn -0.445100 0.895500 0.000000 vn -0.983000 -0.183400 -0.000000 vn -0.895500 0.445100 0.000000 vn 0.510300 -0.860000 0.000000 vn 1.000000 0.000000 0.000000 vn -1.000000 -0.000000 -0.000000 vn 0.824800 0.565500 0.000000 vn 0.922600 -0.385900 0.000000 vn 0.247200 -0.969000 0.000000 vn -0.922600 -0.385900 -0.000000 vn 0.318500 0.947900 0.000000 vn -0.824800 0.565500 -0.000000 vn -0.318500 0.947900 -0.000000 vn -0.247200 -0.969000 0.000000 vn 0.922500 -0.385900 0.000000 vn -0.922500 -0.385900 0.000000 vn 0.824800 0.565400 -0.000000 vn -0.824800 0.565400 -0.000000 vn -0.922600 -0.385800 -0.000000 vn -0.368000 0.888300 -0.274800 vn -0.368000 0.888300 0.274800 vn -0.888300 -0.368000 0.274800 vn -0.368000 -0.888300 -0.274800 vn -0.368000 -0.888300 0.274800 vn 0.368000 -0.888300 -0.274800 vn 0.888300 -0.368000 -0.274800 vn 0.368000 -0.888300 0.274800 vn 0.888300 0.368000 -0.274800 vn 0.888300 -0.368000 0.274800 vn 0.888300 0.368000 0.274800 vn 0.368000 0.888300 -0.274800 vn 0.368000 0.888300 0.274800 vn -0.273700 0.660800 -0.698900 vn 0.660800 0.273700 -0.698900 vn -0.660800 0.273700 -0.698900 vn 0.273700 0.660800 -0.698900 vn -0.273700 0.660800 0.698900 vn 0.660800 0.273700 0.698900 vn -0.660800 0.273700 0.698900 vn -0.273700 -0.660800 -0.698900 vn -0.273700 -0.660800 0.698900 vn 0.273700 0.660800 0.698900 vn -0.660800 -0.273700 -0.698900 vn -0.888300 0.368000 0.274800 vn 0.660800 -0.273700 -0.698900 vn -0.660800 -0.273700 0.698900 vn 0.273700 -0.660800 -0.698900 vn 0.660800 -0.273700 0.698900 vn -0.888300 -0.368000 -0.274800 vn 0.273700 -0.660800 0.698900 vn -0.923900 0.382700 0.000000 vn -0.923900 -0.382700 0.000000 vn -0.382700 -0.923900 0.000000 vn 0.382700 -0.923900 0.000000 vn 0.923900 -0.382700 -0.000000 vn 0.923900 0.382700 0.000000 vn 0.382700 0.923900 0.000000 vn -0.382700 0.923900 0.000000 vn -0.888300 0.368000 -0.274800 vn -0.970100 0.242800 0.000000 vn -0.970100 -0.242800 -0.000000 vn -0.514300 -0.857600 0.000000 vn 0.514300 -0.857600 0.000000 vn 0.970100 -0.242800 0.000000 vn 0.970100 0.242800 0.000000 vn 0.514300 0.857600 0.000000 vn -0.514300 0.857600 0.000000 vn 0.048300 0.012100 0.998800 vn -0.025600 -0.042700 0.998800 vn -0.075600 0.018900 -0.997000 vn 0.066900 0.040100 -0.997000 vn -0.018900 -0.075600 -0.997000 vn 0.040100 -0.066900 -0.997000 vn -0.042700 0.025600 0.998800 vn 0.025600 0.042700 0.998800 vn 0.012100 -0.048300 0.998800 vn 0.075600 -0.018900 -0.997000 vn 0.018900 0.075600 -0.997000 vn -0.048300 -0.012100 0.998800 vn -0.040100 0.066900 -0.997000 vn 0.042700 -0.025600 0.998800 vn -0.066900 -0.040100 -0.997000 vn -0.012100 0.048300 0.998800 vn 0.048300 -0.012100 0.998800 vn 0.066900 -0.040100 -0.997000 vn 0.857600 -0.514300 0.000000 vn -0.857600 0.514300 -0.000000 vn 0.075600 0.018900 -0.997000 vn 0.042700 0.025600 0.998800 vn 0.857600 0.514300 0.000000 vn -0.857600 -0.514300 -0.000000 vn 0.040100 0.066900 -0.997000 vn 0.012100 0.048300 0.998800 vn 0.242800 0.970100 0.000000 vn -0.242800 -0.970100 0.000000 vn -0.025600 0.042700 0.998800 vn -0.018900 0.075600 -0.997000 vn -0.242800 0.970100 0.000000 vn 0.242800 -0.970100 0.000000 vn -0.048300 0.012100 0.998800 vn -0.066900 0.040100 -0.997000 vn -0.075600 -0.018900 -0.997000 vn -0.042700 -0.025600 0.998800 vn -0.040100 -0.066900 -0.997000 vn -0.012100 -0.048300 0.998800 vn 0.025600 -0.042700 0.998800 vn 0.018900 -0.075600 -0.997000 vn -0.232800 -0.096400 -0.967700 vn 0.232800 0.096400 0.967700 vn -0.232800 -0.096400 0.967700 vn 0.232800 -0.096400 -0.967700 vn 0.232800 -0.096400 0.967700 vn -0.096400 0.232800 -0.967700 vn 0.096400 -0.232800 -0.967700 vn -0.096400 0.232800 0.967700 vn -0.232800 0.096400 -0.967700 vn 0.096400 -0.232800 0.967700 vn 0.096400 0.232800 0.967700 vn -0.232800 0.096400 0.967700 vn -0.096400 -0.232800 -0.967700 vn 0.096400 0.232800 -0.967700 vn -0.096400 -0.232800 0.967700 vn 0.232800 0.096400 -0.967700 vn 0.139800 0.057900 -0.988500 vn 0.057900 0.139800 -0.988500 vn -0.057900 -0.139700 -0.988500 vn 0.057900 -0.139700 -0.988500 vn -0.057900 0.139800 -0.988500 vn -0.139700 0.057900 -0.988500 vn 0.139800 -0.057900 -0.988500 vn -0.139700 -0.057900 -0.988500 vn 0.149300 0.061800 0.986900 vn -0.149300 -0.061800 0.986900 vn 0.149300 -0.061800 0.986900 vn -0.149300 0.061800 0.986900 vn -0.061800 0.149300 0.986900 vn 0.061800 -0.149300 0.986900 vn 0.061800 0.149300 0.986900 vn -0.061800 -0.149300 0.986900 s off f 17/1/1 4/1/1 3/1/1 18/1/1 f 4/2/2 8/2/2 7/2/2 3/2/2 f 19/1/3 6/1/3 5/1/3 20/1/3 f 6/2/4 2/2/4 1/2/4 5/2/4 f 3/3/5 7/3/5 15/3/5 13/3/5 f 8/4/6 4/4/6 10/4/6 11/4/6 f 22/4/7 11/4/7 10/4/7 21/4/7 f 19/5/3 8/5/3 11/5/3 22/5/3 f 17/5/1 2/5/1 9/5/1 21/5/1 f 2/4/8 6/4/8 12/4/8 9/4/8 f 23/3/9 13/3/9 15/3/9 24/3/9 f 5/3/10 1/3/10 14/3/10 16/3/10 f 20/5/3 5/5/3 16/5/3 24/5/3 f 18/5/1 3/5/1 13/5/1 23/5/1 f 1/5/1 18/5/1 23/5/1 14/5/1 f 7/5/3 20/5/3 24/5/3 15/5/3 f 14/3/11 23/3/11 24/3/11 16/3/11 f 4/5/1 17/5/1 21/5/1 10/5/1 f 6/5/3 19/5/3 22/5/3 12/5/3 f 12/4/12 22/4/12 21/4/12 9/4/12 f 8/1/3 19/1/3 20/1/3 7/1/3 f 2/1/1 17/1/1 18/1/1 1/1/1 f 41/1/1 28/1/1 27/1/1 42/1/1 f 28/2/13 32/2/13 31/2/13 27/2/13 f 43/1/3 30/1/3 29/1/3 44/1/3 f 30/2/14 26/2/14 25/2/14 29/2/14 f 27/3/15 31/3/15 39/3/15 37/3/15 f 32/4/16 28/4/16 34/4/16 35/4/16 f 46/4/17 35/4/17 34/4/17 45/4/17 f 43/5/3 32/5/3 35/5/3 46/5/3 f 41/5/1 26/5/1 33/5/1 45/5/1 f 26/4/18 30/4/18 36/4/18 33/4/18 f 47/3/19 37/3/19 39/3/19 48/3/19 f 29/3/20 25/3/20 38/3/20 40/3/20 f 44/5/3 29/5/3 40/5/3 48/5/3 f 42/5/1 27/5/1 37/5/1 47/5/1 f 25/5/1 42/5/1 47/5/1 38/5/1 f 31/5/3 44/5/3 48/5/3 39/5/3 f 38/3/21 47/3/21 48/3/21 40/3/21 f 28/5/1 41/5/1 45/5/1 34/5/1 f 30/5/3 43/5/3 46/5/3 36/5/3 f 36/4/22 46/4/22 45/4/22 33/4/22 f 32/1/3 43/1/3 44/1/3 31/1/3 f 26/1/1 41/1/1 42/1/1 25/1/1 f 65/1/1 52/1/1 51/1/1 66/1/1 f 52/2/23 56/2/23 55/2/23 51/2/23 f 67/1/3 54/1/3 53/1/3 68/1/3 f 54/2/24 50/2/24 49/2/24 53/2/24 f 51/3/25 55/3/25 63/3/25 61/3/25 f 56/4/26 52/4/26 58/4/26 59/4/26 f 70/4/27 59/4/27 58/4/27 69/4/27 f 67/5/3 56/5/3 59/5/3 70/5/3 f 65/5/1 50/5/1 57/5/1 69/5/1 f 50/4/28 54/4/28 60/4/28 57/4/28 f 71/3/29 61/3/29 63/3/29 72/3/29 f 53/3/30 49/3/30 62/3/30 64/3/30 f 68/5/3 53/5/3 64/5/3 72/5/3 f 66/5/1 51/5/1 61/5/1 71/5/1 f 49/5/1 66/5/1 71/5/1 62/5/1 f 55/5/3 68/5/3 72/5/3 63/5/3 f 62/3/31 71/3/31 72/3/31 64/3/31 f 52/5/1 65/5/1 69/5/1 58/5/1 f 54/5/3 67/5/3 70/5/3 60/5/3 f 60/4/32 70/4/32 69/4/32 57/4/32 f 56/1/3 67/1/3 68/1/3 55/1/3 f 50/1/1 65/1/1 66/1/1 49/1/1 f 81/1/1 76/1/1 75/1/1 82/1/1 f 81/5/1 74/5/1 77/5/1 83/5/1 f 82/5/1 75/5/1 79/5/1 84/5/1 f 73/5/1 82/5/1 84/5/1 80/5/1 f 76/5/1 81/5/1 83/5/1 78/5/1 f 74/1/1 81/1/1 82/1/1 73/1/1 f 87/1/3 90/1/3 89/1/3 88/1/3 f 87/5/3 91/5/3 93/5/3 86/5/3 f 90/5/3 94/5/3 96/5/3 89/5/3 f 85/5/3 95/5/3 94/5/3 90/5/3 f 88/5/3 92/5/3 91/5/3 87/5/3 f 86/1/3 85/1/3 90/1/3 87/1/3 f 73/6/24 85/6/24 86/6/24 74/6/24 f 84/7/31 94/7/31 95/7/31 80/7/31 f 83/7/27 91/7/27 92/7/27 78/7/27 f 75/7/25 89/7/25 96/7/25 79/7/25 f 78/7/33 92/7/33 88/7/33 76/7/33 f 77/7/32 93/7/32 91/7/32 83/7/32 f 76/6/23 88/6/23 89/6/23 75/6/23 f 80/7/30 95/7/30 85/7/30 73/7/30 f 74/7/28 86/7/28 93/7/28 77/7/28 f 79/7/29 96/7/29 94/7/29 84/7/29 f 105/1/1 100/1/1 99/1/1 106/1/1 f 105/5/1 98/5/1 101/5/1 107/5/1 f 106/5/1 99/5/1 103/5/1 108/5/1 f 97/5/1 106/5/1 108/5/1 104/5/1 f 100/5/1 105/5/1 107/5/1 102/5/1 f 98/1/1 105/1/1 106/1/1 97/1/1 f 111/1/3 114/1/3 113/1/3 112/1/3 f 111/5/3 115/5/3 117/5/3 110/5/3 f 114/5/3 118/5/3 120/5/3 113/5/3 f 109/5/3 119/5/3 118/5/3 114/5/3 f 112/5/3 116/5/3 115/5/3 111/5/3 f 110/1/3 109/1/3 114/1/3 111/1/3 f 97/6/24 109/6/24 110/6/24 98/6/24 f 108/7/31 118/7/31 119/7/31 104/7/31 f 107/7/27 115/7/27 116/7/27 102/7/27 f 99/7/25 113/7/25 120/7/25 103/7/25 f 102/7/33 116/7/33 112/7/33 100/7/33 f 101/7/32 117/7/32 115/7/32 107/7/32 f 100/6/23 112/6/23 113/6/23 99/6/23 f 104/7/30 119/7/30 109/7/30 97/7/30 f 98/7/34 110/7/34 117/7/34 101/7/34 f 103/7/29 120/7/29 118/7/29 108/7/29 f 129/1/1 124/1/1 123/1/1 130/1/1 f 129/5/1 122/5/1 125/5/1 131/5/1 f 130/5/1 123/5/1 127/5/1 132/5/1 f 121/5/1 130/5/1 132/5/1 128/5/1 f 124/5/1 129/5/1 131/5/1 126/5/1 f 122/1/1 129/1/1 130/1/1 121/1/1 f 135/1/3 138/1/3 137/1/3 136/1/3 f 135/5/3 139/5/3 141/5/3 134/5/3 f 138/5/3 142/5/3 144/5/3 137/5/3 f 133/5/3 143/5/3 142/5/3 138/5/3 f 136/5/3 140/5/3 139/5/3 135/5/3 f 134/1/3 133/1/3 138/1/3 135/1/3 f 121/6/24 133/6/24 134/6/24 122/6/24 f 132/7/31 142/7/31 143/7/31 128/7/31 f 131/7/27 139/7/27 140/7/27 126/7/27 f 123/7/35 137/7/35 144/7/35 127/7/35 f 126/7/33 140/7/33 136/7/33 124/7/33 f 125/7/32 141/7/32 139/7/32 131/7/32 f 124/6/23 136/6/23 137/6/23 123/6/23 f 128/7/36 143/7/36 133/7/36 121/7/36 f 122/7/34 134/7/34 141/7/34 125/7/34 f 127/7/29 144/7/29 142/7/29 132/7/29 f 153/1/1 148/1/1 147/1/1 154/1/1 f 153/5/1 146/5/1 149/5/1 155/5/1 f 154/5/1 147/5/1 151/5/1 156/5/1 f 145/5/1 154/5/1 156/5/1 152/5/1 f 148/5/1 153/5/1 155/5/1 150/5/1 f 146/1/1 153/1/1 154/1/1 145/1/1 f 159/1/3 162/1/3 161/1/3 160/1/3 f 159/5/3 163/5/3 165/5/3 158/5/3 f 162/5/3 166/5/3 168/5/3 161/5/3 f 157/5/3 167/5/3 166/5/3 162/5/3 f 160/5/3 164/5/3 163/5/3 159/5/3 f 158/1/3 157/1/3 162/1/3 159/1/3 f 145/6/24 157/6/24 158/6/24 146/6/24 f 156/7/31 166/7/31 167/7/31 152/7/31 f 155/7/27 163/7/27 164/7/27 150/7/27 f 147/7/25 161/7/25 168/7/25 151/7/25 f 150/7/26 164/7/26 160/7/26 148/7/26 f 149/7/32 165/7/32 163/7/32 155/7/32 f 148/6/23 160/6/23 161/6/23 147/6/23 f 152/7/30 167/7/30 157/7/30 145/7/30 f 146/7/37 158/7/37 165/7/37 149/7/37 f 151/7/29 168/7/29 166/7/29 156/7/29 f 177/1/1 172/1/1 171/1/1 178/1/1 f 177/5/1 170/5/1 173/5/1 179/5/1 f 178/5/1 171/5/1 175/5/1 180/5/1 f 169/5/1 178/5/1 180/5/1 176/5/1 f 172/5/1 177/5/1 179/5/1 174/5/1 f 170/1/1 177/1/1 178/1/1 169/1/1 f 183/1/3 186/1/3 185/1/3 184/1/3 f 183/5/3 187/5/3 189/5/3 182/5/3 f 186/5/3 190/5/3 192/5/3 185/5/3 f 181/5/3 191/5/3 190/5/3 186/5/3 f 184/5/3 188/5/3 187/5/3 183/5/3 f 182/1/3 181/1/3 186/1/3 183/1/3 f 169/6/24 181/6/24 182/6/24 170/6/24 f 180/7/31 190/7/31 191/7/31 176/7/31 f 179/7/27 187/7/27 188/7/27 174/7/27 f 171/7/25 185/7/25 192/7/25 175/7/25 f 174/7/33 188/7/33 184/7/33 172/7/33 f 173/7/32 189/7/32 187/7/32 179/7/32 f 172/6/23 184/6/23 185/6/23 171/6/23 f 176/7/30 191/7/30 181/7/30 169/7/30 f 170/7/28 182/7/28 189/7/28 173/7/28 f 175/7/29 192/7/29 190/7/29 180/7/29 f 201/1/1 196/1/1 195/1/1 202/1/1 f 201/5/1 194/5/1 197/5/1 203/5/1 f 202/5/1 195/5/1 199/5/1 204/5/1 f 193/5/1 202/5/1 204/5/1 200/5/1 f 196/5/1 201/5/1 203/5/1 198/5/1 f 194/1/1 201/1/1 202/1/1 193/1/1 f 207/1/3 210/1/3 209/1/3 208/1/3 f 207/5/3 211/5/3 213/5/3 206/5/3 f 210/5/3 214/5/3 216/5/3 209/5/3 f 205/5/3 215/5/3 214/5/3 210/5/3 f 208/5/3 212/5/3 211/5/3 207/5/3 f 206/1/3 205/1/3 210/1/3 207/1/3 f 193/6/24 205/6/24 206/6/24 194/6/24 f 204/7/31 214/7/31 215/7/31 200/7/31 f 203/7/27 211/7/27 212/7/27 198/7/27 f 195/7/25 209/7/25 216/7/25 199/7/25 f 198/7/33 212/7/33 208/7/33 196/7/33 f 197/7/32 213/7/32 211/7/32 203/7/32 f 196/6/23 208/6/23 209/6/23 195/6/23 f 200/7/30 215/7/30 205/7/30 193/7/30 f 194/7/28 206/7/28 213/7/28 197/7/28 f 199/7/29 216/7/29 214/7/29 204/7/29 f 225/1/1 220/1/1 219/1/1 226/1/1 f 225/5/1 218/5/1 221/5/1 227/5/1 f 226/5/1 219/5/1 223/5/1 228/5/1 f 217/5/1 226/5/1 228/5/1 224/5/1 f 220/5/1 225/5/1 227/5/1 222/5/1 f 218/1/1 225/1/1 226/1/1 217/1/1 f 231/1/3 234/1/3 233/1/3 232/1/3 f 231/5/3 235/5/3 237/5/3 230/5/3 f 234/5/3 238/5/3 240/5/3 233/5/3 f 229/5/3 239/5/3 238/5/3 234/5/3 f 232/5/3 236/5/3 235/5/3 231/5/3 f 230/1/3 229/1/3 234/1/3 231/1/3 f 217/6/24 229/6/24 230/6/24 218/6/24 f 228/7/31 238/7/31 239/7/31 224/7/31 f 227/7/27 235/7/27 236/7/27 222/7/27 f 219/7/25 233/7/25 240/7/25 223/7/25 f 222/7/33 236/7/33 232/7/33 220/7/33 f 221/7/32 237/7/32 235/7/32 227/7/32 f 220/6/23 232/6/23 233/6/23 219/6/23 f 224/7/30 239/7/30 229/7/30 217/7/30 f 218/7/34 230/7/34 237/7/34 221/7/34 f 223/7/29 240/7/29 238/7/29 228/7/29 f 249/1/1 244/1/1 243/1/1 250/1/1 f 249/5/1 242/5/1 245/5/1 251/5/1 f 250/5/1 243/5/1 247/5/1 252/5/1 f 241/5/1 250/5/1 252/5/1 248/5/1 f 244/5/1 249/5/1 251/5/1 246/5/1 f 242/1/1 249/1/1 250/1/1 241/1/1 f 255/1/3 258/1/3 257/1/3 256/1/3 f 255/5/3 259/5/3 261/5/3 254/5/3 f 258/5/3 262/5/3 264/5/3 257/5/3 f 253/5/3 263/5/3 262/5/3 258/5/3 f 256/5/3 260/5/3 259/5/3 255/5/3 f 254/1/3 253/1/3 258/1/3 255/1/3 f 241/6/24 253/6/24 254/6/24 242/6/24 f 252/7/31 262/7/31 263/7/31 248/7/31 f 251/7/27 259/7/27 260/7/27 246/7/27 f 243/7/35 257/7/35 264/7/35 247/7/35 f 246/7/33 260/7/33 256/7/33 244/7/33 f 245/7/32 261/7/32 259/7/32 251/7/32 f 244/6/23 256/6/23 257/6/23 243/6/23 f 248/7/36 263/7/36 253/7/36 241/7/36 f 242/7/34 254/7/34 261/7/34 245/7/34 f 247/7/29 264/7/29 262/7/29 252/7/29 f 273/1/1 268/1/1 267/1/1 274/1/1 f 273/5/1 266/5/1 269/5/1 275/5/1 f 274/5/1 267/5/1 271/5/1 276/5/1 f 265/5/1 274/5/1 276/5/1 272/5/1 f 268/5/1 273/5/1 275/5/1 270/5/1 f 266/1/1 273/1/1 274/1/1 265/1/1 f 279/1/3 282/1/3 281/1/3 280/1/3 f 279/5/3 283/5/3 285/5/3 278/5/3 f 282/5/3 286/5/3 288/5/3 281/5/3 f 277/5/3 287/5/3 286/5/3 282/5/3 f 280/5/3 284/5/3 283/5/3 279/5/3 f 278/1/3 277/1/3 282/1/3 279/1/3 f 265/6/24 277/6/24 278/6/24 266/6/24 f 276/7/31 286/7/31 287/7/31 272/7/31 f 275/7/27 283/7/27 284/7/27 270/7/27 f 267/7/25 281/7/25 288/7/25 271/7/25 f 270/7/33 284/7/33 280/7/33 268/7/33 f 269/7/32 285/7/32 283/7/32 275/7/32 f 268/6/23 280/6/23 281/6/23 267/6/23 f 272/7/30 287/7/30 277/7/30 265/7/30 f 266/7/34 278/7/34 285/7/34 269/7/34 f 271/7/29 288/7/29 286/7/29 276/7/29 f 297/1/1 292/1/1 291/1/1 298/1/1 f 297/5/1 290/5/1 293/5/1 299/5/1 f 298/5/1 291/5/1 295/5/1 300/5/1 f 289/5/1 298/5/1 300/5/1 296/5/1 f 292/5/1 297/5/1 299/5/1 294/5/1 f 290/1/1 297/1/1 298/1/1 289/1/1 f 303/1/3 306/1/3 305/1/3 304/1/3 f 303/5/3 307/5/3 309/5/3 302/5/3 f 306/5/3 310/5/3 312/5/3 305/5/3 f 301/5/3 311/5/3 310/5/3 306/5/3 f 304/5/3 308/5/3 307/5/3 303/5/3 f 302/1/3 301/1/3 306/1/3 303/1/3 f 289/6/24 301/6/24 302/6/24 290/6/24 f 300/7/31 310/7/31 311/7/31 296/7/31 f 299/7/27 307/7/27 308/7/27 294/7/27 f 291/7/25 305/7/25 312/7/25 295/7/25 f 294/7/33 308/7/33 304/7/33 292/7/33 f 293/7/32 309/7/32 307/7/32 299/7/32 f 292/6/23 304/6/23 305/6/23 291/6/23 f 296/7/30 311/7/30 301/7/30 289/7/30 f 290/7/28 302/7/28 309/7/28 293/7/28 f 295/7/29 312/7/29 310/7/29 300/7/29 f 359/8/38 341/8/38 313/8/38 346/8/38 f 342/8/39 360/8/39 345/8/39 314/8/39 f 316/8/40 348/8/40 350/8/40 318/8/40 f 349/8/41 317/8/41 319/8/41 351/8/41 f 318/8/42 350/8/42 352/8/42 320/8/42 f 351/8/43 319/8/43 323/8/43 353/8/43 f 353/8/44 323/8/44 329/8/44 355/8/44 f 320/8/45 352/8/45 354/8/45 324/8/45 f 355/8/46 329/8/46 335/8/46 357/8/46 f 324/8/47 354/8/47 356/8/47 330/8/47 f 330/8/48 356/8/48 358/8/48 336/8/48 f 357/8/49 335/8/49 341/8/49 359/8/49 f 336/8/50 358/8/50 360/8/50 342/8/50 f 313/8/51 341/8/51 322/8/51 344/8/51 f 335/8/52 329/8/52 328/8/52 326/8/52 f 315/8/53 313/8/53 344/8/53 340/8/53 f 341/8/54 335/8/54 326/8/54 322/8/54 f 342/8/55 314/8/55 343/8/55 321/8/55 f 330/8/56 336/8/56 325/8/56 327/8/56 f 314/8/57 316/8/57 339/8/57 343/8/57 f 319/8/58 317/8/58 338/8/58 334/8/58 f 318/8/59 320/8/59 333/8/59 337/8/59 f 336/8/60 342/8/60 321/8/60 325/8/60 f 317/8/61 315/8/61 340/8/61 338/8/61 f 314/8/62 345/8/62 348/8/62 316/8/62 f 329/8/63 323/8/63 332/8/63 328/8/63 f 316/8/64 318/8/64 337/8/64 339/8/64 f 323/8/65 319/8/65 334/8/65 332/8/65 f 324/8/66 330/8/66 327/8/66 331/8/66 f 347/8/67 315/8/67 317/8/67 349/8/67 f 320/8/68 324/8/68 331/8/68 333/8/68 f 346/8/69 347/8/69 348/8/69 345/8/69 f 350/8/70 348/8/70 347/8/70 349/8/70 f 352/8/71 350/8/71 349/8/71 351/8/71 f 351/8/72 353/8/72 354/8/72 352/8/72 f 353/8/73 355/8/73 356/8/73 354/8/73 f 358/8/74 356/8/74 355/8/74 357/8/74 f 360/8/75 358/8/75 357/8/75 359/8/75 f 359/8/76 346/8/76 345/8/76 360/8/76 f 346/8/77 313/8/77 315/8/77 347/8/77 f 393/9/78 363/9/78 364/9/78 394/9/78 f 397/9/79 364/9/79 363/9/79 398/9/79 f 401/9/80 366/9/80 365/9/80 402/9/80 f 405/9/81 369/9/81 370/9/81 406/9/81 f 409/9/82 371/9/82 372/9/82 410/9/82 f 413/9/83 372/9/83 371/9/83 414/9/83 f 417/9/84 374/9/84 373/9/84 418/9/84 f 421/9/85 362/9/85 361/9/85 422/9/85 f 395/9/82 396/9/82 380/9/82 379/9/82 f 399/9/83 400/9/83 379/9/83 380/9/83 f 403/9/84 404/9/84 381/9/84 382/9/84 f 407/9/85 408/9/85 386/9/85 385/9/85 f 411/9/78 412/9/78 388/9/78 387/9/78 f 415/9/79 416/9/79 387/9/79 388/9/79 f 419/9/80 420/9/80 389/9/80 390/9/80 f 423/9/81 424/9/81 377/9/81 378/9/81 f 397/10/86 399/10/86 380/10/86 364/10/86 f 417/10/87 419/10/87 390/10/87 374/10/87 f 409/10/88 411/10/88 387/10/88 371/10/88 f 398/10/89 400/10/89 381/10/89 365/10/89 f 418/10/90 420/10/90 391/10/90 375/10/90 f 421/10/91 423/10/91 378/10/91 362/10/91 f 410/10/92 412/10/92 386/10/92 370/10/92 f 401/10/93 403/10/93 382/10/93 366/10/93 f 422/10/94 424/10/94 392/10/94 376/10/94 f 393/10/95 395/10/95 379/10/95 363/10/95 f 402/10/96 404/10/96 383/10/96 367/10/96 f 413/10/97 415/10/97 388/10/97 372/10/97 f 405/10/98 407/10/98 385/10/98 369/10/98 f 394/10/99 396/10/99 377/10/99 361/10/99 f 414/10/100 416/10/100 389/10/100 373/10/100 f 406/10/101 408/10/101 384/10/101 368/10/101 f 364/10/102 380/10/102 396/10/102 394/10/102 f 362/10/103 378/10/103 395/10/103 393/10/103 f 378/9/104 377/9/104 396/9/104 395/9/104 f 362/9/105 393/9/105 394/9/105 361/9/105 f 363/10/106 379/10/106 400/10/106 398/10/106 f 366/10/107 382/10/107 399/10/107 397/10/107 f 382/9/108 381/9/108 400/9/108 399/9/108 f 366/9/109 397/9/109 398/9/109 365/9/109 f 365/10/110 381/10/110 404/10/110 402/10/110 f 368/10/111 384/10/111 403/10/111 401/10/111 f 384/9/112 383/9/112 404/9/112 403/9/112 f 368/9/113 401/9/113 402/9/113 367/9/113 f 370/10/114 386/10/114 408/10/114 406/10/114 f 367/10/115 383/10/115 407/10/115 405/10/115 f 383/9/116 384/9/116 408/9/116 407/9/116 f 367/9/117 405/9/117 406/9/117 368/9/117 f 372/10/118 388/10/118 412/10/118 410/10/118 f 369/10/119 385/10/119 411/10/119 409/10/119 f 385/9/105 386/9/105 412/9/105 411/9/105 f 369/9/104 409/9/104 410/9/104 370/9/104 f 371/10/120 387/10/120 416/10/120 414/10/120 f 374/10/121 390/10/121 415/10/121 413/10/121 f 390/9/109 389/9/109 416/9/109 415/9/109 f 374/9/108 413/9/108 414/9/108 373/9/108 f 373/10/122 389/10/122 420/10/122 418/10/122 f 376/10/123 392/10/123 419/10/123 417/10/123 f 392/9/113 391/9/113 420/9/113 419/9/113 f 376/9/112 417/9/112 418/9/112 375/9/112 f 361/10/124 377/10/124 424/10/124 422/10/124 f 375/10/125 391/10/125 423/10/125 421/10/125 f 391/9/117 392/9/117 424/9/117 423/9/117 f 375/9/116 421/9/116 422/9/116 376/9/116 f 338/8/126 340/8/126 438/8/126 436/8/126 f 327/8/127 325/8/127 427/8/127 429/8/127 f 339/8/128 337/8/128 435/8/128 437/8/128 f 328/8/129 332/8/129 432/8/129 430/8/129 f 331/8/130 327/8/130 429/8/130 431/8/130 f 344/8/131 322/8/131 426/8/131 440/8/131 f 332/8/132 334/8/132 434/8/132 432/8/132 f 321/8/133 343/8/133 439/8/133 425/8/133 f 340/8/134 344/8/134 440/8/134 438/8/134 f 333/8/135 331/8/135 431/8/135 433/8/135 f 325/8/136 321/8/136 425/8/136 427/8/136 f 343/8/137 339/8/137 437/8/137 439/8/137 f 334/8/138 338/8/138 436/8/138 434/8/138 f 322/8/139 326/8/139 428/8/139 426/8/139 f 337/8/140 333/8/140 433/8/140 435/8/140 f 326/8/141 328/8/141 430/8/141 428/8/141 f 428/8/142 430/8/142 442/8/142 f 426/8/143 428/8/143 442/8/143 f 434/8/144 436/8/144 442/8/144 f 432/8/145 434/8/145 442/8/145 f 440/8/146 426/8/146 442/8/146 f 438/8/147 440/8/147 442/8/147 f 430/8/148 432/8/148 442/8/148 f 436/8/149 438/8/149 442/8/149 f 429/8/150 427/8/150 441/8/150 f 437/8/151 435/8/151 441/8/151 f 431/8/152 429/8/152 441/8/152 f 439/8/153 437/8/153 441/8/153 f 425/8/154 439/8/154 441/8/154 f 433/8/155 431/8/155 441/8/155 f 427/8/156 425/8/156 441/8/156 f 435/8/157 433/8/157 441/8/157 ================================================ FILE: browser/data/editor-icons/hemisphere-light/hemisphere.obj ================================================ # Blender v2.76 (sub 0) OBJ File: 'Work.blend' # www.blender.org o Cube.027_Cube.021 v -0.000005 8.511900 0.704067 v -0.000005 8.511900 -0.669821 v -6.018828 6.018823 -0.669821 v -6.018828 6.018823 0.704067 v -8.511906 -0.000002 -0.669821 v -8.511906 -0.000002 0.704067 v -6.018827 -6.018827 -0.669821 v -6.018827 -6.018827 0.704067 v -0.000006 -8.511902 -0.669821 v -0.000006 -8.511902 0.704067 v 6.018819 -6.018822 -0.669821 v 6.018819 -6.018822 0.704067 v 8.511895 0.000001 -0.669821 v 8.511895 0.000001 0.704067 v 6.018818 6.018824 -0.669821 v 6.018818 6.018824 0.704067 v -0.000003 6.837500 0.650372 v -0.000003 6.837500 -0.585623 v -4.834845 4.834839 -0.585623 v -4.834845 4.834839 0.650372 v -6.837502 -0.000000 -0.585623 v -6.837502 -0.000000 0.650372 v -4.834843 -4.834844 -0.585623 v -4.834843 -4.834844 0.650372 v -0.000006 -6.837499 -0.585623 v -0.000006 -6.837499 0.650372 v 4.834836 -4.834839 -0.585623 v 4.834836 -4.834839 0.650372 v 6.837497 0.000001 -0.585623 v 6.837493 0.000001 0.650372 v 4.834835 4.834841 -0.585623 v 4.834835 4.834841 0.650372 v -3.194555 7.712331 -0.669821 v -3.194555 7.712331 0.704067 v -2.566145 6.195215 -0.585623 v -2.566145 6.195215 0.650372 v -7.712334 3.194551 0.704067 v -7.712334 3.194551 -0.669821 v -6.195215 2.566140 0.650372 v -6.195215 2.566140 -0.585623 v -7.712333 -3.194556 0.704067 v -7.712333 -3.194556 -0.669821 v -6.195217 -2.566143 0.650372 v -6.195217 -2.566143 -0.585623 v -3.194557 -7.712331 -0.669821 v -3.194557 -7.712331 0.704067 v -2.566146 -6.195212 -0.585623 v -2.566146 -6.195212 0.650372 v 3.194550 -7.712330 -0.669821 v 3.194550 -7.712330 0.704067 v 2.566141 -6.195214 -0.585623 v 2.566141 -6.195214 0.650372 v 7.712329 -3.194550 0.704067 v 7.712329 -3.194550 -0.669821 v 6.195212 -2.566141 0.650372 v 6.195212 -2.566141 -0.585623 v 7.712327 3.194555 0.704067 v 7.712327 3.194555 -0.669821 v 6.195206 2.566141 0.650372 v 6.195212 2.566143 -0.585623 v 3.194549 7.712332 -0.669821 v 3.194549 7.712332 0.704067 v 2.566137 6.195218 -0.585623 v 2.566133 6.195213 0.650372 v -12.447230 0.874765 0.802575 v -20.816124 0.874760 0.802575 v -12.447227 -0.874795 0.802575 v -20.816124 -0.874803 0.802575 v -12.447230 0.874765 -0.814915 v -20.816124 0.874760 -0.814915 v -12.447227 -0.874795 -0.814915 v -20.816124 -0.874803 -0.814915 v -21.220068 0.705808 0.802575 v -21.220057 -0.705848 0.802575 v -21.220057 -0.705848 -0.814915 v -21.220068 0.705808 -0.814915 v -12.115772 -0.647542 0.802575 v -12.115770 0.647516 0.802575 v -12.115772 -0.647542 -0.814915 v -12.115770 0.647516 -0.814915 v -20.816124 -0.000022 0.802575 v -12.447230 -0.000016 0.802575 v -20.816124 -0.000022 -0.814915 v -12.447230 -0.000016 -0.814915 v -21.400154 -0.000022 0.802575 v -21.400154 -0.000022 -0.814915 v -11.898203 -0.000014 0.802575 v -11.898203 -0.000014 -0.814915 v -9.420072 -8.182969 0.802575 v -15.337764 -14.100679 0.802575 v -8.182947 -9.420094 0.802575 v -14.100639 -15.337804 0.802575 v -9.420074 -8.182971 -0.814915 v -15.337764 -14.100679 -0.814915 v -8.182947 -9.420094 -0.814915 v -14.100639 -15.337804 -0.814915 v -15.503929 -14.505774 0.802575 v -14.505734 -15.503960 0.802575 v -14.505734 -15.503960 -0.814915 v -15.503929 -14.505774 -0.814915 v -8.109262 -9.025024 0.802575 v -9.025005 -8.109282 0.802575 v -8.109262 -9.025024 -0.814915 v -9.025005 -8.109282 -0.814915 v -14.719203 -14.719240 0.802575 v -8.801508 -8.801533 0.802575 v -14.719203 -14.719240 -0.814915 v -8.801508 -8.801533 -0.814915 v -15.132177 -15.132215 0.802575 v -15.132177 -15.132215 -0.814915 v -8.413291 -8.413309 0.802575 v -8.413291 -8.413309 -0.814915 v -8.182972 9.420065 0.802575 v -14.100684 15.337759 0.802575 v -9.420095 8.182941 0.802575 v -15.337809 14.100635 0.802575 v -8.182972 9.420065 -0.814915 v -14.100684 15.337759 -0.814915 v -9.420095 8.182941 -0.814915 v -15.337808 14.100635 -0.814915 v -14.505781 15.503922 0.802575 v -15.503966 14.505728 0.802575 v -15.503966 14.505728 -0.814915 v -14.505781 15.503922 -0.814915 v -9.025026 8.109256 0.802575 v -8.109282 9.025001 0.802575 v -9.025025 8.109256 -0.814915 v -8.109282 9.025001 -0.814915 v -14.719247 14.719196 0.802575 v -8.801533 8.801504 0.802575 v -14.719247 14.719196 -0.814915 v -8.801533 8.801504 -0.814915 v -15.132219 15.132173 0.802575 v -15.132219 15.132173 -0.814915 v -8.413312 8.413283 0.802575 v -8.413312 8.413283 -0.814915 v 9.420048 8.182959 0.802575 v 15.337739 14.100668 0.802575 v 8.182926 9.420080 0.802575 v 14.100615 15.337792 0.802575 v 9.420052 8.182962 -0.814915 v 15.337739 14.100668 -0.814915 v 8.182926 9.420080 -0.814915 v 14.100615 15.337792 -0.814915 v 15.503907 14.505770 0.802575 v 14.505708 15.503952 0.802575 v 14.505708 15.503952 -0.814915 v 15.503907 14.505770 -0.814915 v 8.109239 9.025013 0.802575 v 9.024983 8.109268 0.802575 v 8.109239 9.025013 -0.814915 v 9.024983 8.109268 -0.814915 v 14.719178 14.719229 0.802575 v 8.801487 8.801519 0.802575 v 14.719175 14.719232 -0.814915 v 8.801487 8.801519 -0.814915 v 15.132157 15.132208 0.802575 v 15.132157 15.132208 -0.814915 v 8.413273 8.413301 0.802575 v 8.413273 8.413301 -0.814915 v 8.182943 -9.420063 0.802572 v 14.100656 -15.337753 0.802571 v 9.420067 -8.182939 0.802573 v 15.337780 -14.100629 0.802571 v 8.182947 -9.420067 -0.814917 v 14.100656 -15.337753 -0.814919 v 9.420068 -8.182939 -0.814917 v 15.337780 -14.100629 -0.814918 v 14.505747 -15.503915 0.802571 v 15.503937 -14.505724 0.802571 v 15.503937 -14.505724 -0.814919 v 14.505747 -15.503915 -0.814919 v 9.024998 -8.109254 0.802573 v 8.109253 -9.024999 0.802572 v 9.024998 -8.109254 -0.814917 v 8.109253 -9.024999 -0.814917 v 14.719216 -14.719192 0.802571 v 8.801504 -8.801502 0.802572 v 14.719217 -14.719192 -0.814919 v 8.801504 -8.801502 -0.814917 v 15.132187 -15.132162 0.802571 v 15.132188 -15.132162 -0.814919 v 8.413288 -8.413286 0.802572 v 8.413288 -8.413286 -0.814917 v 0.874752 12.447212 0.802577 v 0.874742 20.816111 0.802578 v -0.874804 12.447215 0.802577 v -0.874816 20.816105 0.802578 v 0.874752 12.447212 -0.814913 v 0.874742 20.816111 -0.814912 v -0.874804 12.447215 -0.814913 v -0.874816 20.816105 -0.814912 v 0.705791 21.220047 0.802578 v -0.705869 21.220047 0.802578 v -0.705869 21.220047 -0.814912 v 0.705791 21.220047 -0.814912 v -0.647555 12.115754 0.802577 v 0.647502 12.115752 0.802577 v -0.647555 12.115754 -0.814913 v 0.647502 12.115752 -0.814913 v -0.000040 20.816111 0.802578 v -0.000030 12.447212 0.802577 v -0.000040 20.816111 -0.814912 v -0.000030 12.447212 -0.814913 v -0.000039 21.400143 0.802578 v -0.000039 21.400143 -0.814912 v -0.000028 11.898186 0.802577 v -0.000028 11.898186 -0.814913 v 12.447202 -0.874762 0.802575 v 20.816090 -0.874752 0.802575 v 12.447197 0.874796 0.802575 v 20.816093 0.874807 0.802575 v 12.447202 -0.874762 -0.814915 v 20.816090 -0.874752 -0.814915 v 12.447197 0.874796 -0.814915 v 20.816093 0.874807 -0.814915 v 21.220034 -0.705799 0.802575 v 21.220030 0.705855 0.802575 v 21.220030 0.705855 -0.814915 v 21.220034 -0.705799 -0.814915 v 12.115741 0.647542 0.802575 v 12.115742 -0.647512 0.802575 v 12.115741 0.647542 -0.814915 v 12.115742 -0.647512 -0.814915 v 20.816093 0.000026 0.802575 v 12.447197 0.000015 0.802575 v 20.816093 0.000026 -0.814915 v 12.447197 0.000015 -0.814915 v 21.400126 0.000025 0.802575 v 21.400126 0.000025 -0.814915 v 11.898172 0.000015 0.802575 v 11.898172 0.000015 -0.814915 v -0.874780 -12.447220 0.802573 v -0.874771 -20.816109 0.802572 v 0.874778 -12.447214 0.802573 v 0.874791 -20.816107 0.802572 v -0.874780 -12.447220 -0.814917 v -0.874771 -20.816109 -0.814918 v 0.874778 -12.447214 -0.814916 v 0.874791 -20.816107 -0.814918 v -0.705818 -21.220049 0.802572 v 0.705837 -21.220043 0.802572 v 0.705837 -21.220043 -0.814918 v -0.705818 -21.220049 -0.814918 v 0.647526 -12.115756 0.802573 v -0.647531 -12.115759 0.802573 v 0.647526 -12.115756 -0.814916 v -0.647531 -12.115759 -0.814917 v 0.000010 -20.816107 0.802572 v 0.000001 -12.447220 0.802573 v 0.000010 -20.816107 -0.814918 v 0.000001 -12.447220 -0.814917 v 0.000010 -21.400139 0.802572 v 0.000010 -21.400139 -0.814918 v -0.000003 -11.898190 0.802573 v -0.000003 -11.898190 -0.814916 v -0.000005 7.246627 -2.236062 v -0.000005 7.246627 2.223586 v -5.124142 5.124137 -2.236062 v -5.124142 5.124137 2.223585 v -7.246631 -0.000000 -2.236062 v -7.246631 -0.000000 2.223585 v -5.124143 -5.124139 -2.236062 v -5.124143 -5.124139 2.223585 v 3.616022 3.616028 3.876596 v 3.616023 3.616028 -3.889072 v -0.000003 -7.246626 -2.236062 v -0.000004 -7.246626 2.223586 v 5.113832 0.000001 3.876596 v 5.113832 0.000001 -3.889071 v 3.616023 -3.616026 3.876596 v 3.616024 -3.616026 -3.889072 v 5.124138 -5.124141 -2.236061 v 5.124137 -5.124141 2.223586 v -0.000004 -5.113836 3.876596 v -0.000004 -5.113836 -3.889072 v -3.616034 -3.616029 3.876596 v -3.616033 -3.616029 -3.889072 v 7.246623 0.000001 -2.236062 v 7.246622 0.000001 2.223586 v -5.113841 -0.000000 3.876595 v -5.113840 -0.000000 -3.889072 v -3.616032 3.616027 3.876596 v -3.616032 3.616027 -3.889072 v 5.124134 5.124140 -2.236061 v 5.124134 5.124140 2.223586 v -0.000005 5.113837 3.876596 v -0.000005 5.113837 -3.889072 v -0.000003 7.897492 0.839664 v -0.000003 7.897492 -0.852140 v -5.584371 5.584365 -0.852141 v -5.584371 5.584365 0.839663 v -7.897494 -0.000001 -0.852141 v -7.897494 -0.000001 0.839663 v -5.584372 -5.584368 -0.852141 v -5.584372 -5.584368 0.839664 v -0.000004 -7.897489 -0.852140 v -0.000004 -7.897489 0.839664 v 5.584367 -5.584369 -0.852139 v 5.584366 -5.584369 0.839665 v 7.897485 0.000001 -0.852139 v 7.897485 0.000001 0.839665 v 5.584363 5.584369 -0.852139 v 5.584363 5.584369 0.839665 v 1.215044 1.215049 4.478564 v 1.215044 1.215049 -4.491037 v 1.718334 0.000001 4.478562 v 1.718335 0.000001 -4.491037 v 1.215044 -1.215048 4.478564 v 1.215044 -1.215048 -4.491037 v -0.000005 -1.718339 4.478562 v -0.000006 -1.718336 -4.491038 v -1.215053 -1.215048 4.478561 v -1.215052 -1.215048 -4.491038 v -1.718344 0.000000 4.478561 v -1.718343 0.000000 -4.491038 v -1.215053 1.215049 4.478561 v -1.215053 1.215049 -4.491038 v -0.000005 1.718339 4.478562 v -0.000004 1.718339 -4.491038 v -0.000005 0.000000 4.670086 v -0.000004 0.000000 -4.670071 vt 0.424034 0.155764 vt 0.507206 0.377556 vt 0.746463 0.254314 vt 0.635567 0.158820 vt 0.635567 0.741023 vt 0.635567 0.368290 vt 0.552395 0.161900 vt 0.524671 0.155740 vt 0.635567 0.251233 vt 0.524671 0.737943 vt 0.524671 0.365210 vt 0.552395 0.371370 vt 0.437896 0.751829 vt 0.548792 0.265119 vn -0.514300 0.857600 0.000000 vn -0.857600 0.514300 0.000000 vn -0.970100 -0.242800 0.000000 vn -0.242800 -0.970100 0.000000 vn 0.514300 -0.857600 0.000000 vn 0.857600 -0.514300 0.000000 vn 0.970100 0.242800 0.000000 vn 0.242800 0.970100 0.000000 vn 0.028300 -0.017000 0.999500 vn -0.032100 -0.008000 0.999500 vn -0.026600 0.044400 -0.998700 vn 0.050200 -0.012600 -0.998700 vn -0.044400 -0.026600 -0.998700 vn -0.012600 -0.050200 -0.998700 vn -0.008000 0.032100 0.999500 vn 0.032100 0.008000 0.999500 vn -0.017000 -0.028300 0.999500 vn 0.026600 -0.044400 -0.998700 vn 0.044400 0.026600 -0.998700 vn -0.028300 0.017000 0.999500 vn 0.012600 0.050200 -0.998700 vn 0.008000 -0.032100 0.999500 vn -0.050200 0.012600 -0.998700 vn 0.017000 0.028300 0.999500 vn 0.017000 -0.028300 0.999500 vn 0.012600 -0.050200 -0.998700 vn 0.242800 -0.970100 0.000000 vn -0.242800 0.970100 0.000000 vn 0.044400 -0.026600 -0.998700 vn 0.032100 -0.008000 0.999500 vn 0.970100 -0.242800 0.000000 vn -0.970100 0.242800 0.000000 vn 0.050200 0.012600 -0.998700 vn 0.028300 0.017000 0.999500 vn 0.857600 0.514300 0.000000 vn -0.857600 -0.514300 0.000000 vn 0.008000 0.032100 0.999500 vn 0.026600 0.044400 -0.998700 vn 0.514300 0.857600 0.000000 vn -0.514300 -0.857600 0.000000 vn -0.017000 0.028300 0.999500 vn -0.012600 0.050200 -0.998700 vn -0.044400 0.026600 -0.998700 vn -0.032100 0.008000 0.999500 vn -0.050200 -0.012600 -0.998700 vn -0.028300 -0.017000 0.999500 vn -0.008000 -0.032100 0.999500 vn -0.026600 -0.044400 -0.998700 vn 0.000000 0.000000 1.000000 vn 0.000000 -1.000000 0.000000 vn 0.000000 0.000000 -1.000000 vn -0.000000 1.000000 0.000000 vn 0.565500 -0.824800 0.000000 vn -0.385900 -0.922600 0.000000 vn -0.969000 -0.247200 0.000000 vn -0.385900 0.922600 0.000000 vn 0.947900 -0.318500 0.000000 vn 0.565500 0.824800 0.000000 vn 0.947900 0.318500 0.000000 vn -0.969000 0.247200 0.000000 vn 0.707100 -0.707100 0.000000 vn -0.707100 0.707100 0.000000 vn 0.983000 -0.183300 0.000000 vn 0.379500 -0.925200 0.000000 vn -0.510300 -0.860000 0.000000 vn -0.925200 0.379500 0.000000 vn 0.895500 0.445100 0.000000 vn -0.183400 0.983000 0.000000 vn 0.445100 0.895500 0.000000 vn -0.860000 -0.510300 0.000000 vn -0.707100 -0.707100 0.000000 vn 0.707100 0.707100 0.000000 vn -0.183400 -0.983000 -0.000000 vn -0.925200 -0.379500 0.000000 vn -0.860000 0.510300 0.000000 vn 0.379500 0.925200 0.000000 vn 0.445100 -0.895500 0.000000 vn 0.983000 0.183400 0.000000 vn 0.895500 -0.445100 0.000000 vn -0.510300 0.860000 0.000000 vn -0.983000 0.183400 0.000000 vn -0.379500 0.925200 0.000000 vn 0.510300 0.860000 0.000000 vn 0.925200 -0.379500 0.000000 vn -0.895500 -0.445100 0.000000 vn 0.183400 -0.983000 0.000000 vn -0.445100 -0.895500 0.000000 vn 0.860000 0.510300 0.000000 vn 0.183300 0.983000 0.000000 vn 0.925200 0.379500 0.000000 vn 0.860000 -0.510300 0.000000 vn -0.379500 -0.925200 0.000000 vn -0.445100 0.895500 0.000000 vn -0.983000 -0.183400 0.000000 vn -0.895500 0.445100 0.000000 vn 0.510300 -0.860000 0.000000 vn -1.000000 -0.000000 0.000000 vn 1.000000 0.000000 0.000000 vn -0.824800 -0.565500 0.000000 vn -0.922600 0.385900 0.000000 vn -0.247200 0.969000 0.000000 vn 0.922600 0.385900 0.000000 vn -0.318500 -0.947900 0.000000 vn 0.824800 -0.565500 0.000000 vn 0.318500 -0.947900 0.000000 vn 0.247200 0.969000 0.000000 vn -0.565500 0.824800 0.000000 vn 0.385900 0.922600 0.000000 vn 0.969000 0.247200 0.000000 vn 0.385900 -0.922600 0.000000 vn -0.947900 0.318500 0.000000 vn -0.565500 -0.824800 0.000000 vn -0.947900 -0.318500 0.000000 vn 0.969000 -0.247200 0.000000 vn 0.824800 0.565500 0.000000 vn 0.922600 -0.385900 0.000000 vn 0.247200 -0.969000 0.000000 vn -0.922600 -0.385900 0.000000 vn 0.318500 0.947900 0.000000 vn -0.824800 0.565500 0.000000 vn -0.318500 0.947900 0.000000 vn -0.247200 -0.969000 0.000000 vn 0.351000 0.847300 -0.398500 vn 0.351000 0.847300 0.398500 vn -0.847300 0.351000 0.398500 vn -0.847300 -0.351000 -0.398500 vn -0.847300 -0.351000 0.398500 vn -0.351000 -0.847300 -0.398500 vn 0.351000 -0.847300 -0.398500 vn -0.351000 -0.847300 0.398500 vn 0.847300 -0.351000 -0.398500 vn 0.351000 -0.847300 0.398500 vn 0.847300 -0.351000 0.398500 vn 0.847300 0.351000 -0.398500 vn 0.847300 0.351000 0.398500 vn 0.246000 0.593800 -0.766100 vn 0.593800 -0.245900 -0.766100 vn -0.246000 0.593800 -0.766100 vn 0.593800 0.246000 -0.766100 vn 0.246000 0.593800 0.766100 vn 0.593800 -0.246000 0.766100 vn -0.246000 0.593800 0.766100 vn -0.593800 -0.246000 -0.766100 vn -0.593800 -0.246000 0.766100 vn 0.593800 0.246000 0.766100 vn -0.593800 0.246000 -0.766100 vn -0.351000 0.847300 0.398500 vn 0.246000 -0.593800 -0.766100 vn -0.593800 0.246000 0.766100 vn -0.246000 -0.593800 -0.766100 vn 0.246000 -0.593800 0.766100 vn -0.847300 0.351000 -0.398500 vn -0.246000 -0.593800 0.766100 vn -0.382700 0.923900 0.000000 vn -0.923900 0.382700 -0.000000 vn -0.923900 -0.382700 0.000000 vn -0.382700 -0.923900 0.000000 vn 0.382700 -0.923900 0.000000 vn 0.923900 -0.382700 0.000000 vn 0.923900 0.382700 0.000000 vn 0.382700 0.923900 0.000000 vn -0.351000 0.847300 -0.398500 vn -0.174100 0.072100 -0.982100 vn 0.174100 -0.072100 0.982100 vn -0.174100 0.072100 0.982100 vn 0.072100 -0.174100 -0.982100 vn 0.072100 -0.174100 0.982100 vn 0.072100 0.174100 -0.982100 vn -0.072100 -0.174100 -0.982100 vn 0.072100 0.174100 0.982100 vn -0.072100 0.174100 -0.982100 vn -0.072100 -0.174100 0.982100 vn 0.174100 0.072100 0.982100 vn -0.072100 0.174100 0.982100 vn -0.174100 -0.072100 -0.982100 vn 0.174100 0.072100 -0.982100 vn -0.174100 -0.072100 0.982100 vn 0.174100 -0.072100 -0.982100 vn 0.103500 -0.042900 -0.993700 vn 0.103500 0.042900 -0.993700 vn -0.103500 -0.042900 -0.993700 vn -0.042900 -0.103500 -0.993700 vn 0.042900 0.103500 -0.993700 vn -0.042900 0.103500 -0.993700 vn 0.042900 -0.103500 -0.993700 vn -0.103500 0.042900 -0.993700 vn 0.110700 -0.045800 0.992800 vn -0.110700 0.045800 0.992800 vn 0.045800 -0.110700 0.992800 vn -0.045800 0.110700 0.992800 vn 0.045800 0.110700 0.992800 vn -0.045800 -0.110700 0.992800 vn 0.110700 0.045800 0.992800 vn -0.110700 -0.045800 0.992800 vn -0.385900 -0.922500 0.000000 vn 0.593800 -0.246000 -0.766100 vn 0.593800 -0.245900 0.766100 vn 0.245900 -0.593800 -0.766100 vn 0.245900 -0.593800 0.766100 s off f 3/1/1 4/1/1 34/1/1 f 4/1/2 3/1/2 38/1/2 f 6/1/3 5/1/3 42/1/3 f 9/1/4 10/1/4 46/1/4 f 11/1/5 12/1/5 50/1/5 f 12/1/6 11/1/6 54/1/6 f 57/1/7 14/1/7 13/1/7 f 2/1/8 1/1/8 62/1/8 f 36/1/5 20/1/5 19/1/5 f 40/1/6 19/1/6 20/1/6 f 44/1/7 21/1/7 22/1/7 f 48/1/8 26/1/8 25/1/8 f 51/1/1 52/1/1 28/1/1 f 56/1/2 27/1/2 28/1/2 f 60/1/3 29/1/3 30/1/3 f 64/1/4 17/1/4 18/1/4 f 37/2/9 39/2/9 20/2/9 f 57/2/10 59/2/10 30/2/10 f 49/2/11 51/2/11 27/2/11 f 38/2/12 40/2/12 21/2/12 f 58/2/13 60/2/13 31/2/13 f 61/2/14 63/2/14 18/2/14 f 50/2/15 52/2/15 26/2/15 f 41/2/16 43/2/16 22/2/16 f 62/2/17 64/2/17 32/2/17 f 33/2/18 35/2/18 19/2/18 f 42/2/19 44/2/19 23/2/19 f 53/2/20 55/2/20 28/2/20 f 45/2/21 47/2/21 25/2/21 f 34/2/22 36/2/22 17/2/22 f 54/2/23 56/2/23 29/2/23 f 46/2/24 48/2/24 24/2/24 f 20/2/25 36/2/25 34/2/25 f 18/2/26 35/2/26 33/2/26 f 17/1/27 36/1/27 35/1/27 f 33/1/28 34/1/28 1/1/28 f 19/2/29 40/2/29 38/2/29 f 22/2/30 39/2/30 37/2/30 f 21/1/31 40/1/31 39/1/31 f 37/1/32 38/1/32 5/1/32 f 21/2/33 44/2/33 42/2/33 f 24/2/34 43/2/34 41/2/34 f 23/1/35 44/1/35 43/1/35 f 41/1/36 42/1/36 7/1/36 f 26/2/37 48/2/37 46/2/37 f 23/2/38 47/2/38 45/2/38 f 23/1/39 24/1/39 48/1/39 f 45/1/40 46/1/40 8/1/40 f 28/2/41 52/2/41 50/2/41 f 25/2/42 51/2/42 49/2/42 f 26/1/28 52/1/28 51/1/28 f 49/1/27 50/1/27 10/1/27 f 27/2/43 56/2/43 54/2/43 f 30/2/44 55/2/44 53/2/44 f 30/1/32 29/1/32 56/1/32 f 53/1/31 54/1/31 13/1/31 f 29/2/45 60/2/45 58/2/45 f 32/2/46 59/2/46 57/2/46 f 31/1/36 60/1/36 59/1/36 f 57/1/35 58/1/35 15/1/35 f 17/2/47 64/2/47 62/2/47 f 31/2/48 63/2/48 61/2/48 f 32/1/40 64/1/40 63/1/40 f 15/1/39 61/1/39 62/1/39 f 68/3/49 67/3/49 82/3/49 f 72/4/50 71/4/50 67/4/50 f 70/5/51 69/5/51 84/5/51 f 66/6/52 65/6/52 69/6/52 f 71/7/53 79/7/53 77/7/53 f 68/8/54 74/8/54 75/8/54 f 75/8/55 74/8/55 85/8/55 f 83/9/51 72/9/51 75/9/51 f 81/10/49 66/10/49 73/10/49 f 70/11/56 76/11/56 73/11/56 f 77/7/57 79/7/57 88/7/57 f 65/12/58 78/12/58 80/12/58 f 84/10/51 69/10/51 80/10/51 f 82/9/49 67/9/49 77/9/49 f 82/10/49 87/10/49 78/10/49 f 84/9/51 88/9/51 79/9/51 f 78/12/59 87/12/59 88/12/59 f 81/9/49 85/9/49 74/9/49 f 83/10/51 86/10/51 76/10/51 f 86/11/60 85/11/60 73/11/60 f 72/3/51 83/3/51 84/3/51 f 66/5/49 81/5/49 82/5/49 f 105/3/49 92/3/49 91/3/49 f 96/4/61 95/4/61 91/4/61 f 94/3/51 93/3/51 108/3/51 f 90/4/62 89/4/62 93/4/62 f 95/7/63 103/7/63 101/7/63 f 92/8/64 98/8/64 99/8/64 f 99/8/65 98/8/65 109/8/65 f 107/9/51 96/9/51 99/9/51 f 105/9/49 90/9/49 97/9/49 f 94/8/66 100/8/66 97/8/66 f 101/7/67 103/7/67 112/7/67 f 89/7/68 102/7/68 104/7/68 f 108/9/51 93/9/51 104/9/51 f 106/9/49 91/9/49 101/9/49 f 106/9/49 111/9/49 102/9/49 f 108/9/51 112/9/51 103/9/51 f 111/7/69 112/7/69 104/7/69 f 105/9/49 109/9/49 98/9/49 f 107/9/51 110/9/51 100/9/51 f 110/8/70 109/8/70 97/8/70 f 107/3/51 108/3/51 95/3/51 f 90/3/49 105/3/49 106/3/49 f 129/5/49 116/5/49 115/5/49 f 120/6/71 119/6/71 115/6/71 f 118/5/51 117/5/51 132/5/51 f 114/6/72 113/6/72 117/6/72 f 119/12/73 127/12/73 125/12/73 f 116/11/74 122/11/74 123/11/74 f 123/11/75 122/11/75 133/11/75 f 131/10/51 120/10/51 123/10/51 f 129/10/49 114/10/49 121/10/49 f 118/11/76 124/11/76 121/11/76 f 135/12/77 125/12/77 127/12/77 f 113/12/78 126/12/78 128/12/78 f 132/10/51 117/10/51 128/10/51 f 130/10/49 115/10/49 125/10/49 f 130/10/49 135/10/49 126/10/49 f 132/10/51 136/10/51 127/10/51 f 135/12/79 136/12/79 128/12/79 f 129/10/49 133/10/49 122/10/49 f 131/10/51 134/10/51 124/10/51 f 134/11/80 133/11/80 121/11/80 f 131/5/51 132/5/51 119/5/51 f 114/5/49 129/5/49 130/5/49 f 153/5/49 140/5/49 139/5/49 f 144/6/62 143/6/62 139/6/62 f 155/5/51 142/5/51 141/5/51 f 138/6/61 137/6/61 141/6/61 f 143/12/81 151/12/81 149/12/81 f 144/11/82 140/11/82 146/11/82 f 147/11/83 146/11/83 157/11/83 f 155/10/51 144/10/51 147/10/51 f 153/10/49 138/10/49 145/10/49 f 142/11/84 148/11/84 145/11/84 f 149/12/85 151/12/85 160/12/85 f 137/12/86 150/12/86 152/12/86 f 156/10/51 141/10/51 152/10/51 f 154/10/49 139/10/49 149/10/49 f 154/10/49 159/10/49 150/10/49 f 156/10/51 160/10/51 151/10/51 f 150/12/87 159/12/87 160/12/87 f 153/10/49 157/10/49 146/10/49 f 155/10/51 158/10/51 148/10/51 f 158/11/88 157/11/88 145/11/88 f 155/5/51 156/5/51 143/5/51 f 138/5/49 153/5/49 154/5/49 f 177/3/49 164/3/49 163/3/49 f 168/4/72 167/4/72 163/4/72 f 166/3/51 165/3/51 180/3/51 f 162/4/71 161/4/71 165/4/71 f 163/7/89 167/7/89 175/7/89 f 168/8/90 164/8/90 170/8/90 f 171/8/91 170/8/91 181/8/91 f 179/9/51 168/9/51 171/9/51 f 177/9/49 162/9/49 169/9/49 f 166/8/92 172/8/92 169/8/92 f 173/7/93 175/7/93 184/7/93 f 161/7/94 174/7/94 176/7/94 f 180/9/51 165/9/51 176/9/51 f 178/9/49 163/9/49 173/9/49 f 178/9/49 183/9/49 174/9/49 f 180/9/51 184/9/51 175/9/51 f 183/7/95 184/7/95 176/7/95 f 177/9/49 181/9/49 170/9/49 f 179/9/51 182/9/51 172/9/51 f 182/8/96 181/8/96 169/8/96 f 179/3/51 180/3/51 167/3/51 f 162/3/49 177/3/49 178/3/49 f 201/5/49 188/5/49 187/5/49 f 192/6/97 191/6/97 187/6/97 f 190/5/51 189/5/51 204/5/51 f 190/6/98 186/6/98 185/6/98 f 191/12/99 199/12/99 197/12/99 f 188/11/100 194/11/100 195/11/100 f 195/11/101 194/11/101 205/11/101 f 203/10/51 192/10/51 195/10/51 f 201/10/49 186/10/49 193/10/49 f 190/11/102 196/11/102 193/11/102 f 197/12/103 199/12/103 208/12/103 f 185/12/104 198/12/104 200/12/104 f 204/10/51 189/10/51 200/10/51 f 202/10/49 187/10/49 197/10/49 f 202/10/49 207/10/49 198/10/49 f 204/10/51 208/10/51 199/10/51 f 207/12/105 208/12/105 200/12/105 f 201/10/49 205/10/49 194/10/49 f 203/10/51 206/10/51 196/10/51 f 206/11/106 205/11/106 193/11/106 f 203/5/51 204/5/51 191/5/51 f 186/5/49 201/5/49 202/5/49 f 212/5/49 211/5/49 226/5/49 f 216/6/52 215/6/52 211/6/52 f 214/3/51 213/3/51 228/3/51 f 210/4/50 209/4/50 213/4/50 f 215/12/107 223/12/107 221/12/107 f 216/11/108 212/11/108 218/11/108 f 219/11/109 218/11/109 229/11/109 f 227/10/51 216/10/51 219/10/51 f 225/9/49 210/9/49 217/9/49 f 214/8/110 220/8/110 217/8/110 f 221/12/111 223/12/111 232/12/111 f 209/7/112 222/7/112 224/7/112 f 228/9/51 213/9/51 224/9/51 f 226/10/49 211/10/49 221/10/49 f 226/9/49 231/9/49 222/9/49 f 228/10/51 232/10/51 223/10/51 f 222/7/113 231/7/113 232/7/113 f 225/10/49 229/10/49 218/10/49 f 227/9/51 230/9/51 220/9/51 f 230/8/114 229/8/114 217/8/114 f 227/5/51 228/5/51 215/5/51 f 210/3/49 225/3/49 226/3/49 f 236/3/49 235/3/49 250/3/49 f 240/4/98 239/4/98 235/4/98 f 238/3/51 237/3/51 252/3/51 f 234/4/97 233/4/97 237/4/97 f 239/7/115 247/7/115 245/7/115 f 236/8/116 242/8/116 243/8/116 f 254/8/117 243/8/117 242/8/117 f 251/9/51 240/9/51 243/9/51 f 249/9/49 234/9/49 241/9/49 f 238/8/118 244/8/118 241/8/118 f 245/7/119 247/7/119 256/7/119 f 233/7/120 246/7/120 248/7/120 f 252/9/51 237/9/51 248/9/51 f 250/9/49 235/9/49 245/9/49 f 250/9/49 255/9/49 246/9/49 f 252/9/51 256/9/51 247/9/51 f 246/7/121 255/7/121 256/7/121 f 249/9/49 253/9/49 242/9/49 f 251/9/51 254/9/51 244/9/51 f 254/8/122 253/8/122 241/8/122 f 240/3/51 251/3/51 252/3/51 f 234/3/49 249/3/49 250/3/49 f 285/13/123 257/13/123 290/13/123 f 286/13/124 304/13/124 289/13/124 f 292/13/125 294/13/125 262/13/125 f 261/14/126 263/14/126 295/14/126 f 294/14/127 296/14/127 264/14/127 f 263/14/128 267/14/128 297/14/128 f 297/14/129 267/14/129 273/14/129 f 296/14/130 298/14/130 268/14/130 f 273/14/131 279/14/131 301/14/131 f 298/14/132 300/14/132 274/14/132 f 300/14/133 302/14/133 280/14/133 f 279/13/134 285/13/134 303/13/134 f 302/13/135 304/13/135 286/13/135 f 257/13/136 285/13/136 266/13/136 f 279/14/137 273/14/137 272/14/137 f 259/13/138 257/13/138 288/13/138 f 285/13/139 279/13/139 270/13/139 f 286/13/140 258/13/140 287/13/140 f 280/14/141 269/14/141 271/14/141 f 260/13/142 283/13/142 287/13/142 f 261/14/143 282/14/143 278/14/143 f 262/14/144 264/14/144 277/14/144 f 280/13/145 286/13/145 265/13/145 f 259/13/146 284/13/146 282/13/146 f 258/13/147 289/13/147 292/13/147 f 267/14/148 276/14/148 272/14/148 f 260/13/149 262/13/149 281/13/149 f 267/14/150 263/14/150 278/14/150 f 274/14/151 271/14/151 275/14/151 f 259/13/152 261/13/152 293/13/152 f 268/14/153 275/14/153 277/14/153 f 291/13/154 292/13/154 289/13/154 f 292/13/155 291/13/155 293/13/155 f 294/14/156 293/14/156 295/14/156 f 297/14/157 298/14/157 296/14/157 f 299/14/158 300/14/158 298/14/158 f 300/14/159 299/14/159 301/14/159 f 302/13/160 301/13/160 303/13/160 f 303/13/161 290/13/161 289/13/161 f 257/13/162 259/13/162 291/13/162 f 284/13/163 318/13/163 316/13/163 f 271/14/164 269/14/164 307/14/164 f 283/13/165 281/13/165 315/13/165 f 276/14/166 312/14/166 310/14/166 f 271/14/167 309/14/167 311/14/167 f 266/13/168 306/13/168 320/13/168 f 278/14/169 314/14/169 312/14/169 f 265/13/170 287/13/170 319/13/170 f 284/13/171 288/13/171 320/13/171 f 277/14/172 275/14/172 311/14/172 f 265/13/173 305/13/173 307/13/173 f 283/13/174 317/13/174 319/13/174 f 282/14/175 316/14/175 314/14/175 f 266/13/176 270/13/176 308/13/176 f 277/14/177 313/14/177 315/14/177 f 272/14/178 310/14/178 308/14/178 f 308/14/179 310/14/179 322/14/179 f 306/13/180 308/13/180 322/13/180 f 314/14/181 316/14/181 322/14/181 f 312/14/182 314/14/182 322/14/182 f 320/13/183 306/13/183 322/13/183 f 318/13/184 320/13/184 322/13/184 f 310/14/185 312/14/185 322/14/185 f 316/13/186 318/13/186 322/13/186 f 309/14/187 307/14/187 321/14/187 f 317/13/188 315/13/188 321/13/188 f 311/14/189 309/14/189 321/14/189 f 319/13/190 317/13/190 321/13/190 f 305/13/191 319/13/191 321/13/191 f 313/14/192 311/14/192 321/14/192 f 307/13/193 305/13/193 321/13/193 f 315/14/194 313/14/194 321/14/194 f 33/1/1 3/1/1 34/1/1 f 37/1/2 4/1/2 38/1/2 f 41/1/3 6/1/3 42/1/3 f 45/1/4 9/1/4 46/1/4 f 49/1/5 11/1/5 50/1/5 f 53/1/6 12/1/6 54/1/6 f 58/1/7 57/1/7 13/1/7 f 61/1/8 2/1/8 62/1/8 f 35/1/5 36/1/5 19/1/5 f 39/1/6 40/1/6 20/1/6 f 43/1/7 44/1/7 22/1/7 f 47/1/8 48/1/8 25/1/8 f 27/1/1 51/1/1 28/1/1 f 55/1/2 56/1/2 28/1/2 f 59/1/3 60/1/3 30/1/3 f 63/1/4 64/1/4 18/1/4 f 4/2/9 37/2/9 20/2/9 f 14/2/10 57/2/10 30/2/10 f 11/2/11 49/2/11 27/2/11 f 5/2/12 38/2/12 21/2/12 f 15/2/13 58/2/13 31/2/13 f 2/2/14 61/2/14 18/2/14 f 10/2/15 50/2/15 26/2/15 f 6/2/16 41/2/16 22/2/16 f 16/2/17 62/2/17 32/2/17 f 3/2/18 33/2/18 19/2/18 f 7/2/19 42/2/19 23/2/19 f 12/2/20 53/2/20 28/2/20 f 9/2/21 45/2/21 25/2/21 f 1/2/22 34/2/22 17/2/22 f 13/2/23 54/2/23 29/2/23 f 8/2/24 46/2/24 24/2/24 f 4/2/25 20/2/25 34/2/25 f 2/2/26 18/2/26 33/2/26 f 18/1/27 17/1/27 35/1/27 f 2/1/28 33/1/28 1/1/28 f 3/2/29 19/2/29 38/2/29 f 6/2/30 22/2/30 37/2/30 f 22/1/31 21/1/31 39/1/31 f 6/1/32 37/1/32 5/1/32 f 5/2/33 21/2/33 42/2/33 f 8/2/34 24/2/34 41/2/34 f 24/1/35 23/1/35 43/1/35 f 8/1/36 41/1/36 7/1/36 f 10/2/37 26/2/37 46/2/37 f 7/2/38 23/2/38 45/2/38 f 47/1/39 23/1/39 48/1/39 f 7/1/40 45/1/40 8/1/40 f 12/2/41 28/2/41 50/2/41 f 9/2/42 25/2/42 49/2/42 f 25/1/28 26/1/28 51/1/28 f 9/1/27 49/1/27 10/1/27 f 11/2/43 27/2/43 54/2/43 f 14/2/44 30/2/44 53/2/44 f 55/1/32 30/1/32 56/1/32 f 14/1/31 53/1/31 13/1/31 f 13/2/45 29/2/45 58/2/45 f 16/2/46 32/2/46 57/2/46 f 32/1/36 31/1/36 59/1/36 f 16/1/35 57/1/35 15/1/35 f 1/2/47 17/2/47 62/2/47 f 15/2/48 31/2/48 61/2/48 f 31/1/40 32/1/40 63/1/40 f 16/1/39 15/1/39 62/1/39 f 81/3/49 68/3/49 82/3/49 f 68/4/50 72/4/50 67/4/50 f 83/5/51 70/5/51 84/5/51 f 70/6/52 66/6/52 69/6/52 f 67/7/53 71/7/53 77/7/53 f 72/8/195 68/8/195 75/8/195 f 86/8/55 75/8/55 85/8/55 f 86/9/51 83/9/51 75/9/51 f 85/10/49 81/10/49 73/10/49 f 66/11/56 70/11/56 73/11/56 f 87/7/57 77/7/57 88/7/57 f 69/12/58 65/12/58 80/12/58 f 88/10/51 84/10/51 80/10/51 f 87/9/49 82/9/49 77/9/49 f 65/10/49 82/10/49 78/10/49 f 71/9/51 84/9/51 79/9/51 f 80/12/59 78/12/59 88/12/59 f 68/9/49 81/9/49 74/9/49 f 70/10/51 83/10/51 76/10/51 f 76/11/60 86/11/60 73/11/60 f 71/3/51 72/3/51 84/3/51 f 65/5/49 66/5/49 82/5/49 f 106/3/49 105/3/49 91/3/49 f 92/4/61 96/4/61 91/4/61 f 107/3/51 94/3/51 108/3/51 f 94/4/62 90/4/62 93/4/62 f 91/7/63 95/7/63 101/7/63 f 96/8/64 92/8/64 99/8/64 f 110/8/65 99/8/65 109/8/65 f 110/9/51 107/9/51 99/9/51 f 109/9/49 105/9/49 97/9/49 f 90/8/66 94/8/66 97/8/66 f 111/7/67 101/7/67 112/7/67 f 93/7/68 89/7/68 104/7/68 f 112/9/51 108/9/51 104/9/51 f 111/9/49 106/9/49 101/9/49 f 89/9/49 106/9/49 102/9/49 f 95/9/51 108/9/51 103/9/51 f 102/7/69 111/7/69 104/7/69 f 92/9/49 105/9/49 98/9/49 f 94/9/51 107/9/51 100/9/51 f 100/8/70 110/8/70 97/8/70 f 96/3/51 107/3/51 95/3/51 f 89/3/49 90/3/49 106/3/49 f 130/5/49 129/5/49 115/5/49 f 116/6/71 120/6/71 115/6/71 f 131/5/51 118/5/51 132/5/51 f 118/6/72 114/6/72 117/6/72 f 115/12/73 119/12/73 125/12/73 f 120/11/74 116/11/74 123/11/74 f 134/11/75 123/11/75 133/11/75 f 134/10/51 131/10/51 123/10/51 f 133/10/49 129/10/49 121/10/49 f 114/11/76 118/11/76 121/11/76 f 136/12/77 135/12/77 127/12/77 f 117/12/78 113/12/78 128/12/78 f 136/10/51 132/10/51 128/10/51 f 135/10/49 130/10/49 125/10/49 f 113/10/49 130/10/49 126/10/49 f 119/10/51 132/10/51 127/10/51 f 126/12/79 135/12/79 128/12/79 f 116/10/49 129/10/49 122/10/49 f 118/10/51 131/10/51 124/10/51 f 124/11/80 134/11/80 121/11/80 f 120/5/51 131/5/51 119/5/51 f 113/5/49 114/5/49 130/5/49 f 154/5/49 153/5/49 139/5/49 f 140/6/62 144/6/62 139/6/62 f 156/5/51 155/5/51 141/5/51 f 142/6/61 138/6/61 141/6/61 f 139/12/81 143/12/81 149/12/81 f 147/11/82 144/11/82 146/11/82 f 158/11/83 147/11/83 157/11/83 f 158/10/51 155/10/51 147/10/51 f 157/10/49 153/10/49 145/10/49 f 138/11/84 142/11/84 145/11/84 f 159/12/85 149/12/85 160/12/85 f 141/12/86 137/12/86 152/12/86 f 160/10/51 156/10/51 152/10/51 f 159/10/49 154/10/49 149/10/49 f 137/10/49 154/10/49 150/10/49 f 143/10/51 156/10/51 151/10/51 f 152/12/87 150/12/87 160/12/87 f 140/10/49 153/10/49 146/10/49 f 142/10/51 155/10/51 148/10/51 f 148/11/88 158/11/88 145/11/88 f 144/5/51 155/5/51 143/5/51 f 137/5/49 138/5/49 154/5/49 f 178/3/49 177/3/49 163/3/49 f 164/4/72 168/4/72 163/4/72 f 179/3/51 166/3/51 180/3/51 f 166/4/71 162/4/71 165/4/71 f 173/7/89 163/7/89 175/7/89 f 171/8/90 168/8/90 170/8/90 f 182/8/91 171/8/91 181/8/91 f 182/9/51 179/9/51 171/9/51 f 181/9/49 177/9/49 169/9/49 f 162/8/92 166/8/92 169/8/92 f 183/7/93 173/7/93 184/7/93 f 165/7/94 161/7/94 176/7/94 f 184/9/51 180/9/51 176/9/51 f 183/9/49 178/9/49 173/9/49 f 161/9/49 178/9/49 174/9/49 f 167/9/51 180/9/51 175/9/51 f 174/7/95 183/7/95 176/7/95 f 164/9/49 177/9/49 170/9/49 f 166/9/51 179/9/51 172/9/51 f 172/8/96 182/8/96 169/8/96 f 168/3/51 179/3/51 167/3/51 f 161/3/49 162/3/49 178/3/49 f 202/5/49 201/5/49 187/5/49 f 188/6/97 192/6/97 187/6/97 f 203/5/51 190/5/51 204/5/51 f 189/6/98 190/6/98 185/6/98 f 187/12/99 191/12/99 197/12/99 f 192/11/100 188/11/100 195/11/100 f 206/11/101 195/11/101 205/11/101 f 206/10/51 203/10/51 195/10/51 f 205/10/49 201/10/49 193/10/49 f 186/11/102 190/11/102 193/11/102 f 207/12/103 197/12/103 208/12/103 f 189/12/104 185/12/104 200/12/104 f 208/10/51 204/10/51 200/10/51 f 207/10/49 202/10/49 197/10/49 f 185/10/49 202/10/49 198/10/49 f 191/10/51 204/10/51 199/10/51 f 198/12/105 207/12/105 200/12/105 f 188/10/49 201/10/49 194/10/49 f 190/10/51 203/10/51 196/10/51 f 196/11/106 206/11/106 193/11/106 f 192/5/51 203/5/51 191/5/51 f 185/5/49 186/5/49 202/5/49 f 225/5/49 212/5/49 226/5/49 f 212/6/52 216/6/52 211/6/52 f 227/3/51 214/3/51 228/3/51 f 214/4/50 210/4/50 213/4/50 f 211/12/107 215/12/107 221/12/107 f 219/11/108 216/11/108 218/11/108 f 230/11/109 219/11/109 229/11/109 f 230/10/51 227/10/51 219/10/51 f 229/9/49 225/9/49 217/9/49 f 210/8/110 214/8/110 217/8/110 f 231/12/111 221/12/111 232/12/111 f 213/7/112 209/7/112 224/7/112 f 232/9/51 228/9/51 224/9/51 f 231/10/49 226/10/49 221/10/49 f 209/9/49 226/9/49 222/9/49 f 215/10/51 228/10/51 223/10/51 f 224/7/113 222/7/113 232/7/113 f 212/10/49 225/10/49 218/10/49 f 214/9/51 227/9/51 220/9/51 f 220/8/114 230/8/114 217/8/114 f 216/5/51 227/5/51 215/5/51 f 209/3/49 210/3/49 226/3/49 f 249/3/49 236/3/49 250/3/49 f 236/4/98 240/4/98 235/4/98 f 251/3/51 238/3/51 252/3/51 f 238/4/97 234/4/97 237/4/97 f 235/7/115 239/7/115 245/7/115 f 240/8/116 236/8/116 243/8/116 f 253/8/117 254/8/117 242/8/117 f 254/9/51 251/9/51 243/9/51 f 253/9/49 249/9/49 241/9/49 f 234/8/118 238/8/118 241/8/118 f 255/7/119 245/7/119 256/7/119 f 237/7/120 233/7/120 248/7/120 f 256/9/51 252/9/51 248/9/51 f 255/9/49 250/9/49 245/9/49 f 233/9/49 250/9/49 246/9/49 f 239/9/51 252/9/51 247/9/51 f 248/7/121 246/7/121 256/7/121 f 236/9/49 249/9/49 242/9/49 f 238/9/51 251/9/51 244/9/51 f 244/8/122 254/8/122 241/8/122 f 239/3/51 240/3/51 252/3/51 f 233/3/49 234/3/49 250/3/49 f 303/13/123 285/13/123 290/13/123 f 258/13/124 286/13/124 289/13/124 f 260/13/125 292/13/125 262/13/125 f 293/14/126 261/14/126 295/14/126 f 262/14/127 294/14/127 264/14/127 f 295/14/128 263/14/128 297/14/128 f 299/14/129 297/14/129 273/14/129 f 264/14/130 296/14/130 268/14/130 f 299/14/131 273/14/131 301/14/131 f 268/14/132 298/14/132 274/14/132 f 274/14/133 300/14/133 280/14/133 f 301/13/134 279/13/134 303/13/134 f 280/13/135 302/13/135 286/13/135 f 288/13/136 257/13/136 266/13/136 f 270/14/196 279/14/196 272/14/196 f 284/13/138 259/13/138 288/13/138 f 266/13/139 285/13/139 270/13/139 f 265/13/140 286/13/140 287/13/140 f 274/14/197 280/14/197 271/14/197 f 258/13/142 260/13/142 287/13/142 f 263/14/143 261/14/143 278/14/143 f 281/14/144 262/14/144 277/14/144 f 269/13/145 280/13/145 265/13/145 f 261/13/146 259/13/146 282/13/146 f 260/13/147 258/13/147 292/13/147 f 273/14/198 267/14/198 272/14/198 f 283/13/149 260/13/149 281/13/149 f 276/14/150 267/14/150 278/14/150 f 268/14/199 274/14/199 275/14/199 f 291/13/152 259/13/152 293/13/152 f 264/14/153 268/14/153 277/14/153 f 290/13/154 291/13/154 289/13/154 f 294/13/155 292/13/155 293/13/155 f 296/14/156 294/14/156 295/14/156 f 295/14/157 297/14/157 296/14/157 f 297/14/158 299/14/158 298/14/158 f 302/14/159 300/14/159 301/14/159 f 304/13/160 302/13/160 303/13/160 f 304/13/161 303/13/161 289/13/161 f 290/13/162 257/13/162 291/13/162 f 282/13/163 284/13/163 316/13/163 f 309/14/164 271/14/164 307/14/164 f 317/13/165 283/13/165 315/13/165 f 272/14/166 276/14/166 310/14/166 f 275/14/167 271/14/167 311/14/167 f 288/13/168 266/13/168 320/13/168 f 276/14/169 278/14/169 312/14/169 f 305/13/170 265/13/170 319/13/170 f 318/13/171 284/13/171 320/13/171 f 313/14/172 277/14/172 311/14/172 f 269/13/173 265/13/173 307/13/173 f 287/13/174 283/13/174 319/13/174 f 278/14/175 282/14/175 314/14/175 f 306/13/176 266/13/176 308/13/176 f 281/14/177 277/14/177 315/14/177 f 270/14/178 272/14/178 308/14/178 ================================================ FILE: browser/data/editor-icons/point-light/point.obj ================================================ # Blender v2.76 (sub 0) OBJ File: 'Work.blend' # www.blender.org o Cube.026_Cube.007 v 0.000010 4.485942 -1.384212 v 0.000010 4.485942 1.376489 v -3.172039 3.172037 -1.384212 v -3.172039 3.172037 1.376489 v -4.485944 -0.000012 -1.384212 v -4.485944 -0.000012 1.376489 v -3.172039 -3.172060 -1.384212 v -3.172039 -3.172060 1.376489 v 2.238476 2.238455 2.399769 v 2.238476 2.238455 -2.407492 v 0.000010 -4.485965 -1.384212 v 0.000010 -4.485965 1.376489 v 3.165680 -0.000011 2.399769 v 3.165680 -0.000011 -2.407492 v 2.238476 -2.238478 2.399769 v 2.238476 -2.238478 -2.407492 v 3.172058 -3.172060 -1.384212 v 3.172058 -3.172060 1.376489 v 0.000008 -3.165681 2.399769 v 0.000008 -3.165681 -2.407492 v -2.238458 -2.238479 2.399769 v -2.238458 -2.238479 -2.407492 v 4.485963 -0.000012 -1.384212 v 4.485963 -0.000012 1.376489 v -3.165661 -0.000012 2.399769 v -3.165661 -0.000012 -2.407492 v -2.238459 2.238456 2.399769 v -2.238458 2.238456 -2.407492 v 3.172058 3.172037 -1.384212 v 3.172058 3.172037 1.376489 v 0.000009 3.165659 2.399769 v 0.000010 3.165659 -2.407492 v 0.000011 4.888854 0.519786 v 0.000011 4.888854 -0.527509 v -3.456939 3.456937 -0.527509 v -3.456939 3.456937 0.519786 v -4.888855 -0.000012 -0.527509 v -4.888855 -0.000012 0.519785 v -3.456939 -3.456960 -0.527509 v -3.456939 -3.456960 0.519786 v 0.000010 -4.888876 -0.527509 v 0.000010 -4.888876 0.519786 v 3.456959 -3.456960 -0.527508 v 3.456959 -3.456960 0.519786 v 4.888874 -0.000011 -0.527508 v 4.888874 -0.000011 0.519787 v 3.456958 3.456938 -0.527508 v 3.456958 3.456938 0.519786 v 0.000008 5.269199 0.435846 v 0.000008 5.269199 -0.414646 v -3.725886 3.725884 -0.414646 v -3.725886 3.725884 0.435846 v -5.269202 -0.000012 -0.414646 v -5.269202 -0.000012 0.435846 v -3.725886 -3.725907 -0.414646 v -3.725886 -3.725907 0.435846 v 0.000009 -5.269222 -0.414646 v 0.000009 -5.269222 0.435846 v 3.725904 -3.725905 -0.414646 v 3.725904 -3.725905 0.435846 v 5.269218 -0.000011 -0.414646 v 5.269218 -0.000011 0.435846 v 3.725903 3.725883 -0.414646 v 3.725903 3.725883 0.435846 v 0.000010 4.232677 0.402606 v 0.000010 4.232677 -0.362524 v -2.992952 2.992950 -0.362524 v -2.992952 2.992950 0.402606 v -4.232678 -0.000010 -0.362524 v -4.232678 -0.000010 0.402606 v -2.992952 -2.992973 -0.362524 v -2.992952 -2.992973 0.402606 v 0.000008 -4.232699 -0.362524 v 0.000008 -4.232699 0.402606 v 2.992970 -2.992972 -0.362524 v 2.992970 -2.992972 0.402606 v 4.232698 -0.000012 -0.362524 v 4.232696 -0.000011 0.402606 v 2.992970 2.992949 -0.362524 v 2.992970 2.992949 0.402606 v -7.705326 0.541505 0.496826 v -12.886008 0.541502 0.496826 v -7.705325 -0.541543 0.496826 v -12.886009 -0.541548 0.496826 v -7.705326 0.541505 -0.504465 v -12.886008 0.541502 -0.504465 v -7.705325 -0.541543 -0.504465 v -12.886009 -0.541548 -0.504465 v -13.136065 0.436912 0.496826 v -13.136061 -0.436960 0.496826 v -13.136061 -0.436960 -0.504465 v -13.136065 0.436912 -0.504465 v -7.500140 -0.400864 0.496826 v -7.500138 0.400828 0.496826 v -7.500140 -0.400864 -0.504465 v -7.500138 0.400828 -0.504465 v -12.886008 -0.000023 0.496826 v -7.705326 -0.000020 0.496826 v -12.886008 -0.000023 -0.504465 v -7.705326 -0.000020 -0.504465 v -13.247547 -0.000023 0.496826 v -13.247547 -0.000023 -0.504465 v -7.365457 -0.000019 0.496826 v -7.365457 -0.000019 -0.504465 v -5.831393 -5.065597 0.496826 v -9.494683 -8.728898 0.496826 v -5.065563 -5.831427 0.496826 v -8.728854 -9.494727 0.496826 v -5.831395 -5.065598 -0.504465 v -9.494683 -8.728898 -0.504465 v -5.065563 -5.831427 -0.504465 v -8.728854 -9.494727 -0.504465 v -9.597546 -8.979668 0.496826 v -8.979623 -9.597586 0.496826 v -8.979623 -9.597586 -0.504465 v -9.597546 -8.979668 -0.504465 v -5.019949 -5.586864 0.496826 v -5.586831 -5.019982 0.496826 v -5.019949 -5.586864 -0.504465 v -5.586831 -5.019982 -0.504465 v -9.111770 -9.111812 0.496826 v -5.448478 -5.448513 0.496826 v -9.111770 -9.111812 -0.504465 v -5.448478 -5.448513 -0.504465 v -9.367415 -9.367458 0.496826 v -9.367415 -9.367458 -0.504465 v -5.208155 -5.208187 0.496826 v -5.208155 -5.208187 -0.504465 v -5.065578 5.831390 0.496826 v -8.728879 9.494680 0.496826 v -5.831407 5.065560 0.496826 v -9.494709 8.728850 0.496826 v -5.065578 5.831390 -0.504465 v -8.728879 9.494680 -0.504465 v -5.831407 5.065560 -0.504465 v -9.494709 8.728850 -0.504465 v -8.979650 9.597541 0.496826 v -9.597569 8.979619 0.496826 v -9.597568 8.979619 -0.504465 v -8.979650 9.597541 -0.504465 v -5.586844 5.019946 0.496826 v -5.019961 5.586829 0.496826 v -5.586843 5.019946 -0.504465 v -5.019961 5.586829 -0.504465 v -9.111794 9.111765 0.496826 v -5.448492 5.448476 0.496826 v -9.111794 9.111765 -0.504465 v -5.448492 5.448476 -0.504465 v -9.367440 9.367413 0.496826 v -9.367440 9.367413 -0.504465 v -5.208168 5.208152 0.496826 v -5.208168 5.208152 -0.504465 v -1.977547 4.774233 -0.414646 v -1.977547 4.774233 0.435846 v -1.588536 3.835077 -0.362524 v -1.588536 3.835077 0.402606 v -4.774234 1.977545 0.435846 v -4.774234 1.977545 -0.414646 v -3.835077 1.588534 0.402606 v -3.835077 1.588534 -0.362524 v -4.774234 -1.977569 0.435846 v -4.774234 -1.977569 -0.414646 v -3.835078 -1.588556 0.402606 v -3.835078 -1.588556 -0.362524 v -1.977548 -4.774255 -0.414646 v -1.977548 -4.774255 0.435846 v -1.588536 -3.835098 -0.362524 v -1.588536 -3.835098 0.402606 v 1.977567 -4.774255 -0.414646 v 1.977567 -4.774255 0.435846 v 1.588557 -3.835099 -0.362524 v 1.588557 -3.835099 0.402606 v 4.774254 -1.977567 0.435846 v 4.774254 -1.977567 -0.414646 v 3.835098 -1.588557 0.402606 v 3.835098 -1.588557 -0.362524 v 4.774253 1.977546 0.435846 v 4.774253 1.977546 -0.414646 v 3.835094 1.588533 0.402606 v 3.835098 1.588534 -0.362524 v 1.977567 4.774232 -0.414646 v 1.977567 4.774232 0.435846 v 1.588555 3.835077 -0.362524 v 1.588552 3.835074 0.402606 v 0.752173 0.752152 2.772411 v 0.752174 0.752152 -2.780132 v 1.063730 -0.000011 2.772410 v 1.063731 -0.000011 -2.780133 v 0.752173 -0.752175 2.772411 v 0.752174 -0.752175 -2.780132 v 0.000009 -1.063733 2.772410 v 0.000008 -1.063731 -2.780133 v -0.752155 -0.752176 2.772410 v -0.752154 -0.752176 -2.780133 v -1.063712 -0.000012 2.772410 v -1.063711 -0.000012 -2.780133 v -0.752155 0.752152 2.772410 v -0.752154 0.752152 -2.780133 v 0.000009 1.063710 2.772410 v 0.000010 1.063710 -2.780133 v 0.000009 -0.000012 2.890972 v 0.000010 -0.000012 -2.890962 v 5.831401 5.065569 0.496826 v 9.494692 8.728871 0.496826 v 5.065573 5.831397 0.496826 v 8.728863 9.494700 0.496826 v 5.831404 5.065572 -0.504465 v 9.494692 8.728871 -0.504465 v 5.065573 5.831397 -0.504465 v 8.728863 9.494700 -0.504465 v 9.597554 8.979643 0.496826 v 8.979631 9.597560 0.496826 v 8.979631 9.597560 -0.504465 v 9.597554 8.979643 -0.504465 v 5.019958 5.586835 0.496826 v 5.586841 5.019952 0.496826 v 5.019958 5.586835 -0.504465 v 5.586841 5.019952 -0.504465 v 9.111778 9.111785 0.496826 v 5.448487 5.448483 0.496826 v 9.111776 9.111787 -0.504465 v 5.448487 5.448483 -0.504465 v 9.367427 9.367433 0.496826 v 9.367427 9.367433 -0.504465 v 5.208168 5.208160 0.496826 v 5.208168 5.208160 -0.504465 v 5.065583 -5.831410 0.496825 v 8.728887 -9.494699 0.496824 v 5.831413 -5.065580 0.496825 v 9.494717 -8.728869 0.496824 v 5.065586 -5.831413 -0.504466 v 8.728887 -9.494699 -0.504467 v 5.831413 -5.065580 -0.504466 v 9.494717 -8.728869 -0.504467 v 8.979654 -9.597560 0.496824 v 9.597574 -8.979640 0.496824 v 9.597574 -8.979640 -0.504467 v 8.979654 -9.597560 -0.504467 v 5.586849 -5.019967 0.496825 v 5.019967 -5.586849 0.496825 v 5.586849 -5.019967 -0.504466 v 5.019967 -5.586849 -0.504466 v 9.111801 -9.111785 0.496824 v 5.448497 -5.448496 0.496825 v 9.111801 -9.111785 -0.504467 v 5.448497 -5.448496 -0.504466 v 9.367447 -9.367431 0.496824 v 9.367447 -9.367431 -0.504467 v 5.208176 -5.208175 0.496825 v 5.208176 -5.208175 -0.504466 v 0.541518 7.705317 0.496827 v 0.541513 12.886000 0.496828 v -0.541528 7.705317 0.496827 v -0.541535 12.885998 0.496828 v 0.541518 7.705317 -0.504464 v 0.541513 12.886000 -0.504463 v -0.541528 7.705317 -0.504464 v -0.541535 12.885998 -0.504463 v 0.436924 13.136053 0.496828 v -0.436948 13.136051 0.496828 v -0.436948 13.136051 -0.504463 v 0.436924 13.136053 -0.504463 v -0.400851 7.500130 0.496827 v 0.400841 7.500129 0.496827 v -0.400851 7.500130 -0.504464 v 0.400841 7.500129 -0.504464 v -0.000011 12.886000 0.496828 v -0.000007 7.705317 0.496827 v -0.000011 12.886000 -0.504463 v -0.000007 7.705317 -0.504464 v -0.000013 13.247540 0.496828 v -0.000013 13.247540 -0.504463 v -0.000006 7.365447 0.496827 v -0.000006 7.365447 -0.504464 v 7.705332 -0.541525 0.496826 v 12.886011 -0.541519 0.496826 v 7.705329 0.541522 0.496826 v 12.886013 0.541528 0.496826 v 7.705332 -0.541525 -0.504465 v 12.886011 -0.541519 -0.504465 v 7.705329 0.541522 -0.504465 v 12.886013 0.541528 -0.504465 v 13.136068 -0.436931 0.496826 v 13.136066 0.436940 0.496826 v 13.136066 0.436940 -0.504465 v 13.136068 -0.436931 -0.504465 v 7.500144 0.400843 0.496826 v 7.500144 -0.400849 0.496826 v 7.500144 0.400843 -0.504465 v 7.500144 -0.400849 -0.504465 v 12.886014 0.000003 0.496826 v 7.705329 -0.000003 0.496826 v 12.886014 0.000003 -0.504465 v 7.705329 -0.000003 -0.504465 v 13.247553 0.000003 0.496826 v 13.247553 0.000003 -0.504465 v 7.365460 -0.000003 0.496826 v 7.365460 -0.000003 -0.504465 v -0.541512 -7.705342 0.496825 v -0.541506 -12.886022 0.496824 v 0.541535 -7.705339 0.496825 v 0.541543 -12.886021 0.496825 v -0.541512 -7.705342 -0.504466 v -0.541506 -12.886022 -0.504467 v 0.541535 -7.705339 -0.504466 v 0.541543 -12.886021 -0.504467 v -0.436917 -13.136078 0.496824 v 0.436954 -13.136075 0.496824 v 0.436954 -13.136075 -0.504467 v -0.436917 -13.136078 -0.504467 v 0.400857 -7.500153 0.496825 v -0.400836 -7.500154 0.496825 v 0.400857 -7.500153 -0.504466 v -0.400836 -7.500154 -0.504466 v 0.000018 -12.886022 0.496824 v 0.000013 -7.705342 0.496825 v 0.000018 -12.886022 -0.504467 v 0.000013 -7.705342 -0.504466 v 0.000019 -13.247561 0.496824 v 0.000019 -13.247561 -0.504467 v 0.000010 -7.365471 0.496825 v 0.000010 -7.365471 -0.504466 vt 0.437896 0.751829 vt 0.424034 0.155764 vt 0.507206 0.377556 vt 0.635567 0.741023 vt 0.635567 0.368290 vt 0.552395 0.371370 vt 0.524671 0.365210 vt 0.524671 0.737943 vn 0.351000 0.847300 -0.398500 vn 0.351000 0.847300 0.398500 vn -0.847300 0.351000 0.398500 vn -0.847300 -0.351000 -0.398500 vn -0.847300 -0.351000 0.398500 vn -0.351000 -0.847300 -0.398500 vn 0.351000 -0.847300 -0.398500 vn -0.351000 -0.847300 0.398500 vn 0.847300 -0.351000 -0.398500 vn 0.351000 -0.847300 0.398500 vn 0.847300 -0.351000 0.398500 vn 0.847300 0.351000 -0.398500 vn 0.847300 0.351000 0.398500 vn 0.246000 0.593800 -0.766100 vn 0.593800 -0.246000 -0.766100 vn -0.246000 0.593800 -0.766100 vn 0.593800 0.246000 -0.766100 vn 0.246000 0.593800 0.766100 vn 0.593800 -0.246000 0.766100 vn -0.246000 0.593800 0.766100 vn -0.593800 -0.246000 -0.766100 vn -0.593800 -0.246000 0.766100 vn 0.593800 0.246000 0.766100 vn -0.593800 0.246000 -0.766100 vn -0.351000 0.847300 0.398500 vn 0.246000 -0.593800 -0.766100 vn -0.593800 0.246000 0.766100 vn -0.246000 -0.593800 -0.766100 vn 0.246000 -0.593800 0.766100 vn -0.847300 0.351000 -0.398500 vn -0.246000 -0.593800 0.766100 vn -0.382700 0.923900 0.000000 vn -0.923900 0.382700 0.000000 vn -0.923900 -0.382700 0.000000 vn -0.382700 -0.923900 0.000000 vn 0.382700 -0.923900 0.000000 vn 0.923900 -0.382700 0.000000 vn 0.923900 0.382700 0.000000 vn 0.382700 0.923900 0.000000 vn -0.351000 0.847300 -0.398500 vn -0.514300 0.857600 0.000000 vn -0.857600 0.514300 0.000000 vn -0.970100 -0.242800 0.000000 vn -0.242800 -0.970100 0.000000 vn 0.514300 -0.857600 0.000000 vn 0.857600 -0.514300 0.000000 vn 0.970100 0.242800 0.000000 vn 0.242800 0.970100 0.000000 vn 0.028300 -0.017000 0.999500 vn -0.032100 -0.008000 0.999500 vn -0.026600 0.044400 -0.998700 vn 0.050200 -0.012600 -0.998700 vn -0.044400 -0.026600 -0.998700 vn -0.012600 -0.050200 -0.998700 vn -0.008000 0.032100 0.999500 vn 0.032100 0.008000 0.999500 vn -0.017000 -0.028300 0.999500 vn 0.026600 -0.044400 -0.998700 vn 0.044400 0.026600 -0.998700 vn -0.028300 0.017000 0.999500 vn 0.012600 0.050200 -0.998700 vn 0.008000 -0.032100 0.999500 vn -0.050200 0.012600 -0.998700 vn 0.017000 0.028300 0.999500 vn 0.000000 0.000000 1.000000 vn 0.000000 -1.000000 0.000000 vn 0.000000 0.000000 -1.000000 vn -0.000000 1.000000 0.000000 vn 0.565500 -0.824800 0.000000 vn -0.385900 -0.922600 0.000000 vn -0.969000 -0.247200 0.000000 vn -0.385900 0.922600 0.000000 vn 0.947900 -0.318500 0.000000 vn 0.565500 0.824800 0.000000 vn 0.947900 0.318500 0.000000 vn -0.969000 0.247200 0.000000 vn 0.707100 -0.707100 0.000000 vn -0.707100 0.707100 -0.000000 vn 0.983000 -0.183400 0.000000 vn 0.379500 -0.925200 0.000000 vn -0.510300 -0.860000 0.000000 vn -0.925200 0.379500 0.000000 vn 0.895500 0.445100 0.000000 vn -0.183400 0.983000 -0.000000 vn 0.445100 0.895500 0.000000 vn -0.860000 -0.510300 0.000000 vn -0.707100 -0.707100 0.000000 vn 0.707100 0.707100 0.000000 vn -0.183400 -0.983000 0.000000 vn -0.925200 -0.379500 -0.000000 vn -0.860000 0.510300 -0.000000 vn 0.379500 0.925200 0.000000 vn 0.445100 -0.895500 0.000000 vn 0.983000 0.183400 0.000000 vn 0.895500 -0.445100 0.000000 vn -0.510300 0.860000 0.000000 vn 0.017000 -0.028300 0.999500 vn 0.012600 -0.050200 -0.998700 vn 0.242800 -0.970100 0.000000 vn -0.242800 0.970100 0.000000 vn 0.044400 -0.026600 -0.998700 vn 0.032100 -0.008000 0.999500 vn 0.970100 -0.242800 0.000000 vn -0.970100 0.242800 0.000000 vn 0.050200 0.012600 -0.998700 vn 0.028300 0.017000 0.999500 vn 0.857600 0.514300 0.000000 vn -0.857600 -0.514300 0.000000 vn 0.008000 0.032100 0.999500 vn 0.026600 0.044400 -0.998700 vn 0.514300 0.857600 0.000000 vn -0.514300 -0.857600 0.000000 vn -0.017000 0.028300 0.999500 vn -0.012600 0.050200 -0.998700 vn -0.044400 0.026600 -0.998700 vn -0.032100 0.008000 0.999500 vn -0.050200 -0.012600 -0.998700 vn -0.028300 -0.017000 0.999500 vn -0.008000 -0.032100 0.999500 vn -0.026600 -0.044400 -0.998700 vn -0.174100 0.072100 -0.982100 vn 0.174100 -0.072100 0.982100 vn -0.174100 0.072100 0.982100 vn 0.072100 -0.174100 -0.982100 vn 0.072100 -0.174100 0.982100 vn 0.072100 0.174100 -0.982100 vn -0.072100 -0.174100 -0.982100 vn 0.072100 0.174100 0.982100 vn -0.072100 0.174100 -0.982100 vn -0.072100 -0.174100 0.982100 vn 0.174100 0.072100 0.982100 vn -0.072100 0.174100 0.982100 vn -0.174100 -0.072100 -0.982100 vn 0.174100 0.072100 -0.982100 vn -0.174100 -0.072100 0.982100 vn 0.174100 -0.072100 -0.982100 vn 0.103500 -0.042900 -0.993700 vn 0.103500 0.042900 -0.993700 vn -0.103500 -0.042900 -0.993700 vn -0.042900 -0.103500 -0.993700 vn 0.042900 0.103500 -0.993700 vn -0.042900 0.103500 -0.993700 vn 0.042900 -0.103500 -0.993700 vn -0.103500 0.042900 -0.993700 vn 0.110700 -0.045800 0.992800 vn -0.110700 0.045800 0.992800 vn 0.045800 -0.110700 0.992800 vn -0.045800 0.110700 0.992800 vn 0.045800 0.110700 0.992800 vn -0.045800 -0.110700 0.992800 vn 0.110700 0.045800 0.992800 vn -0.110700 -0.045800 0.992800 vn -0.983000 0.183400 0.000000 vn -0.379500 0.925200 0.000000 vn 0.510300 0.860000 0.000000 vn 0.925200 -0.379500 0.000000 vn -0.895500 -0.445100 0.000000 vn 0.183400 -0.983000 -0.000000 vn -0.445100 -0.895500 0.000000 vn 0.860000 0.510300 0.000000 vn 0.183300 0.983000 0.000000 vn 0.925200 0.379500 0.000000 vn 0.860000 -0.510300 0.000000 vn -0.379500 -0.925200 0.000000 vn -0.445100 0.895500 0.000000 vn -0.983000 -0.183400 -0.000000 vn -0.895500 0.445100 0.000000 vn 0.510300 -0.860000 0.000000 vn -1.000000 -0.000000 0.000000 vn 1.000000 0.000000 0.000000 vn -0.824800 -0.565500 0.000000 vn -0.922600 0.385900 0.000000 vn -0.247200 0.969000 0.000000 vn 0.922600 0.385900 0.000000 vn -0.318500 -0.947900 0.000000 vn 0.824800 -0.565500 0.000000 vn 0.318500 -0.947900 0.000000 vn 0.247200 0.969000 0.000000 vn -0.565500 0.824800 0.000000 vn 0.385900 0.922600 0.000000 vn 0.969000 0.247200 0.000000 vn 0.385900 -0.922600 0.000000 vn -0.947900 0.318500 0.000000 vn -0.565500 -0.824800 0.000000 vn -0.947900 -0.318500 0.000000 vn 0.969000 -0.247200 0.000000 vn 0.824800 0.565500 0.000000 vn 0.922600 -0.385900 0.000000 vn 0.247200 -0.969000 0.000000 vn -0.922600 -0.385900 0.000000 vn 0.318500 0.947900 0.000000 vn -0.824800 0.565500 0.000000 vn -0.318500 0.947900 0.000000 vn -0.247200 -0.969000 0.000000 s off f 47/1/1 29/1/1 1/1/1 34/1/1 f 30/1/2 48/1/2 33/1/2 2/1/2 f 4/1/3 36/1/3 38/1/3 6/1/3 f 37/1/4 5/1/4 7/1/4 39/1/4 f 6/1/5 38/1/5 40/1/5 8/1/5 f 39/1/6 7/1/6 11/1/6 41/1/6 f 41/1/7 11/1/7 17/1/7 43/1/7 f 8/1/8 40/1/8 42/1/8 12/1/8 f 43/1/9 17/1/9 23/1/9 45/1/9 f 12/1/10 42/1/10 44/1/10 18/1/10 f 18/1/11 44/1/11 46/1/11 24/1/11 f 45/1/12 23/1/12 29/1/12 47/1/12 f 24/1/13 46/1/13 48/1/13 30/1/13 f 1/1/14 29/1/14 10/1/14 32/1/14 f 23/1/15 17/1/15 16/1/15 14/1/15 f 3/1/16 1/1/16 32/1/16 28/1/16 f 29/1/17 23/1/17 14/1/17 10/1/17 f 30/1/18 2/1/18 31/1/18 9/1/18 f 18/1/19 24/1/19 13/1/19 15/1/19 f 2/1/20 4/1/20 27/1/20 31/1/20 f 7/1/21 5/1/21 26/1/21 22/1/21 f 6/1/22 8/1/22 21/1/22 25/1/22 f 24/1/23 30/1/23 9/1/23 13/1/23 f 5/1/24 3/1/24 28/1/24 26/1/24 f 2/1/25 33/1/25 36/1/25 4/1/25 f 17/1/26 11/1/26 20/1/26 16/1/26 f 4/1/27 6/1/27 25/1/27 27/1/27 f 11/1/28 7/1/28 22/1/28 20/1/28 f 12/1/29 18/1/29 15/1/29 19/1/29 f 35/1/30 3/1/30 5/1/30 37/1/30 f 8/1/31 12/1/31 19/1/31 21/1/31 f 34/1/32 35/1/32 36/1/32 33/1/32 f 38/1/33 36/1/33 35/1/33 37/1/33 f 40/1/34 38/1/34 37/1/34 39/1/34 f 39/1/35 41/1/35 42/1/35 40/1/35 f 41/1/36 43/1/36 44/1/36 42/1/36 f 46/1/37 44/1/37 43/1/37 45/1/37 f 48/1/38 46/1/38 45/1/38 47/1/38 f 47/1/39 34/1/39 33/1/39 48/1/39 f 34/1/40 1/1/40 3/1/40 35/1/40 f 153/2/41 51/2/41 52/2/41 154/2/41 f 157/2/42 52/2/42 51/2/42 158/2/42 f 161/2/43 54/2/43 53/2/43 162/2/43 f 165/2/44 57/2/44 58/2/44 166/2/44 f 169/2/45 59/2/45 60/2/45 170/2/45 f 173/2/46 60/2/46 59/2/46 174/2/46 f 177/2/47 62/2/47 61/2/47 178/2/47 f 181/2/48 50/2/48 49/2/48 182/2/48 f 155/2/45 156/2/45 68/2/45 67/2/45 f 159/2/46 160/2/46 67/2/46 68/2/46 f 163/2/47 164/2/47 69/2/47 70/2/47 f 167/2/48 168/2/48 74/2/48 73/2/48 f 171/2/41 172/2/41 76/2/41 75/2/41 f 175/2/42 176/2/42 75/2/42 76/2/42 f 179/2/43 180/2/43 77/2/43 78/2/43 f 183/2/44 184/2/44 65/2/44 66/2/44 f 157/3/49 159/3/49 68/3/49 52/3/49 f 177/3/50 179/3/50 78/3/50 62/3/50 f 169/3/51 171/3/51 75/3/51 59/3/51 f 158/3/52 160/3/52 69/3/52 53/3/52 f 178/3/53 180/3/53 79/3/53 63/3/53 f 181/3/54 183/3/54 66/3/54 50/3/54 f 170/3/55 172/3/55 74/3/55 58/3/55 f 161/3/56 163/3/56 70/3/56 54/3/56 f 182/3/57 184/3/57 80/3/57 64/3/57 f 153/3/58 155/3/58 67/3/58 51/3/58 f 162/3/59 164/3/59 71/3/59 55/3/59 f 173/3/60 175/3/60 76/3/60 60/3/60 f 165/3/61 167/3/61 73/3/61 57/3/61 f 154/3/62 156/3/62 65/3/62 49/3/62 f 174/3/63 176/3/63 77/3/63 61/3/63 f 166/3/64 168/3/64 72/3/64 56/3/64 f 97/4/65 84/4/65 83/4/65 98/4/65 f 84/5/66 88/5/66 87/5/66 83/5/66 f 99/4/67 86/4/67 85/4/67 100/4/67 f 86/5/68 82/5/68 81/5/68 85/5/68 f 83/6/69 87/6/69 95/6/69 93/6/69 f 88/7/70 84/7/70 90/7/70 91/7/70 f 102/7/71 91/7/71 90/7/71 101/7/71 f 99/8/67 88/8/67 91/8/67 102/8/67 f 97/8/65 82/8/65 89/8/65 101/8/65 f 82/7/72 86/7/72 92/7/72 89/7/72 f 103/6/73 93/6/73 95/6/73 104/6/73 f 85/6/74 81/6/74 94/6/74 96/6/74 f 100/8/67 85/8/67 96/8/67 104/8/67 f 98/8/65 83/8/65 93/8/65 103/8/65 f 81/8/65 98/8/65 103/8/65 94/8/65 f 87/8/67 100/8/67 104/8/67 95/8/67 f 94/6/75 103/6/75 104/6/75 96/6/75 f 84/8/65 97/8/65 101/8/65 90/8/65 f 86/8/67 99/8/67 102/8/67 92/8/67 f 92/7/76 102/7/76 101/7/76 89/7/76 f 88/4/67 99/4/67 100/4/67 87/4/67 f 82/4/65 97/4/65 98/4/65 81/4/65 f 121/4/65 108/4/65 107/4/65 122/4/65 f 108/5/77 112/5/77 111/5/77 107/5/77 f 123/4/67 110/4/67 109/4/67 124/4/67 f 110/5/78 106/5/78 105/5/78 109/5/78 f 107/6/79 111/6/79 119/6/79 117/6/79 f 112/7/80 108/7/80 114/7/80 115/7/80 f 126/7/81 115/7/81 114/7/81 125/7/81 f 123/8/67 112/8/67 115/8/67 126/8/67 f 121/8/65 106/8/65 113/8/65 125/8/65 f 106/7/82 110/7/82 116/7/82 113/7/82 f 127/6/83 117/6/83 119/6/83 128/6/83 f 109/6/84 105/6/84 118/6/84 120/6/84 f 124/8/67 109/8/67 120/8/67 128/8/67 f 122/8/65 107/8/65 117/8/65 127/8/65 f 105/8/65 122/8/65 127/8/65 118/8/65 f 111/8/67 124/8/67 128/8/67 119/8/67 f 118/6/85 127/6/85 128/6/85 120/6/85 f 108/8/65 121/8/65 125/8/65 114/8/65 f 110/8/67 123/8/67 126/8/67 116/8/67 f 116/7/86 126/7/86 125/7/86 113/7/86 f 112/4/67 123/4/67 124/4/67 111/4/67 f 106/4/65 121/4/65 122/4/65 105/4/65 f 145/4/65 132/4/65 131/4/65 146/4/65 f 132/5/87 136/5/87 135/5/87 131/5/87 f 147/4/67 134/4/67 133/4/67 148/4/67 f 134/5/88 130/5/88 129/5/88 133/5/88 f 131/6/89 135/6/89 143/6/89 141/6/89 f 136/7/90 132/7/90 138/7/90 139/7/90 f 150/7/91 139/7/91 138/7/91 149/7/91 f 147/8/67 136/8/67 139/8/67 150/8/67 f 145/8/65 130/8/65 137/8/65 149/8/65 f 130/7/92 134/7/92 140/7/92 137/7/92 f 151/6/93 141/6/93 143/6/93 152/6/93 f 133/6/94 129/6/94 142/6/94 144/6/94 f 148/8/67 133/8/67 144/8/67 152/8/67 f 146/8/65 131/8/65 141/8/65 151/8/65 f 129/8/65 146/8/65 151/8/65 142/8/65 f 135/8/67 148/8/67 152/8/67 143/8/67 f 142/6/95 151/6/95 152/6/95 144/6/95 f 132/8/65 145/8/65 149/8/65 138/8/65 f 134/8/67 147/8/67 150/8/67 140/8/67 f 140/7/96 150/7/96 149/7/96 137/7/96 f 136/4/67 147/4/67 148/4/67 135/4/67 f 130/4/65 145/4/65 146/4/65 129/4/65 f 52/3/97 68/3/97 156/3/97 154/3/97 f 50/3/98 66/3/98 155/3/98 153/3/98 f 66/2/99 65/2/99 156/2/99 155/2/99 f 50/2/100 153/2/100 154/2/100 49/2/100 f 51/3/101 67/3/101 160/3/101 158/3/101 f 54/3/102 70/3/102 159/3/102 157/3/102 f 70/2/103 69/2/103 160/2/103 159/2/103 f 54/2/104 157/2/104 158/2/104 53/2/104 f 53/3/105 69/3/105 164/3/105 162/3/105 f 56/3/106 72/3/106 163/3/106 161/3/106 f 72/2/107 71/2/107 164/2/107 163/2/107 f 56/2/108 161/2/108 162/2/108 55/2/108 f 58/3/109 74/3/109 168/3/109 166/3/109 f 55/3/110 71/3/110 167/3/110 165/3/110 f 71/2/111 72/2/111 168/2/111 167/2/111 f 55/2/112 165/2/112 166/2/112 56/2/112 f 60/3/113 76/3/113 172/3/113 170/3/113 f 57/3/114 73/3/114 171/3/114 169/3/114 f 73/2/100 74/2/100 172/2/100 171/2/100 f 57/2/99 169/2/99 170/2/99 58/2/99 f 59/3/115 75/3/115 176/3/115 174/3/115 f 62/3/116 78/3/116 175/3/116 173/3/116 f 78/2/104 77/2/104 176/2/104 175/2/104 f 62/2/103 173/2/103 174/2/103 61/2/103 f 61/3/117 77/3/117 180/3/117 178/3/117 f 64/3/118 80/3/118 179/3/118 177/3/118 f 80/2/108 79/2/108 180/2/108 179/2/108 f 64/2/107 177/2/107 178/2/107 63/2/107 f 49/3/119 65/3/119 184/3/119 182/3/119 f 63/3/120 79/3/120 183/3/120 181/3/120 f 79/2/112 80/2/112 184/2/112 183/2/112 f 63/2/111 181/2/111 182/2/111 64/2/111 f 26/1/121 28/1/121 198/1/121 196/1/121 f 15/1/122 13/1/122 187/1/122 189/1/122 f 27/1/123 25/1/123 195/1/123 197/1/123 f 16/1/124 20/1/124 192/1/124 190/1/124 f 19/1/125 15/1/125 189/1/125 191/1/125 f 32/1/126 10/1/126 186/1/126 200/1/126 f 20/1/127 22/1/127 194/1/127 192/1/127 f 9/1/128 31/1/128 199/1/128 185/1/128 f 28/1/129 32/1/129 200/1/129 198/1/129 f 21/1/130 19/1/130 191/1/130 193/1/130 f 13/1/131 9/1/131 185/1/131 187/1/131 f 31/1/132 27/1/132 197/1/132 199/1/132 f 22/1/133 26/1/133 196/1/133 194/1/133 f 10/1/134 14/1/134 188/1/134 186/1/134 f 25/1/135 21/1/135 193/1/135 195/1/135 f 14/1/136 16/1/136 190/1/136 188/1/136 f 188/1/137 190/1/137 202/1/137 f 186/1/138 188/1/138 202/1/138 f 194/1/139 196/1/139 202/1/139 f 192/1/140 194/1/140 202/1/140 f 200/1/141 186/1/141 202/1/141 f 198/1/142 200/1/142 202/1/142 f 190/1/143 192/1/143 202/1/143 f 196/1/144 198/1/144 202/1/144 f 189/1/145 187/1/145 201/1/145 f 197/1/146 195/1/146 201/1/146 f 191/1/147 189/1/147 201/1/147 f 199/1/148 197/1/148 201/1/148 f 185/1/149 199/1/149 201/1/149 f 193/1/150 191/1/150 201/1/150 f 187/1/151 185/1/151 201/1/151 f 195/1/152 193/1/152 201/1/152 f 219/4/65 206/4/65 205/4/65 220/4/65 f 206/5/78 210/5/78 209/5/78 205/5/78 f 221/4/67 208/4/67 207/4/67 222/4/67 f 208/5/77 204/5/77 203/5/77 207/5/77 f 205/6/153 209/6/153 217/6/153 215/6/153 f 210/7/154 206/7/154 212/7/154 213/7/154 f 224/7/155 213/7/155 212/7/155 223/7/155 f 221/8/67 210/8/67 213/8/67 224/8/67 f 219/8/65 204/8/65 211/8/65 223/8/65 f 204/7/156 208/7/156 214/7/156 211/7/156 f 225/6/157 215/6/157 217/6/157 226/6/157 f 207/6/158 203/6/158 216/6/158 218/6/158 f 222/8/67 207/8/67 218/8/67 226/8/67 f 220/8/65 205/8/65 215/8/65 225/8/65 f 203/8/65 220/8/65 225/8/65 216/8/65 f 209/8/67 222/8/67 226/8/67 217/8/67 f 216/6/159 225/6/159 226/6/159 218/6/159 f 206/8/65 219/8/65 223/8/65 212/8/65 f 208/8/67 221/8/67 224/8/67 214/8/67 f 214/7/160 224/7/160 223/7/160 211/7/160 f 210/4/67 221/4/67 222/4/67 209/4/67 f 204/4/65 219/4/65 220/4/65 203/4/65 f 243/4/65 230/4/65 229/4/65 244/4/65 f 230/5/88 234/5/88 233/5/88 229/5/88 f 245/4/67 232/4/67 231/4/67 246/4/67 f 232/5/87 228/5/87 227/5/87 231/5/87 f 229/6/161 233/6/161 241/6/161 239/6/161 f 234/7/162 230/7/162 236/7/162 237/7/162 f 248/7/163 237/7/163 236/7/163 247/7/163 f 245/8/67 234/8/67 237/8/67 248/8/67 f 243/8/65 228/8/65 235/8/65 247/8/65 f 228/7/164 232/7/164 238/7/164 235/7/164 f 249/6/165 239/6/165 241/6/165 250/6/165 f 231/6/166 227/6/166 240/6/166 242/6/166 f 246/8/67 231/8/67 242/8/67 250/8/67 f 244/8/65 229/8/65 239/8/65 249/8/65 f 227/8/65 244/8/65 249/8/65 240/8/65 f 233/8/67 246/8/67 250/8/67 241/8/67 f 240/6/167 249/6/167 250/6/167 242/6/167 f 230/8/65 243/8/65 247/8/65 236/8/65 f 232/8/67 245/8/67 248/8/67 238/8/67 f 238/7/168 248/7/168 247/7/168 235/7/168 f 234/4/67 245/4/67 246/4/67 233/4/67 f 228/4/65 243/4/65 244/4/65 227/4/65 f 267/4/65 254/4/65 253/4/65 268/4/65 f 254/5/169 258/5/169 257/5/169 253/5/169 f 269/4/67 256/4/67 255/4/67 270/4/67 f 256/5/170 252/5/170 251/5/170 255/5/170 f 253/6/171 257/6/171 265/6/171 263/6/171 f 258/7/172 254/7/172 260/7/172 261/7/172 f 272/7/173 261/7/173 260/7/173 271/7/173 f 269/8/67 258/8/67 261/8/67 272/8/67 f 267/8/65 252/8/65 259/8/65 271/8/65 f 252/7/174 256/7/174 262/7/174 259/7/174 f 273/6/175 263/6/175 265/6/175 274/6/175 f 255/6/176 251/6/176 264/6/176 266/6/176 f 270/8/67 255/8/67 266/8/67 274/8/67 f 268/8/65 253/8/65 263/8/65 273/8/65 f 251/8/65 268/8/65 273/8/65 264/8/65 f 257/8/67 270/8/67 274/8/67 265/8/67 f 264/6/177 273/6/177 274/6/177 266/6/177 f 254/8/65 267/8/65 271/8/65 260/8/65 f 256/8/67 269/8/67 272/8/67 262/8/67 f 262/7/178 272/7/178 271/7/178 259/7/178 f 258/4/67 269/4/67 270/4/67 257/4/67 f 252/4/65 267/4/65 268/4/65 251/4/65 f 291/4/65 278/4/65 277/4/65 292/4/65 f 278/5/68 282/5/68 281/5/68 277/5/68 f 293/4/67 280/4/67 279/4/67 294/4/67 f 280/5/66 276/5/66 275/5/66 279/5/66 f 277/6/179 281/6/179 289/6/179 287/6/179 f 282/7/180 278/7/180 284/7/180 285/7/180 f 296/7/181 285/7/181 284/7/181 295/7/181 f 293/8/67 282/8/67 285/8/67 296/8/67 f 291/8/65 276/8/65 283/8/65 295/8/65 f 276/7/182 280/7/182 286/7/182 283/7/182 f 297/6/183 287/6/183 289/6/183 298/6/183 f 279/6/184 275/6/184 288/6/184 290/6/184 f 294/8/67 279/8/67 290/8/67 298/8/67 f 292/8/65 277/8/65 287/8/65 297/8/65 f 275/8/65 292/8/65 297/8/65 288/8/65 f 281/8/67 294/8/67 298/8/67 289/8/67 f 288/6/185 297/6/185 298/6/185 290/6/185 f 278/8/65 291/8/65 295/8/65 284/8/65 f 280/8/67 293/8/67 296/8/67 286/8/67 f 286/7/186 296/7/186 295/7/186 283/7/186 f 282/4/67 293/4/67 294/4/67 281/4/67 f 276/4/65 291/4/65 292/4/65 275/4/65 f 315/4/65 302/4/65 301/4/65 316/4/65 f 302/5/170 306/5/170 305/5/170 301/5/170 f 317/4/67 304/4/67 303/4/67 318/4/67 f 304/5/169 300/5/169 299/5/169 303/5/169 f 301/6/187 305/6/187 313/6/187 311/6/187 f 306/7/188 302/7/188 308/7/188 309/7/188 f 320/7/189 309/7/189 308/7/189 319/7/189 f 317/8/67 306/8/67 309/8/67 320/8/67 f 315/8/65 300/8/65 307/8/65 319/8/65 f 300/7/190 304/7/190 310/7/190 307/7/190 f 321/6/191 311/6/191 313/6/191 322/6/191 f 303/6/192 299/6/192 312/6/192 314/6/192 f 318/8/67 303/8/67 314/8/67 322/8/67 f 316/8/65 301/8/65 311/8/65 321/8/65 f 299/8/65 316/8/65 321/8/65 312/8/65 f 305/8/67 318/8/67 322/8/67 313/8/67 f 312/6/193 321/6/193 322/6/193 314/6/193 f 302/8/65 315/8/65 319/8/65 308/8/65 f 304/8/67 317/8/67 320/8/67 310/8/67 f 310/7/194 320/7/194 319/7/194 307/7/194 f 306/4/67 317/4/67 318/4/67 305/4/67 f 300/4/65 315/4/65 316/4/65 299/4/65 ================================================ FILE: browser/data/editor-icons/vr-camera/Head1.obj ================================================ # Blender v2.76 (sub 0) OBJ File: 'Work.blend' # www.blender.org o Circle.000_Circle.003 v 4.801413 4.993684 -0.083438 v 4.786789 4.985782 -0.738414 v 4.870439 5.305190 -0.756260 v 4.885062 5.313092 -0.101265 v 7.595856 4.622990 -0.192178 v 7.554808 4.619015 -0.842568 v 7.875249 4.898203 -0.869036 v 7.916295 4.902175 -0.219535 v 9.607035 3.616977 -0.353833 v 9.554059 3.618008 -0.996276 v 10.109419 3.779557 -1.040505 v 10.162395 3.778526 -0.398641 v 10.343863 2.225387 -0.435385 v 10.290333 2.226513 -1.077072 v 10.926498 2.268804 -1.129846 v 10.980028 2.267677 -0.488158 v 7.595857 -4.969249 -0.192175 v 7.554809 -4.965273 -0.834737 v 7.875250 -5.244462 -0.862101 v 7.916296 -5.248438 -0.219538 v 4.801410 -5.255311 -0.081491 v 4.786787 -5.247407 -0.725051 v 4.870440 -5.566817 -0.742609 v 4.885059 -5.574716 -0.099051 v 9.607035 -3.963235 -0.353831 v 9.554059 -3.964266 -0.995564 v 10.109419 -4.125816 -1.040371 v 10.162395 -4.124784 -0.398640 v 10.343863 -2.571647 -0.435387 v 10.290333 -2.572773 -1.077073 v 10.926496 -2.615062 -1.129846 v 10.980025 -2.613935 -0.488163 v 10.823314 -2.595828 -9.573339 v 10.824644 -2.585627 -9.008763 v 10.261111 -2.548568 -9.022640 v 10.259778 -2.558771 -9.586981 v 3.295022 -5.609575 -8.521725 v 3.307267 -5.567680 -7.959827 v 3.254441 -5.288766 -8.040392 v 3.242196 -5.330662 -8.602285 v 10.011144 -4.097220 -9.287219 v 10.026261 -4.065129 -8.722670 v 9.532956 -3.924150 -8.742090 v 9.517839 -3.956239 -9.306242 v 7.795847 -5.206936 -8.834462 v 7.828742 -5.163834 -8.273610 v 7.540015 -4.920520 -8.331332 v 7.507120 -4.963625 -8.892186 v 4.823351 5.263315 -9.017949 v 4.841275 5.221419 -8.453038 v 4.763952 4.942506 -8.531571 v 4.746028 4.984402 -9.096182 v 10.823314 2.249570 -10.230260 v 10.824644 2.239368 -9.666050 v 10.261111 2.202309 -9.675604 v 10.259778 2.212512 -10.239790 v 7.795846 4.860677 -9.548998 v 7.828741 4.817576 -8.988503 v 7.540017 4.574262 -9.023103 v 7.507123 4.617365 -9.585217 v 10.011147 3.750960 -10.092466 v 10.026261 3.718871 -9.530491 v 9.532956 3.577893 -9.538625 v 9.517843 3.609982 -10.100455 v -4.801417 4.993683 -0.083439 v -4.786794 4.985781 -0.738415 v -4.870443 5.305189 -0.756261 v -4.885067 5.313091 -0.101266 v -7.595861 4.622989 -0.192179 v -7.554812 4.619014 -0.842569 v -7.875254 4.898202 -0.869038 v -7.916299 4.902174 -0.219537 v -9.607038 3.616976 -0.353835 v -9.554063 3.618006 -0.996278 v -10.109423 3.779555 -1.040507 v -10.162398 3.778524 -0.398643 v -10.343865 2.225386 -0.435387 v -10.290336 2.226512 -1.077074 v -10.926502 2.268802 -1.129848 v -10.980032 2.267676 -0.488160 v -7.595860 -4.969250 -0.192177 v -7.554811 -4.965274 -0.834739 v -7.875253 -5.244463 -0.862102 v -7.916298 -5.248439 -0.219540 v -4.801413 -5.255312 -0.081492 v -4.786789 -5.247408 -0.725052 v -4.870442 -5.566818 -0.742610 v -4.885062 -5.574717 -0.099052 v -9.607038 -3.963236 -0.353833 v -9.554063 -3.964267 -0.995566 v -10.109423 -4.125817 -1.040373 v -10.162398 -4.124785 -0.398642 v -10.343865 -2.571649 -0.435389 v -10.290336 -2.572774 -1.077075 v -10.926498 -2.615063 -1.129849 v -10.980028 -2.613936 -0.488165 v -10.823315 -2.595830 -9.573340 v -10.824645 -2.585629 -9.008765 v -10.261113 -2.548570 -9.022642 v -10.259779 -2.558772 -9.586983 v -3.295023 -5.609575 -8.521725 v -3.307268 -5.567680 -7.959828 v -3.254443 -5.288766 -8.040392 v -3.242198 -5.330662 -8.602285 v -10.011146 -4.097221 -9.287221 v -10.026262 -4.065130 -8.722672 v -9.532958 -3.924151 -8.742092 v -9.517841 -3.956241 -9.306244 v -7.795848 -5.206937 -8.834464 v -7.828743 -5.163835 -8.273612 v -7.540015 -4.920521 -8.331334 v -7.507121 -4.963626 -8.892188 v -4.823353 5.263314 -9.017951 v -4.841278 5.221418 -8.453040 v -4.763955 4.942505 -8.531573 v -4.746031 4.984401 -9.096184 v -10.823315 2.249568 -10.230262 v -10.824645 2.239367 -9.666052 v -10.261113 2.202308 -9.675606 v -10.259779 2.212511 -10.239792 v -7.795849 4.860676 -9.549000 v -7.828743 4.817575 -8.988505 v -7.540020 4.574261 -9.023105 v -7.507125 4.617364 -9.585218 v -10.011149 3.750958 -10.092468 v -10.026262 3.718869 -9.530493 v -9.532958 3.577891 -9.538627 v -9.517844 3.609981 -10.100457 v 1.613758 5.221418 -7.937271 v -1.613762 5.221418 -7.937271 v -1.587987 4.942507 -8.015804 v 1.587984 4.942507 -8.015804 v -1.582011 4.984402 -8.580413 v 1.582008 4.984402 -8.580413 v -1.607786 5.263313 -8.502181 v 1.607782 5.263313 -8.502181 v 6.906541 -1.591769 -9.503708 v 2.182541 -3.457714 -8.840844 v 6.407092 -2.532499 -9.314726 v 5.053545 -3.210638 -9.035996 v 3.194867 3.486045 -9.173321 v 6.906541 1.620100 -9.943157 v 5.053545 3.238966 -9.502521 v 6.407095 2.560830 -9.849363 v -6.906542 -1.591770 -9.503710 v -2.182543 -3.457714 -8.840844 v -6.407094 -2.532500 -9.314728 v -5.053547 -3.210638 -9.035998 v -3.194870 3.486044 -9.173321 v -6.906542 1.620100 -9.943159 v -5.053547 3.238966 -9.502522 v -6.407097 2.560829 -9.849365 v -1.064956 3.486045 -8.826120 v 1.064954 3.486045 -8.826120 v 3.361987 -5.449973 -0.378682 v 10.543819 -2.572563 -0.746064 v 7.669099 -5.064474 -0.492779 v 9.773539 -4.011269 -0.661283 v 10.543819 2.226305 -0.746061 v 3.361986 5.103714 -0.382880 v 9.773539 3.665010 -0.661283 v 7.669098 4.718215 -0.493235 v -10.543819 -2.572563 -0.746066 v -3.361986 -5.449973 -0.378683 v -9.773542 -4.011269 -0.661285 v -7.669102 -5.064472 -0.492783 v -3.361987 5.103714 -0.382881 v -10.543819 2.226305 -0.746066 v -7.669103 4.718216 -0.493238 v -9.773542 3.665011 -0.661286 v 10.543820 -2.572563 -9.296242 v 3.361984 -5.449974 -8.278725 v 9.773540 -4.011269 -9.012150 v 7.669100 -5.064473 -8.580612 v 3.361987 5.103714 -8.217883 v 10.543820 2.226307 -9.953245 v 7.669099 4.718217 -9.279637 v 9.773540 3.665011 -9.807330 v -3.361985 -5.449974 -8.278725 v -10.543818 -2.572563 -9.296245 v -7.669101 -5.064474 -8.580614 v -9.773541 -4.011268 -9.012151 v -10.543818 2.226307 -9.953246 v -3.361986 5.103714 -8.217885 v -9.773541 3.665011 -9.807332 v -7.669102 4.718216 -9.279640 v 2.236817 5.103714 -0.379081 v -2.236821 5.103714 -0.379081 v -2.236821 -5.449973 -0.378683 v 2.236818 -5.449973 -0.378682 v 1.228297 -2.924236 -8.278726 v -1.228299 -2.924236 -8.278726 v -2.236821 5.103715 -8.276765 v 2.236818 5.103715 -8.276765 v -3.361986 5.103716 -4.400099 v -7.669103 4.718215 -4.937377 v -9.773542 3.665012 -5.235378 v -10.543819 2.226306 -5.363214 v -1.109617 -5.449974 -4.328702 v -7.669102 -5.064474 -4.536696 v -9.773541 -4.011268 -4.836701 v -10.543818 -2.572563 -4.989944 v 3.361986 5.103714 -4.400098 v 7.669099 4.718215 -4.937374 v 9.773539 3.665010 -5.235374 v 10.543819 2.226306 -5.363214 v 1.109614 -5.449974 -4.328702 v 7.669100 -5.064474 -4.536695 v 9.773540 -4.011268 -4.836699 v 10.543820 -2.572563 -4.989941 v -2.236821 5.103715 -4.334406 v 2.236817 5.103715 -4.334406 v -0.389161 -5.449974 -4.328702 v 0.389159 -5.449974 -4.328702 v -8.955273 3.918548 -32.236996 v -8.955272 0.203123 -33.027523 v -2.020124 5.407966 -35.023968 v -2.020123 -0.022674 -36.179440 v 8.955275 3.918548 -32.236996 v 8.955276 0.203124 -33.027523 v 2.020127 5.407965 -35.023968 v 2.020127 -0.022673 -36.179440 v 7.000997 -0.406188 -34.376953 v 7.000996 5.024447 -33.221478 v -7.000989 -0.406187 -34.376953 v -7.000989 5.024448 -33.221474 v -8.628107 3.665814 -30.973047 v -8.628107 -0.049610 -31.763577 v -2.020124 5.153868 -33.304497 v -2.020124 -0.276772 -34.668705 v -7.000989 -0.662668 -32.717182 v -7.000990 4.767967 -31.561705 v 8.628110 3.665813 -30.973043 v 8.628110 -0.049610 -31.763577 v 2.020127 5.153868 -33.304497 v 2.020127 -0.276772 -34.668705 v 7.000996 -0.662669 -32.717182 v 7.000996 4.767967 -31.561705 v -11.943542 1.556030 -3.716540 v -11.916324 1.556030 -4.470589 v -11.943542 -1.611454 -3.716539 v -11.916323 -1.611454 -4.470588 v -11.846407 1.556030 -3.155900 v -11.846407 -1.611454 -3.155900 v -11.235772 1.556030 -3.237244 v -11.235772 -1.611454 -3.237243 v -11.210734 1.556030 -4.129218 v -11.210733 -1.611454 -4.129217 v -12.074862 2.712150 -21.054600 v -12.074862 -0.455335 -21.054602 v -8.955273 3.462469 -31.520344 v -8.955273 0.357891 -32.148468 v -1.943688 4.215993 -34.236397 v -1.943688 1.111412 -34.864521 v -11.374848 1.556029 -7.194168 v -11.374848 -1.611455 -7.194168 v -10.912662 1.556030 -8.977547 v -10.912662 -1.611454 -8.977545 v -11.753945 -1.611454 -7.205576 v -11.753945 1.556030 -7.205574 v -11.670039 1.556031 -3.735088 v -11.642502 1.556029 -4.457520 v -11.670038 -1.611454 -3.735089 v -11.642501 -1.611454 -4.457519 v -11.684152 1.556031 -3.376855 v -11.684152 -1.611454 -3.376855 v -11.439459 1.556029 -3.420709 v -11.439459 -1.611455 -3.420709 v -11.484849 1.556030 -4.125737 v -11.484848 -1.611454 -4.125738 v -11.803533 2.711099 -21.015511 v -11.802496 -0.456201 -21.023539 v -8.751178 3.454245 -31.338076 v -8.742727 0.350272 -31.976011 v -1.943688 4.203456 -33.988995 v -1.943688 1.098876 -34.617119 v -11.647618 1.556030 -7.221544 v -11.647618 -1.611454 -7.221542 v -11.178032 1.556030 -9.046316 v -11.178032 -1.611455 -9.046317 v -11.479866 -1.611454 -7.200003 v -11.479848 1.556031 -7.201190 v 11.943539 1.556030 -3.716537 v 11.916324 1.556030 -4.470584 v 11.943540 -1.611454 -3.716537 v 11.916325 -1.611454 -4.470584 v 11.846407 1.556030 -3.155897 v 11.846407 -1.611454 -3.155898 v 11.235772 1.556029 -3.237241 v 11.235772 -1.611454 -3.237242 v 11.210731 1.556030 -4.129216 v 11.210732 -1.611454 -4.129216 v 12.074862 2.712150 -21.054598 v 12.074862 -0.455335 -21.054600 v 8.955275 3.462468 -31.520344 v 8.955275 0.357892 -32.148468 v 1.943694 4.215993 -34.236397 v 1.943695 1.111412 -34.864521 v 11.374850 1.556030 -7.194166 v 11.374850 -1.611455 -7.194167 v 10.912663 1.556030 -8.977543 v 10.912663 -1.611454 -8.977544 v 11.753947 -1.611455 -7.205572 v 11.753947 1.556030 -7.205572 v 11.670039 1.556031 -3.735085 v 11.642502 1.556030 -4.457516 v 11.670040 -1.611454 -3.735085 v 11.642503 -1.611454 -4.457517 v 11.684152 1.556030 -3.376852 v 11.684152 -1.611455 -3.376851 v 11.439455 1.556031 -3.420707 v 11.439455 -1.611454 -3.420707 v 11.484845 1.556030 -4.125734 v 11.484846 -1.611454 -4.125734 v 11.803536 2.711098 -21.015507 v 11.802500 -0.456201 -21.023535 v 8.751180 3.454245 -31.338076 v 8.742729 0.350272 -31.976011 v 1.943694 4.203456 -33.988995 v 1.943695 1.098876 -34.617119 v 11.647617 1.556029 -7.221540 v 11.647617 -1.611454 -7.221540 v 11.178034 1.556031 -9.046314 v 11.178034 -1.611455 -9.046313 v 11.479864 -1.611454 -7.199999 v 11.479847 1.556030 -7.201187 v -12.725548 6.002950 -20.493406 v -12.725548 2.385087 -17.706757 v -12.725548 -2.731345 -17.706758 v -12.725547 -6.349208 -20.493404 v -12.725547 -6.349210 -24.434324 v -12.725547 -2.731346 -27.220970 v -12.725547 2.385084 -27.220972 v -12.725548 6.002948 -24.434322 v -11.796734 5.583498 -20.627235 v -11.796734 2.211346 -18.029844 v -11.796734 -2.557601 -18.029842 v -11.796733 -5.929755 -20.627230 v -11.796733 -5.929756 -24.300497 v -11.796733 -2.557601 -26.897888 v -11.796733 2.211345 -26.897894 v -11.796734 5.583495 -24.300497 v -13.488536 6.002950 -20.493406 v -13.488536 2.385087 -17.706757 v -13.488536 -2.731345 -17.706758 v -13.488535 -6.349208 -20.493404 v -13.488535 -6.349210 -24.434324 v -13.488535 -2.731346 -27.220970 v -13.488535 2.385084 -27.220972 v -13.488536 6.002948 -24.434322 v -13.557840 5.744756 -20.575781 v -13.557840 2.278140 -17.905628 v -13.557840 -2.624397 -17.905632 v -13.557839 -6.091016 -20.575781 v -13.557839 -6.091015 -24.351950 v -13.557839 -2.624398 -27.022097 v -13.557839 2.278137 -27.022099 v -13.557840 5.744755 -24.351946 v -13.557840 6.402266 -20.366007 v -13.557840 2.550490 -17.399185 v -13.557840 -2.896746 -17.399189 v -13.557839 -6.748527 -20.366005 v -13.557839 -6.748527 -24.561724 v -13.557839 -2.896747 -27.528543 v -13.557839 2.550486 -27.528542 v -13.557840 6.402266 -24.561724 v -13.927166 6.402266 -20.366007 v -13.927166 2.550490 -17.399185 v -13.927166 -2.896746 -17.399189 v -13.927165 -6.748527 -20.366005 v -13.927165 -6.748527 -24.561724 v -13.927165 -2.896747 -27.528543 v -13.927165 2.550486 -27.528542 v -13.927166 6.402266 -24.561724 v -13.927166 5.722449 -20.582897 v -13.927166 2.268901 -17.922810 v -13.927166 -2.615157 -17.922813 v -13.927165 -6.068711 -20.582899 v -13.927165 -6.068711 -24.344831 v -13.927165 -2.615158 -27.004919 v -13.927165 2.268898 -27.004919 v -13.927166 5.722449 -24.344831 v -15.610663 5.164934 -20.760775 v -15.610663 2.037969 -18.352238 v -15.610663 -2.384227 -18.352238 v -15.610662 -5.511193 -20.760771 v -15.610662 -5.511195 -24.166956 v -15.610662 -2.384229 -26.575491 v -15.610662 2.037967 -26.575491 v -15.610663 5.164934 -24.166960 v -16.167734 3.302842 -21.354870 v -16.167734 1.266664 -19.786509 v -16.167734 -1.612923 -19.786510 v -16.167734 -3.649102 -21.354868 v -16.167734 -3.649102 -23.572859 v -16.167734 -1.612924 -25.141222 v -16.167734 1.266663 -25.141220 v -16.167734 3.302841 -23.572865 v -16.308975 0.522637 -22.241884 v -16.308975 0.115066 -21.927954 v -16.308975 -0.461326 -21.927954 v -16.308975 -0.868897 -22.241882 v -16.308975 -0.868897 -22.685846 v -16.308975 -0.461326 -22.999777 v -16.308975 0.115066 -22.999777 v -16.308975 0.522637 -22.685846 v -14.194529 5.633910 -21.180349 v -14.194529 5.633908 -23.747383 v -15.343301 5.253474 -21.301723 v -15.343301 5.253476 -23.626011 v -12.892332 11.300448 -21.180349 v -12.892331 11.300447 -23.747385 v -13.505192 12.369580 -21.301723 v -13.505191 12.369580 -23.626013 v -3.606192 14.861475 -19.580130 v -3.606191 14.861477 -25.347603 v -4.219048 15.930609 -19.852831 v -4.219047 15.930612 -25.074909 v -11.796734 2.904274 -21.482033 v -11.796734 1.101573 -20.093506 v -11.796734 -1.447831 -20.093504 v -11.796733 -3.250531 -21.482029 v -11.796733 -3.250531 -23.445700 v -11.796733 -1.447832 -24.834225 v -11.796733 1.101573 -24.834227 v -11.796734 2.904273 -23.445698 v -12.153675 2.061046 -21.751062 v -12.153675 0.752296 -20.742998 v -12.153675 -1.098553 -20.743000 v -12.153674 -2.407303 -21.751059 v -12.153674 -2.407301 -23.176672 v -12.153674 -1.098555 -24.184732 v -12.153674 0.752296 -24.184731 v -12.153675 2.061044 -23.176668 v -12.804966 1.884403 -21.807417 v -12.804966 0.679128 -20.879059 v -12.804966 -1.025385 -20.879059 v -12.804965 -2.230659 -21.807417 v -12.804965 -2.230659 -23.120316 v -12.804965 -1.025386 -24.048674 v -12.804965 0.679127 -24.048672 v -12.804966 1.884402 -23.120310 v 12.725552 6.002952 -20.493402 v 12.725552 2.385089 -17.706753 v 12.725552 -2.731343 -17.706755 v 12.725553 -6.349206 -20.493401 v 12.725553 -6.349208 -24.434320 v 12.725553 -2.731344 -27.220966 v 12.725553 2.385086 -27.220968 v 12.725552 6.002950 -24.434319 v 11.796735 5.583500 -20.627232 v 11.796735 2.211347 -18.029840 v 11.796735 -2.557600 -18.029839 v 11.796736 -5.929753 -20.627226 v 11.796736 -5.929754 -24.300493 v 11.796736 -2.557600 -26.897884 v 11.796736 2.211346 -26.897890 v 11.796735 5.583497 -24.300493 v 13.488536 6.002952 -20.493402 v 13.488536 2.385089 -17.706753 v 13.488536 -2.731343 -17.706755 v 13.488537 -6.349206 -20.493401 v 13.488537 -6.349208 -24.434320 v 13.488537 -2.731344 -27.220966 v 13.488537 2.385086 -27.220968 v 13.488536 6.002950 -24.434319 v 13.557840 5.744758 -20.575777 v 13.557840 2.278142 -17.905624 v 13.557840 -2.624395 -17.905628 v 13.557841 -6.091014 -20.575777 v 13.557841 -6.091013 -24.351946 v 13.557841 -2.624396 -27.022093 v 13.557841 2.278139 -27.022095 v 13.557840 5.744757 -24.351942 v 13.557840 6.402267 -20.366003 v 13.557840 2.550492 -17.399181 v 13.557840 -2.896744 -17.399185 v 13.557841 -6.748525 -20.366001 v 13.557841 -6.748525 -24.561720 v 13.557841 -2.896745 -27.528540 v 13.557841 2.550488 -27.528538 v 13.557840 6.402267 -24.561720 v 13.927170 6.402267 -20.366003 v 13.927170 2.550492 -17.399181 v 13.927170 -2.896744 -17.399185 v 13.927171 -6.748525 -20.366001 v 13.927171 -6.748525 -24.561720 v 13.927171 -2.896745 -27.528540 v 13.927171 2.550488 -27.528538 v 13.927170 6.402267 -24.561720 v 13.927170 5.722451 -20.582893 v 13.927170 2.268903 -17.922806 v 13.927170 -2.615155 -17.922810 v 13.927171 -6.068709 -20.582895 v 13.927171 -6.068709 -24.344828 v 13.927171 -2.615156 -27.004915 v 13.927171 2.268900 -27.004915 v 13.927170 5.722451 -24.344828 v 15.610664 5.164936 -20.760771 v 15.610664 2.037971 -18.352234 v 15.610664 -2.384224 -18.352234 v 15.610665 -5.511191 -20.760767 v 15.610665 -5.511193 -24.166952 v 15.610665 -2.384226 -26.575487 v 15.610665 2.037969 -26.575487 v 15.610664 5.164936 -24.166956 v 16.167734 3.302845 -21.354866 v 16.167734 1.266666 -19.786505 v 16.167734 -1.612920 -19.786507 v 16.167734 -3.649100 -21.354864 v 16.167734 -3.649099 -23.572855 v 16.167734 -1.612921 -25.141218 v 16.167734 1.266665 -25.141216 v 16.167734 3.302843 -23.572861 v 16.308973 0.522639 -22.241880 v 16.308973 0.115068 -21.927950 v 16.308973 -0.461324 -21.927950 v 16.308973 -0.868895 -22.241879 v 16.308973 -0.868895 -22.685843 v 16.308973 -0.461323 -22.999773 v 16.308973 0.115068 -22.999773 v 16.308973 0.522639 -22.685843 v 14.194532 5.633912 -21.180346 v 14.194532 5.633910 -23.747379 v 15.343302 5.253476 -21.301720 v 15.343302 5.253478 -23.626007 v 12.892334 11.300450 -21.180346 v 12.892335 11.300449 -23.747381 v 13.505190 12.369582 -21.301720 v 13.505191 12.369582 -23.626009 v 3.606190 14.861475 -19.580130 v 3.606190 14.861477 -25.347603 v 4.219049 15.930609 -19.852831 v 4.219050 15.930612 -25.074909 v 11.796735 2.904275 -21.482029 v 11.796735 1.101575 -20.093502 v 11.796735 -1.447829 -20.093500 v 11.796736 -3.250529 -21.482025 v 11.796736 -3.250530 -23.445696 v 11.796736 -1.447830 -24.834221 v 11.796736 1.101575 -24.834223 v 11.796735 2.904274 -23.445694 v 12.153679 2.061048 -21.751059 v 12.153679 0.752297 -20.742994 v 12.153679 -1.098552 -20.742996 v 12.153680 -2.407301 -21.751055 v 12.153680 -2.407299 -23.176668 v 12.153680 -1.098554 -24.184729 v 12.153680 0.752298 -24.184727 v 12.153679 2.061046 -23.176664 v 12.804970 1.884404 -21.807413 v 12.804970 0.679130 -20.879055 v 12.804970 -1.025384 -20.879055 v 12.804971 -2.230657 -21.807413 v 12.804971 -2.230657 -23.120312 v 12.804971 -1.025385 -24.048670 v 12.804971 0.679129 -24.048668 v 12.804970 1.884403 -23.120306 v -9.642461 2.227498 -3.439671 v -9.642461 2.227498 -4.409066 v -11.691783 2.147076 -3.378148 v -11.691783 2.147074 -4.470587 v -11.691782 -2.202499 -3.378149 v -11.691782 -2.202499 -4.470589 v -9.642460 -2.285997 -3.491107 v -9.642460 -2.285997 -4.357628 v -9.642461 1.696141 -4.405913 v -9.642461 1.696141 -3.442821 v -11.317669 1.704135 -4.467037 v -11.317669 1.704134 -3.381700 v -11.317668 -1.640957 -4.467036 v -11.317669 -1.640957 -3.381699 v -9.642460 -1.684656 -4.354813 v -9.642460 -1.684655 -3.493925 v 9.642461 2.227497 -3.439669 v 9.642461 2.227497 -4.409063 v 11.691783 2.147075 -3.378146 v 11.691783 2.147075 -4.470584 v 11.691784 -2.202499 -3.378147 v 11.691784 -2.202498 -4.470586 v 9.642462 -2.285996 -3.491106 v 9.642462 -2.285997 -4.357627 v 9.642461 1.696141 -4.405912 v 9.642461 1.696140 -3.442819 v 11.317665 1.704135 -4.467036 v 11.317665 1.704136 -3.381696 v 11.317666 -1.640957 -4.467035 v 11.317665 -1.640957 -3.381697 v 9.642462 -1.684656 -4.354810 v 9.642462 -1.684656 -3.493922 v -11.964422 -0.173132 -21.001162 v 11.964426 -0.173131 -21.001158 v 4.544061 -9.600121 -26.566124 v 6.134481 -11.190540 -22.022066 v 11.149416 -0.173129 -9.851748 v 3.980389 -14.083008 -17.478008 v -11.149414 -0.173129 -9.851748 v -3.980386 -14.083008 -17.478008 v -11.149414 10.976286 -21.001163 v -8.632219 -0.173132 -32.150578 v -6.134479 -11.190540 -22.022066 v 8.632223 -0.173131 -32.150578 v -4.544057 -9.600121 -26.566124 v 11.149416 10.976286 -21.001160 v 10.657389 8.085698 -12.742336 v -10.657387 8.085698 -12.742337 v 8.258830 8.085695 -29.259983 v -8.258824 8.085693 -29.259983 v -16.308975 -0.173012 -22.463825 v 16.308973 -0.173096 -22.463802 v -2.111254 -0.173129 -6.839027 v 2.111251 -0.173129 -6.839027 v 2.066983 -0.173134 -34.211533 v -2.066980 -0.173135 -34.211533 v -2.111250 13.989006 -21.001160 v 2.111252 13.989005 -21.001160 v 2.094464 10.408208 -10.419827 v -2.094463 10.408209 -10.419826 v -2.024745 10.267620 -31.441908 v 2.024750 10.267621 -31.441908 v 1.107066 -15.231085 -16.329937 v -1.107069 -15.231085 -16.329937 v -1.094891 -10.012321 -27.773336 v 1.094893 -10.012321 -27.773336 v -11.603478 -5.110911 -21.001162 v 11.603480 -5.110911 -21.001160 v 9.415541 -7.439123 -11.131913 v -9.415541 -7.439122 -11.131914 v -8.466852 -3.830746 -30.870413 v 8.466856 -3.830745 -30.870413 v -2.067336 -7.502455 -7.941700 v 2.067339 -7.502455 -7.941700 v 2.032873 -4.162537 -32.990337 v -2.032869 -4.162537 -32.990337 v -0.000001 -7.102658 -4.323514 v -9.896449 -11.289568 -21.256233 v -11.244839 -10.017131 -21.001162 v 9.896451 -11.289567 -21.256229 v 11.244841 -10.017131 -21.001160 v 7.516877 -15.395669 -12.533744 v 6.421359 -15.955842 -13.925529 v -6.421361 -15.955842 -13.925530 v -7.516876 -15.395671 -12.533746 v 7.330705 -8.723821 -28.586937 v 8.324287 -6.984121 -29.766733 v -8.324284 -6.984122 -29.766733 v -7.330704 -8.723823 -28.586937 v 1.785976 -17.807978 -12.073397 v 2.018034 -17.558577 -10.427107 v -2.018033 -17.558577 -10.427107 v -1.785975 -17.807978 -12.073397 v -1.766330 -9.388803 -30.534462 v -2.002507 -7.713839 -31.903244 v 2.002511 -7.713839 -31.903244 v 1.766333 -9.388803 -30.534462 v -0.910397 -16.264309 -30.111198 v -3.778365 -15.921570 -29.107409 v 3.778369 -15.921570 -29.107409 v 0.910401 -16.264309 -30.111198 v 0.920521 -20.603693 -20.596058 v 3.309676 -19.649069 -21.550678 v -3.309676 -19.649069 -21.550678 v -0.920522 -20.603693 -20.596058 v 5.100798 -17.243994 -25.329041 v -5.100794 -17.243994 -25.329041 v -0.914946 -18.214722 -25.834454 v 0.914950 -18.214722 -25.834454 v 1.644331 10.561129 -32.291931 v -1.644330 10.561129 -32.291931 v -1.700948 10.714136 -10.071882 v 1.700948 10.714136 -10.071882 v 1.714581 14.611324 -21.019272 v -1.714580 14.611324 -21.019272 v -1.678625 4.873608 -34.527237 v 1.678631 4.873608 -34.527237 v 1.714581 5.048882 -6.885150 v -1.714581 5.048882 -6.885150 v 1.712678 10.434322 -10.347334 v 1.726405 14.358387 -21.014643 v -1.726403 14.358387 -21.014643 v -1.712678 10.434322 -10.347334 v -1.655666 10.280260 -32.010941 v 1.655671 10.280260 -32.010941 v 1.690208 4.800620 -34.125134 v -1.690202 4.800620 -34.125134 v -1.726404 5.048884 -7.366729 v 1.726404 5.048882 -7.366731 vt 0.433271 0.724514 vt 0.765958 0.953430 vt 0.643703 0.358852 vt 0.650909 0.384439 vt 0.699945 0.152994 vt 0.643703 0.368394 vt 0.643703 0.368298 vt 0.516443 0.734693 vt 0.655062 0.448684 vt 0.571891 0.648913 vt 0.627339 0.538017 vt 0.571891 0.445604 vt 0.544167 0.553419 vn -0.130900 -0.991300 0.014600 vn -0.043500 -0.044500 -0.998100 vn 0.133700 0.990900 -0.014700 vn 0.044900 0.045000 0.998000 vn -0.445100 -0.894800 0.034400 vn -0.078500 -0.003900 -0.996900 vn 0.445100 0.894800 -0.034400 vn 0.081000 0.002300 0.996700 vn -0.879800 -0.469900 0.072200 vn -0.083500 0.013700 -0.996400 vn 0.875500 0.477900 -0.071800 vn 0.084000 -0.013800 0.996400 vn -0.101100 0.994800 0.013600 vn -0.044300 0.045000 -0.998000 vn 0.106300 -0.994200 -0.013800 vn 0.044300 -0.045000 0.998000 vn -0.445000 0.894800 0.034600 vn -0.081000 0.002300 -0.996700 vn 0.445100 -0.894800 -0.034600 vn 0.081000 -0.002300 0.996700 vn -0.879800 0.469900 0.072200 vn -0.084000 -0.013800 -0.996400 vn 0.875500 -0.477900 -0.071800 vn 0.084000 0.013800 0.996400 vn -0.996500 -0.000000 0.083100 vn -0.082700 0.000000 -0.996600 vn 0.996500 -0.000000 -0.083100 vn 0.082700 -0.000000 0.996600 vn 0.145700 0.987000 0.068000 vn 0.129100 -0.295500 0.946600 vn -0.128400 0.297400 -0.946100 vn 0.455100 0.889600 0.040100 vn 0.092800 -0.294500 0.951100 vn -0.090900 0.294400 -0.951400 vn 0.880000 0.475000 0.005000 vn -0.000600 -0.095300 0.995400 vn 0.000400 0.095400 -0.995400 vn 0.041200 0.280900 0.958900 vn -0.041300 -0.280900 -0.958900 vn 0.453700 -0.890200 0.040100 vn 0.049600 0.292700 0.954900 vn -0.049700 -0.291900 -0.955200 vn 0.880200 -0.474600 0.005000 vn 0.001700 0.193800 0.981000 vn -0.001800 -0.191000 -0.981600 vn 1.000000 -0.000300 -0.002400 vn -0.020600 0.135500 0.990600 vn 0.020400 -0.134900 -0.990600 vn 0.093700 -0.993000 0.071400 vn -0.983700 -0.176300 0.034600 vn 0.130900 -0.991300 0.014600 vn 0.043500 -0.044500 -0.998100 vn -0.133700 0.990900 -0.014700 vn -0.044900 0.045000 0.998000 vn 0.445100 -0.894800 0.034400 vn 0.078500 -0.003900 -0.996900 vn -0.445100 0.894800 -0.034400 vn -0.081000 0.002300 0.996700 vn 0.879800 -0.469900 0.072200 vn 0.083500 0.013700 -0.996400 vn -0.875500 0.477900 -0.071800 vn -0.084000 -0.013800 0.996400 vn 0.101100 0.994800 0.013600 vn 0.044300 0.045000 -0.998000 vn -0.106300 -0.994200 -0.013800 vn -0.044300 -0.045000 0.998000 vn 0.445000 0.894800 0.034600 vn 0.081000 0.002300 -0.996700 vn -0.445100 -0.894800 -0.034600 vn -0.081000 -0.002300 0.996700 vn 0.879800 0.469900 0.072200 vn 0.084000 -0.013800 -0.996400 vn -0.875500 -0.477900 -0.071800 vn -0.084000 0.013800 0.996400 vn 0.996500 -0.000000 0.083100 vn 0.082700 0.000000 -0.996600 vn -0.996500 -0.000000 -0.083100 vn -0.082700 -0.000000 0.996600 vn -0.145700 0.987000 0.068000 vn -0.129100 -0.295500 0.946600 vn 0.128400 0.297400 -0.946100 vn -0.455100 0.889600 0.040100 vn -0.092800 -0.294500 0.951100 vn 0.090900 0.294400 -0.951400 vn -0.880000 0.475000 0.005000 vn 0.000600 -0.095300 0.995400 vn -0.000400 0.095400 -0.995400 vn -0.041200 0.280900 0.958900 vn 0.041300 -0.280900 -0.958900 vn -0.453700 -0.890200 0.040100 vn -0.049600 0.292700 0.954900 vn 0.049700 -0.291900 -0.955200 vn -0.880200 -0.474600 0.005000 vn -0.001700 0.193800 0.981000 vn 0.001800 -0.191000 -0.981600 vn -1.000000 -0.000300 -0.002400 vn 0.020600 0.135500 0.990600 vn -0.020400 -0.134900 -0.990600 vn -0.093700 -0.993000 0.071400 vn 0.983700 -0.176300 0.034600 vn 0.000000 -0.055800 -0.998400 vn -0.000000 0.999900 -0.012100 vn -0.000000 0.055700 0.998400 vn 0.000000 -0.999900 0.012100 vn -0.152000 -0.293800 0.943700 vn 0.152600 0.293000 -0.943900 vn -0.011800 0.997200 0.073700 vn -0.000000 -0.054900 0.998500 vn 0.000000 -0.999900 -0.012300 vn 0.000000 0.054900 -0.998500 vn -0.000000 0.999900 0.012300 vn 0.011800 0.997200 0.073700 vn 0.000000 0.997300 0.074000 vn -0.152600 0.293000 -0.943900 vn 0.000000 0.270100 -0.962800 vn 0.152000 -0.293800 0.943700 vn 0.000000 -0.271000 0.962600 vn 0.146500 0.202700 -0.968200 vn 0.096400 0.047900 -0.994200 vn -0.063600 -0.135300 -0.988800 vn 0.157200 -0.212400 0.964500 vn -0.053600 -0.156000 -0.986300 vn 0.063600 -0.135300 -0.988800 vn -0.094200 -0.211700 -0.972800 vn -0.070700 -0.160300 -0.984500 vn 0.053600 -0.156000 -0.986300 vn -0.145000 0.200000 -0.969000 vn 0.094200 -0.211700 -0.972800 vn 0.157200 0.212400 -0.964500 vn 0.070700 -0.160300 -0.984500 vn -0.146500 0.202700 -0.968200 vn 0.145000 0.200000 -0.969000 vn 0.000000 -0.161800 0.986800 vn -0.096400 0.047900 -0.994200 vn -0.001700 0.000200 1.000000 vn 0.000000 1.000000 0.000000 vn 0.000000 -0.842500 -0.538700 vn -0.267200 -0.111400 -0.957200 vn 0.700300 -0.591600 -0.399300 vn 1.000000 0.000000 0.000000 vn -1.000000 -0.000000 -0.000000 vn -0.089100 0.996000 0.000000 vn -0.447500 0.894300 -0.000000 vn -0.881600 0.472000 -0.000000 vn -0.070200 -0.997300 -0.019800 vn -0.447500 -0.894300 0.000000 vn -0.881600 -0.472000 -0.000000 vn 0.089100 0.996000 0.000000 vn 0.447500 0.894300 0.000000 vn 0.881600 0.472000 0.000000 vn 0.071700 -0.997200 0.020200 vn 0.447500 -0.894300 0.000000 vn 0.881600 -0.472000 0.000000 vn -0.079700 0.000000 0.996800 vn 0.079700 0.000000 0.996800 vn 0.026000 0.000200 0.999700 vn 0.109400 -0.000000 0.994000 vn 0.001700 0.000200 1.000000 vn -0.026000 0.000200 0.999700 vn -0.109400 0.000000 0.994000 vn 0.267200 -0.111400 -0.957200 vn -0.000000 0.000000 1.000000 vn -0.000000 -1.000000 0.000000 vn 0.070200 -0.997300 -0.019800 vn -0.071700 -0.997200 0.020200 vn -0.700300 -0.591600 -0.399300 vn -0.347000 0.195200 -0.917300 vn 0.347000 0.195200 -0.917300 vn 0.000000 0.208100 -0.978100 vn 0.521100 0.177600 -0.834800 vn -0.386900 -0.914800 -0.116000 vn 0.000000 -0.986100 -0.165900 vn 0.386900 -0.914800 -0.116000 vn 0.016300 -0.987100 -0.159000 vn -0.023200 0.988500 0.149400 vn -0.016300 -0.987100 -0.159000 vn -0.969300 -0.051200 0.240600 vn 0.023200 0.988500 0.149400 vn -0.448200 0.870800 0.201800 vn 0.969300 -0.051200 0.240600 vn 0.448200 0.870800 0.201800 vn 0.000000 0.989300 0.146200 vn -0.999300 -0.000000 -0.036100 vn -0.985300 -0.000000 0.170700 vn 0.132000 0.000000 0.991200 vn 0.999600 0.000000 0.028100 vn -0.999700 0.000000 0.023200 vn -0.960800 0.027600 -0.276000 vn -0.372200 0.184100 -0.909700 vn 0.998600 -0.000000 -0.053500 vn 0.968000 0.000000 0.250900 vn -0.998200 -0.000000 -0.059300 vn -0.004700 0.996500 0.083400 vn 0.011900 -0.997500 -0.069900 vn -0.012200 0.997600 0.068000 vn 0.074900 -0.993500 -0.085600 vn -0.075500 0.993600 0.083900 vn 0.250900 -0.000000 -0.968000 vn 0.004000 -0.996500 -0.083300 vn 0.999300 0.000000 -0.036100 vn 0.985300 0.000000 0.170700 vn -0.132000 -0.000000 0.991200 vn -0.999600 0.000000 0.028100 vn 0.999700 0.000000 0.023200 vn 0.960800 0.027600 -0.276000 vn 0.372200 0.184100 -0.909700 vn -0.998600 -0.000000 -0.053500 vn -0.968000 -0.000000 0.250900 vn 0.998200 0.000000 -0.059300 vn 0.004700 0.996500 0.083400 vn -0.011900 -0.997500 -0.069900 vn 0.012200 0.997600 0.068000 vn -0.074900 -0.993500 -0.085600 vn 0.075500 0.993600 0.083900 vn -0.250900 -0.000000 -0.968000 vn -0.004000 -0.996500 -0.083300 vn 0.363100 0.568600 -0.738200 vn 0.363100 -0.568600 -0.738200 vn 0.363100 -0.568600 0.738200 vn 0.363100 0.568600 0.738200 vn 0.411600 0.911400 -0.000000 vn 0.328500 -0.000000 -0.944500 vn 0.411600 -0.911400 0.000000 vn 0.328500 -0.000000 0.944500 vn 0.000000 0.610200 -0.792200 vn 0.000000 -0.610200 -0.792200 vn 0.000000 -0.610200 0.792200 vn 0.000000 0.610200 0.792200 vn 0.000000 -0.000000 -1.000000 vn -0.954900 0.181200 -0.235300 vn -0.954900 -0.181200 -0.235300 vn -0.954900 -0.181200 0.235300 vn -0.954900 0.181200 0.235300 vn -0.965800 0.259200 -0.000000 vn -0.944300 -0.000000 -0.329100 vn -0.965800 -0.259200 0.000000 vn -0.944300 0.000000 0.329100 vn -0.274800 0.586700 -0.761700 vn -0.274800 -0.586700 -0.761700 vn -0.274800 -0.586700 0.761700 vn -0.274800 0.586700 0.761700 vn -0.314400 0.949300 -0.000000 vn -0.247200 0.000000 -0.969000 vn -0.314400 -0.949300 0.000000 vn -0.247200 -0.000000 0.969000 vn -0.958000 -0.286600 0.000000 vn -0.932200 -0.000000 0.362000 vn -0.944800 0.199900 -0.259500 vn -0.944800 -0.199900 -0.259500 vn -0.944800 -0.199900 0.259500 vn -0.944800 0.199900 0.259500 vn -0.958000 0.286600 -0.000000 vn -0.932200 0.000000 -0.362100 vn -0.998700 0.050700 -0.000000 vn -0.997800 0.000000 -0.065800 vn -0.998700 -0.050700 -0.000000 vn -0.997800 0.000000 0.065800 vn -0.998300 0.035900 -0.046600 vn -0.998300 -0.035900 -0.046600 vn -0.998300 -0.035900 0.046600 vn -0.998300 0.035900 0.046600 vn -0.124700 0.030600 -0.991700 vn -0.188600 0.072400 -0.979400 vn 0.974600 -0.224000 0.000000 vn -0.124700 0.030600 0.991700 vn -0.968200 0.250100 -0.000000 vn 0.358100 -0.933700 -0.000000 vn -0.188600 0.072400 0.979400 vn -0.358100 0.933700 0.000000 vn 0.897800 0.268700 0.348900 vn 0.897800 0.268700 -0.348900 vn 0.897800 -0.268700 -0.348900 vn 0.920900 -0.389800 0.000000 vn 0.876400 0.000000 0.481600 vn 0.920900 0.389800 0.000000 vn 0.876400 -0.000000 -0.481600 vn 0.897800 -0.268700 0.348900 vn 0.227900 -0.594200 0.771400 vn 0.227900 0.594200 0.771400 vn 0.227900 0.594200 -0.771400 vn 0.227900 -0.594200 -0.771400 vn 0.261800 -0.965100 0.000000 vn 0.204500 -0.000000 0.978900 vn 0.261800 0.965100 0.000000 vn 0.204500 0.000000 -0.978900 vn -0.363100 0.568600 -0.738200 vn -0.363100 -0.568600 -0.738200 vn -0.363100 -0.568600 0.738200 vn -0.363100 0.568600 0.738200 vn -0.411600 0.911400 -0.000000 vn -0.328500 -0.000000 -0.944500 vn -0.411600 -0.911400 0.000000 vn -0.328500 0.000000 0.944500 vn 0.954900 0.181200 -0.235300 vn 0.954900 -0.181200 -0.235300 vn 0.954900 -0.181200 0.235300 vn 0.954900 0.181200 0.235300 vn 0.965800 0.259200 -0.000000 vn 0.944300 0.000000 -0.329100 vn 0.965800 -0.259200 0.000000 vn 0.944300 0.000000 0.329100 vn 0.274800 0.586700 -0.761700 vn 0.274800 -0.586700 -0.761700 vn 0.274800 -0.586700 0.761700 vn 0.274800 0.586700 0.761700 vn 0.314400 0.949300 -0.000000 vn 0.247200 0.000000 -0.969000 vn 0.314400 -0.949300 0.000000 vn 0.247200 -0.000000 0.969000 vn 0.958000 -0.286600 0.000000 vn 0.932200 0.000000 0.362000 vn 0.944800 0.199900 -0.259500 vn 0.944800 -0.199900 -0.259500 vn 0.944800 -0.199900 0.259500 vn 0.944800 0.199900 0.259500 vn 0.958000 0.286600 -0.000000 vn 0.932200 0.000000 -0.362000 vn 0.998700 0.050700 -0.000000 vn 0.997800 0.000000 -0.065800 vn 0.998700 -0.050700 -0.000000 vn 0.997800 0.000000 0.065800 vn 0.998300 0.035900 -0.046600 vn 0.998300 -0.035900 -0.046600 vn 0.998300 -0.035900 0.046600 vn 0.998300 0.035900 0.046600 vn 0.124700 0.030600 -0.991700 vn 0.188600 0.072400 -0.979400 vn -0.974600 -0.224000 -0.000000 vn 0.124700 0.030600 0.991700 vn 0.968200 0.250100 0.000000 vn -0.358100 -0.933700 0.000000 vn 0.188600 0.072400 0.979400 vn 0.358100 0.933700 0.000000 vn -0.897800 0.268700 0.348900 vn -0.897800 0.268700 -0.348900 vn -0.897800 -0.268700 -0.348900 vn -0.920900 -0.389800 0.000000 vn -0.876400 -0.000000 0.481600 vn -0.920900 0.389800 0.000000 vn -0.876400 0.000000 -0.481600 vn -0.897800 -0.268700 0.348900 vn -0.227900 -0.594200 0.771400 vn -0.227900 0.594200 0.771400 vn -0.227900 0.594200 -0.771400 vn -0.227900 -0.594200 -0.771400 vn -0.261800 -0.965100 0.000000 vn -0.204500 -0.000000 0.978900 vn -0.261800 0.965100 0.000000 vn -0.204500 0.000000 -0.978900 vn 0.000000 0.247200 0.969000 vn 0.000000 0.247100 -0.969000 vn -0.039200 0.999200 -0.000000 vn -0.040700 -0.999200 0.000000 vn -0.004800 -1.000000 -0.000000 vn 0.026100 0.999700 -0.000000 vn 0.059900 -0.013800 -0.998100 vn 0.009500 0.000000 1.000000 vn 0.009500 0.000000 -1.000000 vn 0.032800 0.005700 0.999400 vn 0.032800 0.005700 -0.999400 vn 0.059900 -0.013800 0.998100 vn 0.039200 0.999200 0.000000 vn 0.040700 -0.999200 0.000000 vn 0.004800 -1.000000 -0.000000 vn -0.026100 0.999700 -0.000000 vn -0.059900 -0.013800 -0.998100 vn -0.009500 -0.000000 1.000000 vn -0.009500 0.000000 -1.000000 vn -0.032800 0.005700 0.999400 vn -0.032800 0.005700 -0.999400 vn -0.059900 -0.013800 0.998100 vn -0.124500 -0.839900 -0.528300 vn 0.177200 -0.968400 -0.175600 vn 0.313200 0.316100 0.895600 vn -0.993800 0.078600 0.078600 vn -0.942300 0.105000 -0.317800 vn 0.344700 0.279000 -0.896300 vn 0.080800 -0.857700 -0.507700 vn -0.177200 -0.968400 -0.175600 vn -0.324300 -0.301400 -0.896700 vn -0.938600 -0.103400 -0.329000 vn -0.344700 0.279000 -0.896300 vn 0.942300 0.105000 -0.317800 vn 0.993800 0.078600 0.078600 vn 0.000000 -0.239900 0.970800 vn 0.045400 -0.937800 -0.344100 vn -0.346100 0.865800 -0.361300 vn 0.000000 -0.292700 -0.956200 vn -0.954700 -0.192300 0.227200 vn 0.124500 -0.839900 -0.528300 vn -0.313200 0.895600 0.316100 vn 0.313200 0.895600 0.316100 vn 0.346100 0.865800 -0.361300 vn 0.954700 -0.192300 0.227200 vn 0.000000 0.320500 0.947200 vn 0.000000 0.256400 -0.966600 vn -0.405000 -0.234500 0.883700 vn 0.405000 -0.234500 0.883700 vn 0.000000 0.942000 -0.335700 vn 0.000000 0.947200 0.320500 vn 0.000000 -0.975400 -0.220300 vn -0.313200 0.316100 0.895600 vn 0.945500 0.016200 -0.325200 vn 0.000000 0.350300 -0.936700 vn -0.045400 -0.937800 -0.344100 vn 0.000000 -0.855400 -0.517900 vn 0.324300 -0.301400 -0.896700 vn 0.938600 -0.103400 -0.329000 vn -0.922500 -0.294100 0.250100 vn -0.276600 0.329400 -0.902800 vn -0.490100 -0.552400 0.674300 vn 0.000000 -0.621800 0.783100 vn 0.948900 -0.102500 -0.298300 vn 0.976400 -0.180100 0.119500 vn -0.976400 -0.180100 0.119500 vn 0.298700 -0.303700 -0.904700 vn -0.298700 -0.303700 -0.904700 vn -0.948900 -0.102500 -0.298300 vn -0.348100 -0.192200 0.917600 vn 0.348100 -0.192200 0.917600 vn 0.000000 -0.994000 0.109800 vn 0.861600 -0.080600 0.501200 vn -0.639700 -0.631800 -0.437800 vn -0.660400 -0.732600 -0.164700 vn 0.660400 -0.732600 -0.164700 vn 0.639700 -0.631800 -0.437800 vn 0.000000 -0.988700 0.149800 vn 0.000000 -0.632800 -0.774300 vn -0.391900 -0.917100 0.073100 vn 0.391900 -0.917100 0.073100 vn 0.316100 -0.637900 -0.702200 vn -0.316100 -0.637900 -0.702200 vn -0.080800 -0.857700 -0.507700 vn -0.228200 -0.877700 -0.421400 vn 0.228200 -0.877700 -0.421400 vn 0.000000 -0.909900 -0.414900 vn 0.000000 -0.909800 -0.414900 vn 0.249700 -0.882100 -0.399500 vn -0.249700 -0.882100 -0.399500 vn 0.276600 0.329400 -0.902800 vn -0.945500 0.016200 -0.325200 vn 0.922500 -0.294100 0.250100 vn 0.490100 -0.552400 0.674300 vn -0.861600 -0.080600 0.501200 vn -0.000000 0.341200 0.940000 vn 0.000000 0.942100 0.335400 vn 0.000000 0.941100 -0.338100 vn 0.000000 0.365800 -0.930700 vn 0.000000 0.490300 0.871600 vn 0.999200 0.036800 0.014600 vn -0.999600 0.016000 -0.025200 vn 0.999600 0.016400 0.025000 vn -0.999200 0.036800 0.014600 vn 0.999600 0.016000 -0.025200 vn -0.999300 0.033400 -0.018500 vn -0.999600 0.016400 0.025000 vn 0.999300 0.033400 -0.018500 vn -0.521100 0.177600 -0.834800 s off f 2/1/1 6/1/1 5/1/1 1/1/1 f 3/1/2 7/1/2 6/1/2 2/1/2 f 4/1/3 8/1/3 7/1/3 3/1/3 f 1/1/4 5/1/4 8/1/4 4/1/4 f 6/1/5 10/1/5 9/1/5 5/1/5 f 7/1/6 11/1/6 10/1/6 6/1/6 f 8/1/7 12/1/7 11/1/7 7/1/7 f 5/1/8 9/1/8 12/1/8 8/1/8 f 10/1/9 14/1/9 13/1/9 9/1/9 f 11/1/10 15/1/10 14/1/10 10/1/10 f 12/1/11 16/1/11 15/1/11 11/1/11 f 9/1/12 13/1/12 16/1/12 12/1/12 f 18/1/13 22/1/13 21/1/13 17/1/13 f 19/1/14 23/1/14 22/1/14 18/1/14 f 20/1/15 24/1/15 23/1/15 19/1/15 f 17/1/16 21/1/16 24/1/16 20/1/16 f 26/1/17 18/1/17 17/1/17 25/1/17 f 27/1/18 19/1/18 18/1/18 26/1/18 f 28/1/19 20/1/19 19/1/19 27/1/19 f 25/1/20 17/1/20 20/1/20 28/1/20 f 30/1/21 26/1/21 25/1/21 29/1/21 f 31/1/22 27/1/22 26/1/22 30/1/22 f 32/1/23 28/1/23 27/1/23 31/1/23 f 29/1/24 25/1/24 28/1/24 32/1/24 f 30/1/25 29/1/25 13/1/25 14/1/25 f 31/1/26 30/1/26 14/1/26 15/1/26 f 32/1/27 31/1/27 15/1/27 16/1/27 f 29/1/28 32/1/28 16/1/28 13/1/28 f 58/1/29 57/1/29 49/1/29 50/1/29 f 59/1/30 58/1/30 50/1/30 51/1/30 f 57/1/31 60/1/31 52/1/31 49/1/31 f 62/1/32 61/1/32 57/1/32 58/1/32 f 63/1/33 62/1/33 58/1/33 59/1/33 f 61/1/34 64/1/34 60/1/34 57/1/34 f 54/1/35 53/1/35 61/1/35 62/1/35 f 55/1/36 54/1/36 62/1/36 63/1/36 f 53/1/37 56/1/37 64/1/37 61/1/37 f 38/1/38 46/1/38 47/1/38 39/1/38 f 40/1/39 48/1/39 45/1/39 37/1/39 f 46/1/40 45/1/40 41/1/40 42/1/40 f 47/1/41 46/1/41 42/1/41 43/1/41 f 45/1/42 48/1/42 44/1/42 41/1/42 f 42/1/43 41/1/43 33/1/43 34/1/43 f 43/1/44 42/1/44 34/1/44 35/1/44 f 41/1/45 44/1/45 36/1/45 33/1/45 f 34/1/46 33/1/46 53/1/46 54/1/46 f 35/1/47 34/1/47 54/1/47 55/1/47 f 33/1/48 36/1/48 56/1/48 53/1/48 f 37/1/49 45/1/49 46/1/49 38/1/49 f 38/2/50 39/2/50 40/2/50 37/2/50 f 66/1/51 65/1/51 69/1/51 70/1/51 f 67/1/52 66/1/52 70/1/52 71/1/52 f 68/1/53 67/1/53 71/1/53 72/1/53 f 65/1/54 68/1/54 72/1/54 69/1/54 f 70/1/55 69/1/55 73/1/55 74/1/55 f 71/1/56 70/1/56 74/1/56 75/1/56 f 72/1/57 71/1/57 75/1/57 76/1/57 f 69/1/58 72/1/58 76/1/58 73/1/58 f 74/1/59 73/1/59 77/1/59 78/1/59 f 75/1/60 74/1/60 78/1/60 79/1/60 f 76/1/61 75/1/61 79/1/61 80/1/61 f 73/1/62 76/1/62 80/1/62 77/1/62 f 82/1/63 81/1/63 85/1/63 86/1/63 f 83/1/64 82/1/64 86/1/64 87/1/64 f 84/1/65 83/1/65 87/1/65 88/1/65 f 81/1/66 84/1/66 88/1/66 85/1/66 f 90/1/67 89/1/67 81/1/67 82/1/67 f 91/1/68 90/1/68 82/1/68 83/1/68 f 92/1/69 91/1/69 83/1/69 84/1/69 f 89/1/70 92/1/70 84/1/70 81/1/70 f 94/1/71 93/1/71 89/1/71 90/1/71 f 95/1/72 94/1/72 90/1/72 91/1/72 f 96/1/73 95/1/73 91/1/73 92/1/73 f 93/1/74 96/1/74 92/1/74 89/1/74 f 94/1/75 78/1/75 77/1/75 93/1/75 f 95/1/76 79/1/76 78/1/76 94/1/76 f 96/1/77 80/1/77 79/1/77 95/1/77 f 93/1/78 77/1/78 80/1/78 96/1/78 f 122/1/79 114/1/79 113/1/79 121/1/79 f 123/1/80 115/1/80 114/1/80 122/1/80 f 121/1/81 113/1/81 116/1/81 124/1/81 f 126/1/82 122/1/82 121/1/82 125/1/82 f 127/1/83 123/1/83 122/1/83 126/1/83 f 125/1/84 121/1/84 124/1/84 128/1/84 f 118/1/85 126/1/85 125/1/85 117/1/85 f 119/1/86 127/1/86 126/1/86 118/1/86 f 117/1/87 125/1/87 128/1/87 120/1/87 f 102/1/88 103/1/88 111/1/88 110/1/88 f 104/1/89 101/1/89 109/1/89 112/1/89 f 110/1/90 106/1/90 105/1/90 109/1/90 f 111/1/91 107/1/91 106/1/91 110/1/91 f 109/1/92 105/1/92 108/1/92 112/1/92 f 106/1/93 98/1/93 97/1/93 105/1/93 f 107/1/94 99/1/94 98/1/94 106/1/94 f 105/1/95 97/1/95 100/1/95 108/1/95 f 98/1/96 118/1/96 117/1/96 97/1/96 f 99/1/97 119/1/97 118/1/97 98/1/97 f 97/1/98 117/1/98 120/1/98 100/1/98 f 101/1/99 102/1/99 110/1/99 109/1/99 f 102/2/100 101/2/100 104/2/100 103/2/100 f 2/1/101 66/1/101 67/1/101 3/1/101 f 3/1/102 67/1/102 68/1/102 4/1/102 f 4/1/103 68/1/103 65/1/103 1/1/103 f 1/1/104 65/1/104 66/1/104 2/1/104 f 130/1/105 114/1/105 115/1/105 131/1/105 f 133/1/106 116/1/106 113/1/106 135/1/106 f 135/1/107 113/1/107 114/1/107 130/1/107 f 21/1/108 85/1/108 88/1/108 24/1/108 f 24/1/109 88/1/109 87/1/109 23/1/109 f 23/1/110 87/1/110 86/1/110 22/1/110 f 22/1/111 86/1/111 85/1/111 21/1/111 f 49/1/112 136/1/112 129/1/112 50/1/112 f 136/1/113 135/1/113 130/1/113 129/1/113 f 52/1/114 134/1/114 136/1/114 49/1/114 f 134/1/115 133/1/115 135/1/115 136/1/115 f 50/1/116 129/1/116 132/1/116 51/1/116 f 129/1/117 130/1/117 131/1/117 132/1/117 f 128/1/118 124/1/118 151/1/118 152/1/118 f 120/1/119 128/1/119 152/1/119 150/1/119 f 56/1/120 36/1/120 137/1/120 142/1/120 f 52/1/121 134/1/121 154/1/121 141/1/121 f 48/1/122 40/1/122 138/1/122 140/1/122 f 100/1/123 120/1/123 150/1/123 145/1/123 f 44/1/124 48/1/124 140/1/124 139/1/124 f 36/1/125 44/1/125 139/1/125 137/1/125 f 104/1/126 112/1/126 148/1/126 146/1/126 f 52/1/127 60/1/127 143/1/127 141/1/127 f 112/1/128 108/1/128 147/1/128 148/1/128 f 116/1/129 133/1/129 153/1/129 149/1/129 f 108/1/130 100/1/130 145/1/130 147/1/130 f 60/1/131 64/1/131 144/1/131 143/1/131 f 124/1/132 116/1/132 149/1/132 151/1/132 f 134/1/133 133/1/133 153/1/133 154/1/133 f 64/1/134 56/1/134 142/1/134 144/1/134 f 189/3/135 188/3/135 167/3/135 164/3/135 f 211/3/136 195/3/136 167/3/136 188/3/136 f 207/3/137 214/3/137 191/3/137 f 173/3/138 178/3/138 176/3/138 171/3/138 f 199/3/139 179/3/139 192/3/139 f 206/3/140 159/3/140 156/3/140 210/3/140 f 198/3/141 183/3/141 180/3/141 202/3/141 f 195/3/142 184/3/142 186/3/142 196/3/142 f 196/3/143 186/3/143 185/3/143 197/3/143 f 197/3/144 185/3/144 183/3/144 198/3/144 f 199/3/145 164/3/145 166/3/145 200/3/145 f 200/3/146 166/3/146 165/3/146 201/3/146 f 201/3/147 165/3/147 163/3/147 202/3/147 f 203/3/148 160/3/148 162/3/148 204/3/148 f 204/3/149 162/3/149 161/3/149 205/3/149 f 205/3/150 161/3/150 159/3/150 206/3/150 f 207/3/151 172/3/151 174/3/151 208/3/151 f 208/3/152 174/3/152 173/3/152 209/3/152 f 209/3/153 173/3/153 171/3/153 210/3/153 f 166/3/154 169/3/154 170/3/154 165/3/154 f 161/3/155 162/3/155 157/3/155 158/3/155 f 157/3/156 162/3/156 160/3/156 155/3/156 f 159/3/157 161/3/157 158/3/157 156/3/157 f 155/3/158 160/3/158 187/3/158 190/3/158 f 164/3/159 167/3/159 169/3/159 166/3/159 f 165/3/160 170/3/160 168/3/160 163/3/160 f 183/3/161 185/3/161 182/3/161 180/3/161 f 188/3/162 189/3/162 190/3/162 187/3/162 f 211/3/136 188/3/136 187/3/136 212/3/136 f 213/3/137 192/3/137 191/3/137 214/3/137 f 203/3/136 212/3/136 187/3/136 160/3/136 f 175/3/136 194/3/136 212/3/136 203/3/136 f 189/3/163 213/3/163 214/3/163 190/3/163 f 193/3/136 211/3/136 212/3/136 194/3/136 f 158/3/153 209/3/153 210/3/153 156/3/153 f 157/3/152 208/3/152 209/3/152 158/3/152 f 155/3/164 207/3/164 208/3/164 157/3/164 f 178/3/150 205/3/150 206/3/150 176/3/150 f 177/3/149 204/3/149 205/3/149 178/3/149 f 175/3/148 203/3/148 204/3/148 177/3/148 f 182/3/147 201/3/147 202/3/147 180/3/147 f 181/3/146 200/3/146 201/3/146 182/3/146 f 179/3/165 199/3/165 200/3/165 181/3/165 f 170/3/144 197/3/144 198/3/144 168/3/144 f 169/3/143 196/3/143 197/3/143 170/3/143 f 167/3/142 195/3/142 196/3/142 169/3/142 f 168/3/141 198/3/141 202/3/141 163/3/141 f 176/3/140 206/3/140 210/3/140 171/3/140 f 189/3/163 164/3/163 199/3/163 213/3/163 f 155/3/163 190/3/163 214/3/163 207/3/163 f 193/3/136 184/3/136 195/3/136 211/3/136 f 213/3/137 199/3/137 192/3/137 f 172/3/166 207/3/166 191/3/166 f 225/4/167 226/4/167 217/4/167 218/4/167 f 223/4/168 222/4/168 221/4/168 224/4/168 f 218/4/169 217/4/169 221/4/169 222/4/169 f 220/4/170 223/4/170 224/4/170 219/4/170 f 225/4/171 231/4/171 228/4/171 216/4/171 f 222/4/172 236/4/172 230/4/172 218/4/172 f 220/4/173 234/4/173 237/4/173 223/4/173 f 218/4/174 230/4/174 231/4/174 225/4/174 f 226/4/175 232/4/175 229/4/175 217/4/175 f 223/4/176 237/4/176 236/4/176 222/4/176 f 216/4/177 228/4/177 227/4/177 215/4/177 f 221/4/178 235/4/178 238/4/178 224/4/178 f 215/4/179 227/4/179 232/4/179 226/4/179 f 219/4/180 233/4/180 234/4/180 220/4/180 f 224/4/181 238/4/181 233/4/181 219/4/181 f 217/4/182 229/4/182 235/4/182 221/4/182 f 239/5/183 240/5/183 242/5/183 241/5/183 f 239/5/184 241/5/184 244/5/184 243/5/184 f 243/5/185 244/5/185 246/5/185 245/5/185 f 245/5/186 246/5/186 248/5/186 247/5/186 f 259/5/187 260/5/187 249/5/187 250/5/187 f 250/5/188 249/5/188 251/5/188 252/5/188 f 252/5/189 251/5/189 253/5/189 254/5/189 f 247/5/190 248/5/190 256/5/190 255/5/190 f 255/5/191 256/5/191 258/5/191 257/5/191 f 242/5/192 240/5/192 260/5/192 259/5/192 f 240/5/136 239/5/136 261/5/136 262/5/136 f 241/5/163 242/5/163 264/5/163 263/5/163 f 239/5/136 243/5/136 265/5/136 261/5/136 f 244/5/163 241/5/163 263/5/163 266/5/163 f 243/5/136 245/5/136 267/5/136 265/5/136 f 246/5/163 244/5/163 266/5/163 268/5/163 f 245/5/136 247/5/136 269/5/136 267/5/136 f 248/5/163 246/5/163 268/5/163 270/5/163 f 242/5/163 259/5/163 281/5/163 264/5/163 f 249/5/193 260/5/193 282/5/193 271/5/193 f 250/5/194 252/5/194 274/5/194 272/5/194 f 251/5/195 249/5/195 271/5/195 273/5/195 f 252/5/196 254/5/196 276/5/196 274/5/196 f 253/5/197 251/5/197 273/5/197 275/5/197 f 247/5/136 255/5/136 277/5/136 269/5/136 f 256/5/163 248/5/163 270/5/163 278/5/163 f 257/5/198 258/5/198 280/5/198 279/5/198 f 255/5/136 257/5/136 279/5/136 277/5/136 f 258/5/163 256/5/163 278/5/163 280/5/163 f 259/5/199 250/5/199 272/5/199 281/5/199 f 260/5/136 240/5/136 262/5/136 282/5/136 f 283/5/200 285/5/200 286/5/200 284/5/200 f 283/5/201 287/5/201 288/5/201 285/5/201 f 287/5/202 289/5/202 290/5/202 288/5/202 f 289/5/203 291/5/203 292/5/203 290/5/203 f 303/5/204 294/5/204 293/5/204 304/5/204 f 294/5/205 296/5/205 295/5/205 293/5/205 f 296/5/206 298/5/206 297/5/206 295/5/206 f 291/5/207 299/5/207 300/5/207 292/5/207 f 299/5/208 301/5/208 302/5/208 300/5/208 f 286/5/209 303/5/209 304/5/209 284/5/209 f 284/5/136 306/5/136 305/5/136 283/5/136 f 285/5/163 307/5/163 308/5/163 286/5/163 f 283/5/136 305/5/136 309/5/136 287/5/136 f 288/5/163 310/5/163 307/5/163 285/5/163 f 287/5/136 309/5/136 311/5/136 289/5/136 f 290/5/163 312/5/163 310/5/163 288/5/163 f 289/5/136 311/5/136 313/5/136 291/5/136 f 292/5/163 314/5/163 312/5/163 290/5/163 f 286/5/163 308/5/163 325/5/163 303/5/163 f 293/5/210 315/5/210 326/5/210 304/5/210 f 294/5/211 316/5/211 318/5/211 296/5/211 f 295/5/212 317/5/212 315/5/212 293/5/212 f 296/5/213 318/5/213 320/5/213 298/5/213 f 297/5/214 319/5/214 317/5/214 295/5/214 f 291/5/136 313/5/136 321/5/136 299/5/136 f 300/5/163 322/5/163 314/5/163 292/5/163 f 301/5/215 323/5/215 324/5/215 302/5/215 f 299/5/136 321/5/136 323/5/136 301/5/136 f 302/5/163 324/5/163 322/5/163 300/5/163 f 303/5/216 325/5/216 316/5/216 294/5/216 f 304/5/136 326/5/136 306/5/136 284/5/136 f 333/6/217 334/6/217 342/6/217 341/6/217 f 331/6/218 332/6/218 340/6/218 339/6/218 f 329/6/219 330/6/219 338/6/219 337/6/219 f 327/6/220 328/6/220 336/6/220 335/6/220 f 334/6/221 327/6/221 335/6/221 342/6/221 f 332/6/222 333/6/222 341/6/222 340/6/222 f 330/6/223 331/6/223 339/6/223 338/6/223 f 328/6/224 329/6/224 337/6/224 336/6/224 f 334/6/225 333/6/225 349/6/225 350/6/225 f 332/6/226 331/6/226 347/6/226 348/6/226 f 330/6/227 329/6/227 345/6/227 346/6/227 f 328/6/228 327/6/228 343/6/228 344/6/228 f 327/6/136 334/6/136 350/6/136 343/6/136 f 333/6/229 332/6/229 348/6/229 349/6/229 f 331/6/163 330/6/163 346/6/163 347/6/163 f 329/6/162 328/6/162 344/6/162 345/6/162 f 350/7/230 349/7/230 357/7/230 358/7/230 f 348/7/231 347/7/231 355/7/231 356/7/231 f 346/7/232 345/7/232 353/7/232 354/7/232 f 344/7/233 343/7/233 351/7/233 352/7/233 f 343/7/234 350/7/234 358/7/234 351/7/234 f 349/7/235 348/7/235 356/7/235 357/7/235 f 347/7/236 346/7/236 354/7/236 355/7/236 f 345/7/237 344/7/237 352/7/237 353/7/237 f 353/8/140 352/8/140 360/8/140 361/8/140 f 358/8/140 357/8/140 365/8/140 366/8/140 f 356/8/140 355/8/140 363/8/140 364/8/140 f 354/8/140 353/8/140 361/8/140 362/8/140 f 352/8/140 351/8/140 359/8/140 360/8/140 f 351/8/140 358/8/140 366/8/140 359/8/140 f 357/8/140 356/8/140 364/8/140 365/8/140 f 355/8/140 354/8/140 362/8/140 363/8/140 f 359/8/136 366/8/136 374/8/136 367/8/136 f 365/8/229 364/8/229 372/8/229 373/8/229 f 363/8/163 362/8/163 370/8/163 371/8/163 f 361/8/162 360/8/162 368/8/162 369/8/162 f 366/8/225 365/8/225 373/8/225 374/8/225 f 364/8/226 363/8/226 371/8/226 372/8/226 f 362/8/227 361/8/227 369/8/227 370/8/227 f 360/8/228 359/8/228 367/8/228 368/8/228 f 370/8/141 369/8/141 377/8/141 378/8/141 f 368/8/141 367/8/141 375/8/141 376/8/141 f 367/8/141 374/8/141 382/8/141 375/8/141 f 373/8/141 372/8/141 380/8/141 381/8/141 f 371/8/141 370/8/141 378/8/141 379/8/141 f 369/8/141 368/8/141 376/8/141 377/8/141 f 374/8/141 373/8/141 381/8/141 382/8/141 f 372/8/141 371/8/141 379/8/141 380/8/141 f 382/7/238 381/7/238 389/7/238 390/7/238 f 380/7/239 379/7/239 387/7/239 388/7/239 f 378/7/240 377/7/240 385/7/240 386/7/240 f 376/7/241 375/7/241 383/7/241 384/7/241 f 382/7/242 390/7/242 410/7/242 408/7/242 f 381/7/243 380/7/243 388/7/243 389/7/243 f 379/7/244 378/7/244 386/7/244 387/7/244 f 377/7/245 376/7/245 384/7/245 385/7/245 f 387/7/246 386/7/246 394/7/246 395/7/246 f 385/7/247 384/7/247 392/7/247 393/7/247 f 390/7/248 389/7/248 397/7/248 398/7/248 f 388/7/249 387/7/249 395/7/249 396/7/249 f 386/7/250 385/7/250 393/7/250 394/7/250 f 384/7/251 383/7/251 391/7/251 392/7/251 f 383/7/252 390/7/252 398/7/252 391/7/252 f 389/7/253 388/7/253 396/7/253 397/7/253 f 391/7/254 398/7/254 406/7/254 399/7/254 f 397/7/255 396/7/255 404/7/255 405/7/255 f 395/7/256 394/7/256 402/7/256 403/7/256 f 393/7/257 392/7/257 400/7/257 401/7/257 f 398/7/258 397/7/258 405/7/258 406/7/258 f 396/7/259 395/7/259 403/7/259 404/7/259 f 394/7/260 393/7/260 401/7/260 402/7/260 f 392/7/261 391/7/261 399/7/261 400/7/261 f 406/7/141 405/7/141 609/7/141 f 408/7/262 410/7/262 414/7/262 412/7/262 f 383/7/242 375/7/242 407/7/242 409/7/242 f 375/7/242 382/7/242 408/7/242 407/7/242 f 390/7/242 383/7/242 409/7/242 410/7/242 f 412/7/263 414/7/263 418/7/263 416/7/263 f 407/7/264 408/7/264 412/7/264 411/7/264 f 409/7/265 407/7/265 411/7/265 413/7/265 f 410/7/266 409/7/266 413/7/266 414/7/266 f 411/7/267 412/7/267 416/7/267 415/7/267 f 413/7/268 411/7/268 415/7/268 417/7/268 f 414/7/269 413/7/269 417/7/269 418/7/269 f 335/6/140 336/6/140 420/6/140 419/6/140 f 342/6/140 335/6/140 419/6/140 426/6/140 f 340/6/140 341/6/140 425/6/140 424/6/140 f 338/6/140 339/6/140 423/6/140 422/6/140 f 336/6/140 337/6/140 421/6/140 420/6/140 f 341/6/140 342/6/140 426/6/140 425/6/140 f 339/6/140 340/6/140 424/6/140 423/6/140 f 337/6/140 338/6/140 422/6/140 421/6/140 f 423/6/270 424/6/270 432/6/270 431/6/270 f 421/6/271 422/6/271 430/6/271 429/6/271 f 419/6/272 420/6/272 428/6/272 427/6/272 f 426/6/273 419/6/273 427/6/273 434/6/273 f 424/6/274 425/6/274 433/6/274 432/6/274 f 422/6/275 423/6/275 431/6/275 430/6/275 f 420/6/276 421/6/276 429/6/276 428/6/276 f 425/6/277 426/6/277 434/6/277 433/6/277 f 433/6/278 434/6/278 442/6/278 441/6/278 f 431/6/279 432/6/279 440/6/279 439/6/279 f 429/6/280 430/6/280 438/6/280 437/6/280 f 427/6/281 428/6/281 436/6/281 435/6/281 f 434/6/282 427/6/282 435/6/282 442/6/282 f 432/6/283 433/6/283 441/6/283 440/6/283 f 430/6/284 431/6/284 439/6/284 438/6/284 f 428/6/285 429/6/285 437/6/285 436/6/285 f 449/6/286 457/6/286 458/6/286 450/6/286 f 447/6/287 455/6/287 456/6/287 448/6/287 f 445/6/288 453/6/288 454/6/288 446/6/288 f 443/6/289 451/6/289 452/6/289 444/6/289 f 450/6/290 458/6/290 451/6/290 443/6/290 f 448/6/291 456/6/291 457/6/291 449/6/291 f 446/6/292 454/6/292 455/6/292 447/6/292 f 444/6/293 452/6/293 453/6/293 445/6/293 f 450/6/225 466/6/225 465/6/225 449/6/225 f 448/6/226 464/6/226 463/6/226 447/6/226 f 446/6/227 462/6/227 461/6/227 445/6/227 f 444/6/228 460/6/228 459/6/228 443/6/228 f 443/6/136 459/6/136 466/6/136 450/6/136 f 449/6/229 465/6/229 464/6/229 448/6/229 f 447/6/163 463/6/163 462/6/163 446/6/163 f 445/6/162 461/6/162 460/6/162 444/6/162 f 466/7/294 474/7/294 473/7/294 465/7/294 f 464/7/295 472/7/295 471/7/295 463/7/295 f 462/7/296 470/7/296 469/7/296 461/7/296 f 460/7/297 468/7/297 467/7/297 459/7/297 f 459/7/298 467/7/298 474/7/298 466/7/298 f 465/7/299 473/7/299 472/7/299 464/7/299 f 463/7/300 471/7/300 470/7/300 462/7/300 f 461/7/301 469/7/301 468/7/301 460/7/301 f 469/8/141 477/8/141 476/8/141 468/8/141 f 474/8/141 482/8/141 481/8/141 473/8/141 f 472/8/141 480/8/141 479/8/141 471/8/141 f 470/8/141 478/8/141 477/8/141 469/8/141 f 468/8/141 476/8/141 475/8/141 467/8/141 f 467/8/141 475/8/141 482/8/141 474/8/141 f 473/8/141 481/8/141 480/8/141 472/8/141 f 471/8/141 479/8/141 478/8/141 470/8/141 f 475/8/136 483/8/136 490/8/136 482/8/136 f 481/8/229 489/8/229 488/8/229 480/8/229 f 479/8/163 487/8/163 486/8/163 478/8/163 f 477/8/162 485/8/162 484/8/162 476/8/162 f 482/8/225 490/8/225 489/8/225 481/8/225 f 480/8/226 488/8/226 487/8/226 479/8/226 f 478/8/227 486/8/227 485/8/227 477/8/227 f 476/8/228 484/8/228 483/8/228 475/8/228 f 486/8/140 494/8/140 493/8/140 485/8/140 f 484/8/140 492/8/140 491/8/140 483/8/140 f 483/8/140 491/8/140 498/8/140 490/8/140 f 489/8/140 497/8/140 496/8/140 488/8/140 f 487/8/140 495/8/140 494/8/140 486/8/140 f 485/8/140 493/8/140 492/8/140 484/8/140 f 490/8/140 498/8/140 497/8/140 489/8/140 f 488/8/140 496/8/140 495/8/140 487/8/140 f 498/7/302 506/7/302 505/7/302 497/7/302 f 496/7/303 504/7/303 503/7/303 495/7/303 f 494/7/304 502/7/304 501/7/304 493/7/304 f 492/7/305 500/7/305 499/7/305 491/7/305 f 498/7/306 524/7/306 526/7/306 506/7/306 f 497/7/307 505/7/307 504/7/307 496/7/307 f 495/7/308 503/7/308 502/7/308 494/7/308 f 493/7/309 501/7/309 500/7/309 492/7/309 f 503/7/310 511/7/310 510/7/310 502/7/310 f 501/7/311 509/7/311 508/7/311 500/7/311 f 506/7/312 514/7/312 513/7/312 505/7/312 f 504/7/313 512/7/313 511/7/313 503/7/313 f 502/7/314 510/7/314 509/7/314 501/7/314 f 500/7/315 508/7/315 507/7/315 499/7/315 f 499/7/316 507/7/316 514/7/316 506/7/316 f 505/7/317 513/7/317 512/7/317 504/7/317 f 507/7/318 515/7/318 522/7/318 514/7/318 f 513/7/319 521/7/319 520/7/319 512/7/319 f 511/7/320 519/7/320 518/7/320 510/7/320 f 509/7/321 517/7/321 516/7/321 508/7/321 f 514/7/322 522/7/322 521/7/322 513/7/322 f 512/7/323 520/7/323 519/7/323 511/7/323 f 510/7/324 518/7/324 517/7/324 509/7/324 f 508/7/325 516/7/325 515/7/325 507/7/325 f 516/7/140 517/7/140 610/7/140 f 524/7/326 528/7/326 530/7/326 526/7/326 f 499/7/306 525/7/306 523/7/306 491/7/306 f 491/7/306 523/7/306 524/7/306 498/7/306 f 506/7/306 526/7/306 525/7/306 499/7/306 f 528/7/327 532/7/327 534/7/327 530/7/327 f 523/7/328 527/7/328 528/7/328 524/7/328 f 525/7/329 529/7/329 527/7/329 523/7/329 f 526/7/330 530/7/330 529/7/330 525/7/330 f 527/7/331 531/7/331 532/7/331 528/7/331 f 529/7/332 533/7/332 531/7/332 527/7/332 f 530/7/333 534/7/333 533/7/333 529/7/333 f 451/6/141 535/6/141 536/6/141 452/6/141 f 458/6/141 542/6/141 535/6/141 451/6/141 f 456/6/141 540/6/141 541/6/141 457/6/141 f 454/6/141 538/6/141 539/6/141 455/6/141 f 452/6/141 536/6/141 537/6/141 453/6/141 f 457/6/141 541/6/141 542/6/141 458/6/141 f 455/6/141 539/6/141 540/6/141 456/6/141 f 453/6/141 537/6/141 538/6/141 454/6/141 f 539/6/334 547/6/334 548/6/334 540/6/334 f 537/6/335 545/6/335 546/6/335 538/6/335 f 535/6/336 543/6/336 544/6/336 536/6/336 f 542/6/337 550/6/337 543/6/337 535/6/337 f 540/6/338 548/6/338 549/6/338 541/6/338 f 538/6/339 546/6/339 547/6/339 539/6/339 f 536/6/340 544/6/340 545/6/340 537/6/340 f 541/6/341 549/6/341 550/6/341 542/6/341 f 549/6/342 557/6/342 558/6/342 550/6/342 f 547/6/343 555/6/343 556/6/343 548/6/343 f 545/6/344 553/6/344 554/6/344 546/6/344 f 543/6/345 551/6/345 552/6/345 544/6/345 f 550/6/346 558/6/346 551/6/346 543/6/346 f 548/6/347 556/6/347 557/6/347 549/6/347 f 546/6/348 554/6/348 555/6/348 547/6/348 f 544/6/349 552/6/349 553/6/349 545/6/349 f 415/7/350 531/7/350 533/7/350 417/7/350 f 417/7/136 533/7/136 534/7/136 418/7/136 f 418/7/351 534/7/351 532/7/351 416/7/351 f 416/7/163 532/7/163 531/7/163 415/7/163 f 559/1/352 560/1/352 562/1/352 561/1/352 f 561/1/141 562/1/141 564/1/141 563/1/141 f 563/1/353 564/1/353 566/1/353 565/1/353 f 568/1/354 570/1/354 569/1/354 567/1/354 f 570/1/140 572/1/140 571/1/140 569/1/140 f 572/1/355 574/1/355 573/1/355 571/1/355 f 564/1/356 571/1/356 573/1/356 566/1/356 f 563/1/357 572/1/357 570/1/357 561/1/357 f 562/1/358 569/1/358 571/1/358 564/1/358 f 561/1/359 570/1/359 568/1/359 559/1/359 f 560/1/360 567/1/360 569/1/360 562/1/360 f 565/1/361 574/1/361 572/1/361 563/1/361 f 575/1/362 577/1/362 578/1/362 576/1/362 f 577/1/140 579/1/140 580/1/140 578/1/140 f 579/1/363 581/1/363 582/1/363 580/1/363 f 584/1/364 583/1/364 585/1/364 586/1/364 f 586/1/141 585/1/141 587/1/141 588/1/141 f 588/1/365 587/1/365 589/1/365 590/1/365 f 580/1/366 582/1/366 589/1/366 587/1/366 f 579/1/367 577/1/367 586/1/367 588/1/367 f 578/1/368 580/1/368 587/1/368 585/1/368 f 577/1/369 575/1/369 584/1/369 586/1/369 f 576/1/370 578/1/370 585/1/370 583/1/370 f 581/1/371 579/1/371 588/1/371 590/1/371 f 651/9/372 642/9/372 598/9/372 622/9/372 f 655/9/373 644/9/373 593/9/373 624/9/373 f 612/10/374 595/10/374 605/10/374 617/10/374 f 591/11/375 597/11/375 606/11/375 599/11/375 f 591/11/376 599/11/376 608/11/376 600/11/376 f 613/11/377 620/11/377 607/11/377 602/11/377 f 638/9/378 641/9/378 596/9/378 594/9/378 f 647/9/379 652/9/379 623/9/379 603/9/379 f 634/11/380 653/11/380 646/11/380 629/11/380 f 625/11/381 629/11/381 646/11/381 637/11/381 f 614/11/382 600/11/382 608/11/382 619/11/382 f 592/11/383 602/11/383 607/11/383 604/11/383 f 592/11/384 604/11/384 605/11/384 595/11/384 f 631/10/385 650/10/385 649/10/385 632/10/385 f 644/9/386 638/9/386 594/9/386 593/9/386 f 615/11/387 619/11/387 608/11/387 599/11/387 f 633/11/388 654/11/388 653/11/388 634/11/388 f 625/11/389 637/11/389 643/11/389 628/11/389 f 641/9/390 648/9/390 621/9/390 596/9/390 f 615/11/391 599/11/391 606/11/391 618/11/391 f 616/11/392 617/11/392 605/11/392 604/11/392 f 616/11/393 604/11/393 607/11/393 620/11/393 f 626/11/394 627/11/394 640/11/394 639/11/394 f 400/7/141 399/7/141 609/7/141 f 609/7/141 405/7/141 404/7/141 f 609/7/141 403/7/141 402/7/141 f 515/7/140 516/7/140 610/7/140 f 522/7/140 610/7/140 521/7/140 f 610/7/140 518/7/140 519/7/140 f 612/10/395 617/10/395 618/10/395 611/10/395 f 614/11/396 619/11/396 620/11/396 613/11/396 f 631/10/397 628/10/397 643/10/397 650/10/397 f 632/10/398 649/10/398 640/10/398 627/10/398 f 616/11/399 620/11/399 619/11/399 615/11/399 f 615/11/400 618/11/400 617/11/400 616/11/400 f 652/9/401 655/9/401 624/9/401 623/9/401 f 611/10/402 618/10/402 606/10/402 597/10/402 f 593/11/403 594/11/403 664/11/403 658/11/403 f 623/11/404 624/11/404 659/11/404 656/11/404 f 636/9/405 647/9/405 603/9/405 601/9/405 f 648/9/406 651/9/406 622/9/406 621/9/406 f 633/11/407 630/11/407 645/11/407 654/11/407 f 626/11/408 639/11/408 645/11/408 630/11/408 f 598/11/409 601/11/409 665/11/409 662/11/409 f 603/11/410 623/11/410 656/11/410 657/11/410 f 622/11/411 598/11/411 662/11/411 663/11/411 f 621/11/412 622/11/412 663/11/412 660/11/412 f 613/11/388 633/11/388 634/11/388 614/11/388 f 592/11/413 626/11/413 630/11/413 602/11/413 f 592/11/414 595/11/414 627/11/414 626/11/414 f 591/11/415 625/11/415 628/11/415 597/11/415 f 613/11/416 602/11/416 630/11/416 633/11/416 f 614/11/417 634/11/417 629/11/417 600/11/417 f 591/11/418 600/11/418 629/11/418 625/11/418 f 611/10/419 597/10/419 628/10/419 631/10/419 f 612/10/420 632/10/420 627/10/420 595/10/420 f 631/12/421 632/12/421 635/12/421 f 612/13/422 635/13/422 632/13/422 f 647/11/423 636/11/423 637/11/423 646/11/423 f 636/11/424 642/11/424 643/11/424 637/11/424 f 641/11/425 638/11/425 639/11/425 640/11/425 f 638/11/426 644/11/426 645/11/426 639/11/426 f 649/11/427 650/11/427 651/11/427 648/11/427 f 653/11/428 654/11/428 655/11/428 652/11/428 f 642/11/429 651/11/429 650/11/429 643/11/429 f 648/11/430 641/11/430 640/11/430 649/11/430 f 644/11/431 655/11/431 654/11/431 645/11/431 f 652/11/432 647/11/432 646/11/432 653/11/432 f 642/9/433 636/9/433 601/9/433 598/9/433 f 666/9/434 663/9/434 662/9/434 665/9/434 f 664/9/435 661/9/435 660/9/435 667/9/435 f 666/9/436 667/9/436 660/9/436 663/9/436 f 656/9/437 659/9/437 667/9/437 666/9/437 f 658/9/438 664/9/438 667/9/438 659/9/438 f 656/9/439 666/9/439 665/9/439 657/9/439 f 624/11/440 593/11/440 658/11/440 659/11/440 f 601/11/441 603/11/441 657/11/441 665/11/441 f 594/11/442 596/11/442 661/11/442 664/11/442 f 596/11/443 621/11/443 660/11/443 661/11/443 f 631/13/444 635/13/444 611/13/444 f 612/12/445 611/12/445 635/12/445 f 673/5/446 670/5/446 671/5/446 672/5/446 f 672/5/447 668/5/447 669/5/447 673/5/447 f 674/5/448 669/5/448 668/5/448 675/5/448 f 676/5/449 671/5/449 670/5/449 677/5/449 f 671/5/450 678/5/450 679/5/450 672/5/450 f 674/5/451 685/5/451 682/5/451 669/5/451 f 676/5/452 687/5/452 678/5/452 671/5/452 f 673/5/453 680/5/453 681/5/453 670/5/453 f 668/5/454 683/5/454 684/5/454 675/5/454 f 669/5/455 682/5/455 680/5/455 673/5/455 f 670/5/456 681/5/456 686/5/456 677/5/456 f 672/5/457 679/5/457 683/5/457 668/5/457 f 216/4/458 215/4/458 226/4/458 225/4/458 f 401/7/141 400/7/141 609/7/141 f 403/7/141 609/7/141 404/7/141 f 399/7/141 406/7/141 609/7/141 f 401/7/141 609/7/141 402/7/141 f 610/7/140 520/7/140 521/7/140 f 517/7/140 518/7/140 610/7/140 f 522/7/140 515/7/140 610/7/140 f 520/7/140 610/7/140 519/7/140 ================================================ FILE: browser/data/fonts/Source Sans Pro_Bold.json ================================================ {"glyphs":{"0":{"ha":733,"x_min":51,"x_max":682,"o":"m 367 -17 q 238 13 296 -17 q 138 101 179 43 q 74 246 97 160 q 51 444 51 332 q 74 642 51 557 q 138 784 97 726 q 238 870 179 842 q 367 899 296 899 q 496 870 438 899 q 595 784 554 842 q 659 642 636 726 q 682 444 682 557 q 659 246 682 332 q 595 101 636 160 q 496 13 554 43 q 367 -17 438 -17 m 367 142 q 415 155 393 142 q 454 203 438 168 q 480 296 471 238 q 489 444 489 354 q 480 592 489 535 q 454 683 471 650 q 415 728 438 715 q 367 740 393 740 q 319 728 342 740 q 281 683 297 715 q 254 592 264 650 q 244 444 244 535 q 254 296 244 354 q 281 203 264 238 q 319 155 297 168 q 367 142 342 142 z "},"1":{"ha":733,"x_min":97,"x_max":658,"o":"m 97 0 l 97 165 l 289 165 l 289 675 l 124 675 l 124 801 q 246 835 196 815 q 343 882 296 854 l 493 882 l 493 165 l 658 165 l 658 0 l 97 0 z "},"2":{"ha":733,"x_min":42,"x_max":672,"o":"m 51 0 l 51 117 q 206 265 136 196 q 327 394 276 333 q 406 506 378 454 q 435 606 435 558 q 401 705 435 671 q 310 739 368 739 q 224 712 261 739 q 153 649 186 685 l 42 758 q 175 863 107 828 q 338 899 243 899 q 456 878 403 899 q 549 822 510 858 q 608 733 588 785 q 629 618 629 682 q 606 505 629 563 q 542 390 582 447 q 452 274 503 332 q 347 161 401 217 q 422 169 381 165 q 494 172 463 172 l 672 172 l 672 0 l 51 0 z "},"3":{"ha":733,"x_min":31,"x_max":665,"o":"m 338 -17 q 154 17 229 -17 q 31 108 79 51 l 125 238 q 213 174 165 199 q 318 149 261 149 q 422 176 383 149 q 461 253 461 203 q 451 306 461 282 q 414 345 440 329 q 342 370 388 361 q 224 379 296 379 l 224 524 q 323 532 283 524 q 387 556 363 540 q 422 594 411 572 q 432 642 432 615 q 404 713 432 688 q 324 739 376 739 q 238 718 276 739 q 158 661 200 697 l 56 786 q 184 869 117 839 q 333 899 251 899 q 458 883 401 899 q 553 835 514 867 q 615 760 593 804 q 638 657 638 715 q 599 540 638 588 q 490 461 561 492 l 490 456 q 616 380 567 433 q 665 240 665 326 q 639 131 665 179 q 568 51 613 83 q 464 1 524 18 q 338 -17 404 -17 z "},"4":{"ha":733,"x_min":26,"x_max":700,"o":"m 408 0 l 408 211 l 26 211 l 26 351 l 349 882 l 599 882 l 599 367 l 700 367 l 700 211 l 599 211 l 599 0 l 408 0 m 222 367 l 408 367 l 408 510 q 411 609 408 553 q 417 707 414 665 l 411 707 q 376 633 394 671 q 339 558 358 596 l 222 367 z "},"5":{"ha":733,"x_min":32,"x_max":667,"o":"m 343 -17 q 160 19 235 -17 q 32 107 85 54 l 124 236 q 210 174 164 200 q 314 149 257 149 q 422 183 382 149 q 463 286 463 218 q 424 388 463 353 q 324 422 386 422 q 289 420 304 422 q 259 413 274 418 q 228 399 244 407 q 193 378 213 390 l 101 436 l 126 882 l 626 882 l 626 710 l 303 710 l 288 544 q 335 560 313 556 q 386 565 358 565 q 494 549 443 565 q 583 499 544 532 q 644 414 622 465 q 667 292 667 363 q 640 161 667 218 q 569 65 614 104 q 466 4 525 25 q 343 -17 407 -17 z "},"6":{"ha":733,"x_min":57,"x_max":683,"o":"m 390 -17 q 266 8 326 -17 q 159 86 206 33 q 85 222 113 139 q 57 421 57 304 q 87 635 57 544 q 166 783 117 725 q 280 870 215 842 q 414 899 344 899 q 565 867 501 899 q 671 793 629 836 l 564 671 q 503 715 540 696 q 426 733 465 733 q 358 719 390 733 q 302 673 326 706 q 263 588 278 640 q 244 458 247 535 q 283 498 261 481 q 329 527 306 515 q 376 545 353 539 q 421 551 400 551 q 526 535 478 551 q 609 485 574 518 q 664 400 644 451 q 683 279 683 349 q 660 156 683 210 q 597 63 636 101 q 503 3 557 24 q 390 -17 450 -17 m 386 136 q 465 170 432 136 q 497 279 497 204 q 465 378 497 350 q 382 407 432 407 q 312 387 347 407 q 249 319 276 367 q 269 232 256 267 q 301 176 283 197 q 341 145 319 154 q 386 136 363 136 z "},"7":{"ha":733,"x_min":61,"x_max":675,"o":"m 221 0 q 241 202 226 110 q 283 378 256 294 q 352 543 310 463 q 457 710 394 624 l 61 710 l 61 882 l 675 882 l 675 757 q 552 583 599 664 q 480 415 506 501 q 443 228 454 328 q 426 0 432 129 l 221 0 z "},"8":{"ha":733,"x_min":58,"x_max":678,"o":"m 365 -17 q 242 1 299 -17 q 145 50 186 18 q 81 126 104 82 q 58 225 58 171 q 102 357 58 306 q 208 442 146 408 l 208 447 q 124 535 157 486 q 90 656 90 585 q 111 756 90 711 q 169 833 132 801 q 259 882 207 865 q 372 899 311 899 q 482 881 432 899 q 567 833 532 864 q 621 756 601 801 q 640 657 640 711 q 606 544 640 593 q 525 464 571 494 l 525 458 q 633 369 589 424 q 678 228 678 315 q 656 131 678 175 q 592 53 633 86 q 494 2 551 21 q 365 -17 436 -17 m 421 514 q 475 643 475 576 q 447 726 475 694 q 368 757 418 757 q 299 732 328 757 q 269 656 269 707 q 311 571 269 601 q 421 514 353 540 m 369 125 q 454 152 421 125 q 488 235 488 179 q 474 285 488 264 q 436 323 461 306 q 377 356 411 340 q 301 389 343 371 q 253 325 272 361 q 233 249 233 289 q 274 158 233 190 q 369 125 314 125 z "},"9":{"ha":733,"x_min":47,"x_max":675,"o":"m 350 475 q 420 495 385 475 q 482 563 456 515 q 430 706 468 667 q 344 746 392 746 q 267 712 300 746 q 233 603 233 678 q 267 503 233 532 q 350 475 300 475 m 318 -17 q 166 15 231 -17 q 60 89 101 47 l 168 211 q 228 167 190 186 q 304 149 265 149 q 374 163 342 149 q 430 209 406 176 q 469 294 454 242 q 486 424 483 346 q 447 384 469 401 q 401 355 425 367 q 354 337 378 343 q 310 331 331 331 q 205 347 253 331 q 122 397 157 364 q 67 482 88 431 q 47 603 47 533 q 71 726 47 671 q 134 819 94 781 q 227 878 174 858 q 340 899 281 899 q 465 874 404 899 q 572 796 525 849 q 647 660 618 743 q 675 461 675 578 q 645 247 675 338 q 566 99 615 157 q 452 12 517 40 q 318 -17 388 -17 z "}," ":{"ha":278,"x_min":0,"x_max":0,"o":""},"A":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 z "},"B":{"ha":840,"x_min":107,"x_max":794,"o":"m 107 0 l 107 906 l 417 906 q 548 895 488 906 q 653 858 608 885 q 724 789 699 832 q 750 681 750 746 q 742 619 750 650 q 718 563 733 589 q 681 515 703 536 q 632 485 660 494 l 632 479 q 696 453 667 471 q 747 410 725 436 q 782 348 769 383 q 794 267 794 313 q 767 147 794 197 q 692 65 740 97 q 581 16 644 32 q 443 0 517 0 l 107 0 m 311 543 l 407 543 q 516 572 482 543 q 550 650 550 601 q 515 725 550 703 q 408 747 481 747 l 311 747 l 311 543 m 311 158 l 426 158 q 594 281 594 158 q 553 366 594 340 q 426 392 511 392 l 311 392 l 311 158 z "},"C":{"ha":808,"x_min":64,"x_max":778,"o":"m 485 -17 q 322 13 399 -17 q 188 101 246 43 q 97 247 131 160 q 64 447 64 333 q 99 648 64 560 q 192 797 133 736 q 328 890 250 858 q 492 922 406 922 q 649 887 579 922 q 764 804 718 851 l 656 674 q 583 726 621 706 q 496 746 544 746 q 409 726 450 746 q 338 668 368 706 q 291 576 308 631 q 274 454 274 522 q 333 237 274 314 q 493 160 393 160 q 592 184 549 160 q 669 244 636 208 l 778 117 q 485 -17 664 -17 z "},"D":{"ha":882,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 363 906 q 550 879 467 906 q 693 798 633 853 q 785 658 753 743 q 817 457 817 574 q 785 254 817 340 q 694 112 753 168 q 555 28 636 56 q 374 0 474 0 l 107 0 m 311 165 l 350 165 q 456 181 408 165 q 536 230 503 196 q 588 319 569 264 q 607 457 607 375 q 588 592 607 538 q 536 680 569 647 q 456 726 503 713 q 350 740 408 740 l 311 740 l 311 165 z "},"E":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 z "},"F":{"ha":728,"x_min":107,"x_max":678,"o":"m 107 0 l 107 906 l 678 906 l 678 733 l 311 733 l 311 524 l 625 524 l 625 351 l 311 351 l 311 0 l 107 0 z "},"G":{"ha":886,"x_min":64,"x_max":806,"o":"m 507 -17 q 333 13 414 -17 q 192 101 251 43 q 98 247 132 160 q 64 447 64 333 q 99 648 64 560 q 194 797 133 736 q 335 890 254 858 q 506 922 415 922 q 675 886 604 922 q 790 804 746 850 l 683 674 q 610 725 649 704 q 513 746 571 746 q 416 726 460 746 q 340 668 372 706 q 291 576 308 631 q 274 454 274 522 q 337 237 274 314 q 528 160 400 160 q 582 167 556 160 q 625 188 608 174 l 625 343 l 475 343 l 475 510 l 806 510 l 806 93 q 681 15 758 47 q 507 -17 603 -17 z "},"H":{"ha":936,"x_min":107,"x_max":829,"o":"m 107 0 l 107 906 l 311 906 l 311 557 l 624 557 l 624 906 l 829 906 l 829 0 l 624 0 l 624 378 l 311 378 l 311 0 l 107 0 z "},"I":{"ha":418,"x_min":107,"x_max":311,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 z "},"J":{"ha":707,"x_min":22,"x_max":604,"o":"m 314 -17 q 140 24 210 -17 q 22 147 69 64 l 161 250 q 219 182 186 204 q 288 160 253 160 q 372 194 343 160 q 400 318 400 228 l 400 906 l 604 906 l 604 301 q 587 178 604 236 q 534 76 569 119 q 444 8 499 33 q 314 -17 389 -17 z "},"K":{"ha":853,"x_min":107,"x_max":861,"o":"m 107 0 l 107 906 l 311 906 l 311 535 l 317 535 l 586 906 l 811 906 l 538 544 l 861 0 l 638 0 l 417 382 l 311 243 l 311 0 l 107 0 z "},"L":{"ha":719,"x_min":107,"x_max":669,"o":"m 107 0 l 107 906 l 311 906 l 311 172 l 669 172 l 669 0 l 107 0 z "},"M":{"ha":1058,"x_min":107,"x_max":951,"o":"m 107 0 l 107 906 l 331 906 l 476 503 q 503 420 490 463 q 529 336 515 378 l 535 336 q 560 420 549 378 q 586 503 572 463 l 729 906 l 951 906 l 951 0 l 765 0 l 765 332 q 768 406 765 365 q 775 487 771 446 q 783 567 779 528 q 792 640 788 607 l 786 640 l 713 425 l 583 79 l 471 79 l 342 425 l 269 640 l 264 640 q 272 567 268 607 q 281 487 276 528 q 288 406 285 446 q 290 332 290 365 l 290 0 l 107 0 z "},"N":{"ha":924,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 317 906 l 553 456 l 642 256 l 647 256 q 631 417 640 328 q 622 586 622 506 l 622 906 l 817 906 l 817 0 l 607 0 l 371 451 l 282 649 l 276 649 q 292 488 283 574 q 301 321 301 401 l 301 0 l 107 0 z "},"O":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 z "},"P":{"ha":828,"x_min":107,"x_max":778,"o":"m 107 0 l 107 906 l 418 906 q 558 891 493 906 q 672 842 624 876 q 749 752 721 808 q 778 614 778 696 q 749 476 778 535 q 672 381 721 418 q 560 325 624 343 q 424 307 496 307 l 311 307 l 311 0 l 107 0 m 311 469 l 411 469 q 578 614 578 469 q 533 714 578 685 q 406 743 489 743 l 311 743 l 311 469 z "},"Q":{"ha":950,"x_min":64,"x_max":933,"o":"m 475 150 q 622 231 568 150 q 676 457 676 311 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 231 274 311 q 475 150 382 150 m 774 -253 q 640 -234 701 -253 q 530 -183 579 -215 q 443 -105 481 -150 q 382 -7 406 -60 q 251 47 310 8 q 150 144 192 85 q 86 283 108 204 q 64 457 64 361 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 808 156 886 274 q 599 0 731 38 q 685 -69 631 -49 q 797 -89 739 -89 q 852 -85 826 -89 q 897 -74 878 -81 l 933 -222 q 867 -244 908 -235 q 774 -253 826 -253 z "},"R":{"ha":851,"x_min":107,"x_max":826,"o":"m 107 0 l 107 906 l 433 906 q 569 892 506 906 q 679 845 632 878 q 754 758 726 813 q 782 624 782 704 q 738 459 782 524 q 621 363 694 394 l 826 0 l 597 0 l 424 326 l 311 326 l 311 0 l 107 0 m 311 489 l 417 489 q 540 523 497 489 q 582 624 582 557 q 540 717 582 690 q 417 743 497 743 l 311 743 l 311 489 z "},"S":{"ha":772,"x_min":49,"x_max":725,"o":"m 383 -17 q 206 16 294 -17 q 49 114 118 49 l 165 254 q 273 186 214 213 q 389 160 332 160 q 484 183 453 160 q 515 247 515 207 q 506 283 515 268 q 480 310 497 299 q 438 333 463 322 q 385 356 414 343 l 267 406 q 199 442 232 419 q 141 494 167 464 q 100 563 115 524 q 85 653 85 603 q 108 758 85 708 q 175 844 132 807 q 277 901 218 881 q 407 922 336 922 q 563 892 486 922 q 699 803 640 861 l 594 674 q 506 727 550 708 q 407 746 461 746 q 323 724 354 746 q 292 664 292 703 q 302 628 292 643 q 331 602 313 614 q 375 580 350 590 q 429 557 400 569 l 546 510 q 677 418 629 476 q 725 264 725 360 q 702 156 725 207 q 635 67 679 106 q 528 6 592 29 q 383 -17 464 -17 z "},"T":{"ha":772,"x_min":35,"x_max":738,"o":"m 283 0 l 283 733 l 35 733 l 35 906 l 738 906 l 738 733 l 489 733 l 489 0 l 283 0 z "},"U":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 z "},"V":{"ha":772,"x_min":-10,"x_max":782,"o":"m 264 0 l -10 906 l 207 906 l 315 483 q 352 338 336 408 q 389 193 368 268 l 394 193 q 431 338 414 268 q 467 483 447 408 l 574 906 l 782 906 l 510 0 l 264 0 z "},"W":{"ha":1129,"x_min":19,"x_max":1111,"o":"m 188 0 l 19 906 l 229 906 l 292 482 q 310 340 300 411 q 328 196 319 268 l 333 196 q 360 340 347 268 q 388 482 374 411 l 485 906 l 658 906 l 756 482 q 783 341 769 413 q 810 196 796 269 l 815 196 q 834 340 825 269 q 853 482 843 411 l 915 906 l 1111 906 l 950 0 l 693 0 l 604 411 q 584 517 593 464 q 568 621 575 571 l 563 621 q 545 517 554 571 q 525 411 536 464 l 440 0 l 188 0 z "},"X":{"ha":788,"x_min":15,"x_max":772,"o":"m 15 0 l 267 465 l 31 906 l 258 906 l 338 735 q 368 667 353 703 q 403 589 383 632 l 408 589 q 438 667 424 632 q 467 735 453 703 l 539 906 l 757 906 l 522 456 l 772 0 l 544 0 l 454 185 q 422 256 438 221 q 386 333 406 292 l 381 333 q 350 256 365 292 q 319 185 335 221 l 235 0 l 15 0 z "},"Y":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 z "},"Z":{"ha":751,"x_min":50,"x_max":706,"o":"m 50 0 l 50 124 l 450 733 l 88 733 l 88 906 l 701 906 l 701 782 l 301 172 l 706 172 l 706 0 l 50 0 z "},"a":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 z "},"b":{"ha":796,"x_min":90,"x_max":742,"o":"m 451 -17 q 359 6 406 -17 q 272 74 313 29 l 267 74 l 250 0 l 90 0 l 90 974 l 294 974 l 294 735 l 289 629 q 376 685 329 665 q 471 706 422 706 q 583 681 533 706 q 669 610 633 656 q 723 501 704 565 q 742 357 742 436 q 717 199 742 268 q 652 81 693 129 q 559 8 611 33 q 451 -17 507 -17 m 404 150 q 494 198 457 150 q 532 353 532 246 q 413 539 532 539 q 294 476 351 539 l 294 194 q 350 160 322 169 q 404 150 378 150 z "},"c":{"ha":649,"x_min":50,"x_max":618,"o":"m 390 -17 q 256 8 318 -17 q 149 78 194 32 q 76 191 103 124 q 50 344 50 258 q 79 498 50 431 q 158 611 108 565 q 272 681 207 657 q 408 706 338 706 q 522 685 472 706 q 610 632 571 664 l 514 500 q 421 540 465 540 q 303 488 346 540 q 260 344 260 435 q 303 201 260 254 q 414 149 347 149 q 478 163 447 149 q 538 199 510 178 l 618 65 q 507 2 567 21 q 390 -17 447 -17 z "},"d":{"ha":796,"x_min":54,"x_max":706,"o":"m 336 -17 q 220 8 272 -17 q 131 80 168 33 q 74 193 94 126 q 54 344 54 260 q 78 496 54 429 q 142 609 103 563 q 234 681 182 656 q 340 706 286 706 q 436 686 399 706 q 510 633 474 667 l 501 739 l 501 974 l 706 974 l 706 0 l 539 0 l 525 68 l 519 68 q 435 8 483 32 q 336 -17 386 -17 m 389 150 q 449 164 422 150 q 501 213 476 178 l 501 494 q 444 529 474 519 q 388 539 415 539 q 301 492 339 539 q 264 347 264 446 q 297 197 264 244 q 389 150 329 150 z "},"e":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 z "},"f":{"ha":474,"x_min":33,"x_max":517,"o":"m 125 0 l 125 529 l 33 529 l 33 681 l 125 688 l 125 725 q 138 828 125 779 q 182 913 151 876 q 261 969 213 949 q 379 990 310 990 q 458 982 422 990 q 517 965 493 974 l 479 815 q 408 829 440 829 q 350 806 371 829 q 329 731 329 783 l 329 689 l 453 689 l 453 529 l 329 529 l 329 0 l 125 0 z "},"g":{"ha":742,"x_min":47,"x_max":721,"o":"m 336 -293 q 223 -283 275 -293 q 131 -251 171 -272 q 69 -197 92 -231 q 47 -118 47 -164 q 146 21 47 -35 l 146 26 q 100 72 118 44 q 82 143 82 100 q 104 215 82 181 q 160 272 126 249 l 160 278 q 95 349 124 303 q 67 457 67 396 q 90 566 67 519 q 153 644 114 613 q 244 690 193 675 q 351 706 296 706 q 458 689 413 706 l 710 689 l 710 540 l 600 540 q 616 501 610 525 q 622 450 622 478 q 601 347 622 390 q 544 274 581 303 q 458 232 507 246 q 351 218 408 218 q 268 232 311 218 q 249 210 254 221 q 243 181 243 199 q 266 142 243 154 q 347 129 289 129 l 458 129 q 653 88 586 129 q 721 -46 721 47 q 694 -145 721 -100 q 617 -223 667 -190 q 496 -274 567 -256 q 336 -293 425 -293 m 351 342 q 419 370 392 342 q 446 457 446 399 q 419 540 446 511 q 351 568 392 568 q 284 540 311 568 q 257 457 257 513 q 284 370 257 399 q 351 342 311 342 m 368 -165 q 482 -141 438 -165 q 526 -81 526 -117 q 499 -37 526 -49 q 421 -26 472 -26 l 350 -26 q 292 -24 314 -26 q 253 -18 269 -22 q 215 -86 215 -51 q 257 -145 215 -125 q 368 -165 299 -165 z "},"h":{"ha":793,"x_min":90,"x_max":711,"o":"m 90 0 l 90 974 l 294 974 l 294 735 l 285 611 q 375 676 324 646 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 z "},"i":{"ha":383,"x_min":74,"x_max":310,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m 192 790 q 107 820 140 790 q 74 897 74 850 q 107 974 74 944 q 192 1003 140 1003 q 277 974 244 1003 q 310 897 310 944 q 277 820 310 850 q 192 790 244 790 z "},"j":{"ha":386,"x_min":-71,"x_max":313,"o":"m 50 -272 q -22 -267 7 -272 q -71 -253 -50 -261 l -35 -103 q -8 -110 -21 -107 q 19 -112 4 -112 q 76 -86 60 -112 q 92 -1 92 -60 l 92 689 l 296 689 l 296 4 q 284 -103 296 -53 q 244 -190 272 -153 q 168 -250 215 -228 q 50 -272 121 -272 m 194 790 q 110 820 143 790 q 76 897 76 850 q 110 974 76 944 q 194 1003 143 1003 q 279 974 246 1003 q 313 897 313 944 q 279 820 313 850 q 194 790 246 790 z "},"k":{"ha":761,"x_min":90,"x_max":753,"o":"m 90 0 l 90 974 l 289 974 l 289 415 l 294 415 l 513 689 l 735 689 l 493 406 l 753 0 l 532 0 l 376 268 l 289 169 l 289 0 l 90 0 z "},"l":{"ha":397,"x_min":90,"x_max":381,"o":"m 278 -17 q 189 0 225 -17 q 131 47 153 17 q 100 119 110 76 q 90 214 90 161 l 90 974 l 294 974 l 294 206 q 306 161 294 174 q 331 149 318 149 q 342 149 338 149 q 356 151 347 149 l 381 0 q 338 -12 364 -7 q 278 -17 313 -17 z "},"m":{"ha":1190,"x_min":90,"x_max":1107,"o":"m 90 0 l 90 689 l 257 689 l 271 600 l 276 600 q 368 674 319 643 q 485 706 417 706 q 603 676 558 706 q 675 590 649 646 q 772 672 721 638 q 892 706 822 706 q 1055 631 1003 706 q 1107 428 1107 557 l 1107 0 l 903 0 l 903 401 q 883 504 903 476 q 818 532 863 532 q 700 465 767 532 l 700 0 l 496 0 l 496 401 q 476 504 496 476 q 411 532 456 532 q 294 465 358 532 l 294 0 l 90 0 z "},"n":{"ha":794,"x_min":90,"x_max":711,"o":"m 90 0 l 90 689 l 257 689 l 271 601 l 276 601 q 374 674 321 643 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 z "},"o":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 z "},"p":{"ha":796,"x_min":90,"x_max":742,"o":"m 90 -256 l 90 689 l 257 689 l 271 621 l 276 621 q 367 681 317 657 q 472 706 418 706 q 585 681 535 706 q 669 610 635 656 q 723 499 704 564 q 742 356 742 435 q 717 198 742 267 q 652 81 693 129 q 559 8 611 33 q 451 -17 507 -17 q 365 2 407 -17 q 288 56 324 21 l 294 -54 l 294 -256 l 90 -256 m 404 150 q 494 198 457 150 q 532 353 532 246 q 413 539 532 539 q 294 476 353 539 l 294 194 q 350 160 322 169 q 404 150 378 150 z "},"q":{"ha":796,"x_min":54,"x_max":706,"o":"m 501 -256 l 501 -46 l 510 60 q 429 5 475 26 q 336 -17 383 -17 q 220 8 272 -17 q 131 80 168 33 q 74 193 94 126 q 54 344 54 260 q 78 496 54 429 q 142 609 103 563 q 234 681 182 656 q 340 706 286 706 q 440 685 397 706 q 524 621 483 665 l 529 621 l 546 689 l 706 689 l 706 -256 l 501 -256 m 389 150 q 449 164 422 150 q 501 213 476 178 l 501 494 q 444 529 474 519 q 388 539 415 539 q 301 492 339 539 q 264 347 264 446 q 297 197 264 244 q 389 150 329 150 z "},"r":{"ha":553,"x_min":90,"x_max":554,"o":"m 90 0 l 90 689 l 257 689 l 271 568 l 276 568 q 367 672 314 639 q 472 706 419 706 q 520 702 501 706 q 554 692 539 699 l 521 515 q 485 524 501 521 q 446 526 468 526 q 365 499 407 526 q 294 400 322 471 l 294 0 l 90 0 z "},"s":{"ha":615,"x_min":29,"x_max":576,"o":"m 293 -17 q 153 10 225 -17 q 29 79 82 36 l 121 207 q 211 153 168 171 q 299 135 254 135 q 365 150 344 135 q 386 193 386 165 q 374 223 386 210 q 342 247 363 236 q 297 267 322 258 q 246 288 272 276 q 182 317 214 300 q 124 358 150 333 q 81 415 97 382 q 64 490 64 447 q 83 578 64 538 q 136 646 101 618 q 219 690 171 674 q 328 706 268 706 q 467 678 407 706 q 571 618 526 651 l 479 496 q 406 539 442 524 q 333 554 369 554 q 256 500 256 554 q 267 472 256 483 q 297 450 278 460 q 340 431 315 440 q 390 413 364 422 q 456 384 424 400 q 516 344 489 368 q 560 287 543 321 q 576 206 576 253 q 558 118 576 158 q 504 48 540 78 q 415 1 468 18 q 293 -17 363 -17 z "},"t":{"ha":532,"x_min":24,"x_max":508,"o":"m 356 -17 q 247 3 292 -17 q 173 57 201 22 q 131 141 144 92 q 118 250 118 190 l 118 529 l 24 529 l 24 681 l 129 689 l 153 872 l 322 872 l 322 689 l 488 689 l 488 529 l 322 529 l 322 253 q 347 169 322 194 q 411 143 371 143 q 445 147 428 143 q 476 157 463 151 l 508 8 q 443 -8 481 0 q 356 -17 406 -17 z "},"u":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 z "},"v":{"ha":726,"x_min":17,"x_max":710,"o":"m 249 0 l 17 689 l 222 689 l 311 364 q 338 259 325 313 q 365 151 351 206 l 371 151 q 397 259 383 206 q 424 364 410 313 l 514 689 l 710 689 l 485 0 l 249 0 z "},"w":{"ha":1078,"x_min":33,"x_max":1044,"o":"m 206 0 l 33 689 l 236 689 l 303 369 q 318 268 311 318 q 333 165 325 218 l 339 165 q 358 269 349 218 q 379 369 367 321 l 456 689 l 632 689 l 710 369 q 732 268 722 318 q 753 165 742 218 l 758 165 q 774 268 768 218 q 790 369 781 318 l 856 689 l 1044 689 l 879 0 l 640 0 l 578 275 q 558 372 567 324 q 540 476 550 421 l 535 476 q 517 372 525 421 q 500 275 510 324 l 439 0 l 206 0 z "},"x":{"ha":714,"x_min":19,"x_max":694,"o":"m 19 0 l 231 358 l 32 689 l 251 689 l 313 578 q 341 519 326 549 q 371 460 356 489 l 376 460 q 400 519 388 489 q 424 578 413 549 l 471 689 l 682 689 l 482 335 l 694 0 l 475 0 l 408 114 q 376 174 392 143 q 343 233 360 204 l 338 233 q 311 174 325 204 q 285 114 297 144 l 231 0 l 19 0 z "},"y":{"ha":724,"x_min":17,"x_max":707,"o":"m 167 -269 q 113 -266 135 -269 q 69 -256 90 -262 l 106 -100 q 128 -106 115 -103 q 151 -108 140 -108 q 231 -83 203 -108 q 272 -18 258 -58 l 282 18 l 17 689 l 222 689 l 321 393 q 349 297 336 346 q 375 197 361 249 l 381 197 q 403 295 392 246 q 428 393 415 344 l 511 689 l 707 689 l 468 -7 q 416 -122 443 -72 q 353 -203 389 -171 q 273 -253 318 -236 q 167 -269 228 -269 z "},"z":{"ha":639,"x_min":53,"x_max":606,"o":"m 53 0 l 53 110 l 342 529 l 85 529 l 85 689 l 596 689 l 596 581 l 307 160 l 606 160 l 606 0 l 53 0 z "},"À":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 407 944 l 153 1110 l 261 1242 l 499 1047 l 407 944 z "},"Á":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 379 944 l 288 1047 l 525 1242 l 633 1110 l 379 944 z "},"Â":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 157 1006 l 282 1160 l 504 1160 l 629 1006 l 540 951 l 396 1068 l 390 1068 l 246 951 l 157 1006 z "},"Ã":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 492 961 q 426 974 454 961 q 376 1001 399 986 q 336 1029 354 1017 q 301 1042 318 1042 q 268 1026 282 1042 q 250 974 254 1011 l 118 983 q 172 1136 124 1089 q 294 1183 221 1183 q 360 1171 332 1183 q 410 1143 388 1158 q 450 1115 432 1128 q 485 1103 468 1103 q 518 1118 504 1103 q 536 1171 532 1133 l 668 1161 q 614 1009 663 1057 q 492 961 565 961 z "},"Ä":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 239 972 q 169 1000 196 972 q 142 1069 142 1028 q 169 1139 142 1111 q 239 1167 196 1167 q 309 1139 282 1167 q 336 1069 336 1111 q 309 1000 336 1028 q 239 972 282 972 m 547 972 q 477 1000 504 972 q 450 1069 450 1028 q 477 1139 450 1111 q 547 1167 504 1167 q 617 1139 590 1167 q 644 1069 644 1111 q 617 1000 644 1028 q 547 972 590 972 z "},"Ā":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 183 1001 l 183 1132 l 603 1132 l 603 1001 l 183 1001 z "},"Ă":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 393 968 q 233 1017 289 968 q 167 1158 176 1065 l 278 1178 q 317 1110 288 1135 q 393 1086 346 1086 q 469 1110 440 1086 q 508 1178 499 1135 l 619 1158 q 553 1017 610 1065 q 393 968 497 968 z "},"Å":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 393 968 q 278 1006 322 968 q 235 1106 235 1043 q 278 1205 235 1168 q 393 1242 322 1242 q 508 1205 464 1242 q 551 1106 551 1168 q 508 1006 551 1043 q 393 968 464 968 m 393 1044 q 434 1061 417 1044 q 451 1106 451 1078 q 434 1149 451 1133 q 393 1165 417 1165 q 352 1149 369 1165 q 335 1106 335 1133 q 352 1061 335 1078 q 393 1044 369 1044 z "},"Ǎ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 282 975 l 157 1128 l 246 1183 l 390 1067 l 396 1067 l 540 1183 l 629 1128 l 504 975 l 282 975 z "},"Ạ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 393 -312 q 312 -283 343 -312 q 281 -206 281 -253 q 312 -128 281 -158 q 393 -99 343 -99 q 474 -128 443 -99 q 506 -206 506 -158 q 474 -283 506 -253 q 393 -312 443 -312 z "},"Ả":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 333 960 l 317 1040 q 361 1054 343 1046 q 379 1082 379 1063 q 354 1113 379 1101 q 268 1129 329 1125 l 292 1231 q 474 1194 421 1228 q 526 1104 526 1160 q 511 1042 526 1068 q 469 999 496 1017 q 408 972 443 982 q 333 960 372 963 z "},"Ấ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 263 951 l 181 1006 l 306 1144 l 481 1144 l 606 1006 l 524 951 l 396 1051 l 390 1051 l 263 951 m 604 1054 l 543 1124 l 682 1243 l 750 1160 l 604 1054 z "},"Ầ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 263 951 l 181 1006 l 306 1144 l 481 1144 l 606 1006 l 524 951 l 396 1051 l 390 1051 l 263 951 m 243 1122 l 182 1054 l 42 1161 l 108 1243 l 243 1122 z "},"Ẩ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 263 951 l 181 1006 l 306 1144 l 481 1144 l 606 1006 l 524 951 l 396 1051 l 390 1051 l 263 951 m 583 1042 l 568 1107 q 600 1119 588 1111 q 613 1144 613 1126 q 594 1175 613 1164 q 522 1190 575 1186 l 540 1274 q 699 1240 654 1271 q 744 1163 744 1208 q 698 1074 744 1101 q 583 1042 651 1047 z "},"Ẫ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 263 951 l 181 1006 l 306 1133 l 481 1133 l 606 1006 l 524 951 l 396 1039 l 390 1039 l 263 951 m 181 1183 q 218 1300 185 1263 q 310 1338 251 1338 q 361 1328 339 1338 q 401 1307 383 1318 q 434 1286 419 1296 q 464 1276 449 1276 q 508 1331 500 1276 l 606 1318 q 568 1201 601 1239 q 476 1164 535 1164 q 425 1174 447 1164 q 385 1194 403 1183 q 351 1215 367 1206 q 322 1225 336 1225 q 278 1172 286 1225 l 181 1183 z "},"Ậ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 157 1006 l 282 1160 l 504 1160 l 629 1006 l 540 951 l 396 1068 l 390 1068 l 246 951 l 157 1006 m 393 -312 q 312 -283 343 -312 q 281 -206 281 -253 q 312 -128 281 -158 q 393 -99 343 -99 q 474 -128 443 -99 q 506 -206 506 -158 q 474 -283 506 -253 q 393 -312 443 -312 z "},"Ắ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 317 1183 l 449 1374 l 576 1294 l 417 1118 l 317 1183 m 393 968 q 233 1017 289 968 q 167 1158 176 1065 l 267 1178 q 310 1102 278 1129 q 393 1075 342 1075 q 476 1102 444 1075 q 519 1178 508 1129 l 619 1158 q 553 1017 610 1065 q 393 968 497 968 z "},"Ằ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 469 1183 l 369 1118 l 210 1294 l 338 1374 l 469 1183 m 393 968 q 233 1017 289 968 q 167 1158 176 1065 l 267 1178 q 310 1102 278 1129 q 393 1075 342 1075 q 476 1102 444 1075 q 519 1178 508 1129 l 619 1158 q 553 1017 610 1065 q 393 968 497 968 z "},"Ẳ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 349 1119 l 332 1185 q 365 1197 351 1189 q 378 1222 378 1204 q 358 1253 378 1242 q 286 1268 339 1264 l 306 1353 q 464 1317 419 1349 q 508 1240 508 1286 q 496 1188 508 1210 q 462 1152 483 1167 q 411 1130 440 1138 q 349 1119 382 1122 m 393 968 q 233 1017 289 968 q 167 1158 176 1065 l 267 1178 q 310 1102 278 1129 q 393 1075 342 1075 q 476 1102 444 1075 q 519 1178 508 1129 l 619 1158 q 553 1017 610 1065 q 393 968 497 968 z "},"Ẵ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 393 975 q 236 1017 289 975 q 175 1131 183 1060 l 274 1147 q 308 1095 282 1117 q 393 1074 335 1074 q 478 1095 451 1074 q 513 1147 504 1117 l 611 1131 q 550 1017 603 1060 q 393 975 497 975 m 181 1194 q 218 1311 185 1274 q 310 1349 251 1349 q 361 1339 339 1349 q 401 1318 383 1329 q 434 1297 419 1307 q 464 1288 449 1288 q 508 1342 500 1288 l 606 1329 q 568 1213 601 1250 q 476 1176 535 1176 q 425 1186 447 1176 q 385 1207 403 1196 q 351 1228 367 1218 q 322 1238 336 1238 q 278 1183 286 1238 l 181 1194 z "},"Ặ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 393 968 q 233 1017 289 968 q 167 1158 176 1065 l 278 1178 q 317 1110 288 1135 q 393 1086 346 1086 q 469 1110 440 1086 q 508 1178 499 1135 l 619 1158 q 553 1017 610 1065 q 393 968 497 968 m 393 -312 q 312 -283 343 -312 q 281 -206 281 -253 q 312 -128 281 -158 q 393 -99 343 -99 q 474 -128 443 -99 q 506 -206 506 -158 q 474 -283 506 -253 q 393 -312 443 -312 z "},"Ą":{"ha":796,"x_min":-8,"x_max":835,"o":"m 689 -310 q 576 -276 622 -310 q 531 -179 531 -242 q 542 -119 531 -147 q 569 -67 553 -90 q 606 -27 586 -44 q 643 0 626 -10 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 l 275 906 l 521 906 l 804 0 q 752 -15 775 -3 q 713 -44 729 -26 q 688 -83 697 -62 q 679 -125 679 -104 q 695 -165 679 -151 q 733 -178 711 -178 q 763 -172 749 -178 q 788 -158 776 -165 l 835 -261 q 766 -296 807 -282 q 689 -310 725 -310 m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 z "},"Æ":{"ha":1174,"x_min":-19,"x_max":1101,"o":"m 421 494 l 363 365 l 536 365 l 536 751 l 531 751 q 476 619 503 685 q 421 494 449 554 m -19 0 l 411 906 l 1088 906 l 1088 733 l 740 733 l 740 551 l 1033 551 l 1033 381 l 740 381 l 740 172 l 1101 172 l 1101 0 l 536 0 l 536 207 l 290 207 l 196 0 l -19 0 z "},"Ǽ":{"ha":1174,"x_min":-19,"x_max":1101,"o":"m 421 494 l 363 365 l 536 365 l 536 751 l 531 751 q 476 619 503 685 q 421 494 449 554 m -19 0 l 411 906 l 1088 906 l 1088 733 l 740 733 l 740 551 l 1033 551 l 1033 381 l 740 381 l 740 172 l 1101 172 l 1101 0 l 536 0 l 536 207 l 290 207 l 196 0 l -19 0 m 731 969 l 639 1072 l 876 1267 l 985 1135 l 731 969 z "},"Ǣ":{"ha":1174,"x_min":-19,"x_max":1101,"o":"m 421 494 l 363 365 l 536 365 l 536 751 l 531 751 q 476 619 503 685 q 421 494 449 554 m -19 0 l 411 906 l 1088 906 l 1088 733 l 740 733 l 740 551 l 1033 551 l 1033 381 l 740 381 l 740 172 l 1101 172 l 1101 0 l 536 0 l 536 207 l 290 207 l 196 0 l -19 0 m 535 1026 l 535 1157 l 954 1157 l 954 1026 l 535 1026 z "},"Ƀ":{"ha":872,"x_min":36,"x_max":828,"o":"m 139 0 l 139 243 l 36 243 l 36 333 l 139 342 l 139 906 l 450 906 q 581 894 521 906 q 687 858 642 883 q 758 790 732 832 q 783 688 783 749 q 747 579 783 631 q 631 508 711 528 l 631 503 q 778 428 728 483 q 828 278 828 374 q 801 153 828 206 q 726 67 774 101 q 613 17 678 33 q 475 0 549 0 l 139 0 m 344 551 l 440 551 q 551 581 515 551 q 588 664 588 611 q 550 736 588 714 q 442 758 513 758 l 344 758 l 344 551 m 344 146 l 458 146 q 587 183 542 146 q 632 293 632 221 q 588 398 632 365 q 458 431 543 431 l 344 431 l 344 342 l 519 342 l 519 243 l 344 243 l 344 146 z "},"Ḇ":{"ha":840,"x_min":107,"x_max":794,"o":"m 107 0 l 107 906 l 417 906 q 548 895 488 906 q 653 858 608 885 q 724 789 699 832 q 750 681 750 746 q 742 619 750 650 q 718 563 733 589 q 681 515 703 536 q 632 485 660 494 l 632 479 q 696 453 667 471 q 747 410 725 436 q 782 348 769 383 q 794 267 794 313 q 767 147 794 197 q 692 65 740 97 q 581 16 644 32 q 443 0 517 0 l 107 0 m 311 543 l 407 543 q 516 572 482 543 q 550 650 550 601 q 515 725 550 703 q 408 747 481 747 l 311 747 l 311 543 m 311 158 l 426 158 q 594 281 594 158 q 553 366 594 340 q 426 392 511 392 l 311 392 l 311 158 m 231 -260 l 231 -131 l 642 -131 l 642 -260 l 231 -260 z "},"Ç":{"ha":808,"x_min":64,"x_max":778,"o":"m 485 -17 q 322 13 399 -17 q 188 101 246 43 q 97 247 131 160 q 64 447 64 333 q 99 648 64 560 q 192 797 133 736 q 328 890 250 858 q 492 922 406 922 q 649 887 579 922 q 764 804 718 851 l 656 674 q 583 726 621 706 q 496 746 544 746 q 409 726 450 746 q 338 668 368 706 q 291 576 308 631 q 274 454 274 522 q 333 237 274 314 q 493 160 393 160 q 592 184 549 160 q 669 244 636 208 l 778 117 q 485 -17 664 -17 m 344 -332 l 329 -250 q 442 -232 411 -246 q 472 -189 472 -218 q 451 -153 472 -168 q 365 -131 429 -139 l 432 6 l 551 6 l 513 -85 q 592 -121 565 -97 q 618 -189 618 -144 q 547 -294 618 -260 q 344 -332 475 -328 z "},"Ć":{"ha":808,"x_min":64,"x_max":778,"o":"m 485 -17 q 322 13 399 -17 q 188 101 246 43 q 97 247 131 160 q 64 447 64 333 q 99 648 64 560 q 192 797 133 736 q 328 890 250 858 q 492 922 406 922 q 649 887 579 922 q 764 804 718 851 l 656 674 q 583 726 621 706 q 496 746 544 746 q 409 726 450 746 q 338 668 368 706 q 291 576 308 631 q 274 454 274 522 q 333 237 274 314 q 493 160 393 160 q 592 184 549 160 q 669 244 636 208 l 778 117 q 485 -17 664 -17 m 463 944 l 371 1047 l 608 1242 l 717 1110 l 463 944 z "},"Ĉ":{"ha":808,"x_min":64,"x_max":778,"o":"m 485 -17 q 322 13 399 -17 q 188 101 246 43 q 97 247 131 160 q 64 447 64 333 q 99 648 64 560 q 192 797 133 736 q 328 890 250 858 q 492 922 406 922 q 649 887 579 922 q 764 804 718 851 l 656 674 q 583 726 621 706 q 496 746 544 746 q 409 726 450 746 q 338 668 368 706 q 291 576 308 631 q 274 454 274 522 q 333 237 274 314 q 493 160 393 160 q 592 184 549 160 q 669 244 636 208 l 778 117 q 485 -17 664 -17 m 240 1006 l 365 1160 l 588 1160 l 713 1006 l 624 951 l 479 1068 l 474 1068 l 329 951 l 240 1006 z "},"Č":{"ha":808,"x_min":64,"x_max":778,"o":"m 485 -17 q 322 13 399 -17 q 188 101 246 43 q 97 247 131 160 q 64 447 64 333 q 99 648 64 560 q 192 797 133 736 q 328 890 250 858 q 492 922 406 922 q 649 887 579 922 q 764 804 718 851 l 656 674 q 583 726 621 706 q 496 746 544 746 q 409 726 450 746 q 338 668 368 706 q 291 576 308 631 q 274 454 274 522 q 333 237 274 314 q 493 160 393 160 q 592 184 549 160 q 669 244 636 208 l 778 117 q 485 -17 664 -17 m 365 975 l 240 1128 l 329 1183 l 474 1067 l 479 1067 l 624 1183 l 713 1128 l 588 975 l 365 975 z "},"Ċ":{"ha":808,"x_min":64,"x_max":778,"o":"m 485 -17 q 322 13 399 -17 q 188 101 246 43 q 97 247 131 160 q 64 447 64 333 q 99 648 64 560 q 192 797 133 736 q 328 890 250 858 q 492 922 406 922 q 649 887 579 922 q 764 804 718 851 l 656 674 q 583 726 621 706 q 496 746 544 746 q 409 726 450 746 q 338 668 368 706 q 291 576 308 631 q 274 454 274 522 q 333 237 274 314 q 493 160 393 160 q 592 184 549 160 q 669 244 636 208 l 778 117 q 485 -17 664 -17 m 476 974 q 392 1003 425 974 q 358 1081 358 1033 q 392 1158 358 1128 q 476 1188 425 1188 q 561 1158 528 1188 q 594 1081 594 1128 q 561 1003 594 1033 q 476 974 528 974 z "},"Ď":{"ha":882,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 363 906 q 550 879 467 906 q 693 798 633 853 q 785 658 753 743 q 817 457 817 574 q 785 254 817 340 q 694 112 753 168 q 555 28 636 56 q 374 0 474 0 l 107 0 m 311 165 l 350 165 q 456 181 408 165 q 536 230 503 196 q 588 319 569 264 q 607 457 607 375 q 588 592 607 538 q 536 680 569 647 q 456 726 503 713 q 350 740 408 740 l 311 740 l 311 165 m 331 975 l 206 1128 l 294 1183 l 439 1067 l 444 1067 l 589 1183 l 678 1128 l 553 975 l 331 975 z "},"Ḍ":{"ha":882,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 363 906 q 550 879 467 906 q 693 798 633 853 q 785 658 753 743 q 817 457 817 574 q 785 254 817 340 q 694 112 753 168 q 555 28 636 56 q 374 0 474 0 l 107 0 m 311 165 l 350 165 q 456 181 408 165 q 536 230 503 196 q 588 319 569 264 q 607 457 607 375 q 588 592 607 538 q 536 680 569 647 q 456 726 503 713 q 350 740 408 740 l 311 740 l 311 165 m 435 -312 q 353 -283 385 -312 q 322 -206 322 -253 q 353 -128 322 -158 q 435 -99 385 -99 q 516 -128 485 -99 q 547 -206 547 -158 q 516 -283 547 -253 q 435 -312 485 -312 z "},"Ḏ":{"ha":882,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 363 906 q 550 879 467 906 q 693 798 633 853 q 785 658 753 743 q 817 457 817 574 q 785 254 817 340 q 694 112 753 168 q 555 28 636 56 q 374 0 474 0 l 107 0 m 311 165 l 350 165 q 456 181 408 165 q 536 230 503 196 q 588 319 569 264 q 607 457 607 375 q 588 592 607 538 q 536 680 569 647 q 456 726 503 713 q 350 740 408 740 l 311 740 l 311 165 m 229 -260 l 229 -131 l 640 -131 l 640 -260 l 229 -260 z "},"Đ":{"ha":917,"x_min":36,"x_max":851,"o":"m 36 418 l 36 510 l 142 517 l 142 906 l 397 906 q 585 879 501 906 q 728 798 668 853 q 819 658 788 743 q 851 457 851 574 q 819 254 851 340 q 729 112 788 168 q 590 28 671 56 q 408 0 508 0 l 142 0 l 142 418 l 36 418 m 346 165 l 385 165 q 490 181 443 165 q 571 230 538 196 q 623 319 604 264 q 642 457 642 375 q 623 592 642 538 q 571 680 604 647 q 490 726 538 713 q 385 740 443 740 l 346 740 l 346 517 l 519 517 l 519 418 l 346 418 l 346 165 z "},"È":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 414 944 l 160 1110 l 268 1242 l 506 1047 l 414 944 z "},"É":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 386 944 l 294 1047 l 532 1242 l 640 1110 l 386 944 z "},"Ê":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 164 1006 l 289 1160 l 511 1160 l 636 1006 l 547 951 l 403 1068 l 397 1068 l 253 951 l 164 1006 z "},"Ě":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 289 975 l 164 1128 l 253 1183 l 397 1067 l 403 1067 l 547 1183 l 636 1128 l 511 975 l 289 975 z "},"Ë":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 246 972 q 176 1000 203 972 q 149 1069 149 1028 q 176 1139 149 1111 q 246 1167 203 1167 q 316 1139 289 1167 q 343 1069 343 1111 q 316 1000 343 1028 q 246 972 289 972 m 554 972 q 484 1000 511 972 q 457 1069 457 1028 q 484 1139 457 1111 q 554 1167 511 1167 q 624 1139 597 1167 q 651 1069 651 1111 q 624 1000 651 1028 q 554 972 597 972 z "},"Ē":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 190 1001 l 190 1132 l 610 1132 l 610 1001 l 190 1001 z "},"Ĕ":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 400 968 q 240 1017 296 968 q 174 1158 183 1065 l 285 1178 q 324 1110 294 1135 q 400 1086 353 1086 q 476 1110 447 1086 q 515 1178 506 1135 l 626 1158 q 560 1017 617 1065 q 400 968 504 968 z "},"Ė":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 400 974 q 315 1003 349 974 q 282 1081 282 1033 q 315 1158 282 1128 q 400 1188 349 1188 q 485 1158 451 1188 q 518 1081 518 1128 q 485 1003 518 1033 q 400 974 451 974 z "},"Ẹ":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 410 -312 q 328 -283 360 -312 q 297 -206 297 -253 q 328 -128 297 -158 q 410 -99 360 -99 q 491 -128 460 -99 q 522 -206 522 -158 q 491 -283 522 -253 q 410 -312 460 -312 z "},"Ẻ":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 340 960 l 324 1040 q 368 1054 350 1046 q 386 1082 386 1063 q 361 1113 386 1101 q 275 1129 336 1125 l 299 1231 q 481 1194 428 1228 q 533 1104 533 1160 q 518 1042 533 1068 q 476 999 503 1017 q 415 972 450 982 q 340 960 379 963 z "},"Ẽ":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 499 961 q 433 974 461 961 q 383 1001 406 986 q 343 1029 361 1017 q 308 1042 325 1042 q 275 1026 289 1042 q 257 974 261 1011 l 125 983 q 179 1136 131 1089 q 301 1183 228 1183 q 367 1171 339 1183 q 417 1143 394 1158 q 457 1115 439 1128 q 492 1103 475 1103 q 525 1118 511 1103 q 543 1171 539 1133 l 675 1161 q 621 1009 669 1057 q 499 961 572 961 z "},"Ế":{"ha":761,"x_min":107,"x_max":757,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 269 951 l 188 1006 l 313 1144 l 488 1144 l 613 1006 l 531 951 l 403 1051 l 397 1051 l 269 951 m 611 1054 l 550 1124 l 689 1243 l 757 1160 l 611 1054 z "},"Ề":{"ha":761,"x_min":49,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 269 951 l 188 1006 l 313 1144 l 488 1144 l 613 1006 l 531 951 l 403 1051 l 397 1051 l 269 951 m 250 1122 l 189 1054 l 49 1161 l 115 1243 l 250 1122 z "},"Ể":{"ha":761,"x_min":107,"x_max":751,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 269 951 l 188 1006 l 313 1144 l 488 1144 l 613 1006 l 531 951 l 403 1051 l 397 1051 l 269 951 m 590 1042 l 575 1107 q 607 1119 594 1111 q 619 1144 619 1126 q 601 1175 619 1164 q 529 1190 582 1186 l 547 1274 q 706 1240 661 1271 q 751 1163 751 1208 q 705 1074 751 1101 q 590 1042 658 1047 z "},"Ễ":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 269 951 l 188 1006 l 313 1133 l 488 1133 l 613 1006 l 531 951 l 403 1039 l 397 1039 l 269 951 m 188 1183 q 225 1300 192 1263 q 317 1338 258 1338 q 368 1328 346 1338 q 408 1307 390 1318 q 441 1286 426 1296 q 471 1276 456 1276 q 515 1331 507 1276 l 613 1318 q 575 1201 608 1239 q 483 1164 542 1164 q 432 1174 454 1164 q 392 1194 410 1183 q 358 1215 374 1206 q 329 1225 343 1225 q 285 1172 293 1225 l 188 1183 z "},"Ệ":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 164 1006 l 289 1160 l 511 1160 l 636 1006 l 547 951 l 403 1068 l 397 1068 l 253 951 l 164 1006 m 410 -312 q 328 -283 360 -312 q 297 -206 297 -253 q 328 -128 297 -158 q 410 -99 360 -99 q 491 -128 460 -99 q 522 -206 522 -158 q 491 -283 522 -253 q 410 -312 460 -312 z "},"Ę":{"ha":761,"x_min":107,"x_max":717,"o":"m 571 -310 q 458 -276 504 -310 q 411 -179 411 -242 q 422 -119 411 -147 q 448 -69 432 -92 q 483 -28 464 -46 q 521 0 503 -11 l 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 681 0 q 635 -12 657 -1 q 597 -41 614 -24 q 571 -81 581 -58 q 561 -125 561 -103 q 579 -165 561 -153 q 619 -178 597 -178 q 646 -172 633 -178 q 669 -158 658 -165 l 717 -261 q 648 -296 689 -282 q 571 -310 607 -310 z "},"Ḗ":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 357 1158 l 289 1250 l 504 1399 l 588 1286 l 357 1158 m 190 1001 l 190 1132 l 610 1132 l 610 1001 l 190 1001 z "},"Ǵ":{"ha":886,"x_min":64,"x_max":806,"o":"m 507 -17 q 333 13 414 -17 q 192 101 251 43 q 98 247 132 160 q 64 447 64 333 q 99 648 64 560 q 194 797 133 736 q 335 890 254 858 q 506 922 415 922 q 675 886 604 922 q 790 804 746 850 l 683 674 q 610 725 649 704 q 513 746 571 746 q 416 726 460 746 q 340 668 372 706 q 291 576 308 631 q 274 454 274 522 q 337 237 274 314 q 528 160 400 160 q 582 167 556 160 q 625 188 608 174 l 625 343 l 475 343 l 475 510 l 806 510 l 806 93 q 681 15 758 47 q 507 -17 603 -17 m 496 944 l 404 1047 l 642 1242 l 750 1110 l 496 944 z "},"Ĝ":{"ha":886,"x_min":64,"x_max":806,"o":"m 507 -17 q 333 13 414 -17 q 192 101 251 43 q 98 247 132 160 q 64 447 64 333 q 99 648 64 560 q 194 797 133 736 q 335 890 254 858 q 506 922 415 922 q 675 886 604 922 q 790 804 746 850 l 683 674 q 610 725 649 704 q 513 746 571 746 q 416 726 460 746 q 340 668 372 706 q 291 576 308 631 q 274 454 274 522 q 337 237 274 314 q 528 160 400 160 q 582 167 556 160 q 625 188 608 174 l 625 343 l 475 343 l 475 510 l 806 510 l 806 93 q 681 15 758 47 q 507 -17 603 -17 m 274 1006 l 399 1160 l 621 1160 l 746 1006 l 657 951 l 513 1068 l 507 1068 l 363 951 l 274 1006 z "},"Ğ":{"ha":886,"x_min":64,"x_max":806,"o":"m 507 -17 q 333 13 414 -17 q 192 101 251 43 q 98 247 132 160 q 64 447 64 333 q 99 648 64 560 q 194 797 133 736 q 335 890 254 858 q 506 922 415 922 q 675 886 604 922 q 790 804 746 850 l 683 674 q 610 725 649 704 q 513 746 571 746 q 416 726 460 746 q 340 668 372 706 q 291 576 308 631 q 274 454 274 522 q 337 237 274 314 q 528 160 400 160 q 582 167 556 160 q 625 188 608 174 l 625 343 l 475 343 l 475 510 l 806 510 l 806 93 q 681 15 758 47 q 507 -17 603 -17 m 510 968 q 349 1017 406 968 q 283 1158 293 1065 l 394 1178 q 433 1110 404 1135 q 510 1086 463 1086 q 586 1110 557 1086 q 625 1178 615 1135 l 736 1158 q 670 1017 726 1065 q 510 968 614 968 z "},"Ġ":{"ha":886,"x_min":64,"x_max":806,"o":"m 507 -17 q 333 13 414 -17 q 192 101 251 43 q 98 247 132 160 q 64 447 64 333 q 99 648 64 560 q 194 797 133 736 q 335 890 254 858 q 506 922 415 922 q 675 886 604 922 q 790 804 746 850 l 683 674 q 610 725 649 704 q 513 746 571 746 q 416 726 460 746 q 340 668 372 706 q 291 576 308 631 q 274 454 274 522 q 337 237 274 314 q 528 160 400 160 q 582 167 556 160 q 625 188 608 174 l 625 343 l 475 343 l 475 510 l 806 510 l 806 93 q 681 15 758 47 q 507 -17 603 -17 m 510 974 q 425 1003 458 974 q 392 1081 392 1033 q 425 1158 392 1128 q 510 1188 458 1188 q 594 1158 561 1188 q 628 1081 628 1128 q 594 1003 628 1033 q 510 974 561 974 z "},"Ģ":{"ha":886,"x_min":64,"x_max":806,"o":"m 507 -17 q 333 13 414 -17 q 192 101 251 43 q 98 247 132 160 q 64 447 64 333 q 99 648 64 560 q 194 797 133 736 q 335 890 254 858 q 506 922 415 922 q 675 886 604 922 q 790 804 746 850 l 683 674 q 610 725 649 704 q 513 746 571 746 q 416 726 460 746 q 340 668 372 706 q 291 576 308 631 q 274 454 274 522 q 337 237 274 314 q 528 160 400 160 q 582 167 556 160 q 625 188 608 174 l 625 343 l 475 343 l 475 510 l 806 510 l 806 93 q 681 15 758 47 q 507 -17 603 -17 m 363 -332 l 347 -250 q 460 -233 429 -246 q 490 -196 490 -219 q 469 -164 490 -176 q 401 -147 449 -151 l 440 -72 q 594 -110 551 -82 q 636 -189 636 -137 q 565 -294 636 -260 q 363 -332 493 -328 z "},"Ǧ":{"ha":886,"x_min":64,"x_max":806,"o":"m 507 -17 q 333 13 414 -17 q 192 101 251 43 q 98 247 132 160 q 64 447 64 333 q 99 648 64 560 q 194 797 133 736 q 335 890 254 858 q 506 922 415 922 q 675 886 604 922 q 790 804 746 850 l 683 674 q 610 725 649 704 q 513 746 571 746 q 416 726 460 746 q 340 668 372 706 q 291 576 308 631 q 274 454 274 522 q 337 237 274 314 q 528 160 400 160 q 582 167 556 160 q 625 188 608 174 l 625 343 l 475 343 l 475 510 l 806 510 l 806 93 q 681 15 758 47 q 507 -17 603 -17 m 399 975 l 274 1128 l 363 1183 l 507 1067 l 513 1067 l 657 1183 l 746 1128 l 621 975 l 399 975 z "},"Ḡ":{"ha":886,"x_min":64,"x_max":806,"o":"m 507 -17 q 333 13 414 -17 q 192 101 251 43 q 98 247 132 160 q 64 447 64 333 q 99 648 64 560 q 194 797 133 736 q 335 890 254 858 q 506 922 415 922 q 675 886 604 922 q 790 804 746 850 l 683 674 q 610 725 649 704 q 513 746 571 746 q 416 726 460 746 q 340 668 372 706 q 291 576 308 631 q 274 454 274 522 q 337 237 274 314 q 528 160 400 160 q 582 167 556 160 q 625 188 608 174 l 625 343 l 475 343 l 475 510 l 806 510 l 806 93 q 681 15 758 47 q 507 -17 603 -17 m 300 1001 l 300 1132 l 719 1132 l 719 1001 l 300 1001 z "},"Ɠ":{"ha":886,"x_min":64,"x_max":894,"o":"m 507 -17 q 333 13 414 -17 q 192 101 251 43 q 98 247 132 160 q 64 447 64 333 q 99 648 64 560 q 194 797 133 736 q 335 890 254 858 q 506 922 415 922 q 543 921 525 922 q 578 917 561 919 q 577 928 578 924 q 576 940 576 933 q 590 1016 576 981 q 628 1078 603 1051 q 692 1121 654 1106 q 776 1136 729 1136 q 847 1131 819 1136 q 894 1118 874 1125 l 858 967 q 839 974 847 971 q 819 976 831 976 q 768 959 788 976 q 749 910 749 942 q 761 862 749 882 q 790 821 774 842 l 683 689 q 610 729 649 713 q 513 746 571 746 q 416 726 460 746 q 340 668 372 706 q 291 576 308 631 q 274 454 274 522 q 337 237 274 314 q 528 160 400 160 q 582 167 556 160 q 625 188 608 174 l 625 343 l 475 343 l 475 510 l 806 510 l 806 93 q 681 15 758 47 q 507 -17 603 -17 z "},"Ĥ":{"ha":936,"x_min":107,"x_max":829,"o":"m 107 0 l 107 906 l 311 906 l 311 557 l 624 557 l 624 906 l 829 906 l 829 0 l 624 0 l 624 378 l 311 378 l 311 0 l 107 0 m 231 1006 l 356 1160 l 578 1160 l 703 1006 l 614 951 l 469 1068 l 464 1068 l 319 951 l 231 1006 z "},"Ḥ":{"ha":936,"x_min":107,"x_max":829,"o":"m 107 0 l 107 906 l 311 906 l 311 557 l 624 557 l 624 906 l 829 906 l 829 0 l 624 0 l 624 378 l 311 378 l 311 0 l 107 0 m 467 -312 q 385 -283 417 -312 q 354 -206 354 -253 q 385 -128 354 -158 q 467 -99 417 -99 q 548 -128 517 -99 q 579 -206 579 -158 q 548 -283 579 -253 q 467 -312 517 -312 z "},"Ḫ":{"ha":936,"x_min":107,"x_max":829,"o":"m 107 0 l 107 906 l 311 906 l 311 557 l 624 557 l 624 906 l 829 906 l 829 0 l 624 0 l 624 378 l 311 378 l 311 0 l 107 0 m 467 -322 q 364 -306 407 -322 q 292 -259 321 -289 q 248 -190 263 -229 q 232 -104 233 -150 l 349 -85 q 383 -162 356 -129 q 467 -194 411 -194 q 550 -162 522 -194 q 585 -85 578 -129 l 701 -104 q 685 -190 700 -150 q 642 -259 671 -229 q 570 -306 614 -289 q 467 -322 526 -322 z "},"Ħ":{"ha":989,"x_min":35,"x_max":954,"o":"m 35 675 l 35 765 l 135 774 l 135 906 l 339 906 l 339 774 l 651 774 l 651 906 l 857 906 l 857 774 l 954 774 l 954 675 l 857 675 l 857 0 l 651 0 l 651 378 l 339 378 l 339 0 l 135 0 l 135 675 l 35 675 m 339 557 l 651 557 l 651 675 l 339 675 l 339 557 z "},"Ì":{"ha":418,"x_min":-32,"x_max":314,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m 222 944 l -32 1110 l 76 1242 l 314 1047 l 222 944 z "},"Í":{"ha":418,"x_min":103,"x_max":449,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m 194 944 l 103 1047 l 340 1242 l 449 1110 l 194 944 z "},"Î":{"ha":418,"x_min":-28,"x_max":444,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m -28 1006 l 97 1160 l 319 1160 l 444 1006 l 356 951 l 211 1068 l 206 1068 l 61 951 l -28 1006 z "},"Ĩ":{"ha":418,"x_min":-67,"x_max":483,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m 307 961 q 242 974 269 961 q 192 1001 214 986 q 151 1029 169 1017 q 117 1042 133 1042 q 83 1026 97 1042 q 65 974 69 1011 l -67 983 q -12 1136 -61 1089 q 110 1183 36 1183 q 175 1171 147 1183 q 225 1143 203 1158 q 265 1115 247 1128 q 300 1103 283 1103 q 333 1118 319 1103 q 351 1171 347 1133 l 483 1161 q 429 1009 478 1057 q 307 961 381 961 z "},"Ï":{"ha":418,"x_min":-43,"x_max":460,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m 54 972 q -16 1000 11 972 q -43 1069 -43 1028 q -16 1139 -43 1111 q 54 1167 11 1167 q 124 1139 97 1167 q 151 1069 151 1111 q 124 1000 151 1028 q 54 972 97 972 m 363 972 q 292 1000 319 972 q 265 1069 265 1028 q 292 1139 265 1111 q 363 1167 319 1167 q 433 1139 406 1167 q 460 1069 460 1111 q 433 1000 460 1028 q 363 972 406 972 z "},"Ī":{"ha":418,"x_min":-1,"x_max":418,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m -1 1001 l -1 1132 l 418 1132 l 418 1001 l -1 1001 z "},"İ":{"ha":418,"x_min":90,"x_max":326,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m 208 974 q 124 1003 157 974 q 90 1081 90 1033 q 124 1158 90 1128 q 208 1188 157 1188 q 293 1158 260 1188 q 326 1081 326 1128 q 293 1003 326 1033 q 208 974 260 974 z "},"Ǐ":{"ha":418,"x_min":-28,"x_max":444,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m 97 975 l -28 1128 l 61 1183 l 206 1067 l 211 1067 l 356 1183 l 444 1128 l 319 975 l 97 975 z "},"Ỉ":{"ha":418,"x_min":83,"x_max":342,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m 149 960 l 132 1040 q 176 1054 158 1046 q 194 1082 194 1063 q 169 1113 194 1101 q 83 1129 144 1125 l 107 1231 q 289 1194 236 1228 q 342 1104 342 1160 q 326 1042 342 1068 q 285 999 311 1017 q 223 972 258 982 q 149 960 188 963 z "},"Ị":{"ha":418,"x_min":96,"x_max":321,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m 208 -312 q 127 -283 158 -312 q 96 -206 96 -253 q 127 -128 96 -158 q 208 -99 158 -99 q 290 -128 258 -99 q 321 -206 321 -158 q 290 -283 321 -253 q 208 -312 258 -312 z "},"Į":{"ha":418,"x_min":58,"x_max":363,"o":"m 218 -310 q 105 -276 151 -310 q 58 -179 58 -242 q 69 -118 58 -146 q 94 -67 79 -90 q 128 -28 110 -44 q 161 0 146 -11 l 107 0 l 107 906 l 311 906 l 311 0 q 232 -56 256 -24 q 208 -125 208 -89 q 226 -165 208 -153 q 265 -178 244 -178 q 294 -172 281 -178 q 317 -158 307 -165 l 363 -261 q 295 -296 336 -282 q 218 -310 254 -310 z "},"Ĭ":{"ha":418,"x_min":-18,"x_max":435,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m 208 968 q 48 1017 104 968 q -18 1158 -8 1065 l 93 1178 q 132 1110 103 1135 q 208 1086 161 1086 q 285 1110 256 1086 q 324 1178 314 1135 l 435 1158 q 369 1017 425 1065 q 208 968 313 968 z "},"Ĵ":{"ha":707,"x_min":22,"x_max":735,"o":"m 314 -17 q 140 24 210 -17 q 22 147 69 64 l 161 250 q 219 182 186 204 q 288 160 253 160 q 372 194 343 160 q 400 318 400 228 l 400 906 l 604 906 l 604 301 q 587 178 604 236 q 534 76 569 119 q 444 8 499 33 q 314 -17 389 -17 m 263 1006 l 388 1160 l 610 1160 l 735 1006 l 646 951 l 501 1068 l 496 1068 l 351 951 l 263 1006 z "},"Ķ":{"ha":853,"x_min":107,"x_max":861,"o":"m 107 0 l 107 906 l 311 906 l 311 535 l 317 535 l 586 906 l 811 906 l 538 544 l 861 0 l 638 0 l 417 382 l 311 243 l 311 0 l 107 0 m 319 -332 l 304 -250 q 417 -233 386 -246 q 447 -196 447 -219 q 426 -164 447 -176 q 358 -147 406 -151 l 397 -72 q 551 -110 508 -82 q 593 -189 593 -137 q 522 -294 593 -260 q 319 -332 450 -328 z "},"Ḳ":{"ha":853,"x_min":107,"x_max":861,"o":"m 107 0 l 107 906 l 311 906 l 311 535 l 317 535 l 586 906 l 811 906 l 538 544 l 861 0 l 638 0 l 417 382 l 311 243 l 311 0 l 107 0 m 461 -312 q 380 -283 411 -312 q 349 -206 349 -253 q 380 -128 349 -158 q 461 -99 411 -99 q 542 -128 511 -99 q 574 -206 574 -158 q 542 -283 574 -253 q 461 -312 511 -312 z "},"Ḵ":{"ha":853,"x_min":107,"x_max":861,"o":"m 107 0 l 107 906 l 311 906 l 311 535 l 317 535 l 586 906 l 811 906 l 538 544 l 861 0 l 638 0 l 417 382 l 311 243 l 311 0 l 107 0 m 254 -260 l 254 -131 l 665 -131 l 665 -260 l 254 -260 z "},"Ĺ":{"ha":719,"x_min":107,"x_max":669,"o":"m 107 0 l 107 906 l 311 906 l 311 172 l 669 172 l 669 0 l 107 0 m 200 944 l 108 1047 l 346 1242 l 454 1110 l 200 944 z "},"Ľ":{"ha":719,"x_min":107,"x_max":669,"o":"m 107 0 l 107 906 l 311 906 l 311 172 l 669 172 l 669 0 l 107 0 m 490 710 l 482 1018 l 614 1018 l 611 922 l 578 710 l 490 710 z "},"Ļ":{"ha":719,"x_min":107,"x_max":669,"o":"m 107 0 l 107 906 l 311 906 l 311 172 l 669 172 l 669 0 l 107 0 m 261 -332 l 246 -250 q 358 -233 328 -246 q 389 -196 389 -219 q 368 -164 389 -176 q 300 -147 347 -151 l 339 -72 q 492 -110 450 -82 q 535 -189 535 -137 q 463 -294 535 -260 q 261 -332 392 -328 z "},"Ŀ":{"ha":719,"x_min":107,"x_max":693,"o":"m 107 0 l 107 906 l 311 906 l 311 172 l 669 172 l 669 0 l 107 0 m 569 328 q 481 365 517 328 q 446 456 446 401 q 481 548 446 511 q 569 585 517 585 q 658 548 622 585 q 693 456 693 511 q 658 365 693 401 q 569 328 622 328 z "},"Ḷ":{"ha":719,"x_min":107,"x_max":669,"o":"m 107 0 l 107 906 l 311 906 l 311 172 l 669 172 l 669 0 l 107 0 m 403 -312 q 322 -283 353 -312 q 290 -206 290 -253 q 322 -128 290 -158 q 403 -99 353 -99 q 484 -128 453 -99 q 515 -206 515 -158 q 484 -283 515 -253 q 403 -312 453 -312 z "},"Ḹ":{"ha":719,"x_min":4,"x_max":669,"o":"m 107 0 l 107 906 l 311 906 l 311 172 l 669 172 l 669 0 l 107 0 m 4 1001 l 4 1132 l 424 1132 l 424 1001 l 4 1001 m 403 -312 q 322 -283 353 -312 q 290 -206 290 -253 q 322 -128 290 -158 q 403 -99 353 -99 q 484 -128 453 -99 q 515 -206 515 -158 q 484 -283 515 -253 q 403 -312 453 -312 z "},"Ḻ":{"ha":719,"x_min":107,"x_max":669,"o":"m 107 0 l 107 906 l 311 906 l 311 172 l 669 172 l 669 0 l 107 0 m 197 -260 l 197 -131 l 608 -131 l 608 -260 l 197 -260 z "},"Ł":{"ha":728,"x_min":-32,"x_max":679,"o":"m 38 244 l -32 367 l 117 450 l 117 906 l 321 906 l 321 544 l 540 665 l 610 543 l 321 386 l 321 172 l 679 172 l 679 0 l 117 0 l 117 292 l 38 244 z "},"Ḿ":{"ha":1058,"x_min":107,"x_max":951,"o":"m 107 0 l 107 906 l 331 906 l 476 503 q 503 420 490 463 q 529 336 515 378 l 535 336 q 560 420 549 378 q 586 503 572 463 l 729 906 l 951 906 l 951 0 l 765 0 l 765 332 q 768 406 765 365 q 775 487 771 446 q 783 567 779 528 q 792 640 788 607 l 786 640 l 713 425 l 583 79 l 471 79 l 342 425 l 269 640 l 264 640 q 272 567 268 607 q 281 487 276 528 q 288 406 285 446 q 290 332 290 365 l 290 0 l 107 0 m 515 944 l 424 1047 l 661 1242 l 769 1110 l 515 944 z "},"Ṁ":{"ha":1058,"x_min":107,"x_max":951,"o":"m 107 0 l 107 906 l 331 906 l 476 503 q 503 420 490 463 q 529 336 515 378 l 535 336 q 560 420 549 378 q 586 503 572 463 l 729 906 l 951 906 l 951 0 l 765 0 l 765 332 q 768 406 765 365 q 775 487 771 446 q 783 567 779 528 q 792 640 788 607 l 786 640 l 713 425 l 583 79 l 471 79 l 342 425 l 269 640 l 264 640 q 272 567 268 607 q 281 487 276 528 q 288 406 285 446 q 290 332 290 365 l 290 0 l 107 0 m 529 974 q 444 1003 478 974 q 411 1081 411 1033 q 444 1158 411 1128 q 529 1188 478 1188 q 614 1158 581 1188 q 647 1081 647 1128 q 614 1003 647 1033 q 529 974 581 974 z "},"Ṃ":{"ha":1058,"x_min":107,"x_max":951,"o":"m 107 0 l 107 906 l 331 906 l 476 503 q 503 420 490 463 q 529 336 515 378 l 535 336 q 560 420 549 378 q 586 503 572 463 l 729 906 l 951 906 l 951 0 l 765 0 l 765 332 q 768 406 765 365 q 775 487 771 446 q 783 567 779 528 q 792 640 788 607 l 786 640 l 713 425 l 583 79 l 471 79 l 342 425 l 269 640 l 264 640 q 272 567 268 607 q 281 487 276 528 q 288 406 285 446 q 290 332 290 365 l 290 0 l 107 0 m 532 -312 q 451 -283 482 -312 q 419 -206 419 -253 q 451 -128 419 -158 q 532 -99 482 -99 q 613 -128 582 -99 q 644 -206 644 -158 q 613 -283 644 -253 q 532 -312 582 -312 z "},"Ń":{"ha":924,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 317 906 l 553 456 l 642 256 l 647 256 q 631 417 640 328 q 622 586 622 506 l 622 906 l 817 906 l 817 0 l 607 0 l 371 451 l 282 649 l 276 649 q 292 488 283 574 q 301 321 301 401 l 301 0 l 107 0 m 449 944 l 357 1047 l 594 1242 l 703 1110 l 449 944 z "},"Ǹ":{"ha":924,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 317 906 l 553 456 l 642 256 l 647 256 q 631 417 640 328 q 622 586 622 506 l 622 906 l 817 906 l 817 0 l 607 0 l 371 451 l 282 649 l 276 649 q 292 488 283 574 q 301 321 301 401 l 301 0 l 107 0 m 476 944 l 222 1110 l 331 1242 l 568 1047 l 476 944 z "},"Ň":{"ha":924,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 317 906 l 553 456 l 642 256 l 647 256 q 631 417 640 328 q 622 586 622 506 l 622 906 l 817 906 l 817 0 l 607 0 l 371 451 l 282 649 l 276 649 q 292 488 283 574 q 301 321 301 401 l 301 0 l 107 0 m 351 975 l 226 1128 l 315 1183 l 460 1067 l 465 1067 l 610 1183 l 699 1128 l 574 975 l 351 975 z "},"Ñ":{"ha":924,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 317 906 l 553 456 l 642 256 l 647 256 q 631 417 640 328 q 622 586 622 506 l 622 906 l 817 906 l 817 0 l 607 0 l 371 451 l 282 649 l 276 649 q 292 488 283 574 q 301 321 301 401 l 301 0 l 107 0 m 561 961 q 496 974 524 961 q 446 1001 468 986 q 406 1029 424 1017 q 371 1042 388 1042 q 338 1026 351 1042 q 319 974 324 1011 l 188 983 q 242 1136 193 1089 q 364 1183 290 1183 q 429 1171 401 1183 q 479 1143 457 1158 q 519 1115 501 1128 q 554 1103 538 1103 q 588 1118 574 1103 q 606 1171 601 1133 l 738 1161 q 683 1009 732 1057 q 561 961 635 961 z "},"Ņ":{"ha":924,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 317 906 l 553 456 l 642 256 l 647 256 q 631 417 640 328 q 622 586 622 506 l 622 906 l 817 906 l 817 0 l 607 0 l 371 451 l 282 649 l 276 649 q 292 488 283 574 q 301 321 301 401 l 301 0 l 107 0 m 335 -332 l 319 -250 q 432 -233 401 -246 q 463 -196 463 -219 q 442 -164 463 -176 q 374 -147 421 -151 l 413 -72 q 566 -110 524 -82 q 608 -189 608 -137 q 537 -294 608 -260 q 335 -332 465 -328 z "},"Ṅ":{"ha":924,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 317 906 l 553 456 l 642 256 l 647 256 q 631 417 640 328 q 622 586 622 506 l 622 906 l 817 906 l 817 0 l 607 0 l 371 451 l 282 649 l 276 649 q 292 488 283 574 q 301 321 301 401 l 301 0 l 107 0 m 463 974 q 378 1003 411 974 q 344 1081 344 1033 q 378 1158 344 1128 q 463 1188 411 1188 q 547 1158 514 1188 q 581 1081 581 1128 q 547 1003 581 1033 q 463 974 514 974 z "},"Ṇ":{"ha":924,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 317 906 l 553 456 l 642 256 l 647 256 q 631 417 640 328 q 622 586 622 506 l 622 906 l 817 906 l 817 0 l 607 0 l 371 451 l 282 649 l 276 649 q 292 488 283 574 q 301 321 301 401 l 301 0 l 107 0 m 476 -312 q 395 -283 426 -312 q 364 -206 364 -253 q 395 -128 364 -158 q 476 -99 426 -99 q 558 -128 526 -99 q 589 -206 589 -158 q 558 -283 589 -253 q 476 -312 526 -312 z "},"Ṉ":{"ha":924,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 317 906 l 553 456 l 642 256 l 647 256 q 631 417 640 328 q 622 586 622 506 l 622 906 l 817 906 l 817 0 l 607 0 l 371 451 l 282 649 l 276 649 q 292 488 283 574 q 301 321 301 401 l 301 0 l 107 0 m 271 -260 l 271 -131 l 682 -131 l 682 -260 l 271 -260 z "},"Ò":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 489 944 l 235 1110 l 343 1242 l 581 1047 l 489 944 z "},"Ó":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 461 944 l 369 1047 l 607 1242 l 715 1110 l 461 944 z "},"Ô":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 239 1006 l 364 1160 l 586 1160 l 711 1006 l 622 951 l 478 1068 l 472 1068 l 328 951 l 239 1006 z "},"Õ":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 574 961 q 508 974 536 961 q 458 1001 481 986 q 418 1029 436 1017 q 383 1042 400 1042 q 350 1026 364 1042 q 332 974 336 1011 l 200 983 q 254 1136 206 1089 q 376 1183 303 1183 q 442 1171 414 1183 q 492 1143 469 1158 q 532 1115 514 1128 q 567 1103 550 1103 q 600 1118 586 1103 q 618 1171 614 1133 l 750 1161 q 696 1009 744 1057 q 574 961 647 961 z "},"Ö":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 321 972 q 251 1000 278 972 q 224 1069 224 1028 q 251 1139 224 1111 q 321 1167 278 1167 q 391 1139 364 1167 q 418 1069 418 1111 q 391 1000 418 1028 q 321 972 364 972 m 629 972 q 559 1000 586 972 q 532 1069 532 1028 q 559 1139 532 1111 q 629 1167 586 1167 q 699 1139 672 1167 q 726 1069 726 1111 q 699 1000 726 1028 q 629 972 672 972 z "},"Ō":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 265 1001 l 265 1132 l 685 1132 l 685 1001 l 265 1001 z "},"Ő":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 288 1011 l 428 1235 l 557 1163 l 388 964 l 288 1011 m 547 1011 l 688 1235 l 818 1163 l 649 964 l 547 1011 z "},"Ǒ":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 364 975 l 239 1128 l 328 1183 l 472 1067 l 478 1067 l 622 1183 l 711 1128 l 586 975 l 364 975 z "},"Ọ":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 475 -312 q 394 -283 425 -312 q 363 -206 363 -253 q 394 -128 363 -158 q 475 -99 425 -99 q 556 -128 525 -99 q 588 -206 588 -158 q 556 -283 588 -253 q 475 -312 525 -312 z "},"Ỏ":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 415 960 l 399 1040 q 443 1054 425 1046 q 461 1082 461 1063 q 436 1113 461 1101 q 350 1129 411 1125 l 374 1231 q 556 1194 503 1228 q 608 1104 608 1160 q 593 1042 608 1068 q 551 999 578 1017 q 490 972 525 982 q 415 960 454 963 z "},"Ố":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 344 951 l 263 1006 l 388 1144 l 563 1144 l 688 1006 l 606 951 l 478 1051 l 472 1051 l 344 951 m 686 1054 l 625 1124 l 764 1243 l 832 1160 l 686 1054 z "},"Ồ":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 344 951 l 263 1006 l 388 1144 l 563 1144 l 688 1006 l 606 951 l 478 1051 l 472 1051 l 344 951 m 325 1122 l 264 1054 l 124 1161 l 190 1243 l 325 1122 z "},"Ổ":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 344 951 l 263 1006 l 388 1144 l 563 1144 l 688 1006 l 606 951 l 478 1051 l 472 1051 l 344 951 m 665 1042 l 650 1107 q 682 1119 669 1111 q 694 1144 694 1126 q 676 1175 694 1164 q 604 1190 657 1186 l 622 1274 q 781 1240 736 1271 q 826 1163 826 1208 q 780 1074 826 1101 q 665 1042 733 1047 z "},"Ỗ":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 344 951 l 263 1006 l 388 1133 l 563 1133 l 688 1006 l 606 951 l 478 1039 l 472 1039 l 344 951 m 263 1183 q 300 1300 267 1263 q 392 1338 333 1338 q 443 1328 421 1338 q 483 1307 465 1318 q 516 1286 501 1296 q 546 1276 531 1276 q 590 1331 582 1276 l 688 1318 q 650 1201 683 1239 q 558 1164 617 1164 q 507 1174 529 1164 q 467 1194 485 1183 q 433 1215 449 1206 q 404 1225 418 1225 q 360 1172 368 1225 l 263 1183 z "},"Ộ":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 239 1006 l 364 1160 l 586 1160 l 711 1006 l 622 951 l 478 1068 l 472 1068 l 328 951 l 239 1006 m 475 -312 q 394 -283 425 -312 q 363 -206 363 -253 q 394 -128 363 -158 q 475 -99 425 -99 q 556 -128 525 -99 q 588 -206 588 -158 q 556 -283 588 -253 q 475 -312 525 -312 z "},"Ŏ":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 475 968 q 315 1017 371 968 q 249 1158 258 1065 l 360 1178 q 399 1110 369 1135 q 475 1086 428 1086 q 551 1110 522 1086 q 590 1178 581 1135 l 701 1158 q 635 1017 692 1065 q 475 968 579 968 z "},"Ṓ":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 432 1158 l 364 1250 l 579 1399 l 663 1286 l 432 1158 m 265 1001 l 265 1132 l 685 1132 l 685 1001 l 265 1001 z "},"Ø":{"ha":950,"x_min":56,"x_max":917,"o":"m 476 -17 q 247 50 346 -17 l 161 -57 l 56 24 l 151 143 q 88 282 111 203 q 65 457 65 361 q 95 655 65 568 q 179 801 125 742 q 309 891 233 860 q 476 922 385 922 q 719 849 618 922 l 811 963 l 917 881 l 811 750 q 867 620 847 693 q 888 457 888 547 q 858 258 888 346 q 774 110 828 171 q 644 16 719 49 q 476 -17 568 -17 m 275 457 q 280 383 275 418 q 293 319 285 349 l 599 699 q 476 746 549 746 q 329 669 383 746 q 275 457 275 593 m 476 160 q 624 240 569 160 q 678 457 678 319 q 665 569 678 519 l 367 199 q 476 160 414 160 z "},"Œ":{"ha":1210,"x_min":64,"x_max":1136,"o":"m 518 0 q 338 28 421 0 q 194 112 256 56 q 99 254 133 168 q 64 457 64 340 q 99 658 64 574 q 195 798 133 743 q 342 879 257 853 q 529 906 428 906 l 1122 906 l 1122 733 l 779 733 l 779 551 l 1068 551 l 1068 381 l 779 381 l 779 172 l 1136 172 l 1136 0 l 518 0 m 542 165 l 574 165 l 574 740 l 542 740 q 433 726 482 740 q 348 680 383 713 q 293 593 313 647 q 274 457 274 539 q 293 319 274 375 q 348 228 313 263 q 433 180 383 194 q 542 165 482 165 z "},"Ơ":{"ha":950,"x_min":65,"x_max":924,"o":"m 476 -17 q 309 16 385 -17 q 179 110 233 49 q 95 258 125 171 q 65 457 65 346 q 95 655 65 568 q 179 801 125 742 q 309 891 233 860 q 476 922 385 922 q 669 879 583 922 q 731 913 710 890 q 753 979 753 935 q 746 1031 753 1007 q 731 1069 739 1054 l 882 1131 q 911 1072 899 1107 q 924 994 924 1036 q 883 876 924 919 q 764 811 843 832 q 855 662 822 750 q 888 457 888 574 q 858 258 888 346 q 774 110 828 171 q 644 16 719 49 q 476 -17 568 -17 m 476 160 q 624 240 569 160 q 678 457 678 319 q 624 669 678 593 q 476 746 569 746 q 329 669 383 746 q 275 457 275 593 q 329 240 275 319 q 476 160 383 160 z "},"Ớ":{"ha":950,"x_min":65,"x_max":924,"o":"m 476 -17 q 309 16 385 -17 q 179 110 233 49 q 95 258 125 171 q 65 457 65 346 q 95 655 65 568 q 179 801 125 742 q 309 891 233 860 q 476 922 385 922 q 669 879 583 922 q 731 913 710 890 q 753 979 753 935 q 746 1031 753 1007 q 731 1069 739 1054 l 882 1131 q 911 1072 899 1107 q 924 994 924 1036 q 883 876 924 919 q 764 811 843 832 q 855 662 822 750 q 888 457 888 574 q 858 258 888 346 q 774 110 828 171 q 644 16 719 49 q 476 -17 568 -17 m 476 160 q 624 240 569 160 q 678 457 678 319 q 624 669 678 593 q 476 746 569 746 q 329 669 383 746 q 275 457 275 593 q 329 240 275 319 q 476 160 383 160 m 461 944 l 369 1047 l 607 1242 l 715 1110 l 461 944 z "},"Ờ":{"ha":950,"x_min":65,"x_max":924,"o":"m 476 -17 q 309 16 385 -17 q 179 110 233 49 q 95 258 125 171 q 65 457 65 346 q 95 655 65 568 q 179 801 125 742 q 309 891 233 860 q 476 922 385 922 q 669 879 583 922 q 731 913 710 890 q 753 979 753 935 q 746 1031 753 1007 q 731 1069 739 1054 l 882 1131 q 911 1072 899 1107 q 924 994 924 1036 q 883 876 924 919 q 764 811 843 832 q 855 662 822 750 q 888 457 888 574 q 858 258 888 346 q 774 110 828 171 q 644 16 719 49 q 476 -17 568 -17 m 476 160 q 624 240 569 160 q 678 457 678 319 q 624 669 678 593 q 476 746 569 746 q 329 669 383 746 q 275 457 275 593 q 329 240 275 319 q 476 160 383 160 m 489 944 l 235 1110 l 343 1242 l 581 1047 l 489 944 z "},"Ở":{"ha":950,"x_min":65,"x_max":924,"o":"m 476 -17 q 309 16 385 -17 q 179 110 233 49 q 95 258 125 171 q 65 457 65 346 q 95 655 65 568 q 179 801 125 742 q 309 891 233 860 q 476 922 385 922 q 669 879 583 922 q 731 913 710 890 q 753 979 753 935 q 746 1031 753 1007 q 731 1069 739 1054 l 882 1131 q 911 1072 899 1107 q 924 994 924 1036 q 883 876 924 919 q 764 811 843 832 q 855 662 822 750 q 888 457 888 574 q 858 258 888 346 q 774 110 828 171 q 644 16 719 49 q 476 -17 568 -17 m 476 160 q 624 240 569 160 q 678 457 678 319 q 624 669 678 593 q 476 746 569 746 q 329 669 383 746 q 275 457 275 593 q 329 240 275 319 q 476 160 383 160 m 415 960 l 399 1040 q 443 1054 425 1046 q 461 1082 461 1063 q 436 1113 461 1101 q 350 1129 411 1125 l 374 1231 q 556 1194 503 1228 q 608 1104 608 1160 q 593 1042 608 1068 q 551 999 578 1017 q 490 972 525 982 q 415 960 454 963 z "},"Ỡ":{"ha":950,"x_min":65,"x_max":924,"o":"m 476 -17 q 309 16 385 -17 q 179 110 233 49 q 95 258 125 171 q 65 457 65 346 q 95 655 65 568 q 179 801 125 742 q 309 891 233 860 q 476 922 385 922 q 669 879 583 922 q 731 913 710 890 q 753 979 753 935 q 746 1031 753 1007 q 731 1069 739 1054 l 882 1131 q 911 1072 899 1107 q 924 994 924 1036 q 883 876 924 919 q 764 811 843 832 q 855 662 822 750 q 888 457 888 574 q 858 258 888 346 q 774 110 828 171 q 644 16 719 49 q 476 -17 568 -17 m 476 160 q 624 240 569 160 q 678 457 678 319 q 624 669 678 593 q 476 746 569 746 q 329 669 383 746 q 275 457 275 593 q 329 240 275 319 q 476 160 383 160 m 551 961 q 486 974 514 961 q 436 1001 458 986 q 396 1029 414 1017 q 361 1042 378 1042 q 328 1026 342 1042 q 310 974 314 1011 l 178 983 q 232 1136 183 1089 q 354 1183 281 1183 q 419 1171 392 1183 q 469 1143 447 1158 q 510 1115 492 1128 q 544 1103 528 1103 q 578 1118 564 1103 q 596 1171 592 1133 l 728 1161 q 674 1009 722 1057 q 551 961 625 961 z "},"Ợ":{"ha":950,"x_min":65,"x_max":924,"o":"m 476 -17 q 309 16 385 -17 q 179 110 233 49 q 95 258 125 171 q 65 457 65 346 q 95 655 65 568 q 179 801 125 742 q 309 891 233 860 q 476 922 385 922 q 669 879 583 922 q 731 913 710 890 q 753 979 753 935 q 746 1031 753 1007 q 731 1069 739 1054 l 882 1131 q 911 1072 899 1107 q 924 994 924 1036 q 883 876 924 919 q 764 811 843 832 q 855 662 822 750 q 888 457 888 574 q 858 258 888 346 q 774 110 828 171 q 644 16 719 49 q 476 -17 568 -17 m 476 160 q 624 240 569 160 q 678 457 678 319 q 624 669 678 593 q 476 746 569 746 q 329 669 383 746 q 275 457 275 593 q 329 240 275 319 q 476 160 383 160 m 475 -312 q 394 -283 425 -312 q 363 -206 363 -253 q 394 -128 363 -158 q 475 -99 425 -99 q 556 -128 525 -99 q 588 -206 588 -158 q 556 -283 588 -253 q 475 -312 525 -312 z "},"Ǫ":{"ha":950,"x_min":64,"x_max":886,"o":"m 511 -310 q 398 -276 444 -310 q 351 -179 351 -242 q 379 -83 351 -125 q 439 -14 407 -42 q 283 27 353 -8 q 165 123 214 63 q 90 268 117 183 q 64 457 64 353 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 867 288 886 361 q 810 160 847 215 q 719 64 772 104 q 599 -7 665 24 q 523 -63 546 -31 q 500 -125 500 -96 q 518 -165 500 -153 q 558 -178 536 -178 q 585 -172 574 -178 q 608 -158 597 -165 l 656 -261 q 588 -296 628 -282 q 511 -310 547 -310 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 z "},"Ŕ":{"ha":851,"x_min":107,"x_max":826,"o":"m 107 0 l 107 906 l 433 906 q 569 892 506 906 q 679 845 632 878 q 754 758 726 813 q 782 624 782 704 q 738 459 782 524 q 621 363 694 394 l 826 0 l 597 0 l 424 326 l 311 326 l 311 0 l 107 0 m 311 489 l 417 489 q 540 523 497 489 q 582 624 582 557 q 540 717 582 690 q 417 743 497 743 l 311 743 l 311 489 m 414 944 l 322 1047 l 560 1242 l 668 1110 l 414 944 z "},"Ř":{"ha":851,"x_min":107,"x_max":826,"o":"m 107 0 l 107 906 l 433 906 q 569 892 506 906 q 679 845 632 878 q 754 758 726 813 q 782 624 782 704 q 738 459 782 524 q 621 363 694 394 l 826 0 l 597 0 l 424 326 l 311 326 l 311 0 l 107 0 m 311 489 l 417 489 q 540 523 497 489 q 582 624 582 557 q 540 717 582 690 q 417 743 497 743 l 311 743 l 311 489 m 317 975 l 192 1128 l 281 1183 l 425 1067 l 431 1067 l 575 1183 l 664 1128 l 539 975 l 317 975 z "},"Ṙ":{"ha":851,"x_min":107,"x_max":826,"o":"m 107 0 l 107 906 l 433 906 q 569 892 506 906 q 679 845 632 878 q 754 758 726 813 q 782 624 782 704 q 738 459 782 524 q 621 363 694 394 l 826 0 l 597 0 l 424 326 l 311 326 l 311 0 l 107 0 m 311 489 l 417 489 q 540 523 497 489 q 582 624 582 557 q 540 717 582 690 q 417 743 497 743 l 311 743 l 311 489 m 428 974 q 343 1003 376 974 q 310 1081 310 1033 q 343 1158 310 1128 q 428 1188 376 1188 q 513 1158 479 1188 q 546 1081 546 1128 q 513 1003 546 1033 q 428 974 479 974 z "},"Ŗ":{"ha":851,"x_min":107,"x_max":826,"o":"m 107 0 l 107 906 l 433 906 q 569 892 506 906 q 679 845 632 878 q 754 758 726 813 q 782 624 782 704 q 738 459 782 524 q 621 363 694 394 l 826 0 l 597 0 l 424 326 l 311 326 l 311 0 l 107 0 m 311 489 l 417 489 q 540 523 497 489 q 582 624 582 557 q 540 717 582 690 q 417 743 497 743 l 311 743 l 311 489 m 310 -332 l 294 -250 q 407 -233 376 -246 q 438 -196 438 -219 q 417 -164 438 -176 q 349 -147 396 -151 l 388 -72 q 541 -110 499 -82 q 583 -189 583 -137 q 512 -294 583 -260 q 310 -332 440 -328 z "},"Ṛ":{"ha":851,"x_min":107,"x_max":826,"o":"m 107 0 l 107 906 l 433 906 q 569 892 506 906 q 679 845 632 878 q 754 758 726 813 q 782 624 782 704 q 738 459 782 524 q 621 363 694 394 l 826 0 l 597 0 l 424 326 l 311 326 l 311 0 l 107 0 m 311 489 l 417 489 q 540 523 497 489 q 582 624 582 557 q 540 717 582 690 q 417 743 497 743 l 311 743 l 311 489 m 451 -312 q 370 -283 401 -312 q 339 -206 339 -253 q 370 -128 339 -158 q 451 -99 401 -99 q 533 -128 501 -99 q 564 -206 564 -158 q 533 -283 564 -253 q 451 -312 501 -312 z "},"Ṝ":{"ha":851,"x_min":107,"x_max":826,"o":"m 107 0 l 107 906 l 433 906 q 569 892 506 906 q 679 845 632 878 q 754 758 726 813 q 782 624 782 704 q 738 459 782 524 q 621 363 694 394 l 826 0 l 597 0 l 424 326 l 311 326 l 311 0 l 107 0 m 311 489 l 417 489 q 540 523 497 489 q 582 624 582 557 q 540 717 582 690 q 417 743 497 743 l 311 743 l 311 489 m 218 1001 l 218 1132 l 638 1132 l 638 1001 l 218 1001 m 451 -312 q 370 -283 401 -312 q 339 -206 339 -253 q 370 -128 339 -158 q 451 -99 401 -99 q 533 -128 501 -99 q 564 -206 564 -158 q 533 -283 564 -253 q 451 -312 501 -312 z "},"Ṟ":{"ha":851,"x_min":107,"x_max":826,"o":"m 107 0 l 107 906 l 433 906 q 569 892 506 906 q 679 845 632 878 q 754 758 726 813 q 782 624 782 704 q 738 459 782 524 q 621 363 694 394 l 826 0 l 597 0 l 424 326 l 311 326 l 311 0 l 107 0 m 311 489 l 417 489 q 540 523 497 489 q 582 624 582 557 q 540 717 582 690 q 417 743 497 743 l 311 743 l 311 489 m 246 -260 l 246 -131 l 657 -131 l 657 -260 l 246 -260 z "},"Ś":{"ha":772,"x_min":49,"x_max":725,"o":"m 383 -17 q 206 16 294 -17 q 49 114 118 49 l 165 254 q 273 186 214 213 q 389 160 332 160 q 484 183 453 160 q 515 247 515 207 q 506 283 515 268 q 480 310 497 299 q 438 333 463 322 q 385 356 414 343 l 267 406 q 199 442 232 419 q 141 494 167 464 q 100 563 115 524 q 85 653 85 603 q 108 758 85 708 q 175 844 132 807 q 277 901 218 881 q 407 922 336 922 q 563 892 486 922 q 699 803 640 861 l 594 674 q 506 727 550 708 q 407 746 461 746 q 323 724 354 746 q 292 664 292 703 q 302 628 292 643 q 331 602 313 614 q 375 580 350 590 q 429 557 400 569 l 546 510 q 677 418 629 476 q 725 264 725 360 q 702 156 725 207 q 635 67 679 106 q 528 6 592 29 q 383 -17 464 -17 m 390 944 l 299 1047 l 536 1242 l 644 1110 l 390 944 z "},"Ŝ":{"ha":772,"x_min":49,"x_max":725,"o":"m 383 -17 q 206 16 294 -17 q 49 114 118 49 l 165 254 q 273 186 214 213 q 389 160 332 160 q 484 183 453 160 q 515 247 515 207 q 506 283 515 268 q 480 310 497 299 q 438 333 463 322 q 385 356 414 343 l 267 406 q 199 442 232 419 q 141 494 167 464 q 100 563 115 524 q 85 653 85 603 q 108 758 85 708 q 175 844 132 807 q 277 901 218 881 q 407 922 336 922 q 563 892 486 922 q 699 803 640 861 l 594 674 q 506 727 550 708 q 407 746 461 746 q 323 724 354 746 q 292 664 292 703 q 302 628 292 643 q 331 602 313 614 q 375 580 350 590 q 429 557 400 569 l 546 510 q 677 418 629 476 q 725 264 725 360 q 702 156 725 207 q 635 67 679 106 q 528 6 592 29 q 383 -17 464 -17 m 168 1006 l 293 1160 l 515 1160 l 640 1006 l 551 951 l 407 1068 l 401 1068 l 257 951 l 168 1006 z "},"Š":{"ha":772,"x_min":49,"x_max":725,"o":"m 383 -17 q 206 16 294 -17 q 49 114 118 49 l 165 254 q 273 186 214 213 q 389 160 332 160 q 484 183 453 160 q 515 247 515 207 q 506 283 515 268 q 480 310 497 299 q 438 333 463 322 q 385 356 414 343 l 267 406 q 199 442 232 419 q 141 494 167 464 q 100 563 115 524 q 85 653 85 603 q 108 758 85 708 q 175 844 132 807 q 277 901 218 881 q 407 922 336 922 q 563 892 486 922 q 699 803 640 861 l 594 674 q 506 727 550 708 q 407 746 461 746 q 323 724 354 746 q 292 664 292 703 q 302 628 292 643 q 331 602 313 614 q 375 580 350 590 q 429 557 400 569 l 546 510 q 677 418 629 476 q 725 264 725 360 q 702 156 725 207 q 635 67 679 106 q 528 6 592 29 q 383 -17 464 -17 m 293 975 l 168 1128 l 257 1183 l 401 1067 l 407 1067 l 551 1183 l 640 1128 l 515 975 l 293 975 z "},"Ş":{"ha":772,"x_min":49,"x_max":725,"o":"m 383 -17 q 206 16 294 -17 q 49 114 118 49 l 165 254 q 273 186 214 213 q 389 160 332 160 q 484 183 453 160 q 515 247 515 207 q 506 283 515 268 q 480 310 497 299 q 438 333 463 322 q 385 356 414 343 l 267 406 q 199 442 232 419 q 141 494 167 464 q 100 563 115 524 q 85 653 85 603 q 108 758 85 708 q 175 844 132 807 q 277 901 218 881 q 407 922 336 922 q 563 892 486 922 q 699 803 640 861 l 594 674 q 506 727 550 708 q 407 746 461 746 q 323 724 354 746 q 292 664 292 703 q 302 628 292 643 q 331 602 313 614 q 375 580 350 590 q 429 557 400 569 l 546 510 q 677 418 629 476 q 725 264 725 360 q 702 156 725 207 q 635 67 679 106 q 528 6 592 29 q 383 -17 464 -17 m 247 -332 l 232 -250 q 344 -232 314 -246 q 375 -189 375 -218 q 353 -153 375 -168 q 268 -131 332 -139 l 335 6 l 454 6 l 415 -85 q 494 -121 468 -97 q 521 -189 521 -144 q 449 -294 521 -260 q 247 -332 378 -328 z "},"Ș":{"ha":772,"x_min":49,"x_max":725,"o":"m 383 -17 q 206 16 294 -17 q 49 114 118 49 l 165 254 q 273 186 214 213 q 389 160 332 160 q 484 183 453 160 q 515 247 515 207 q 506 283 515 268 q 480 310 497 299 q 438 333 463 322 q 385 356 414 343 l 267 406 q 199 442 232 419 q 141 494 167 464 q 100 563 115 524 q 85 653 85 603 q 108 758 85 708 q 175 844 132 807 q 277 901 218 881 q 407 922 336 922 q 563 892 486 922 q 699 803 640 861 l 594 674 q 506 727 550 708 q 407 746 461 746 q 323 724 354 746 q 292 664 292 703 q 302 628 292 643 q 331 602 313 614 q 375 580 350 590 q 429 557 400 569 l 546 510 q 677 418 629 476 q 725 264 725 360 q 702 156 725 207 q 635 67 679 106 q 528 6 592 29 q 383 -17 464 -17 m 247 -332 l 232 -250 q 344 -233 314 -246 q 375 -196 375 -219 q 354 -164 375 -176 q 286 -147 333 -151 l 325 -72 q 478 -110 436 -82 q 521 -189 521 -137 q 449 -294 521 -260 q 247 -332 378 -328 z "},"Ṡ":{"ha":772,"x_min":49,"x_max":725,"o":"m 383 -17 q 206 16 294 -17 q 49 114 118 49 l 165 254 q 273 186 214 213 q 389 160 332 160 q 484 183 453 160 q 515 247 515 207 q 506 283 515 268 q 480 310 497 299 q 438 333 463 322 q 385 356 414 343 l 267 406 q 199 442 232 419 q 141 494 167 464 q 100 563 115 524 q 85 653 85 603 q 108 758 85 708 q 175 844 132 807 q 277 901 218 881 q 407 922 336 922 q 563 892 486 922 q 699 803 640 861 l 594 674 q 506 727 550 708 q 407 746 461 746 q 323 724 354 746 q 292 664 292 703 q 302 628 292 643 q 331 602 313 614 q 375 580 350 590 q 429 557 400 569 l 546 510 q 677 418 629 476 q 725 264 725 360 q 702 156 725 207 q 635 67 679 106 q 528 6 592 29 q 383 -17 464 -17 m 404 974 q 319 1003 353 974 q 286 1081 286 1033 q 319 1158 286 1128 q 404 1188 353 1188 q 489 1158 456 1188 q 522 1081 522 1128 q 489 1003 522 1033 q 404 974 456 974 z "},"Ṣ":{"ha":772,"x_min":49,"x_max":725,"o":"m 383 -17 q 206 16 294 -17 q 49 114 118 49 l 165 254 q 273 186 214 213 q 389 160 332 160 q 484 183 453 160 q 515 247 515 207 q 506 283 515 268 q 480 310 497 299 q 438 333 463 322 q 385 356 414 343 l 267 406 q 199 442 232 419 q 141 494 167 464 q 100 563 115 524 q 85 653 85 603 q 108 758 85 708 q 175 844 132 807 q 277 901 218 881 q 407 922 336 922 q 563 892 486 922 q 699 803 640 861 l 594 674 q 506 727 550 708 q 407 746 461 746 q 323 724 354 746 q 292 664 292 703 q 302 628 292 643 q 331 602 313 614 q 375 580 350 590 q 429 557 400 569 l 546 510 q 677 418 629 476 q 725 264 725 360 q 702 156 725 207 q 635 67 679 106 q 528 6 592 29 q 383 -17 464 -17 m 389 -312 q 308 -283 339 -312 q 276 -206 276 -253 q 308 -128 276 -158 q 389 -99 339 -99 q 470 -128 439 -99 q 501 -206 501 -158 q 470 -283 501 -253 q 389 -312 439 -312 z "},"ẞ":{"ha":979,"x_min":111,"x_max":925,"o":"m 643 -17 q 488 14 553 -17 q 385 83 424 44 l 492 208 q 556 162 525 175 q 618 149 588 149 q 689 176 663 149 q 715 249 715 204 q 668 326 715 290 q 506 382 621 361 l 492 501 l 643 675 q 589 732 625 707 q 496 757 553 757 q 317 540 317 757 l 317 0 l 111 0 l 111 568 q 134 709 111 644 q 205 821 157 774 q 326 895 253 868 q 501 922 400 922 q 726 852 638 922 q 846 668 814 782 l 696 499 q 789 460 747 482 q 861 408 831 438 q 908 338 892 378 q 925 247 925 299 q 906 143 925 192 q 852 59 888 94 q 764 3 817 24 q 643 -17 711 -17 z "},"Ť":{"ha":772,"x_min":35,"x_max":738,"o":"m 283 0 l 283 733 l 35 733 l 35 906 l 738 906 l 738 733 l 489 733 l 489 0 l 283 0 m 275 975 l 150 1128 l 239 1183 l 383 1067 l 389 1067 l 533 1183 l 622 1128 l 497 975 l 275 975 z "},"Ţ":{"ha":772,"x_min":35,"x_max":738,"o":"m 283 0 l 283 733 l 35 733 l 35 906 l 738 906 l 738 733 l 489 733 l 489 0 l 283 0 m 247 -332 l 232 -250 q 344 -232 314 -246 q 375 -189 375 -218 q 353 -153 375 -168 q 268 -131 332 -139 l 335 6 l 454 6 l 415 -85 q 494 -121 468 -97 q 521 -189 521 -144 q 449 -294 521 -260 q 247 -332 378 -328 z "},"Ț":{"ha":772,"x_min":35,"x_max":738,"o":"m 283 0 l 283 733 l 35 733 l 35 906 l 738 906 l 738 733 l 489 733 l 489 0 l 283 0 m 244 -332 l 229 -250 q 342 -233 311 -246 q 372 -196 372 -219 q 351 -164 372 -176 q 283 -147 331 -151 l 322 -72 q 476 -110 433 -82 q 518 -189 518 -137 q 447 -294 518 -260 q 244 -332 375 -328 z "},"Ṭ":{"ha":772,"x_min":35,"x_max":738,"o":"m 283 0 l 283 733 l 35 733 l 35 906 l 738 906 l 738 733 l 489 733 l 489 0 l 283 0 m 386 -312 q 305 -283 336 -312 q 274 -206 274 -253 q 305 -128 274 -158 q 386 -99 336 -99 q 467 -128 436 -99 q 499 -206 499 -158 q 467 -283 499 -253 q 386 -312 436 -312 z "},"Ṯ":{"ha":772,"x_min":35,"x_max":738,"o":"m 283 0 l 283 733 l 35 733 l 35 906 l 738 906 l 738 733 l 489 733 l 489 0 l 283 0 m 181 -260 l 181 -131 l 592 -131 l 592 -260 l 181 -260 z "},"Ŧ":{"ha":772,"x_min":35,"x_max":738,"o":"m 283 0 l 283 396 l 119 396 l 119 486 l 250 494 l 283 494 l 283 733 l 35 733 l 35 906 l 738 906 l 738 733 l 489 733 l 489 494 l 653 494 l 653 396 l 489 396 l 489 0 l 283 0 z "},"Ù":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 475 944 l 221 1110 l 329 1242 l 567 1047 l 475 944 z "},"Ú":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 447 944 l 356 1047 l 593 1242 l 701 1110 l 447 944 z "},"Û":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 225 1006 l 350 1160 l 572 1160 l 697 1006 l 608 951 l 464 1068 l 458 1068 l 314 951 l 225 1006 z "},"Ũ":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 560 961 q 494 974 522 961 q 444 1001 467 986 q 404 1029 422 1017 q 369 1042 386 1042 q 336 1026 350 1042 q 318 974 322 1011 l 186 983 q 240 1136 192 1089 q 363 1183 289 1183 q 428 1171 400 1183 q 478 1143 456 1158 q 518 1115 500 1128 q 553 1103 536 1103 q 586 1118 572 1103 q 604 1171 600 1133 l 736 1161 q 682 1009 731 1057 q 560 961 633 961 z "},"Ü":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 307 972 q 237 1000 264 972 q 210 1069 210 1028 q 237 1139 210 1111 q 307 1167 264 1167 q 377 1139 350 1167 q 404 1069 404 1111 q 377 1000 404 1028 q 307 972 350 972 m 615 972 q 545 1000 572 972 q 518 1069 518 1028 q 545 1139 518 1111 q 615 1167 572 1167 q 685 1139 658 1167 q 713 1069 713 1111 q 685 1000 713 1028 q 615 972 658 972 z "},"Ū":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 251 1001 l 251 1132 l 671 1132 l 671 1001 l 251 1001 z "},"Ŭ":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 461 968 q 301 1017 357 968 q 235 1158 244 1065 l 346 1178 q 385 1110 356 1135 q 461 1086 414 1086 q 538 1110 508 1086 q 576 1178 567 1135 l 688 1158 q 622 1017 678 1065 q 461 968 565 968 z "},"Ů":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 461 968 q 347 1006 390 968 q 303 1106 303 1043 q 347 1205 303 1168 q 461 1242 390 1242 q 576 1205 532 1242 q 619 1106 619 1168 q 576 1006 619 1043 q 461 968 532 968 m 461 1044 q 502 1061 485 1044 q 519 1106 519 1078 q 502 1149 519 1133 q 461 1165 485 1165 q 420 1149 438 1165 q 403 1106 403 1133 q 420 1061 403 1078 q 461 1044 438 1044 z "},"Ű":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 274 1011 l 414 1235 l 543 1163 l 374 964 l 274 1011 m 533 1011 l 674 1235 l 804 1163 l 635 964 l 533 1011 z "},"Ǔ":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 350 975 l 225 1128 l 314 1183 l 458 1067 l 464 1067 l 608 1183 l 697 1128 l 572 975 l 350 975 z "},"Ǖ":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 307 972 q 246 997 269 972 q 222 1058 222 1022 q 246 1119 222 1094 q 307 1143 269 1143 q 369 1119 344 1143 q 393 1058 393 1094 q 369 997 393 1022 q 307 972 344 972 m 251 1211 l 251 1307 l 671 1307 l 671 1211 l 251 1211 m 615 972 q 553 997 578 972 q 529 1058 529 1022 q 553 1119 529 1094 q 615 1143 578 1143 q 676 1119 653 1143 q 700 1058 700 1094 q 676 997 700 1022 q 615 972 653 972 z "},"Ǘ":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 307 972 q 246 997 269 972 q 222 1058 222 1022 q 246 1119 222 1094 q 307 1143 269 1143 q 369 1119 344 1143 q 393 1058 393 1094 q 369 997 393 1022 q 307 972 344 972 m 385 1200 l 517 1401 l 644 1322 l 472 1146 l 385 1200 m 615 972 q 553 997 578 972 q 529 1058 529 1022 q 553 1119 529 1094 q 615 1143 578 1143 q 676 1119 653 1143 q 700 1058 700 1094 q 676 997 700 1022 q 615 972 653 972 z "},"Ǚ":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 374 1186 l 246 1328 l 328 1382 l 458 1281 l 464 1281 l 594 1382 l 676 1328 l 549 1186 l 374 1186 m 307 972 q 246 997 269 972 q 222 1058 222 1022 q 246 1119 222 1094 q 307 1143 269 1143 q 369 1119 344 1143 q 393 1058 393 1094 q 369 997 393 1022 q 307 972 344 972 m 615 972 q 553 997 578 972 q 529 1058 529 1022 q 553 1119 529 1094 q 615 1143 578 1143 q 676 1119 653 1143 q 700 1058 700 1094 q 676 997 700 1022 q 615 972 653 972 z "},"Ǜ":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 538 1200 l 450 1146 l 278 1322 l 406 1401 l 538 1200 m 307 972 q 246 997 269 972 q 222 1058 222 1022 q 246 1119 222 1094 q 307 1143 269 1143 q 369 1119 344 1143 q 393 1058 393 1094 q 369 997 393 1022 q 307 972 344 972 m 615 972 q 553 997 578 972 q 529 1058 529 1022 q 553 1119 529 1094 q 615 1143 578 1143 q 676 1119 653 1143 q 700 1058 700 1094 q 676 997 700 1022 q 615 972 653 972 z "},"Ụ":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 461 -312 q 380 -283 411 -312 q 349 -206 349 -253 q 380 -128 349 -158 q 461 -99 411 -99 q 542 -128 511 -99 q 574 -206 574 -158 q 542 -283 574 -253 q 461 -312 511 -312 z "},"Ủ":{"ha":924,"x_min":101,"x_max":821,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 401 960 l 385 1040 q 429 1054 411 1046 q 447 1082 447 1063 q 422 1113 447 1101 q 336 1129 397 1125 l 360 1231 q 542 1194 489 1228 q 594 1104 594 1160 q 579 1042 594 1068 q 538 999 564 1017 q 476 972 511 982 q 401 960 440 963 z "},"Ų":{"ha":924,"x_min":101,"x_max":821,"o":"m 496 -310 q 383 -276 429 -310 q 338 -179 338 -242 q 348 -120 338 -147 q 373 -72 358 -93 q 402 -37 388 -51 q 426 -14 417 -22 q 184 101 267 -4 q 101 419 101 206 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 821 906 l 821 419 q 807 256 821 324 q 764 138 793 188 q 690 55 735 89 q 585 -7 646 21 q 509 -64 532 -31 q 486 -125 486 -97 q 504 -165 486 -153 q 544 -178 522 -178 q 571 -172 558 -178 q 594 -158 583 -165 l 642 -261 q 573 -296 614 -282 q 496 -310 532 -310 z "},"Ư":{"ha":949,"x_min":101,"x_max":1007,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 721 906 q 763 911 742 907 q 799 926 783 915 q 826 956 815 936 q 836 1007 836 975 q 829 1058 836 1035 q 814 1097 822 1082 l 965 1158 q 994 1099 981 1135 q 1007 1022 1007 1064 q 958 891 1007 936 q 821 831 908 846 l 821 419 q 730 88 821 192 q 464 -17 639 -17 z "},"Ứ":{"ha":949,"x_min":101,"x_max":1007,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 721 906 q 763 911 742 907 q 799 926 783 915 q 826 956 815 936 q 836 1007 836 975 q 829 1058 836 1035 q 814 1097 822 1082 l 965 1158 q 994 1099 981 1135 q 1007 1022 1007 1064 q 958 891 1007 936 q 821 831 908 846 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 447 944 l 356 1047 l 593 1242 l 701 1110 l 447 944 z "},"Ừ":{"ha":949,"x_min":101,"x_max":1007,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 721 906 q 763 911 742 907 q 799 926 783 915 q 826 956 815 936 q 836 1007 836 975 q 829 1058 836 1035 q 814 1097 822 1082 l 965 1158 q 994 1099 981 1135 q 1007 1022 1007 1064 q 958 891 1007 936 q 821 831 908 846 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 475 944 l 221 1110 l 329 1242 l 567 1047 l 475 944 z "},"Ử":{"ha":949,"x_min":101,"x_max":1007,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 721 906 q 763 911 742 907 q 799 926 783 915 q 826 956 815 936 q 836 1007 836 975 q 829 1058 836 1035 q 814 1097 822 1082 l 965 1158 q 994 1099 981 1135 q 1007 1022 1007 1064 q 958 891 1007 936 q 821 831 908 846 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 401 960 l 385 1040 q 429 1054 411 1046 q 447 1082 447 1063 q 422 1113 447 1101 q 336 1129 397 1125 l 360 1231 q 542 1194 489 1228 q 594 1104 594 1160 q 579 1042 594 1068 q 538 999 564 1017 q 476 972 511 982 q 401 960 440 963 z "},"Ữ":{"ha":949,"x_min":101,"x_max":1007,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 721 906 q 763 911 742 907 q 799 926 783 915 q 826 956 815 936 q 836 1007 836 975 q 829 1058 836 1035 q 814 1097 822 1082 l 965 1158 q 994 1099 981 1135 q 1007 1022 1007 1064 q 958 891 1007 936 q 821 831 908 846 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 560 961 q 494 974 522 961 q 444 1001 467 986 q 404 1029 422 1017 q 369 1042 386 1042 q 336 1026 350 1042 q 318 974 322 1011 l 186 983 q 240 1136 192 1089 q 363 1183 289 1183 q 428 1171 400 1183 q 478 1143 456 1158 q 518 1115 500 1128 q 553 1103 536 1103 q 586 1118 572 1103 q 604 1171 600 1133 l 736 1161 q 682 1009 731 1057 q 560 961 633 961 z "},"Ự":{"ha":949,"x_min":101,"x_max":1007,"o":"m 464 -17 q 194 88 288 -17 q 101 419 101 192 l 101 906 l 307 906 l 307 399 q 347 213 307 265 q 464 160 388 160 q 582 213 540 160 q 624 399 624 265 l 624 906 l 721 906 q 763 911 742 907 q 799 926 783 915 q 826 956 815 936 q 836 1007 836 975 q 829 1058 836 1035 q 814 1097 822 1082 l 965 1158 q 994 1099 981 1135 q 1007 1022 1007 1064 q 958 891 1007 936 q 821 831 908 846 l 821 419 q 730 88 821 192 q 464 -17 639 -17 m 461 -312 q 380 -283 411 -312 q 349 -206 349 -253 q 380 -128 349 -158 q 461 -99 411 -99 q 542 -128 511 -99 q 574 -206 574 -158 q 542 -283 574 -253 q 461 -312 511 -312 z "},"Ẁ":{"ha":1129,"x_min":19,"x_max":1111,"o":"m 188 0 l 19 906 l 229 906 l 292 482 q 310 340 300 411 q 328 196 319 268 l 333 196 q 360 340 347 268 q 388 482 374 411 l 485 906 l 658 906 l 756 482 q 783 341 769 413 q 810 196 796 269 l 815 196 q 834 340 825 269 q 853 482 843 411 l 915 906 l 1111 906 l 950 0 l 693 0 l 604 411 q 584 517 593 464 q 568 621 575 571 l 563 621 q 545 517 554 571 q 525 411 536 464 l 440 0 l 188 0 m 578 944 l 324 1110 l 432 1242 l 669 1047 l 578 944 z "},"Ẃ":{"ha":1129,"x_min":19,"x_max":1111,"o":"m 188 0 l 19 906 l 229 906 l 292 482 q 310 340 300 411 q 328 196 319 268 l 333 196 q 360 340 347 268 q 388 482 374 411 l 485 906 l 658 906 l 756 482 q 783 341 769 413 q 810 196 796 269 l 815 196 q 834 340 825 269 q 853 482 843 411 l 915 906 l 1111 906 l 950 0 l 693 0 l 604 411 q 584 517 593 464 q 568 621 575 571 l 563 621 q 545 517 554 571 q 525 411 536 464 l 440 0 l 188 0 m 550 944 l 458 1047 l 696 1242 l 804 1110 l 550 944 z "},"Ŵ":{"ha":1129,"x_min":19,"x_max":1111,"o":"m 188 0 l 19 906 l 229 906 l 292 482 q 310 340 300 411 q 328 196 319 268 l 333 196 q 360 340 347 268 q 388 482 374 411 l 485 906 l 658 906 l 756 482 q 783 341 769 413 q 810 196 796 269 l 815 196 q 834 340 825 269 q 853 482 843 411 l 915 906 l 1111 906 l 950 0 l 693 0 l 604 411 q 584 517 593 464 q 568 621 575 571 l 563 621 q 545 517 554 571 q 525 411 536 464 l 440 0 l 188 0 m 328 1006 l 453 1160 l 675 1160 l 800 1006 l 711 951 l 567 1068 l 561 1068 l 417 951 l 328 1006 z "},"Ẅ":{"ha":1129,"x_min":19,"x_max":1111,"o":"m 188 0 l 19 906 l 229 906 l 292 482 q 310 340 300 411 q 328 196 319 268 l 333 196 q 360 340 347 268 q 388 482 374 411 l 485 906 l 658 906 l 756 482 q 783 341 769 413 q 810 196 796 269 l 815 196 q 834 340 825 269 q 853 482 843 411 l 915 906 l 1111 906 l 950 0 l 693 0 l 604 411 q 584 517 593 464 q 568 621 575 571 l 563 621 q 545 517 554 571 q 525 411 536 464 l 440 0 l 188 0 m 410 972 q 340 1000 367 972 q 313 1069 313 1028 q 340 1139 313 1111 q 410 1167 367 1167 q 480 1139 453 1167 q 507 1069 507 1111 q 480 1000 507 1028 q 410 972 453 972 m 718 972 q 648 1000 675 972 q 621 1069 621 1028 q 648 1139 621 1111 q 718 1167 675 1167 q 788 1139 761 1167 q 815 1069 815 1111 q 788 1000 815 1028 q 718 972 761 972 z "},"Ỳ":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 m 378 944 l 124 1110 l 232 1242 l 469 1047 l 378 944 z "},"Ý":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 m 350 944 l 258 1047 l 496 1242 l 604 1110 l 350 944 z "},"Ŷ":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 m 128 1006 l 253 1160 l 475 1160 l 600 1006 l 511 951 l 367 1068 l 361 1068 l 217 951 l 128 1006 z "},"Ÿ":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 m 210 972 q 140 1000 167 972 q 113 1069 113 1028 q 140 1139 113 1111 q 210 1167 167 1167 q 280 1139 253 1167 q 307 1069 307 1111 q 280 1000 307 1028 q 210 972 253 972 m 518 972 q 448 1000 475 972 q 421 1069 421 1028 q 448 1139 421 1111 q 518 1167 475 1167 q 588 1139 561 1167 q 615 1069 615 1111 q 588 1000 615 1028 q 518 972 561 972 z "},"Ẏ":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 m 364 974 q 279 1003 313 974 q 246 1081 246 1033 q 279 1158 246 1128 q 364 1188 313 1188 q 449 1158 415 1188 q 482 1081 482 1128 q 449 1003 482 1033 q 364 974 415 974 z "},"Ỵ":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 m 367 -312 q 285 -283 317 -312 q 254 -206 254 -253 q 285 -128 254 -158 q 367 -99 317 -99 q 448 -128 417 -99 q 479 -206 479 -158 q 448 -283 479 -253 q 367 -312 417 -312 z "},"Ỷ":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 m 304 960 l 288 1040 q 332 1054 314 1046 q 350 1082 350 1063 q 325 1113 350 1101 q 239 1129 300 1125 l 263 1231 q 444 1194 392 1228 q 497 1104 497 1160 q 482 1042 497 1068 q 440 999 467 1017 q 378 972 414 982 q 304 960 343 963 z "},"Ỹ":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 m 463 961 q 397 974 425 961 q 347 1001 369 986 q 307 1029 325 1017 q 272 1042 289 1042 q 239 1026 253 1042 q 221 974 225 1011 l 89 983 q 143 1136 94 1089 q 265 1183 192 1183 q 331 1171 303 1183 q 381 1143 358 1158 q 421 1115 403 1128 q 456 1103 439 1103 q 489 1118 475 1103 q 507 1171 503 1133 l 639 1161 q 585 1009 633 1057 q 463 961 536 961 z "},"Ź":{"ha":751,"x_min":50,"x_max":706,"o":"m 50 0 l 50 124 l 450 733 l 88 733 l 88 906 l 701 906 l 701 782 l 301 172 l 706 172 l 706 0 l 50 0 m 378 944 l 286 1047 l 524 1242 l 632 1110 l 378 944 z "},"Ž":{"ha":751,"x_min":50,"x_max":706,"o":"m 50 0 l 50 124 l 450 733 l 88 733 l 88 906 l 701 906 l 701 782 l 301 172 l 706 172 l 706 0 l 50 0 m 281 975 l 156 1128 l 244 1183 l 389 1067 l 394 1067 l 539 1183 l 628 1128 l 503 975 l 281 975 z "},"Ż":{"ha":751,"x_min":50,"x_max":706,"o":"m 50 0 l 50 124 l 450 733 l 88 733 l 88 906 l 701 906 l 701 782 l 301 172 l 706 172 l 706 0 l 50 0 m 392 974 q 307 1003 340 974 q 274 1081 274 1033 q 307 1158 274 1128 q 392 1188 340 1188 q 476 1158 443 1188 q 510 1081 510 1128 q 476 1003 510 1033 q 392 974 443 974 z "},"Ẓ":{"ha":751,"x_min":50,"x_max":706,"o":"m 50 0 l 50 124 l 450 733 l 88 733 l 88 906 l 701 906 l 701 782 l 301 172 l 706 172 l 706 0 l 50 0 m 390 -312 q 309 -283 340 -312 q 278 -206 278 -253 q 309 -128 278 -158 q 390 -99 340 -99 q 472 -128 440 -99 q 503 -206 503 -158 q 472 -283 503 -253 q 390 -312 440 -312 z "},"Ẕ":{"ha":751,"x_min":50,"x_max":706,"o":"m 50 0 l 50 124 l 450 733 l 88 733 l 88 906 l 701 906 l 701 782 l 301 172 l 706 172 l 706 0 l 50 0 m 185 -260 l 185 -131 l 596 -131 l 596 -260 l 185 -260 z "},"Ð":{"ha":917,"x_min":36,"x_max":851,"o":"m 36 418 l 36 510 l 142 517 l 142 906 l 397 906 q 585 879 501 906 q 728 798 668 853 q 819 658 788 743 q 851 457 851 574 q 819 254 851 340 q 729 112 788 168 q 590 28 671 56 q 408 0 508 0 l 142 0 l 142 418 l 36 418 m 346 165 l 385 165 q 490 181 443 165 q 571 230 538 196 q 623 319 604 264 q 642 457 642 375 q 623 592 642 538 q 571 680 604 647 q 490 726 538 713 q 385 740 443 740 l 346 740 l 346 517 l 519 517 l 519 418 l 346 418 l 346 165 z "},"Þ":{"ha":857,"x_min":107,"x_max":792,"o":"m 107 0 l 107 906 l 311 906 l 311 768 l 438 768 q 576 753 511 768 q 688 705 640 739 q 764 615 736 671 q 792 478 792 560 q 763 340 792 397 q 686 244 735 282 q 574 189 638 207 q 438 171 510 171 l 311 171 l 311 0 l 107 0 m 311 333 l 425 333 q 592 478 592 333 q 549 577 592 549 q 425 606 507 606 l 311 606 l 311 333 z "},"Ə":{"ha":938,"x_min":71,"x_max":874,"o":"m 467 -17 q 302 13 375 -17 q 178 102 229 43 q 99 248 126 161 q 71 449 71 335 q 75 517 71 481 l 668 517 q 603 697 657 639 q 449 754 549 754 q 335 728 383 754 q 250 669 286 703 l 157 810 q 288 890 210 858 q 472 922 367 922 q 635 892 561 922 q 763 803 710 863 q 844 657 815 744 q 874 454 874 569 q 844 251 874 339 q 762 103 815 163 q 633 14 708 44 q 467 -17 558 -17 m 467 150 q 598 202 546 150 q 665 367 650 254 l 279 367 q 337 201 288 253 q 467 150 386 150 z "},"Ŋ":{"ha":925,"x_min":107,"x_max":861,"o":"m 572 -17 q 504 -10 540 -17 q 447 10 468 -4 l 492 186 q 517 177 503 181 q 549 174 531 174 q 588 185 569 174 q 621 228 607 197 q 643 316 635 260 q 651 460 651 372 q 608 681 651 615 q 489 746 565 746 q 396 717 446 746 q 311 632 346 688 l 311 0 l 107 0 l 107 906 l 304 906 l 304 808 q 418 893 357 864 q 550 922 479 922 q 674 897 617 922 q 772 817 731 872 q 838 674 814 763 q 861 460 861 586 q 791 100 861 217 q 572 -17 721 -17 z "},"IJ":{"ha":836,"x_min":107,"x_max":731,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m 483 -253 q 412 -247 440 -253 q 361 -233 383 -242 l 399 -82 q 425 -89 413 -86 q 451 -92 438 -92 q 509 -65 493 -92 q 525 19 525 -39 l 525 906 l 731 906 l 731 25 q 718 -83 731 -32 q 677 -171 706 -133 q 601 -231 649 -208 q 483 -253 554 -253 z "},"à":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 368 794 l 117 1013 l 254 1147 l 468 894 l 368 794 z "},"á":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 396 794 l 296 894 l 510 1147 l 647 1013 l 396 794 z "},"â":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 128 851 l 278 1033 l 486 1033 l 636 851 l 558 779 l 385 907 l 379 907 l 206 779 l 128 851 z "},"ã":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 474 796 q 415 810 440 796 q 367 840 389 824 q 328 871 346 857 q 294 885 311 885 q 262 867 274 885 q 246 808 250 849 l 118 815 q 165 975 121 924 q 290 1026 210 1026 q 349 1013 324 1026 q 397 982 375 999 q 435 951 418 965 q 469 938 453 938 q 518 1014 510 938 l 646 1007 q 599 847 643 899 q 474 796 554 796 z "},"ä":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 231 790 q 158 819 186 790 q 131 890 131 847 q 158 960 131 932 q 231 989 186 989 q 302 960 275 989 q 329 890 329 932 q 302 819 329 847 q 231 790 275 790 m 533 790 q 462 819 489 790 q 435 890 435 847 q 462 960 435 932 q 533 989 489 989 q 606 960 578 989 q 633 890 633 932 q 606 819 633 847 q 533 790 578 790 z "},"ā":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 176 822 l 176 951 l 588 951 l 588 822 l 176 822 z "},"ă":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 382 794 q 279 811 322 794 q 207 858 236 828 q 163 927 178 888 q 147 1013 149 967 l 264 1032 q 299 955 271 988 q 382 922 326 922 q 465 955 438 922 q 500 1032 493 988 l 617 1013 q 601 927 615 967 q 558 858 586 888 q 485 811 529 828 q 382 794 442 794 z "},"å":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 382 783 q 244 825 290 783 q 199 928 199 867 q 244 1031 199 989 q 382 1072 290 1072 q 519 1031 474 1072 q 565 928 565 989 q 519 825 565 867 q 382 783 474 783 m 382 860 q 424 878 407 860 q 442 928 442 897 q 424 977 442 958 q 382 996 407 996 q 340 977 357 996 q 322 928 322 958 q 340 878 322 897 q 382 860 357 860 z "},"ǎ":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 278 801 l 128 983 l 206 1056 l 379 928 l 385 928 l 558 1056 l 636 983 l 486 801 l 278 801 z "},"ạ":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 358 -312 q 277 -283 308 -312 q 246 -206 246 -253 q 277 -128 246 -158 q 358 -99 308 -99 q 440 -128 408 -99 q 471 -206 471 -158 q 440 -283 471 -253 q 358 -312 408 -312 z "},"ả":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 322 789 l 306 869 q 350 885 332 875 q 368 918 368 896 q 343 958 368 943 q 257 976 318 972 l 269 1101 q 385 1087 338 1100 q 461 1052 432 1074 q 503 1000 490 1031 q 517 933 517 969 q 501 872 517 897 q 458 828 485 846 q 397 801 432 811 q 322 789 361 792 z "},"ấ":{"ha":732,"x_min":58,"x_max":767,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 238 786 l 172 858 l 301 986 l 463 986 l 592 858 l 526 786 l 385 876 l 379 876 l 238 786 m 549 947 l 658 1124 l 767 1053 l 626 886 l 549 947 z "},"ầ":{"ha":732,"x_min":-8,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 238 786 l 172 858 l 301 986 l 463 986 l 592 858 l 526 786 l 385 876 l 379 876 l 238 786 m 215 947 l 138 886 l -8 1051 l 100 1124 l 215 947 z "},"ẩ":{"ha":732,"x_min":58,"x_max":735,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 238 786 l 172 858 l 301 986 l 463 986 l 592 858 l 526 786 l 385 876 l 379 876 l 238 786 m 574 894 l 560 964 q 590 977 579 969 q 601 1004 601 985 q 583 1035 601 1024 q 511 1050 564 1046 l 531 1136 q 690 1103 644 1132 q 735 1025 735 1074 q 722 969 735 992 q 687 931 708 946 q 636 907 665 915 q 574 894 607 899 z "},"ẫ":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 238 786 l 172 858 l 301 975 l 463 975 l 592 858 l 526 786 l 385 864 l 379 864 l 238 786 m 176 1010 q 217 1126 185 1089 q 301 1164 249 1164 q 351 1155 331 1164 q 390 1135 372 1146 q 422 1115 407 1124 q 451 1106 436 1106 q 494 1158 483 1106 l 588 1149 q 547 1032 579 1069 q 463 994 515 994 q 413 1003 433 994 q 374 1024 392 1013 q 342 1044 357 1035 q 313 1053 328 1053 q 269 1000 281 1053 l 176 1010 z "},"ậ":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 128 851 l 278 1033 l 486 1033 l 636 851 l 558 779 l 385 907 l 379 907 l 206 779 l 128 851 m 358 -312 q 277 -283 308 -312 q 246 -206 246 -253 q 277 -128 246 -158 q 358 -99 308 -99 q 440 -128 408 -99 q 471 -206 471 -158 q 440 -283 471 -253 q 358 -312 408 -312 z "},"ắ":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 394 971 l 306 1032 l 435 1228 l 556 1138 l 394 971 m 382 794 q 279 811 322 794 q 207 858 236 828 q 163 927 178 888 q 147 1013 149 967 l 251 1032 q 290 946 260 982 q 382 910 321 910 q 474 946 443 910 q 513 1032 504 982 l 617 1013 q 601 927 615 967 q 558 858 586 888 q 485 811 529 828 q 382 794 442 794 z "},"ằ":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 369 971 l 208 1138 l 329 1228 l 458 1032 l 369 971 m 382 794 q 279 811 322 794 q 207 858 236 828 q 163 927 178 888 q 147 1013 149 967 l 251 1032 q 290 946 260 982 q 382 910 321 910 q 474 946 443 910 q 513 1032 504 982 l 617 1013 q 601 927 615 967 q 558 858 586 888 q 485 811 529 828 q 382 794 442 794 z "},"ẳ":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 333 968 l 321 1039 q 353 1050 340 1042 q 365 1078 365 1058 q 345 1108 365 1097 q 271 1124 325 1119 l 290 1235 q 452 1194 406 1231 q 499 1099 499 1158 q 485 1042 499 1065 q 450 1003 472 1018 q 397 981 428 989 q 333 968 367 972 m 382 794 q 279 811 322 794 q 207 858 236 828 q 163 927 178 888 q 147 1013 149 967 l 251 1032 q 290 946 260 982 q 382 910 321 910 q 474 946 443 910 q 513 1032 504 982 l 617 1013 q 601 927 615 967 q 558 858 586 888 q 485 811 529 828 q 382 794 442 794 z "},"ẵ":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 382 794 q 289 807 328 794 q 224 842 250 819 q 185 892 199 864 q 168 951 171 919 l 268 968 q 301 918 275 940 q 382 896 326 896 q 463 918 438 896 q 496 968 489 940 l 596 951 q 579 892 593 919 q 540 842 565 864 q 475 807 514 819 q 382 794 436 794 m 165 1007 q 208 1125 174 1088 q 301 1163 243 1163 q 351 1153 331 1163 q 390 1133 372 1144 q 422 1113 407 1122 q 451 1104 436 1104 q 494 1156 482 1104 l 599 1146 q 556 1029 590 1067 q 463 992 521 992 q 413 1001 433 992 q 374 1021 392 1010 q 342 1041 357 1032 q 313 1050 328 1050 q 269 997 281 1050 l 165 1007 z "},"ặ":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 382 794 q 279 811 322 794 q 207 858 236 828 q 163 927 178 888 q 147 1013 149 967 l 264 1032 q 299 955 271 988 q 382 922 326 922 q 465 955 438 922 q 500 1032 493 988 l 617 1013 q 601 927 615 967 q 558 858 586 888 q 485 811 529 828 q 382 794 442 794 m 358 -312 q 277 -283 308 -312 q 246 -206 246 -253 q 277 -128 246 -158 q 358 -99 308 -99 q 440 -128 408 -99 q 471 -206 471 -158 q 440 -283 471 -253 q 358 -312 408 -312 z "},"ą":{"ha":732,"x_min":58,"x_max":679,"o":"m 538 -292 q 433 -260 476 -292 q 390 -165 390 -228 q 401 -109 390 -135 q 426 -62 411 -83 q 457 -26 440 -42 q 486 -3 474 -11 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 190 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 q 556 -53 583 -19 q 529 -118 529 -86 q 547 -158 529 -146 q 586 -171 564 -171 q 613 -166 600 -171 q 636 -154 626 -161 l 679 -246 q 611 -279 651 -267 q 538 -292 571 -292 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 z "},"æ":{"ha":1092,"x_min":65,"x_max":1040,"o":"m 269 -17 q 185 -1 222 -17 q 121 44 147 15 q 80 110 94 72 q 65 190 65 147 q 156 362 65 300 q 449 444 246 424 q 423 516 446 489 q 342 543 400 543 q 256 526 300 543 q 161 481 211 510 l 89 615 q 226 681 156 656 q 371 706 296 706 q 483 678 435 706 q 563 601 532 650 q 656 678 607 651 q 767 706 704 706 q 886 680 835 706 q 972 609 938 654 q 1023 503 1006 564 q 1040 371 1040 442 q 1038 320 1040 343 q 1032 285 1035 297 l 635 285 q 692 178 646 213 q 800 143 738 143 q 874 157 839 143 q 946 193 908 171 l 1015 61 q 898 4 963 25 q 772 -17 833 -17 q 637 13 694 -17 q 535 90 579 42 q 400 8 461 32 q 269 -17 339 -17 m 339 142 q 408 157 375 142 q 468 200 440 172 q 449 292 453 243 l 447 321 q 303 276 346 306 q 260 207 260 247 q 281 158 260 174 q 339 142 303 142 m 635 410 l 867 410 q 842 511 867 472 q 760 550 817 550 q 677 516 711 550 q 635 410 643 482 z "},"ǽ":{"ha":1092,"x_min":65,"x_max":1040,"o":"m 269 -17 q 185 -1 222 -17 q 121 44 147 15 q 80 110 94 72 q 65 190 65 147 q 156 362 65 300 q 449 444 246 424 q 423 516 446 489 q 342 543 400 543 q 256 526 300 543 q 161 481 211 510 l 89 615 q 226 681 156 656 q 371 706 296 706 q 483 678 435 706 q 563 601 532 650 q 656 678 607 651 q 767 706 704 706 q 886 680 835 706 q 972 609 938 654 q 1023 503 1006 564 q 1040 371 1040 442 q 1038 320 1040 343 q 1032 285 1035 297 l 635 285 q 692 178 646 213 q 800 143 738 143 q 874 157 839 143 q 946 193 908 171 l 1015 61 q 898 4 963 25 q 772 -17 833 -17 q 637 13 694 -17 q 535 90 579 42 q 400 8 461 32 q 269 -17 339 -17 m 339 142 q 408 157 375 142 q 468 200 440 172 q 449 292 453 243 l 447 321 q 303 276 346 306 q 260 207 260 247 q 281 158 260 174 q 339 142 303 142 m 635 410 l 867 410 q 842 511 867 472 q 760 550 817 550 q 677 516 711 550 q 635 410 643 482 m 585 794 l 485 894 l 699 1147 l 836 1013 l 585 794 z "},"ǣ":{"ha":1092,"x_min":65,"x_max":1040,"o":"m 269 -17 q 185 -1 222 -17 q 121 44 147 15 q 80 110 94 72 q 65 190 65 147 q 156 362 65 300 q 449 444 246 424 q 423 516 446 489 q 342 543 400 543 q 256 526 300 543 q 161 481 211 510 l 89 615 q 226 681 156 656 q 371 706 296 706 q 483 678 435 706 q 563 601 532 650 q 656 678 607 651 q 767 706 704 706 q 886 680 835 706 q 972 609 938 654 q 1023 503 1006 564 q 1040 371 1040 442 q 1038 320 1040 343 q 1032 285 1035 297 l 635 285 q 692 178 646 213 q 800 143 738 143 q 874 157 839 143 q 946 193 908 171 l 1015 61 q 898 4 963 25 q 772 -17 833 -17 q 637 13 694 -17 q 535 90 579 42 q 400 8 461 32 q 269 -17 339 -17 m 339 142 q 408 157 375 142 q 468 200 440 172 q 449 292 453 243 l 447 321 q 303 276 346 306 q 260 207 260 247 q 281 158 260 174 q 339 142 303 142 m 635 410 l 867 410 q 842 511 867 472 q 760 550 817 550 q 677 516 711 550 q 635 410 643 482 m 365 822 l 365 951 l 776 951 l 776 822 l 365 822 z "},"ƀ":{"ha":793,"x_min":-4,"x_max":742,"o":"m 451 -17 q 359 6 406 -17 q 272 74 313 29 l 267 74 l 250 0 l 90 0 l 90 772 l -4 772 l -4 863 l 90 869 l 90 974 l 294 974 l 294 871 l 529 871 l 529 772 l 294 772 l 294 668 l 289 563 q 376 618 329 597 q 471 639 422 639 q 583 616 533 639 q 669 551 633 593 q 723 452 704 510 q 742 325 742 394 q 717 182 742 246 q 652 74 693 118 q 559 7 611 31 q 451 -17 507 -17 m 404 150 q 494 193 457 150 q 532 322 532 236 q 503 432 532 393 q 413 471 475 471 q 352 456 381 471 q 294 410 324 442 l 294 194 q 350 160 322 169 q 404 150 378 150 z "},"ḇ":{"ha":796,"x_min":90,"x_max":742,"o":"m 451 -17 q 359 6 406 -17 q 272 74 313 29 l 267 74 l 250 0 l 90 0 l 90 974 l 294 974 l 294 735 l 289 629 q 376 685 329 665 q 471 706 422 706 q 583 681 533 706 q 669 610 633 656 q 723 501 704 565 q 742 357 742 436 q 717 199 742 268 q 652 81 693 129 q 559 8 611 33 q 451 -17 507 -17 m 404 150 q 494 198 457 150 q 532 353 532 246 q 413 539 532 539 q 294 476 351 539 l 294 194 q 350 160 322 169 q 404 150 378 150 m 201 -260 l 201 -131 l 613 -131 l 613 -260 l 201 -260 z "},"ç":{"ha":649,"x_min":50,"x_max":618,"o":"m 390 -17 q 256 8 318 -17 q 149 78 194 32 q 76 191 103 124 q 50 344 50 258 q 79 498 50 431 q 158 611 108 565 q 272 681 207 657 q 408 706 338 706 q 522 685 472 706 q 610 632 571 664 l 514 500 q 421 540 465 540 q 303 488 346 540 q 260 344 260 435 q 303 201 260 254 q 414 149 347 149 q 478 163 447 149 q 538 199 510 178 l 618 65 q 507 2 567 21 q 390 -17 447 -17 m 250 -332 l 235 -250 q 347 -232 317 -246 q 378 -189 378 -218 q 356 -153 378 -168 q 271 -131 335 -139 l 338 6 l 457 6 l 418 -85 q 497 -121 471 -97 q 524 -189 524 -144 q 452 -294 524 -260 q 250 -332 381 -328 z "},"ć":{"ha":649,"x_min":50,"x_max":668,"o":"m 390 -17 q 256 8 318 -17 q 149 78 194 32 q 76 191 103 124 q 50 344 50 258 q 79 498 50 431 q 158 611 108 565 q 272 681 207 657 q 408 706 338 706 q 522 685 472 706 q 610 632 571 664 l 514 500 q 421 540 465 540 q 303 488 346 540 q 260 344 260 435 q 303 201 260 254 q 414 149 347 149 q 478 163 447 149 q 538 199 510 178 l 618 65 q 507 2 567 21 q 390 -17 447 -17 m 417 794 l 317 894 l 531 1147 l 668 1013 l 417 794 z "},"ĉ":{"ha":649,"x_min":50,"x_max":657,"o":"m 390 -17 q 256 8 318 -17 q 149 78 194 32 q 76 191 103 124 q 50 344 50 258 q 79 498 50 431 q 158 611 108 565 q 272 681 207 657 q 408 706 338 706 q 522 685 472 706 q 610 632 571 664 l 514 500 q 421 540 465 540 q 303 488 346 540 q 260 344 260 435 q 303 201 260 254 q 414 149 347 149 q 478 163 447 149 q 538 199 510 178 l 618 65 q 507 2 567 21 q 390 -17 447 -17 m 149 851 l 299 1033 l 507 1033 l 657 851 l 579 779 l 406 907 l 400 907 l 226 779 l 149 851 z "},"č":{"ha":649,"x_min":50,"x_max":657,"o":"m 390 -17 q 256 8 318 -17 q 149 78 194 32 q 76 191 103 124 q 50 344 50 258 q 79 498 50 431 q 158 611 108 565 q 272 681 207 657 q 408 706 338 706 q 522 685 472 706 q 610 632 571 664 l 514 500 q 421 540 465 540 q 303 488 346 540 q 260 344 260 435 q 303 201 260 254 q 414 149 347 149 q 478 163 447 149 q 538 199 510 178 l 618 65 q 507 2 567 21 q 390 -17 447 -17 m 299 801 l 149 983 l 226 1056 l 400 928 l 406 928 l 579 1056 l 657 983 l 507 801 l 299 801 z "},"ċ":{"ha":649,"x_min":50,"x_max":618,"o":"m 390 -17 q 256 8 318 -17 q 149 78 194 32 q 76 191 103 124 q 50 344 50 258 q 79 498 50 431 q 158 611 108 565 q 272 681 207 657 q 408 706 338 706 q 522 685 472 706 q 610 632 571 664 l 514 500 q 421 540 465 540 q 303 488 346 540 q 260 344 260 435 q 303 201 260 254 q 414 149 347 149 q 478 163 447 149 q 538 199 510 178 l 618 65 q 507 2 567 21 q 390 -17 447 -17 m 403 790 q 322 820 353 790 q 290 897 290 850 q 322 974 290 944 q 403 1004 353 1004 q 484 974 453 1004 q 515 897 515 944 q 484 820 515 850 q 403 790 453 790 z "},"ď":{"ha":853,"x_min":54,"x_max":890,"o":"m 336 -17 q 220 8 272 -17 q 131 80 168 33 q 74 193 94 126 q 54 344 54 260 q 78 496 54 429 q 142 609 103 563 q 234 681 182 656 q 340 706 286 706 q 436 686 399 706 q 510 633 474 667 l 501 739 l 501 974 l 706 974 l 706 0 l 539 0 l 525 68 l 519 68 q 435 8 483 32 q 336 -17 386 -17 m 389 150 q 449 164 422 150 q 501 213 476 178 l 501 494 q 444 529 474 519 q 388 539 415 539 q 301 492 339 539 q 264 347 264 446 q 297 197 264 244 q 389 150 329 150 m 767 761 l 758 1069 l 890 1069 l 888 974 l 854 761 l 767 761 z "},"ḍ":{"ha":796,"x_min":54,"x_max":706,"o":"m 336 -17 q 220 8 272 -17 q 131 80 168 33 q 74 193 94 126 q 54 344 54 260 q 78 496 54 429 q 142 609 103 563 q 234 681 182 656 q 340 706 286 706 q 436 686 399 706 q 510 633 474 667 l 501 739 l 501 974 l 706 974 l 706 0 l 539 0 l 525 68 l 519 68 q 435 8 483 32 q 336 -17 386 -17 m 389 150 q 449 164 422 150 q 501 213 476 178 l 501 494 q 444 529 474 519 q 388 539 415 539 q 301 492 339 539 q 264 347 264 446 q 297 197 264 244 q 389 150 329 150 m 433 -312 q 352 -283 383 -312 q 321 -206 321 -253 q 352 -128 321 -158 q 433 -99 383 -99 q 515 -128 483 -99 q 546 -206 546 -158 q 515 -283 546 -253 q 433 -312 483 -312 z "},"ḏ":{"ha":796,"x_min":54,"x_max":706,"o":"m 336 -17 q 220 8 272 -17 q 131 80 168 33 q 74 193 94 126 q 54 344 54 260 q 78 496 54 429 q 142 609 103 563 q 234 681 182 656 q 340 706 286 706 q 436 686 399 706 q 510 633 474 667 l 501 739 l 501 974 l 706 974 l 706 0 l 539 0 l 525 68 l 519 68 q 435 8 483 32 q 336 -17 386 -17 m 389 150 q 449 164 422 150 q 501 213 476 178 l 501 494 q 444 529 474 519 q 388 539 415 539 q 301 492 339 539 q 264 347 264 446 q 297 197 264 244 q 389 150 329 150 m 226 -260 l 226 -131 l 638 -131 l 638 -260 l 226 -260 z "},"đ":{"ha":796,"x_min":54,"x_max":800,"o":"m 336 -17 q 220 7 272 -17 q 131 74 168 31 q 74 177 94 117 q 54 313 54 238 q 78 447 54 386 q 142 549 103 507 q 234 615 182 592 q 340 639 286 639 q 436 619 399 639 q 510 567 474 599 l 501 671 l 501 772 l 294 772 l 294 871 l 501 871 l 501 974 l 706 974 l 706 871 l 800 871 l 800 781 l 706 774 l 706 0 l 535 0 l 522 61 l 517 61 q 435 5 481 26 q 336 -17 389 -17 m 389 150 q 449 164 422 150 q 501 213 476 178 l 501 428 q 444 461 474 451 q 388 471 415 471 q 301 431 339 471 q 264 315 264 392 q 297 192 264 233 q 389 150 329 150 z "},"è":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 361 794 l 110 1013 l 247 1147 l 461 894 l 361 794 z "},"é":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 389 794 l 289 894 l 503 1147 l 640 1013 l 389 794 z "},"ê":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 121 851 l 271 1033 l 479 1033 l 629 851 l 551 779 l 378 907 l 372 907 l 199 779 l 121 851 z "},"ě":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 271 801 l 121 983 l 199 1056 l 372 928 l 378 928 l 551 1056 l 629 983 l 479 801 l 271 801 z "},"ë":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 224 790 q 151 819 179 790 q 124 890 124 847 q 151 960 124 932 q 224 989 179 989 q 295 960 268 989 q 322 890 322 932 q 295 819 322 847 q 224 790 268 790 m 526 790 q 455 819 482 790 q 428 890 428 847 q 455 960 428 932 q 526 989 482 989 q 599 960 571 989 q 626 890 626 932 q 599 819 626 847 q 526 790 571 790 z "},"ē":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 169 822 l 169 951 l 581 951 l 581 822 l 169 822 z "},"ĕ":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 375 794 q 272 811 315 794 q 200 858 229 828 q 156 927 171 888 q 140 1013 142 967 l 257 1032 q 292 955 264 988 q 375 922 319 922 q 458 955 431 922 q 493 1032 486 988 l 610 1013 q 594 927 608 967 q 551 858 579 888 q 478 811 522 828 q 375 794 435 794 z "},"ė":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 375 790 q 294 820 325 790 q 263 897 263 850 q 294 974 263 944 q 375 1004 325 1004 q 456 974 425 1004 q 488 897 488 944 q 456 820 488 850 q 375 790 425 790 z "},"ẹ":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 375 -312 q 294 -283 325 -312 q 263 -206 263 -253 q 294 -128 263 -158 q 375 -99 325 -99 q 456 -128 425 -99 q 488 -206 488 -158 q 456 -283 488 -253 q 375 -312 425 -312 z "},"ẻ":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 315 789 l 299 869 q 343 885 325 875 q 361 918 361 896 q 336 958 361 943 q 250 976 311 972 l 263 1101 q 378 1087 331 1100 q 454 1052 425 1074 q 497 1000 483 1031 q 510 933 510 969 q 494 872 510 897 q 451 828 478 846 q 390 801 425 811 q 315 789 354 792 z "},"ẽ":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 467 796 q 408 810 433 796 q 360 840 382 824 q 322 871 339 857 q 288 885 304 885 q 255 867 267 885 q 239 808 243 849 l 111 815 q 158 975 114 924 q 283 1026 203 1026 q 342 1013 317 1026 q 390 982 368 999 q 428 951 411 965 q 463 938 446 938 q 511 1014 503 938 l 639 1007 q 592 847 636 899 q 467 796 547 796 z "},"ế":{"ha":719,"x_min":50,"x_max":760,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 231 786 l 165 858 l 294 986 l 456 986 l 585 858 l 519 786 l 378 876 l 372 876 l 231 786 m 542 947 l 651 1124 l 760 1053 l 619 886 l 542 947 z "},"ề":{"ha":719,"x_min":-15,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 231 786 l 165 858 l 294 986 l 456 986 l 585 858 l 519 786 l 378 876 l 372 876 l 231 786 m 208 947 l 131 886 l -15 1051 l 93 1124 l 208 947 z "},"ể":{"ha":719,"x_min":50,"x_max":728,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 231 786 l 165 858 l 294 986 l 456 986 l 585 858 l 519 786 l 378 876 l 372 876 l 231 786 m 567 894 l 553 964 q 583 977 572 969 q 594 1004 594 985 q 576 1035 594 1024 q 504 1050 557 1046 l 524 1136 q 683 1103 638 1132 q 728 1025 728 1074 q 715 969 728 992 q 680 931 701 946 q 629 907 658 915 q 567 894 600 899 z "},"ễ":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 231 786 l 165 858 l 294 975 l 456 975 l 585 858 l 519 786 l 378 864 l 372 864 l 231 786 m 169 1010 q 210 1126 178 1089 q 294 1164 242 1164 q 344 1155 324 1164 q 383 1135 365 1146 q 415 1115 400 1124 q 444 1106 429 1106 q 488 1158 476 1106 l 581 1149 q 540 1032 572 1069 q 456 994 508 994 q 406 1003 426 994 q 367 1024 385 1013 q 335 1044 350 1035 q 306 1053 321 1053 q 263 1000 274 1053 l 169 1010 z "},"ệ":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 121 851 l 271 1033 l 479 1033 l 629 851 l 551 779 l 378 907 l 372 907 l 199 779 l 121 851 m 374 -312 q 292 -283 324 -312 q 261 -206 261 -253 q 292 -128 261 -158 q 374 -99 324 -99 q 455 -128 424 -99 q 486 -206 486 -158 q 455 -283 486 -253 q 374 -312 424 -312 z "},"ę":{"ha":719,"x_min":50,"x_max":668,"o":"m 503 -292 q 399 -260 440 -292 q 358 -165 358 -228 q 384 -75 358 -114 q 436 -12 410 -36 q 415 -16 424 -15 q 399 -17 406 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 568 5 597 29 q 522 -40 539 -19 q 499 -79 506 -61 q 493 -118 493 -97 q 510 -158 493 -146 q 553 -171 528 -171 q 578 -166 567 -171 q 601 -154 590 -161 l 643 -246 q 576 -279 617 -267 q 503 -292 536 -292 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 z "},"ḗ":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 336 990 l 268 1074 l 468 1219 l 551 1117 l 336 990 m 169 822 l 169 951 l 581 951 l 581 822 l 169 822 z "},"ǵ":{"ha":742,"x_min":47,"x_max":721,"o":"m 336 -293 q 223 -283 275 -293 q 131 -251 171 -272 q 69 -197 92 -231 q 47 -118 47 -164 q 146 21 47 -35 l 146 26 q 100 72 118 44 q 82 143 82 100 q 104 215 82 181 q 160 272 126 249 l 160 278 q 95 349 124 303 q 67 457 67 396 q 90 566 67 519 q 153 644 114 613 q 244 690 193 675 q 351 706 296 706 q 458 689 413 706 l 710 689 l 710 540 l 600 540 q 616 501 610 525 q 622 450 622 478 q 601 347 622 390 q 544 274 581 303 q 458 232 507 246 q 351 218 408 218 q 268 232 311 218 q 249 210 254 221 q 243 181 243 199 q 266 142 243 154 q 347 129 289 129 l 458 129 q 653 88 586 129 q 721 -46 721 47 q 694 -145 721 -100 q 617 -223 667 -190 q 496 -274 567 -256 q 336 -293 425 -293 m 351 342 q 419 370 392 342 q 446 457 446 399 q 419 540 446 511 q 351 568 392 568 q 284 540 311 568 q 257 457 257 513 q 284 370 257 399 q 351 342 311 342 m 368 -165 q 482 -141 438 -165 q 526 -81 526 -117 q 499 -37 526 -49 q 421 -26 472 -26 l 350 -26 q 292 -24 314 -26 q 253 -18 269 -22 q 215 -86 215 -51 q 257 -145 215 -125 q 368 -165 299 -165 m 401 794 l 301 894 l 515 1147 l 653 1013 l 401 794 z "},"ĝ":{"ha":742,"x_min":47,"x_max":721,"o":"m 336 -293 q 223 -283 275 -293 q 131 -251 171 -272 q 69 -197 92 -231 q 47 -118 47 -164 q 146 21 47 -35 l 146 26 q 100 72 118 44 q 82 143 82 100 q 104 215 82 181 q 160 272 126 249 l 160 278 q 95 349 124 303 q 67 457 67 396 q 90 566 67 519 q 153 644 114 613 q 244 690 193 675 q 351 706 296 706 q 458 689 413 706 l 710 689 l 710 540 l 600 540 q 616 501 610 525 q 622 450 622 478 q 601 347 622 390 q 544 274 581 303 q 458 232 507 246 q 351 218 408 218 q 268 232 311 218 q 249 210 254 221 q 243 181 243 199 q 266 142 243 154 q 347 129 289 129 l 458 129 q 653 88 586 129 q 721 -46 721 47 q 694 -145 721 -100 q 617 -223 667 -190 q 496 -274 567 -256 q 336 -293 425 -293 m 351 342 q 419 370 392 342 q 446 457 446 399 q 419 540 446 511 q 351 568 392 568 q 284 540 311 568 q 257 457 257 513 q 284 370 257 399 q 351 342 311 342 m 368 -165 q 482 -141 438 -165 q 526 -81 526 -117 q 499 -37 526 -49 q 421 -26 472 -26 l 350 -26 q 292 -24 314 -26 q 253 -18 269 -22 q 215 -86 215 -51 q 257 -145 215 -125 q 368 -165 299 -165 m 133 851 l 283 1033 l 492 1033 l 642 851 l 564 779 l 390 907 l 385 907 l 211 779 l 133 851 z "},"ğ":{"ha":742,"x_min":47,"x_max":721,"o":"m 336 -293 q 223 -283 275 -293 q 131 -251 171 -272 q 69 -197 92 -231 q 47 -118 47 -164 q 146 21 47 -35 l 146 26 q 100 72 118 44 q 82 143 82 100 q 104 215 82 181 q 160 272 126 249 l 160 278 q 95 349 124 303 q 67 457 67 396 q 90 566 67 519 q 153 644 114 613 q 244 690 193 675 q 351 706 296 706 q 458 689 413 706 l 710 689 l 710 540 l 600 540 q 616 501 610 525 q 622 450 622 478 q 601 347 622 390 q 544 274 581 303 q 458 232 507 246 q 351 218 408 218 q 268 232 311 218 q 249 210 254 221 q 243 181 243 199 q 266 142 243 154 q 347 129 289 129 l 458 129 q 653 88 586 129 q 721 -46 721 47 q 694 -145 721 -100 q 617 -223 667 -190 q 496 -274 567 -256 q 336 -293 425 -293 m 351 342 q 419 370 392 342 q 446 457 446 399 q 419 540 446 511 q 351 568 392 568 q 284 540 311 568 q 257 457 257 513 q 284 370 257 399 q 351 342 311 342 m 368 -165 q 482 -141 438 -165 q 526 -81 526 -117 q 499 -37 526 -49 q 421 -26 472 -26 l 350 -26 q 292 -24 314 -26 q 253 -18 269 -22 q 215 -86 215 -51 q 257 -145 215 -125 q 368 -165 299 -165 m 388 794 q 285 811 328 794 q 213 858 242 828 q 169 927 183 888 q 153 1013 154 967 l 269 1032 q 304 955 276 988 q 388 922 332 922 q 471 955 443 922 q 506 1032 499 988 l 622 1013 q 606 927 621 967 q 563 858 592 888 q 491 811 535 828 q 388 794 447 794 z "},"ġ":{"ha":742,"x_min":47,"x_max":721,"o":"m 336 -293 q 223 -283 275 -293 q 131 -251 171 -272 q 69 -197 92 -231 q 47 -118 47 -164 q 146 21 47 -35 l 146 26 q 100 72 118 44 q 82 143 82 100 q 104 215 82 181 q 160 272 126 249 l 160 278 q 95 349 124 303 q 67 457 67 396 q 90 566 67 519 q 153 644 114 613 q 244 690 193 675 q 351 706 296 706 q 458 689 413 706 l 710 689 l 710 540 l 600 540 q 616 501 610 525 q 622 450 622 478 q 601 347 622 390 q 544 274 581 303 q 458 232 507 246 q 351 218 408 218 q 268 232 311 218 q 249 210 254 221 q 243 181 243 199 q 266 142 243 154 q 347 129 289 129 l 458 129 q 653 88 586 129 q 721 -46 721 47 q 694 -145 721 -100 q 617 -223 667 -190 q 496 -274 567 -256 q 336 -293 425 -293 m 351 342 q 419 370 392 342 q 446 457 446 399 q 419 540 446 511 q 351 568 392 568 q 284 540 311 568 q 257 457 257 513 q 284 370 257 399 q 351 342 311 342 m 368 -165 q 482 -141 438 -165 q 526 -81 526 -117 q 499 -37 526 -49 q 421 -26 472 -26 l 350 -26 q 292 -24 314 -26 q 253 -18 269 -22 q 215 -86 215 -51 q 257 -145 215 -125 q 368 -165 299 -165 m 388 790 q 306 820 338 790 q 275 897 275 850 q 306 974 275 944 q 388 1004 338 1004 q 469 974 438 1004 q 500 897 500 944 q 469 820 500 850 q 388 790 438 790 z "},"ģ":{"ha":742,"x_min":47,"x_max":721,"o":"m 336 -293 q 223 -283 275 -293 q 131 -251 171 -272 q 69 -197 92 -231 q 47 -118 47 -164 q 146 21 47 -35 l 146 26 q 100 72 118 44 q 82 143 82 100 q 104 215 82 181 q 160 272 126 249 l 160 278 q 95 349 124 303 q 67 457 67 396 q 90 566 67 519 q 153 644 114 613 q 244 690 193 675 q 351 706 296 706 q 458 689 413 706 l 710 689 l 710 540 l 600 540 q 616 501 610 525 q 622 450 622 478 q 601 347 622 390 q 544 274 581 303 q 458 232 507 246 q 351 218 408 218 q 268 232 311 218 q 249 210 254 221 q 243 181 243 199 q 266 142 243 154 q 347 129 289 129 l 458 129 q 653 88 586 129 q 721 -46 721 47 q 694 -145 721 -100 q 617 -223 667 -190 q 496 -274 567 -256 q 336 -293 425 -293 m 351 342 q 419 370 392 342 q 446 457 446 399 q 419 540 446 511 q 351 568 392 568 q 284 540 311 568 q 257 457 257 513 q 284 370 257 399 q 351 342 311 342 m 368 -165 q 482 -141 438 -165 q 526 -81 526 -117 q 499 -37 526 -49 q 421 -26 472 -26 l 350 -26 q 292 -24 314 -26 q 253 -18 269 -22 q 215 -86 215 -51 q 257 -145 215 -125 q 368 -165 299 -165 m 451 789 q 298 826 340 799 q 256 906 256 854 q 327 1010 256 976 q 529 1049 399 1044 l 544 967 q 432 950 463 963 q 401 913 401 938 q 422 881 401 893 q 490 864 443 868 l 451 789 z "},"ǧ":{"ha":742,"x_min":47,"x_max":721,"o":"m 336 -293 q 223 -283 275 -293 q 131 -251 171 -272 q 69 -197 92 -231 q 47 -118 47 -164 q 146 21 47 -35 l 146 26 q 100 72 118 44 q 82 143 82 100 q 104 215 82 181 q 160 272 126 249 l 160 278 q 95 349 124 303 q 67 457 67 396 q 90 566 67 519 q 153 644 114 613 q 244 690 193 675 q 351 706 296 706 q 458 689 413 706 l 710 689 l 710 540 l 600 540 q 616 501 610 525 q 622 450 622 478 q 601 347 622 390 q 544 274 581 303 q 458 232 507 246 q 351 218 408 218 q 268 232 311 218 q 249 210 254 221 q 243 181 243 199 q 266 142 243 154 q 347 129 289 129 l 458 129 q 653 88 586 129 q 721 -46 721 47 q 694 -145 721 -100 q 617 -223 667 -190 q 496 -274 567 -256 q 336 -293 425 -293 m 351 342 q 419 370 392 342 q 446 457 446 399 q 419 540 446 511 q 351 568 392 568 q 284 540 311 568 q 257 457 257 513 q 284 370 257 399 q 351 342 311 342 m 368 -165 q 482 -141 438 -165 q 526 -81 526 -117 q 499 -37 526 -49 q 421 -26 472 -26 l 350 -26 q 292 -24 314 -26 q 253 -18 269 -22 q 215 -86 215 -51 q 257 -145 215 -125 q 368 -165 299 -165 m 283 801 l 133 983 l 211 1056 l 385 928 l 390 928 l 564 1056 l 642 983 l 492 801 l 283 801 z "},"ḡ":{"ha":742,"x_min":47,"x_max":721,"o":"m 336 -293 q 223 -283 275 -293 q 131 -251 171 -272 q 69 -197 92 -231 q 47 -118 47 -164 q 146 21 47 -35 l 146 26 q 100 72 118 44 q 82 143 82 100 q 104 215 82 181 q 160 272 126 249 l 160 278 q 95 349 124 303 q 67 457 67 396 q 90 566 67 519 q 153 644 114 613 q 244 690 193 675 q 351 706 296 706 q 458 689 413 706 l 710 689 l 710 540 l 600 540 q 616 501 610 525 q 622 450 622 478 q 601 347 622 390 q 544 274 581 303 q 458 232 507 246 q 351 218 408 218 q 268 232 311 218 q 249 210 254 221 q 243 181 243 199 q 266 142 243 154 q 347 129 289 129 l 458 129 q 653 88 586 129 q 721 -46 721 47 q 694 -145 721 -100 q 617 -223 667 -190 q 496 -274 567 -256 q 336 -293 425 -293 m 351 342 q 419 370 392 342 q 446 457 446 399 q 419 540 446 511 q 351 568 392 568 q 284 540 311 568 q 257 457 257 513 q 284 370 257 399 q 351 342 311 342 m 368 -165 q 482 -141 438 -165 q 526 -81 526 -117 q 499 -37 526 -49 q 421 -26 472 -26 l 350 -26 q 292 -24 314 -26 q 253 -18 269 -22 q 215 -86 215 -51 q 257 -145 215 -125 q 368 -165 299 -165 m 182 822 l 182 951 l 593 951 l 593 822 l 182 822 z "},"ĥ":{"ha":793,"x_min":-47,"x_max":711,"o":"m 90 0 l 90 974 l 294 974 l 294 735 l 285 611 q 375 676 324 646 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 m -47 1072 l 78 1226 l 300 1226 l 425 1072 l 336 1018 l 192 1135 l 186 1135 l 42 1018 l -47 1072 z "},"ḥ":{"ha":793,"x_min":90,"x_max":711,"o":"m 90 0 l 90 974 l 294 974 l 294 735 l 285 611 q 375 676 324 646 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 m 406 -312 q 324 -283 356 -312 q 293 -206 293 -253 q 324 -128 293 -158 q 406 -99 356 -99 q 487 -128 456 -99 q 518 -206 518 -158 q 487 -283 518 -253 q 406 -312 456 -312 z "},"ẖ":{"ha":793,"x_min":90,"x_max":711,"o":"m 90 0 l 90 974 l 294 974 l 294 735 l 285 611 q 375 676 324 646 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 m 200 -260 l 200 -131 l 611 -131 l 611 -260 l 200 -260 z "},"ḫ":{"ha":793,"x_min":90,"x_max":711,"o":"m 90 0 l 90 974 l 294 974 l 294 735 l 285 611 q 375 676 324 646 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 m 406 -322 q 303 -306 346 -322 q 231 -259 260 -289 q 187 -190 201 -229 q 171 -104 172 -150 l 288 -85 q 322 -162 294 -129 q 406 -194 350 -194 q 489 -162 461 -194 q 524 -85 517 -129 l 640 -104 q 624 -190 639 -150 q 581 -259 610 -229 q 509 -306 553 -289 q 406 -322 465 -322 z "},"ħ":{"ha":793,"x_min":-4,"x_max":711,"o":"m 90 0 l 90 772 l -4 772 l -4 863 l 90 869 l 90 974 l 294 974 l 294 871 l 529 871 l 529 772 l 294 772 l 294 668 l 285 543 q 326 578 304 561 q 375 608 349 594 q 432 631 401 622 q 497 639 463 639 q 660 565 610 639 q 711 361 711 492 l 711 0 l 507 0 l 507 335 q 487 437 507 410 q 422 464 467 464 q 356 447 383 464 q 294 397 328 429 l 294 0 l 90 0 z "},"ì":{"ha":383,"x_min":-74,"x_max":294,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m 178 794 l -74 1013 l 64 1147 l 278 894 l 178 794 z "},"í":{"ha":383,"x_min":90,"x_max":457,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m 206 794 l 106 894 l 319 1147 l 457 1013 l 206 794 z "},"î":{"ha":383,"x_min":-62,"x_max":446,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m -62 851 l 88 1033 l 296 1033 l 446 851 l 368 779 l 194 907 l 189 907 l 15 779 l -62 851 z "},"ĩ":{"ha":383,"x_min":-72,"x_max":456,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m 283 796 q 224 810 250 796 q 177 840 199 824 q 138 871 156 857 q 104 885 121 885 q 72 867 83 885 q 56 808 60 849 l -72 815 q -25 975 -69 924 q 100 1026 19 1026 q 159 1013 133 1026 q 206 982 185 999 q 245 951 228 965 q 279 938 263 938 q 328 1014 319 938 l 456 1007 q 408 847 453 899 q 283 796 364 796 z "},"ï":{"ha":383,"x_min":-60,"x_max":443,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m 40 790 q -32 819 -4 790 q -60 890 -60 847 q -32 960 -60 932 q 40 989 -4 989 q 112 960 85 989 q 139 890 139 932 q 112 819 139 847 q 40 790 85 790 m 343 790 q 272 819 299 790 q 244 890 244 847 q 272 960 244 932 q 343 989 299 989 q 415 960 388 989 q 443 890 443 932 q 415 819 443 847 q 343 790 388 790 z "},"ī":{"ha":383,"x_min":-14,"x_max":397,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m -14 822 l -14 951 l 397 951 l 397 822 l -14 822 z "},"ǐ":{"ha":383,"x_min":-62,"x_max":446,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m 88 801 l -62 983 l 15 1056 l 189 928 l 194 928 l 368 1056 l 446 983 l 296 801 l 88 801 z "},"ỉ":{"ha":383,"x_min":67,"x_max":326,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m 132 789 l 115 869 q 160 885 142 875 q 178 918 178 896 q 153 958 178 943 q 67 976 128 972 l 79 1101 q 194 1087 147 1100 q 271 1052 242 1074 q 313 1000 300 1031 q 326 933 326 969 q 310 872 326 897 q 268 828 294 846 q 206 801 242 811 q 132 789 171 792 z "},"ị":{"ha":383,"x_min":74,"x_max":310,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m 192 790 q 107 820 140 790 q 74 897 74 850 q 107 974 74 944 q 192 1003 140 1003 q 277 974 244 1003 q 310 897 310 944 q 277 820 310 850 q 192 790 244 790 m 192 -312 q 110 -283 142 -312 q 79 -206 79 -253 q 110 -128 79 -158 q 192 -99 142 -99 q 273 -128 242 -99 q 304 -206 304 -158 q 273 -283 304 -253 q 192 -312 242 -312 z "},"į":{"ha":383,"x_min":57,"x_max":344,"o":"m 204 -292 q 99 -260 142 -292 q 57 -165 57 -228 q 66 -109 57 -135 q 89 -62 75 -83 q 119 -26 103 -42 q 147 0 135 -11 l 90 0 l 90 689 l 294 689 l 294 0 q 217 -53 239 -21 q 194 -118 194 -86 q 213 -158 194 -146 q 254 -171 231 -171 q 278 -166 267 -171 q 303 -154 290 -161 l 344 -246 q 277 -279 318 -267 q 204 -292 236 -292 m 192 790 q 107 820 140 790 q 74 897 74 850 q 107 974 74 944 q 192 1003 140 1003 q 276 974 243 1003 q 310 897 310 944 q 276 820 310 850 q 192 790 243 790 z "},"ĭ":{"ha":383,"x_min":-43,"x_max":426,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m 192 794 q 89 811 132 794 q 17 858 46 828 q -27 927 -12 888 q -43 1013 -42 967 l 74 1032 q 108 955 81 988 q 192 922 136 922 q 275 955 247 922 q 310 1032 303 988 l 426 1013 q 410 927 425 967 q 367 858 396 888 q 295 811 339 828 q 192 794 251 794 z "},"ı":{"ha":383,"x_min":90,"x_max":294,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 z "},"ĵ":{"ha":386,"x_min":-71,"x_max":449,"o":"m 50 -272 q -22 -267 7 -272 q -71 -253 -50 -261 l -35 -103 q -8 -110 -21 -107 q 19 -112 4 -112 q 76 -86 60 -112 q 92 -1 92 -60 l 92 689 l 296 689 l 296 4 q 284 -103 296 -53 q 244 -190 272 -153 q 168 -250 215 -228 q 50 -272 121 -272 m -60 851 l 90 1033 l 299 1033 l 449 851 l 371 779 l 197 907 l 192 907 l 18 779 l -60 851 z "},"ķ":{"ha":761,"x_min":90,"x_max":753,"o":"m 90 0 l 90 974 l 289 974 l 289 415 l 294 415 l 513 689 l 735 689 l 493 406 l 753 0 l 532 0 l 376 268 l 289 169 l 289 0 l 90 0 m 268 -332 l 253 -250 q 365 -233 335 -246 q 396 -196 396 -219 q 375 -164 396 -176 q 307 -147 354 -151 l 346 -72 q 499 -110 457 -82 q 542 -189 542 -137 q 470 -294 542 -260 q 268 -332 399 -328 z "},"ḳ":{"ha":761,"x_min":90,"x_max":753,"o":"m 90 0 l 90 974 l 289 974 l 289 415 l 294 415 l 513 689 l 735 689 l 493 406 l 753 0 l 532 0 l 376 268 l 289 169 l 289 0 l 90 0 m 410 -312 q 328 -283 360 -312 q 297 -206 297 -253 q 328 -128 297 -158 q 410 -99 360 -99 q 491 -128 460 -99 q 522 -206 522 -158 q 491 -283 522 -253 q 410 -312 460 -312 z "},"ḵ":{"ha":761,"x_min":90,"x_max":753,"o":"m 90 0 l 90 974 l 289 974 l 289 415 l 294 415 l 513 689 l 735 689 l 493 406 l 753 0 l 532 0 l 376 268 l 289 169 l 289 0 l 90 0 m 204 -260 l 204 -131 l 615 -131 l 615 -260 l 204 -260 z "},"ĸ":{"ha":761,"x_min":90,"x_max":753,"o":"m 90 0 l 90 689 l 294 689 l 294 411 l 299 411 l 513 689 l 735 689 l 499 406 l 753 0 l 532 0 l 376 263 l 294 163 l 294 0 l 90 0 z "},"ĺ":{"ha":397,"x_min":90,"x_max":436,"o":"m 278 -17 q 189 0 225 -17 q 131 47 153 17 q 100 119 110 76 q 90 214 90 161 l 90 974 l 294 974 l 294 206 q 306 161 294 174 q 331 149 318 149 q 342 149 338 149 q 356 151 347 149 l 381 0 q 338 -12 364 -7 q 278 -17 313 -17 m 182 1021 l 90 1124 l 328 1318 l 436 1186 l 182 1021 z "},"ľ":{"ha":443,"x_min":90,"x_max":478,"o":"m 278 -17 q 189 0 225 -17 q 131 47 153 17 q 100 119 110 76 q 90 214 90 161 l 90 974 l 294 974 l 294 206 q 306 161 294 174 q 331 149 318 149 q 342 149 338 149 q 356 151 347 149 l 381 0 q 338 -12 364 -7 q 278 -17 313 -17 m 354 761 l 346 1069 l 478 1069 l 475 974 l 442 761 l 354 761 z "},"ŀ":{"ha":629,"x_min":90,"x_max":629,"o":"m 278 -17 q 189 0 225 -17 q 131 47 153 17 q 100 119 110 76 q 90 214 90 161 l 90 974 l 294 974 l 294 206 q 306 161 294 174 q 331 149 318 149 q 342 149 338 149 q 356 151 347 149 l 381 0 q 338 -12 364 -7 q 278 -17 313 -17 m 506 328 q 417 365 453 328 q 382 456 382 401 q 417 548 382 511 q 506 585 453 585 q 594 548 558 585 q 629 456 629 511 q 594 365 629 401 q 506 328 558 328 z "},"ļ":{"ha":397,"x_min":90,"x_max":392,"o":"m 278 -17 q 189 0 225 -17 q 131 47 153 17 q 100 119 110 76 q 90 214 90 161 l 90 974 l 294 974 l 294 206 q 306 161 294 174 q 331 149 318 149 q 342 149 338 149 q 356 151 347 149 l 381 0 q 338 -12 364 -7 q 278 -17 313 -17 m 118 -332 l 103 -250 q 215 -233 185 -246 q 246 -196 246 -219 q 225 -164 246 -176 q 157 -147 204 -151 l 196 -72 q 349 -110 307 -82 q 392 -189 392 -137 q 320 -294 392 -260 q 118 -332 249 -328 z "},"ḷ":{"ha":397,"x_min":90,"x_max":381,"o":"m 278 -17 q 189 0 225 -17 q 131 47 153 17 q 100 119 110 76 q 90 214 90 161 l 90 974 l 294 974 l 294 206 q 306 161 294 174 q 331 149 318 149 q 342 149 338 149 q 356 151 347 149 l 381 0 q 338 -12 364 -7 q 278 -17 313 -17 m 260 -312 q 178 -283 210 -312 q 147 -206 147 -253 q 178 -128 147 -158 q 260 -99 210 -99 q 341 -128 310 -99 q 372 -206 372 -158 q 341 -283 372 -253 q 260 -312 310 -312 z "},"ḹ":{"ha":397,"x_min":-15,"x_max":396,"o":"m 278 -17 q 189 0 225 -17 q 131 47 153 17 q 100 119 110 76 q 90 214 90 161 l 90 974 l 294 974 l 294 206 q 306 161 294 174 q 331 149 318 149 q 342 149 338 149 q 356 151 347 149 l 381 0 q 338 -12 364 -7 q 278 -17 313 -17 m -15 1117 l -15 1246 l 396 1246 l 396 1117 l -15 1117 m 260 -312 q 178 -283 210 -312 q 147 -206 147 -253 q 178 -128 147 -158 q 260 -99 210 -99 q 341 -128 310 -99 q 372 -206 372 -158 q 341 -283 372 -253 q 260 -312 310 -312 z "},"ḻ":{"ha":397,"x_min":54,"x_max":465,"o":"m 278 -17 q 189 0 225 -17 q 131 47 153 17 q 100 119 110 76 q 90 214 90 161 l 90 974 l 294 974 l 294 206 q 306 161 294 174 q 331 149 318 149 q 342 149 338 149 q 356 151 347 149 l 381 0 q 338 -12 364 -7 q 278 -17 313 -17 m 54 -260 l 54 -131 l 465 -131 l 465 -260 l 54 -260 z "},"ł":{"ha":421,"x_min":-29,"x_max":444,"o":"m 292 -17 q 203 0 239 -17 q 145 47 167 17 q 114 119 124 76 q 104 214 104 161 l 104 383 l 42 347 l -29 474 l 104 549 l 104 974 l 308 974 l 308 649 l 375 686 l 444 560 l 308 483 l 308 206 q 320 161 308 174 q 344 149 332 149 q 356 149 351 149 q 369 151 361 149 l 394 0 q 352 -12 378 -7 q 292 -17 326 -17 z "},"ḿ":{"ha":1190,"x_min":90,"x_max":1107,"o":"m 90 0 l 90 689 l 257 689 l 271 600 l 276 600 q 368 674 319 643 q 485 706 417 706 q 603 676 558 706 q 675 590 649 646 q 772 672 721 638 q 892 706 822 706 q 1055 631 1003 706 q 1107 428 1107 557 l 1107 0 l 903 0 l 903 401 q 883 504 903 476 q 818 532 863 532 q 700 465 767 532 l 700 0 l 496 0 l 496 401 q 476 504 496 476 q 411 532 456 532 q 294 465 358 532 l 294 0 l 90 0 m 622 794 l 522 894 l 736 1147 l 874 1013 l 622 794 z "},"ṁ":{"ha":1190,"x_min":90,"x_max":1107,"o":"m 90 0 l 90 689 l 257 689 l 271 600 l 276 600 q 368 674 319 643 q 485 706 417 706 q 603 676 558 706 q 675 590 649 646 q 772 672 721 638 q 892 706 822 706 q 1055 631 1003 706 q 1107 428 1107 557 l 1107 0 l 903 0 l 903 401 q 883 504 903 476 q 818 532 863 532 q 700 465 767 532 l 700 0 l 496 0 l 496 401 q 476 504 496 476 q 411 532 456 532 q 294 465 358 532 l 294 0 l 90 0 m 608 790 q 527 820 558 790 q 496 897 496 850 q 527 974 496 944 q 608 1004 558 1004 q 690 974 658 1004 q 721 897 721 944 q 690 820 721 850 q 608 790 658 790 z "},"ṃ":{"ha":1190,"x_min":90,"x_max":1107,"o":"m 90 0 l 90 689 l 257 689 l 271 600 l 276 600 q 368 674 319 643 q 485 706 417 706 q 603 676 558 706 q 675 590 649 646 q 772 672 721 638 q 892 706 822 706 q 1055 631 1003 706 q 1107 428 1107 557 l 1107 0 l 903 0 l 903 401 q 883 504 903 476 q 818 532 863 532 q 700 465 767 532 l 700 0 l 496 0 l 496 401 q 476 504 496 476 q 411 532 456 532 q 294 465 358 532 l 294 0 l 90 0 m 610 -312 q 528 -283 560 -312 q 497 -206 497 -253 q 528 -128 497 -158 q 610 -99 560 -99 q 691 -128 660 -99 q 722 -206 722 -158 q 691 -283 722 -253 q 610 -312 660 -312 z "},"ń":{"ha":794,"x_min":90,"x_max":711,"o":"m 90 0 l 90 689 l 257 689 l 271 601 l 276 601 q 374 674 321 643 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 m 442 794 l 342 894 l 556 1147 l 693 1013 l 442 794 z "},"ǹ":{"ha":794,"x_min":90,"x_max":711,"o":"m 90 0 l 90 689 l 257 689 l 271 601 l 276 601 q 374 674 321 643 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 m 414 794 l 163 1013 l 300 1147 l 514 894 l 414 794 z "},"ň":{"ha":794,"x_min":90,"x_max":711,"o":"m 90 0 l 90 689 l 257 689 l 271 601 l 276 601 q 374 674 321 643 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 m 324 801 l 174 983 l 251 1056 l 425 928 l 431 928 l 604 1056 l 682 983 l 532 801 l 324 801 z "},"ñ":{"ha":794,"x_min":90,"x_max":711,"o":"m 90 0 l 90 689 l 257 689 l 271 601 l 276 601 q 374 674 321 643 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 m 519 796 q 460 810 486 796 q 413 840 435 824 q 374 871 392 857 q 340 885 357 885 q 308 867 319 885 q 292 808 296 849 l 164 815 q 211 975 167 924 q 336 1026 256 1026 q 395 1013 369 1026 q 442 982 421 999 q 481 951 464 965 q 515 938 499 938 q 564 1014 556 938 l 692 1007 q 644 847 689 899 q 519 796 600 796 z "},"ņ":{"ha":794,"x_min":90,"x_max":711,"o":"m 90 0 l 90 689 l 257 689 l 271 601 l 276 601 q 374 674 321 643 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 m 263 -332 l 247 -250 q 360 -233 329 -246 q 390 -196 390 -219 q 369 -164 390 -176 q 301 -147 349 -151 l 340 -72 q 494 -110 451 -82 q 536 -189 536 -137 q 465 -294 536 -260 q 263 -332 393 -328 z "},"ṅ":{"ha":794,"x_min":90,"x_max":711,"o":"m 90 0 l 90 689 l 257 689 l 271 601 l 276 601 q 374 674 321 643 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 m 428 790 q 347 820 378 790 q 315 897 315 850 q 347 974 315 944 q 428 1004 378 1004 q 509 974 478 1004 q 540 897 540 944 q 509 820 540 850 q 428 790 478 790 z "},"ṇ":{"ha":794,"x_min":90,"x_max":711,"o":"m 90 0 l 90 689 l 257 689 l 271 601 l 276 601 q 374 674 321 643 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 m 404 -312 q 323 -283 354 -312 q 292 -206 292 -253 q 323 -128 292 -158 q 404 -99 354 -99 q 485 -128 454 -99 q 517 -206 517 -158 q 485 -283 517 -253 q 404 -312 454 -312 z "},"ṉ":{"ha":794,"x_min":90,"x_max":711,"o":"m 90 0 l 90 689 l 257 689 l 271 601 l 276 601 q 374 674 321 643 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 m 199 -260 l 199 -131 l 610 -131 l 610 -260 l 199 -260 z "},"ʼn":{"ha":1183,"x_min":99,"x_max":1097,"o":"m 476 0 l 476 689 l 643 689 l 657 601 l 663 601 q 760 674 707 643 q 883 706 813 706 q 1047 632 996 706 q 1097 428 1097 558 l 1097 0 l 893 0 l 893 401 q 873 504 893 476 q 808 532 853 532 q 742 515 769 532 q 681 465 714 497 l 681 0 l 476 0 m 143 489 l 99 578 q 192 651 161 610 q 224 754 224 692 q 211 753 219 753 q 135 780 167 753 q 104 854 104 807 q 134 938 104 907 q 211 968 164 968 q 308 921 275 968 q 342 786 342 874 q 292 613 342 688 q 143 489 243 538 z "},"ò":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 371 794 l 119 1013 l 257 1147 l 471 894 l 371 794 z "},"ó":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 399 794 l 299 894 l 513 1147 l 650 1013 l 399 794 z "},"ô":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 131 851 l 281 1033 l 489 1033 l 639 851 l 561 779 l 388 907 l 382 907 l 208 779 l 131 851 z "},"õ":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 476 796 q 417 810 443 796 q 370 840 392 824 q 331 871 349 857 q 297 885 314 885 q 265 867 276 885 q 249 808 253 849 l 121 815 q 168 975 124 924 q 293 1026 213 1026 q 352 1013 326 1026 q 399 982 378 999 q 438 951 421 965 q 472 938 456 938 q 521 1014 513 938 l 649 1007 q 601 847 646 899 q 476 796 557 796 z "},"ö":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 233 790 q 161 819 189 790 q 133 890 133 847 q 161 960 133 932 q 233 989 189 989 q 305 960 278 989 q 332 890 332 932 q 305 819 332 847 q 233 790 278 790 m 536 790 q 465 819 492 790 q 438 890 438 847 q 465 960 438 932 q 536 989 492 989 q 608 960 581 989 q 636 890 636 932 q 608 819 636 847 q 536 790 581 790 z "},"ō":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 179 822 l 179 951 l 590 951 l 590 822 l 179 822 z "},"ő":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 313 785 l 206 833 l 326 1085 l 464 1024 l 313 785 m 561 785 l 454 833 l 575 1085 l 713 1024 l 561 785 z "},"ǒ":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 281 801 l 131 983 l 208 1056 l 382 928 l 388 928 l 561 1056 l 639 983 l 489 801 l 281 801 z "},"ọ":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 385 -312 q 303 -283 335 -312 q 272 -206 272 -253 q 303 -128 272 -158 q 385 -99 335 -99 q 466 -128 435 -99 q 497 -206 497 -158 q 466 -283 497 -253 q 385 -312 435 -312 z "},"ỏ":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 325 789 l 308 869 q 353 885 335 875 q 371 918 371 896 q 346 958 371 943 q 260 976 321 972 l 272 1101 q 388 1087 340 1100 q 464 1052 435 1074 q 506 1000 493 1031 q 519 933 519 969 q 503 872 519 897 q 461 828 488 846 q 399 801 435 811 q 325 789 364 792 z "},"ố":{"ha":771,"x_min":50,"x_max":769,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 240 786 l 175 858 l 304 986 l 465 986 l 594 858 l 529 786 l 388 876 l 382 876 l 240 786 m 551 947 l 661 1124 l 769 1053 l 629 886 l 551 947 z "},"ồ":{"ha":771,"x_min":-6,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 240 786 l 175 858 l 304 986 l 465 986 l 594 858 l 529 786 l 388 876 l 382 876 l 240 786 m 218 947 l 140 886 l -6 1051 l 103 1124 l 218 947 z "},"ổ":{"ha":771,"x_min":50,"x_max":738,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 240 786 l 175 858 l 304 986 l 465 986 l 594 858 l 529 786 l 388 876 l 382 876 l 240 786 m 576 894 l 563 964 q 593 977 582 969 q 604 1004 604 985 q 585 1035 604 1024 q 514 1050 567 1046 l 533 1136 q 692 1103 647 1132 q 738 1025 738 1074 q 724 969 738 992 q 690 931 711 946 q 639 907 668 915 q 576 894 610 899 z "},"ỗ":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 240 786 l 175 858 l 304 975 l 465 975 l 594 858 l 529 786 l 388 864 l 382 864 l 240 786 m 179 1010 q 219 1126 188 1089 q 304 1164 251 1164 q 354 1155 333 1164 q 392 1135 375 1146 q 424 1115 410 1124 q 454 1106 439 1106 q 497 1158 486 1106 l 590 1149 q 550 1032 582 1069 q 465 994 518 994 q 415 1003 436 994 q 377 1024 394 1013 q 345 1044 360 1035 q 315 1053 331 1053 q 272 1000 283 1053 l 179 1010 z "},"ộ":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 131 851 l 281 1033 l 489 1033 l 639 851 l 561 779 l 388 907 l 382 907 l 208 779 l 131 851 m 385 -312 q 303 -283 335 -312 q 272 -206 272 -253 q 303 -128 272 -158 q 385 -99 335 -99 q 466 -128 435 -99 q 497 -206 497 -158 q 466 -283 497 -253 q 385 -312 435 -312 z "},"ŏ":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 385 794 q 282 811 325 794 q 210 858 239 828 q 166 927 181 888 q 150 1013 151 967 l 267 1032 q 301 955 274 988 q 385 922 329 922 q 468 955 440 922 q 503 1032 496 988 l 619 1013 q 603 927 618 967 q 560 858 589 888 q 488 811 532 828 q 385 794 444 794 z "},"ṓ":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 346 990 l 278 1074 l 478 1219 l 561 1117 l 346 990 m 179 822 l 179 951 l 590 951 l 590 822 l 179 822 z "},"ø":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 200 39 283 -17 l 140 -35 l 64 24 l 129 104 q 72 209 93 149 q 50 344 50 269 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 482 692 435 706 q 569 651 529 678 l 631 726 l 707 667 l 642 586 q 699 480 678 540 q 721 344 721 419 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 247 356 q 257 263 247 300 l 464 521 q 386 547 433 547 q 285 495 322 547 q 247 356 247 443 m 386 142 q 486 194 449 142 q 524 333 524 246 q 514 428 524 390 l 306 169 q 386 142 338 142 z "},"œ":{"ha":1142,"x_min":50,"x_max":1092,"o":"m 371 -17 q 246 8 304 -17 q 144 78 188 32 q 75 191 100 124 q 50 344 50 258 q 76 498 50 431 q 147 611 103 565 q 251 681 192 657 q 375 706 310 706 q 503 674 449 706 q 599 585 558 642 q 697 674 640 643 q 817 706 754 706 q 936 680 885 706 q 1022 609 988 654 q 1074 503 1057 564 q 1092 371 1092 442 q 1089 320 1092 343 q 1083 285 1086 297 l 685 285 q 742 178 696 213 q 850 143 788 143 q 924 157 889 143 q 996 193 958 171 l 1067 61 q 949 4 1014 25 q 822 -17 883 -17 q 701 15 760 -17 q 600 104 643 46 q 502 14 557 44 q 371 -17 447 -17 m 375 149 q 464 201 432 149 q 496 344 496 254 q 464 488 496 435 q 375 540 432 540 q 288 488 318 540 q 257 344 257 435 q 288 201 257 254 q 375 149 318 149 m 685 410 l 917 410 q 892 511 917 472 q 810 550 867 550 q 727 516 761 550 q 685 410 693 482 z "},"ơ":{"ha":771,"x_min":50,"x_max":785,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 519 678 456 706 q 588 717 561 689 q 614 803 614 744 q 608 847 614 826 q 592 882 601 867 l 743 947 q 772 891 758 926 q 785 817 785 856 q 772 742 785 775 q 735 683 758 708 q 683 639 713 657 q 618 611 653 621 q 693 497 665 564 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 z "},"ớ":{"ha":771,"x_min":50,"x_max":785,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 519 678 456 706 q 588 717 561 689 q 614 803 614 744 q 608 847 614 826 q 592 882 601 867 l 743 947 q 772 891 758 926 q 785 817 785 856 q 772 742 785 775 q 735 683 758 708 q 683 639 713 657 q 618 611 653 621 q 693 497 665 564 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 399 794 l 299 894 l 513 1147 l 650 1013 l 399 794 z "},"ờ":{"ha":771,"x_min":50,"x_max":785,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 519 678 456 706 q 588 717 561 689 q 614 803 614 744 q 608 847 614 826 q 592 882 601 867 l 743 947 q 772 891 758 926 q 785 817 785 856 q 772 742 785 775 q 735 683 758 708 q 683 639 713 657 q 618 611 653 621 q 693 497 665 564 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 371 794 l 119 1013 l 257 1147 l 471 894 l 371 794 z "},"ở":{"ha":771,"x_min":50,"x_max":785,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 519 678 456 706 q 588 717 561 689 q 614 803 614 744 q 608 847 614 826 q 592 882 601 867 l 743 947 q 772 891 758 926 q 785 817 785 856 q 772 742 785 775 q 735 683 758 708 q 683 639 713 657 q 618 611 653 621 q 693 497 665 564 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 325 789 l 308 869 q 353 885 335 875 q 371 918 371 896 q 346 958 371 943 q 260 976 321 972 l 272 1101 q 388 1087 340 1100 q 464 1052 435 1074 q 506 1000 493 1031 q 519 933 519 969 q 503 872 519 897 q 461 828 488 846 q 399 801 435 811 q 325 789 364 792 z "},"ỡ":{"ha":771,"x_min":50,"x_max":785,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 519 678 456 706 q 588 717 561 689 q 614 803 614 744 q 608 847 614 826 q 592 882 601 867 l 743 947 q 772 891 758 926 q 785 817 785 856 q 772 742 785 775 q 735 683 758 708 q 683 639 713 657 q 618 611 653 621 q 693 497 665 564 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 431 796 q 372 810 397 796 q 324 840 346 824 q 285 871 303 857 q 251 885 268 885 q 219 867 231 885 q 203 808 207 849 l 75 815 q 122 975 78 924 q 247 1026 167 1026 q 306 1013 281 1026 q 353 982 332 999 q 392 951 375 965 q 426 938 410 938 q 475 1014 467 938 l 603 1007 q 556 847 600 899 q 431 796 511 796 z "},"ợ":{"ha":771,"x_min":50,"x_max":785,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 519 678 456 706 q 588 717 561 689 q 614 803 614 744 q 608 847 614 826 q 592 882 601 867 l 743 947 q 772 891 758 926 q 785 817 785 856 q 772 742 785 775 q 735 683 758 708 q 683 639 713 657 q 618 611 653 621 q 693 497 665 564 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 385 -312 q 303 -283 335 -312 q 272 -206 272 -253 q 303 -128 272 -158 q 385 -99 335 -99 q 466 -128 435 -99 q 497 -206 497 -158 q 466 -283 497 -253 q 385 -312 435 -312 z "},"ǫ":{"ha":771,"x_min":50,"x_max":721,"o":"m 413 -292 q 308 -260 350 -292 q 265 -165 265 -228 q 273 -116 265 -139 q 292 -74 281 -93 q 316 -40 303 -54 q 342 -14 329 -25 q 230 21 283 -7 q 137 94 176 49 q 74 203 97 140 q 50 344 50 265 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 705 222 721 275 q 659 128 689 169 q 588 55 629 86 q 496 0 546 24 q 424 -56 444 -24 q 403 -118 403 -87 q 421 -158 403 -146 q 461 -171 439 -171 q 488 -166 475 -171 q 511 -154 500 -161 l 553 -246 q 486 -279 526 -267 q 413 -292 446 -292 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 z "},"ŕ":{"ha":553,"x_min":90,"x_max":608,"o":"m 90 0 l 90 689 l 257 689 l 271 568 l 276 568 q 367 672 314 639 q 472 706 419 706 q 520 702 501 706 q 554 692 539 699 l 521 515 q 485 524 501 521 q 446 526 468 526 q 365 499 407 526 q 294 400 322 471 l 294 0 l 90 0 m 357 794 l 257 894 l 471 1147 l 608 1013 l 357 794 z "},"ŗ":{"ha":553,"x_min":35,"x_max":554,"o":"m 90 0 l 90 689 l 257 689 l 271 568 l 276 568 q 367 672 314 639 q 472 706 419 706 q 520 702 501 706 q 554 692 539 699 l 521 515 q 485 524 501 521 q 446 526 468 526 q 365 499 407 526 q 294 400 322 471 l 294 0 l 90 0 m 50 -332 l 35 -250 q 147 -233 117 -246 q 178 -196 178 -219 q 157 -164 178 -176 q 89 -147 136 -151 l 128 -72 q 281 -110 239 -82 q 324 -189 324 -137 q 252 -294 324 -260 q 50 -332 181 -328 z "},"ř":{"ha":553,"x_min":89,"x_max":597,"o":"m 90 0 l 90 689 l 257 689 l 271 568 l 276 568 q 367 672 314 639 q 472 706 419 706 q 520 702 501 706 q 554 692 539 699 l 521 515 q 485 524 501 521 q 446 526 468 526 q 365 499 407 526 q 294 400 322 471 l 294 0 l 90 0 m 239 801 l 89 983 l 167 1056 l 340 928 l 346 928 l 519 1056 l 597 983 l 447 801 l 239 801 z "},"ṙ":{"ha":553,"x_min":90,"x_max":554,"o":"m 90 0 l 90 689 l 257 689 l 271 568 l 276 568 q 367 672 314 639 q 472 706 419 706 q 520 702 501 706 q 554 692 539 699 l 521 515 q 485 524 501 521 q 446 526 468 526 q 365 499 407 526 q 294 400 322 471 l 294 0 l 90 0 m 342 790 q 260 820 292 790 q 229 897 229 850 q 260 974 229 944 q 342 1004 292 1004 q 423 974 392 1004 q 454 897 454 944 q 423 820 454 850 q 342 790 392 790 z "},"ṛ":{"ha":553,"x_min":79,"x_max":554,"o":"m 90 0 l 90 689 l 257 689 l 271 568 l 276 568 q 367 672 314 639 q 472 706 419 706 q 520 702 501 706 q 554 692 539 699 l 521 515 q 485 524 501 521 q 446 526 468 526 q 365 499 407 526 q 294 400 322 471 l 294 0 l 90 0 m 192 -312 q 110 -283 142 -312 q 79 -206 79 -253 q 110 -128 79 -158 q 192 -99 142 -99 q 273 -128 242 -99 q 304 -206 304 -158 q 273 -283 304 -253 q 192 -312 242 -312 z "},"ṝ":{"ha":553,"x_min":79,"x_max":554,"o":"m 90 0 l 90 689 l 257 689 l 271 568 l 276 568 q 367 672 314 639 q 472 706 419 706 q 520 702 501 706 q 554 692 539 699 l 521 515 q 485 524 501 521 q 446 526 468 526 q 365 499 407 526 q 294 400 322 471 l 294 0 l 90 0 m 138 822 l 138 951 l 549 951 l 549 822 l 138 822 m 192 -312 q 110 -283 142 -312 q 79 -206 79 -253 q 110 -128 79 -158 q 192 -99 142 -99 q 273 -128 242 -99 q 304 -206 304 -158 q 273 -283 304 -253 q 192 -312 242 -312 z "},"ṟ":{"ha":553,"x_min":-14,"x_max":554,"o":"m 90 0 l 90 689 l 257 689 l 271 568 l 276 568 q 367 672 314 639 q 472 706 419 706 q 520 702 501 706 q 554 692 539 699 l 521 515 q 485 524 501 521 q 446 526 468 526 q 365 499 407 526 q 294 400 322 471 l 294 0 l 90 0 m -14 -260 l -14 -131 l 397 -131 l 397 -260 l -14 -260 z "},"ś":{"ha":615,"x_min":29,"x_max":592,"o":"m 293 -17 q 153 10 225 -17 q 29 79 82 36 l 121 207 q 211 153 168 171 q 299 135 254 135 q 365 150 344 135 q 386 193 386 165 q 374 223 386 210 q 342 247 363 236 q 297 267 322 258 q 246 288 272 276 q 182 317 214 300 q 124 358 150 333 q 81 415 97 382 q 64 490 64 447 q 83 578 64 538 q 136 646 101 618 q 219 690 171 674 q 328 706 268 706 q 467 678 407 706 q 571 618 526 651 l 479 496 q 406 539 442 524 q 333 554 369 554 q 256 500 256 554 q 267 472 256 483 q 297 450 278 460 q 340 431 315 440 q 390 413 364 422 q 456 384 424 400 q 516 344 489 368 q 560 287 543 321 q 576 206 576 253 q 558 118 576 158 q 504 48 540 78 q 415 1 468 18 q 293 -17 363 -17 m 340 794 l 240 894 l 454 1147 l 592 1013 l 340 794 z "},"ŝ":{"ha":615,"x_min":29,"x_max":581,"o":"m 293 -17 q 153 10 225 -17 q 29 79 82 36 l 121 207 q 211 153 168 171 q 299 135 254 135 q 365 150 344 135 q 386 193 386 165 q 374 223 386 210 q 342 247 363 236 q 297 267 322 258 q 246 288 272 276 q 182 317 214 300 q 124 358 150 333 q 81 415 97 382 q 64 490 64 447 q 83 578 64 538 q 136 646 101 618 q 219 690 171 674 q 328 706 268 706 q 467 678 407 706 q 571 618 526 651 l 479 496 q 406 539 442 524 q 333 554 369 554 q 256 500 256 554 q 267 472 256 483 q 297 450 278 460 q 340 431 315 440 q 390 413 364 422 q 456 384 424 400 q 516 344 489 368 q 560 287 543 321 q 576 206 576 253 q 558 118 576 158 q 504 48 540 78 q 415 1 468 18 q 293 -17 363 -17 m 72 851 l 222 1033 l 431 1033 l 581 851 l 503 779 l 329 907 l 324 907 l 150 779 l 72 851 z "},"š":{"ha":615,"x_min":29,"x_max":581,"o":"m 293 -17 q 153 10 225 -17 q 29 79 82 36 l 121 207 q 211 153 168 171 q 299 135 254 135 q 365 150 344 135 q 386 193 386 165 q 374 223 386 210 q 342 247 363 236 q 297 267 322 258 q 246 288 272 276 q 182 317 214 300 q 124 358 150 333 q 81 415 97 382 q 64 490 64 447 q 83 578 64 538 q 136 646 101 618 q 219 690 171 674 q 328 706 268 706 q 467 678 407 706 q 571 618 526 651 l 479 496 q 406 539 442 524 q 333 554 369 554 q 256 500 256 554 q 267 472 256 483 q 297 450 278 460 q 340 431 315 440 q 390 413 364 422 q 456 384 424 400 q 516 344 489 368 q 560 287 543 321 q 576 206 576 253 q 558 118 576 158 q 504 48 540 78 q 415 1 468 18 q 293 -17 363 -17 m 222 801 l 72 983 l 150 1056 l 324 928 l 329 928 l 503 1056 l 581 983 l 431 801 l 222 801 z "},"ş":{"ha":615,"x_min":29,"x_max":576,"o":"m 293 -17 q 153 10 225 -17 q 29 79 82 36 l 121 207 q 211 153 168 171 q 299 135 254 135 q 365 150 344 135 q 386 193 386 165 q 374 223 386 210 q 342 247 363 236 q 297 267 322 258 q 246 288 272 276 q 182 317 214 300 q 124 358 150 333 q 81 415 97 382 q 64 490 64 447 q 83 578 64 538 q 136 646 101 618 q 219 690 171 674 q 328 706 268 706 q 467 678 407 706 q 571 618 526 651 l 479 496 q 406 539 442 524 q 333 554 369 554 q 256 500 256 554 q 267 472 256 483 q 297 450 278 460 q 340 431 315 440 q 390 413 364 422 q 456 384 424 400 q 516 344 489 368 q 560 287 543 321 q 576 206 576 253 q 558 118 576 158 q 504 48 540 78 q 415 1 468 18 q 293 -17 363 -17 m 186 -332 l 171 -250 q 283 -232 253 -246 q 314 -189 314 -218 q 292 -153 314 -168 q 207 -131 271 -139 l 274 6 l 393 6 l 354 -85 q 433 -121 407 -97 q 460 -189 460 -144 q 388 -294 460 -260 q 186 -332 317 -328 z "},"ș":{"ha":615,"x_min":29,"x_max":576,"o":"m 293 -17 q 153 10 225 -17 q 29 79 82 36 l 121 207 q 211 153 168 171 q 299 135 254 135 q 365 150 344 135 q 386 193 386 165 q 374 223 386 210 q 342 247 363 236 q 297 267 322 258 q 246 288 272 276 q 182 317 214 300 q 124 358 150 333 q 81 415 97 382 q 64 490 64 447 q 83 578 64 538 q 136 646 101 618 q 219 690 171 674 q 328 706 268 706 q 467 678 407 706 q 571 618 526 651 l 479 496 q 406 539 442 524 q 333 554 369 554 q 256 500 256 554 q 267 472 256 483 q 297 450 278 460 q 340 431 315 440 q 390 413 364 422 q 456 384 424 400 q 516 344 489 368 q 560 287 543 321 q 576 206 576 253 q 558 118 576 158 q 504 48 540 78 q 415 1 468 18 q 293 -17 363 -17 m 181 -332 l 165 -250 q 278 -233 247 -246 q 308 -196 308 -219 q 288 -164 308 -176 q 219 -147 267 -151 l 258 -72 q 412 -110 369 -82 q 454 -189 454 -137 q 383 -294 454 -260 q 181 -332 311 -328 z "},"ṡ":{"ha":615,"x_min":29,"x_max":576,"o":"m 293 -17 q 153 10 225 -17 q 29 79 82 36 l 121 207 q 211 153 168 171 q 299 135 254 135 q 365 150 344 135 q 386 193 386 165 q 374 223 386 210 q 342 247 363 236 q 297 267 322 258 q 246 288 272 276 q 182 317 214 300 q 124 358 150 333 q 81 415 97 382 q 64 490 64 447 q 83 578 64 538 q 136 646 101 618 q 219 690 171 674 q 328 706 268 706 q 467 678 407 706 q 571 618 526 651 l 479 496 q 406 539 442 524 q 333 554 369 554 q 256 500 256 554 q 267 472 256 483 q 297 450 278 460 q 340 431 315 440 q 390 413 364 422 q 456 384 424 400 q 516 344 489 368 q 560 287 543 321 q 576 206 576 253 q 558 118 576 158 q 504 48 540 78 q 415 1 468 18 q 293 -17 363 -17 m 326 790 q 245 820 276 790 q 214 897 214 850 q 245 974 214 944 q 326 1004 276 1004 q 408 974 376 1004 q 439 897 439 944 q 408 820 439 850 q 326 790 376 790 z "},"ṣ":{"ha":615,"x_min":29,"x_max":576,"o":"m 293 -17 q 153 10 225 -17 q 29 79 82 36 l 121 207 q 211 153 168 171 q 299 135 254 135 q 365 150 344 135 q 386 193 386 165 q 374 223 386 210 q 342 247 363 236 q 297 267 322 258 q 246 288 272 276 q 182 317 214 300 q 124 358 150 333 q 81 415 97 382 q 64 490 64 447 q 83 578 64 538 q 136 646 101 618 q 219 690 171 674 q 328 706 268 706 q 467 678 407 706 q 571 618 526 651 l 479 496 q 406 539 442 524 q 333 554 369 554 q 256 500 256 554 q 267 472 256 483 q 297 450 278 460 q 340 431 315 440 q 390 413 364 422 q 456 384 424 400 q 516 344 489 368 q 560 287 543 321 q 576 206 576 253 q 558 118 576 158 q 504 48 540 78 q 415 1 468 18 q 293 -17 363 -17 m 322 -312 q 241 -283 272 -312 q 210 -206 210 -253 q 241 -128 210 -158 q 322 -99 272 -99 q 403 -128 372 -99 q 435 -206 435 -158 q 403 -283 435 -253 q 322 -312 372 -312 z "},"ß":{"ha":878,"x_min":90,"x_max":840,"o":"m 585 -17 q 474 0 522 -17 q 375 46 425 17 l 446 185 q 578 135 514 135 q 634 153 614 135 q 654 201 654 172 q 636 247 654 228 q 591 281 618 265 q 532 315 564 297 q 473 355 500 332 q 428 409 446 378 q 410 486 410 440 q 425 556 410 526 q 459 611 440 585 q 493 666 478 638 q 508 732 508 694 q 485 799 508 772 q 419 826 463 826 q 324 780 356 826 q 292 653 292 733 l 292 0 l 90 0 l 90 676 q 110 800 90 743 q 171 899 131 857 q 274 964 211 940 q 419 988 336 988 q 544 968 490 988 q 633 916 597 949 q 686 842 668 883 q 704 756 704 800 q 688 672 704 706 q 650 610 671 638 q 613 560 629 583 q 596 511 596 538 q 614 472 596 488 q 659 440 632 456 q 718 407 686 425 q 777 363 750 389 q 822 301 804 338 q 840 211 840 264 q 824 122 840 164 q 776 50 808 81 q 695 1 743 19 q 585 -17 647 -17 z "},"ť":{"ha":532,"x_min":24,"x_max":513,"o":"m 356 -17 q 247 3 292 -17 q 173 57 201 22 q 131 141 144 92 q 118 250 118 190 l 118 529 l 24 529 l 24 681 l 129 689 l 153 872 l 322 872 l 322 689 l 488 689 l 488 529 l 322 529 l 322 253 q 347 169 322 194 q 411 143 371 143 q 445 147 428 143 q 476 157 463 151 l 508 8 q 443 -8 481 0 q 356 -17 406 -17 m 389 761 l 381 1069 l 513 1069 l 510 974 l 476 761 l 389 761 z "},"ţ":{"ha":532,"x_min":24,"x_max":508,"o":"m 356 -17 q 247 3 292 -17 q 173 57 201 22 q 131 141 144 92 q 118 250 118 190 l 118 529 l 24 529 l 24 681 l 129 689 l 153 872 l 322 872 l 322 689 l 488 689 l 488 529 l 322 529 l 322 253 q 347 169 322 194 q 411 143 371 143 q 445 147 428 143 q 476 157 463 151 l 508 8 q 443 -8 481 0 q 356 -17 406 -17 m 192 -332 l 176 -250 q 289 -232 258 -246 q 319 -189 319 -218 q 298 -153 319 -168 q 213 -131 276 -139 l 279 6 l 399 6 l 360 -85 q 439 -121 413 -97 q 465 -189 465 -144 q 394 -294 465 -260 q 192 -332 322 -328 z "},"ț":{"ha":532,"x_min":24,"x_max":508,"o":"m 356 -17 q 247 3 292 -17 q 173 57 201 22 q 131 141 144 92 q 118 250 118 190 l 118 529 l 24 529 l 24 681 l 129 689 l 153 872 l 322 872 l 322 689 l 488 689 l 488 529 l 322 529 l 322 253 q 347 169 322 194 q 411 143 371 143 q 445 147 428 143 q 476 157 463 151 l 508 8 q 443 -8 481 0 q 356 -17 406 -17 m 185 -332 l 169 -250 q 282 -233 251 -246 q 313 -196 313 -219 q 292 -164 313 -176 q 224 -147 271 -151 l 263 -72 q 416 -110 374 -82 q 458 -189 458 -137 q 387 -294 458 -260 q 185 -332 315 -328 z "},"ṭ":{"ha":532,"x_min":24,"x_max":508,"o":"m 356 -17 q 247 3 292 -17 q 173 57 201 22 q 131 141 144 92 q 118 250 118 190 l 118 529 l 24 529 l 24 681 l 129 689 l 153 872 l 322 872 l 322 689 l 488 689 l 488 529 l 322 529 l 322 253 q 347 169 322 194 q 411 143 371 143 q 445 147 428 143 q 476 157 463 151 l 508 8 q 443 -8 481 0 q 356 -17 406 -17 m 326 -312 q 245 -283 276 -312 q 214 -206 214 -253 q 245 -128 214 -158 q 326 -99 276 -99 q 408 -128 376 -99 q 439 -206 439 -158 q 408 -283 439 -253 q 326 -312 376 -312 z "},"ṯ":{"ha":532,"x_min":24,"x_max":532,"o":"m 356 -17 q 247 3 292 -17 q 173 57 201 22 q 131 141 144 92 q 118 250 118 190 l 118 529 l 24 529 l 24 681 l 129 689 l 153 872 l 322 872 l 322 689 l 488 689 l 488 529 l 322 529 l 322 253 q 347 169 322 194 q 411 143 371 143 q 445 147 428 143 q 476 157 463 151 l 508 8 q 443 -8 481 0 q 356 -17 406 -17 m 121 -260 l 121 -131 l 532 -131 l 532 -260 l 121 -260 z "},"ẗ":{"ha":532,"x_min":-19,"x_max":508,"o":"m 356 -17 q 247 3 292 -17 q 173 57 201 22 q 131 141 144 92 q 118 250 118 190 l 118 529 l 24 529 l 24 681 l 129 689 l 153 872 l 322 872 l 322 689 l 488 689 l 488 529 l 322 529 l 322 253 q 347 169 322 194 q 411 143 371 143 q 445 147 428 143 q 476 157 463 151 l 508 8 q 443 -8 481 0 q 356 -17 406 -17 m 81 985 q 8 1013 36 985 q -19 1085 -19 1042 q 8 1155 -19 1126 q 81 1183 36 1183 q 152 1155 125 1183 q 179 1085 179 1126 q 152 1013 179 1042 q 81 985 125 985 m 383 985 q 312 1013 339 985 q 285 1085 285 1042 q 312 1155 285 1126 q 383 1183 339 1183 q 456 1155 428 1183 q 483 1085 483 1126 q 456 1013 483 1042 q 383 985 428 985 z "},"ŧ":{"ha":532,"x_min":24,"x_max":508,"o":"m 24 310 l 24 400 l 118 407 l 118 529 l 24 529 l 24 681 l 129 689 l 153 872 l 322 872 l 322 689 l 488 689 l 488 529 l 322 529 l 322 408 l 488 408 l 488 310 l 322 310 l 322 253 q 347 169 322 194 q 411 143 371 143 q 445 147 428 143 q 476 157 463 151 l 508 8 q 443 -8 481 0 q 356 -17 406 -17 q 247 3 292 -17 q 173 57 201 22 q 131 141 144 92 q 118 250 118 190 l 118 310 l 24 310 z "},"ù":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 382 794 l 131 1013 l 268 1147 l 482 894 l 382 794 z "},"ú":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 410 794 l 310 894 l 524 1147 l 661 1013 l 410 794 z "},"û":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 142 851 l 292 1033 l 500 1033 l 650 851 l 572 779 l 399 907 l 393 907 l 219 779 l 142 851 z "},"ũ":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 488 796 q 428 810 454 796 q 381 840 403 824 q 342 871 360 857 q 308 885 325 885 q 276 867 288 885 q 260 808 264 849 l 132 815 q 179 975 135 924 q 304 1026 224 1026 q 363 1013 338 1026 q 410 982 389 999 q 449 951 432 965 q 483 938 467 938 q 532 1014 524 938 l 660 1007 q 613 847 657 899 q 488 796 568 796 z "},"ü":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 244 790 q 172 819 200 790 q 144 890 144 847 q 172 960 144 932 q 244 989 200 989 q 316 960 289 989 q 343 890 343 932 q 316 819 343 847 q 244 790 289 790 m 547 790 q 476 819 503 790 q 449 890 449 847 q 476 960 449 932 q 547 989 503 989 q 619 960 592 989 q 647 890 647 932 q 619 819 647 847 q 547 790 592 790 z "},"ū":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 189 822 l 189 951 l 600 951 l 600 822 l 189 822 z "},"ŭ":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 396 794 q 293 811 336 794 q 221 858 250 828 q 177 927 192 888 q 161 1013 163 967 l 278 1032 q 313 955 285 988 q 396 922 340 922 q 479 955 451 922 q 514 1032 507 988 l 631 1013 q 615 927 629 967 q 572 858 600 888 q 499 811 543 828 q 396 794 456 794 z "},"ů":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 396 783 q 258 825 304 783 q 213 928 213 867 q 258 1031 213 989 q 396 1072 304 1072 q 533 1031 488 1072 q 579 928 579 989 q 533 825 579 867 q 396 783 488 783 m 396 860 q 438 878 421 860 q 456 928 456 897 q 438 977 456 958 q 396 996 421 996 q 353 977 371 996 q 336 928 336 958 q 353 878 336 897 q 396 860 371 860 z "},"ű":{"ha":789,"x_min":83,"x_max":724,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 324 785 l 217 833 l 338 1085 l 475 1024 l 324 785 m 572 785 l 465 833 l 586 1085 l 724 1024 l 572 785 z "},"ǔ":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 292 801 l 142 983 l 219 1056 l 393 928 l 399 928 l 572 1056 l 650 983 l 500 801 l 292 801 z "},"ǖ":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 244 793 q 183 817 207 793 q 158 878 158 842 q 183 939 158 914 q 244 964 207 964 q 306 939 282 964 q 331 878 331 914 q 306 817 331 842 q 244 793 282 793 m 190 1050 l 190 1146 l 601 1146 l 601 1050 l 190 1050 m 547 793 q 485 817 510 793 q 461 878 461 842 q 485 939 461 914 q 547 964 510 964 q 609 939 585 964 q 633 878 633 914 q 609 817 633 842 q 547 793 585 793 z "},"ǘ":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 406 990 l 328 1040 l 436 1225 l 544 1153 l 406 990 m 244 793 q 183 817 207 793 q 158 878 158 842 q 183 939 158 914 q 244 964 207 964 q 306 939 282 964 q 331 878 331 914 q 306 817 331 842 q 244 793 282 793 m 547 793 q 485 817 510 793 q 461 878 461 842 q 485 939 461 914 q 547 964 510 964 q 609 939 585 964 q 633 878 633 914 q 609 817 633 842 q 547 793 585 793 z "},"ǚ":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 254 1213 l 393 1122 l 399 1122 l 538 1213 l 604 1151 l 476 1024 l 315 1024 l 188 1151 l 254 1213 m 244 793 q 183 817 207 793 q 158 878 158 842 q 183 939 158 914 q 244 964 207 964 q 306 939 282 964 q 331 878 331 914 q 306 817 331 842 q 244 793 282 793 m 547 793 q 485 817 510 793 q 461 878 461 842 q 485 939 461 914 q 547 964 510 964 q 609 939 585 964 q 633 878 633 914 q 609 817 633 842 q 547 793 585 793 z "},"ǜ":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 386 990 l 247 1153 l 356 1225 l 464 1040 l 386 990 m 244 793 q 183 817 207 793 q 158 878 158 842 q 183 939 158 914 q 244 964 207 964 q 306 939 282 964 q 331 878 331 914 q 306 817 331 842 q 244 793 282 793 m 547 793 q 485 817 510 793 q 461 878 461 842 q 485 939 461 914 q 547 964 510 964 q 609 939 585 964 q 633 878 633 914 q 609 817 633 842 q 547 793 585 793 z "},"ụ":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 421 -312 q 340 -283 371 -312 q 308 -206 308 -253 q 340 -128 308 -158 q 421 -99 371 -99 q 502 -128 471 -99 q 533 -206 533 -158 q 502 -283 533 -253 q 421 -312 471 -312 z "},"ủ":{"ha":789,"x_min":83,"x_max":700,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 336 789 l 319 869 q 364 885 346 875 q 382 918 382 896 q 357 958 382 943 q 271 976 332 972 l 283 1101 q 399 1087 351 1100 q 475 1052 446 1074 q 517 1000 504 1031 q 531 933 531 969 q 515 872 531 897 q 472 828 499 846 q 410 801 446 811 q 336 789 375 792 z "},"ų":{"ha":789,"x_min":83,"x_max":728,"o":"m 588 -292 q 483 -260 525 -292 q 440 -165 440 -228 q 450 -109 440 -135 q 474 -62 460 -83 q 506 -27 489 -42 q 536 -3 522 -12 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 700 689 l 700 0 q 604 -53 631 -21 q 578 -118 578 -86 q 596 -158 578 -146 q 636 -171 614 -171 q 663 -166 650 -171 q 686 -154 676 -161 l 728 -246 q 660 -279 701 -267 q 588 -292 619 -292 z "},"ư":{"ha":789,"x_min":83,"x_max":843,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 560 689 q 599 695 579 690 q 635 714 619 700 q 662 752 651 728 q 672 817 672 776 q 665 860 672 840 q 651 896 658 881 l 801 961 q 831 905 818 940 q 843 831 843 869 q 801 696 843 746 q 700 626 758 646 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 z "},"ứ":{"ha":789,"x_min":83,"x_max":843,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 560 689 q 599 695 579 690 q 635 714 619 700 q 662 752 651 728 q 672 817 672 776 q 665 860 672 840 q 651 896 658 881 l 801 961 q 831 905 818 940 q 843 831 843 869 q 801 696 843 746 q 700 626 758 646 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 394 794 l 294 894 l 508 1147 l 646 1013 l 394 794 z "},"ừ":{"ha":789,"x_min":83,"x_max":843,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 560 689 q 599 695 579 690 q 635 714 619 700 q 662 752 651 728 q 672 817 672 776 q 665 860 672 840 q 651 896 658 881 l 801 961 q 831 905 818 940 q 843 831 843 869 q 801 696 843 746 q 700 626 758 646 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 367 794 l 115 1013 l 253 1147 l 467 894 l 367 794 z "},"ử":{"ha":789,"x_min":83,"x_max":843,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 560 689 q 599 695 579 690 q 635 714 619 700 q 662 752 651 728 q 672 817 672 776 q 665 860 672 840 q 651 896 658 881 l 801 961 q 831 905 818 940 q 843 831 843 869 q 801 696 843 746 q 700 626 758 646 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 321 789 l 304 869 q 349 885 331 875 q 367 918 367 896 q 342 958 367 943 q 256 976 317 972 l 268 1101 q 383 1087 336 1100 q 460 1052 431 1074 q 502 1000 489 1031 q 515 933 515 969 q 499 872 515 897 q 457 828 483 846 q 395 801 431 811 q 321 789 360 792 z "},"ữ":{"ha":789,"x_min":83,"x_max":843,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 560 689 q 599 695 579 690 q 635 714 619 700 q 662 752 651 728 q 672 817 672 776 q 665 860 672 840 q 651 896 658 881 l 801 961 q 831 905 818 940 q 843 831 843 869 q 801 696 843 746 q 700 626 758 646 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 472 796 q 413 810 439 796 q 366 840 388 824 q 327 871 344 857 q 293 885 310 885 q 260 867 272 885 q 244 808 249 849 l 117 815 q 164 975 119 924 q 289 1026 208 1026 q 348 1013 322 1026 q 395 982 374 999 q 434 951 417 965 q 468 938 451 938 q 517 1014 508 938 l 644 1007 q 597 847 642 899 q 472 796 553 796 z "},"ự":{"ha":789,"x_min":83,"x_max":843,"o":"m 297 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 439 175 413 157 q 496 233 465 193 l 496 689 l 560 689 q 599 695 579 690 q 635 714 619 700 q 662 752 651 728 q 672 817 672 776 q 665 860 672 840 q 651 896 658 881 l 801 961 q 831 905 818 940 q 843 831 843 869 q 801 696 843 746 q 700 626 758 646 l 700 0 l 533 0 l 518 96 l 514 96 q 419 13 469 43 q 297 -17 368 -17 m 406 -312 q 324 -283 356 -312 q 293 -206 293 -253 q 324 -128 293 -158 q 406 -99 356 -99 q 487 -128 456 -99 q 518 -206 518 -158 q 487 -283 518 -253 q 406 -312 456 -312 z "},"ẁ":{"ha":1078,"x_min":33,"x_max":1044,"o":"m 206 0 l 33 689 l 236 689 l 303 369 q 318 268 311 318 q 333 165 325 218 l 339 165 q 358 269 349 218 q 379 369 367 321 l 456 689 l 632 689 l 710 369 q 732 268 722 318 q 753 165 742 218 l 758 165 q 774 268 768 218 q 790 369 781 318 l 856 689 l 1044 689 l 879 0 l 640 0 l 578 275 q 558 372 567 324 q 540 476 550 421 l 535 476 q 517 372 525 421 q 500 275 510 324 l 439 0 l 206 0 m 526 794 l 275 1013 l 413 1147 l 626 894 l 526 794 z "},"ẃ":{"ha":1078,"x_min":33,"x_max":1044,"o":"m 206 0 l 33 689 l 236 689 l 303 369 q 318 268 311 318 q 333 165 325 218 l 339 165 q 358 269 349 218 q 379 369 367 321 l 456 689 l 632 689 l 710 369 q 732 268 722 318 q 753 165 742 218 l 758 165 q 774 268 768 218 q 790 369 781 318 l 856 689 l 1044 689 l 879 0 l 640 0 l 578 275 q 558 372 567 324 q 540 476 550 421 l 535 476 q 517 372 525 421 q 500 275 510 324 l 439 0 l 206 0 m 554 794 l 454 894 l 668 1147 l 806 1013 l 554 794 z "},"ŵ":{"ha":1078,"x_min":33,"x_max":1044,"o":"m 206 0 l 33 689 l 236 689 l 303 369 q 318 268 311 318 q 333 165 325 218 l 339 165 q 358 269 349 218 q 379 369 367 321 l 456 689 l 632 689 l 710 369 q 732 268 722 318 q 753 165 742 218 l 758 165 q 774 268 768 218 q 790 369 781 318 l 856 689 l 1044 689 l 879 0 l 640 0 l 578 275 q 558 372 567 324 q 540 476 550 421 l 535 476 q 517 372 525 421 q 500 275 510 324 l 439 0 l 206 0 m 286 851 l 436 1033 l 644 1033 l 794 851 l 717 779 l 543 907 l 538 907 l 364 779 l 286 851 z "},"ẅ":{"ha":1078,"x_min":33,"x_max":1044,"o":"m 206 0 l 33 689 l 236 689 l 303 369 q 318 268 311 318 q 333 165 325 218 l 339 165 q 358 269 349 218 q 379 369 367 321 l 456 689 l 632 689 l 710 369 q 732 268 722 318 q 753 165 742 218 l 758 165 q 774 268 768 218 q 790 369 781 318 l 856 689 l 1044 689 l 879 0 l 640 0 l 578 275 q 558 372 567 324 q 540 476 550 421 l 535 476 q 517 372 525 421 q 500 275 510 324 l 439 0 l 206 0 m 389 790 q 317 819 344 790 q 289 890 289 847 q 317 960 289 932 q 389 989 344 989 q 460 960 433 989 q 488 890 488 932 q 460 819 488 847 q 389 790 433 790 m 692 790 q 620 819 647 790 q 593 890 593 847 q 620 960 593 932 q 692 989 647 989 q 764 960 736 989 q 792 890 792 932 q 764 819 792 847 q 692 790 736 790 z "},"ỳ":{"ha":724,"x_min":17,"x_max":707,"o":"m 167 -269 q 113 -266 135 -269 q 69 -256 90 -262 l 106 -100 q 128 -106 115 -103 q 151 -108 140 -108 q 231 -83 203 -108 q 272 -18 258 -58 l 282 18 l 17 689 l 222 689 l 321 393 q 349 297 336 346 q 375 197 361 249 l 381 197 q 403 295 392 246 q 428 393 415 344 l 511 689 l 707 689 l 468 -7 q 416 -122 443 -72 q 353 -203 389 -171 q 273 -253 318 -236 q 167 -269 228 -269 m 356 794 l 104 1013 l 242 1147 l 456 894 l 356 794 z "},"ý":{"ha":724,"x_min":17,"x_max":707,"o":"m 167 -269 q 113 -266 135 -269 q 69 -256 90 -262 l 106 -100 q 128 -106 115 -103 q 151 -108 140 -108 q 231 -83 203 -108 q 272 -18 258 -58 l 282 18 l 17 689 l 222 689 l 321 393 q 349 297 336 346 q 375 197 361 249 l 381 197 q 403 295 392 246 q 428 393 415 344 l 511 689 l 707 689 l 468 -7 q 416 -122 443 -72 q 353 -203 389 -171 q 273 -253 318 -236 q 167 -269 228 -269 m 383 794 l 283 894 l 497 1147 l 635 1013 l 383 794 z "},"ŷ":{"ha":724,"x_min":17,"x_max":707,"o":"m 167 -269 q 113 -266 135 -269 q 69 -256 90 -262 l 106 -100 q 128 -106 115 -103 q 151 -108 140 -108 q 231 -83 203 -108 q 272 -18 258 -58 l 282 18 l 17 689 l 222 689 l 321 393 q 349 297 336 346 q 375 197 361 249 l 381 197 q 403 295 392 246 q 428 393 415 344 l 511 689 l 707 689 l 468 -7 q 416 -122 443 -72 q 353 -203 389 -171 q 273 -253 318 -236 q 167 -269 228 -269 m 115 851 l 265 1033 l 474 1033 l 624 851 l 546 779 l 372 907 l 367 907 l 193 779 l 115 851 z "},"ÿ":{"ha":724,"x_min":17,"x_max":707,"o":"m 167 -269 q 113 -266 135 -269 q 69 -256 90 -262 l 106 -100 q 128 -106 115 -103 q 151 -108 140 -108 q 231 -83 203 -108 q 272 -18 258 -58 l 282 18 l 17 689 l 222 689 l 321 393 q 349 297 336 346 q 375 197 361 249 l 381 197 q 403 295 392 246 q 428 393 415 344 l 511 689 l 707 689 l 468 -7 q 416 -122 443 -72 q 353 -203 389 -171 q 273 -253 318 -236 q 167 -269 228 -269 m 218 790 q 146 819 174 790 q 118 890 118 847 q 146 960 118 932 q 218 989 174 989 q 290 960 263 989 q 317 890 317 932 q 290 819 317 847 q 218 790 263 790 m 521 790 q 449 819 476 790 q 422 890 422 847 q 449 960 422 932 q 521 989 476 989 q 593 960 565 989 q 621 890 621 932 q 593 819 621 847 q 521 790 565 790 z "},"ẏ":{"ha":724,"x_min":17,"x_max":707,"o":"m 167 -269 q 113 -266 135 -269 q 69 -256 90 -262 l 106 -100 q 128 -106 115 -103 q 151 -108 140 -108 q 231 -83 203 -108 q 272 -18 258 -58 l 282 18 l 17 689 l 222 689 l 321 393 q 349 297 336 346 q 375 197 361 249 l 381 197 q 403 295 392 246 q 428 393 415 344 l 511 689 l 707 689 l 468 -7 q 416 -122 443 -72 q 353 -203 389 -171 q 273 -253 318 -236 q 167 -269 228 -269 m 369 790 q 288 820 319 790 q 257 897 257 850 q 288 974 257 944 q 369 1004 319 1004 q 451 974 419 1004 q 482 897 482 944 q 451 820 482 850 q 369 790 419 790 z "},"ỵ":{"ha":724,"x_min":17,"x_max":732,"o":"m 167 -269 q 113 -266 135 -269 q 69 -256 90 -262 l 106 -100 q 128 -106 115 -103 q 151 -108 140 -108 q 231 -83 203 -108 q 272 -18 258 -58 l 282 18 l 17 689 l 222 689 l 321 393 q 349 297 336 346 q 375 197 361 249 l 381 197 q 403 295 392 246 q 428 393 415 344 l 511 689 l 707 689 l 468 -7 q 416 -122 443 -72 q 353 -203 389 -171 q 273 -253 318 -236 q 167 -269 228 -269 m 619 -301 q 538 -272 569 -301 q 507 -194 507 -242 q 538 -117 507 -147 q 619 -87 569 -87 q 701 -117 669 -87 q 732 -194 732 -147 q 701 -272 732 -242 q 619 -301 669 -301 z "},"ỷ":{"ha":724,"x_min":17,"x_max":707,"o":"m 167 -269 q 113 -266 135 -269 q 69 -256 90 -262 l 106 -100 q 128 -106 115 -103 q 151 -108 140 -108 q 231 -83 203 -108 q 272 -18 258 -58 l 282 18 l 17 689 l 222 689 l 321 393 q 349 297 336 346 q 375 197 361 249 l 381 197 q 403 295 392 246 q 428 393 415 344 l 511 689 l 707 689 l 468 -7 q 416 -122 443 -72 q 353 -203 389 -171 q 273 -253 318 -236 q 167 -269 228 -269 m 310 789 l 293 869 q 338 885 319 875 q 356 918 356 896 q 331 958 356 943 q 244 976 306 972 l 257 1101 q 372 1087 325 1100 q 449 1052 419 1074 q 491 1000 478 1031 q 504 933 504 969 q 488 872 504 897 q 446 828 472 846 q 384 801 419 811 q 310 789 349 792 z "},"ỹ":{"ha":724,"x_min":17,"x_max":707,"o":"m 167 -269 q 113 -266 135 -269 q 69 -256 90 -262 l 106 -100 q 128 -106 115 -103 q 151 -108 140 -108 q 231 -83 203 -108 q 272 -18 258 -58 l 282 18 l 17 689 l 222 689 l 321 393 q 349 297 336 346 q 375 197 361 249 l 381 197 q 403 295 392 246 q 428 393 415 344 l 511 689 l 707 689 l 468 -7 q 416 -122 443 -72 q 353 -203 389 -171 q 273 -253 318 -236 q 167 -269 228 -269 m 461 796 q 402 810 428 796 q 355 840 376 824 q 316 871 333 857 q 282 885 299 885 q 249 867 261 885 q 233 808 238 849 l 106 815 q 153 975 108 924 q 278 1026 197 1026 q 337 1013 311 1026 q 384 982 363 999 q 423 951 406 965 q 457 938 440 938 q 506 1014 497 938 l 633 1007 q 586 847 631 899 q 461 796 542 796 z "},"ź":{"ha":639,"x_min":53,"x_max":606,"o":"m 53 0 l 53 110 l 342 529 l 85 529 l 85 689 l 596 689 l 596 581 l 307 160 l 606 160 l 606 0 l 53 0 m 354 794 l 254 894 l 468 1147 l 606 1013 l 354 794 z "},"ž":{"ha":639,"x_min":53,"x_max":606,"o":"m 53 0 l 53 110 l 342 529 l 85 529 l 85 689 l 596 689 l 596 581 l 307 160 l 606 160 l 606 0 l 53 0 m 236 801 l 86 983 l 164 1056 l 338 928 l 343 928 l 517 1056 l 594 983 l 444 801 l 236 801 z "},"ż":{"ha":639,"x_min":53,"x_max":606,"o":"m 53 0 l 53 110 l 342 529 l 85 529 l 85 689 l 596 689 l 596 581 l 307 160 l 606 160 l 606 0 l 53 0 m 340 790 q 259 820 290 790 q 228 897 228 850 q 259 974 228 944 q 340 1004 290 1004 q 422 974 390 1004 q 453 897 453 944 q 422 820 453 850 q 340 790 390 790 z "},"ẓ":{"ha":639,"x_min":53,"x_max":606,"o":"m 53 0 l 53 110 l 342 529 l 85 529 l 85 689 l 596 689 l 596 581 l 307 160 l 606 160 l 606 0 l 53 0 m 340 -312 q 259 -283 290 -312 q 228 -206 228 -253 q 259 -128 228 -158 q 340 -99 290 -99 q 422 -128 390 -99 q 453 -206 453 -158 q 422 -283 453 -253 q 340 -312 390 -312 z "},"ẕ":{"ha":639,"x_min":53,"x_max":606,"o":"m 53 0 l 53 110 l 342 529 l 85 529 l 85 689 l 596 689 l 596 581 l 307 160 l 606 160 l 606 0 l 53 0 m 135 -260 l 135 -131 l 546 -131 l 546 -260 l 135 -260 z "},"ð":{"ha":778,"x_min":58,"x_max":708,"o":"m 379 -17 q 256 7 314 -17 q 154 74 199 31 q 84 178 110 117 q 58 317 58 240 q 82 450 58 392 q 145 549 106 508 q 235 610 185 589 q 340 632 286 632 q 419 619 381 632 q 488 574 458 606 q 369 758 451 681 l 172 660 l 119 750 l 281 831 q 222 868 253 850 q 156 904 190 886 l 244 1028 q 342 974 293 1003 q 436 910 390 944 l 635 1010 l 688 919 l 521 835 q 656 638 603 751 q 708 369 708 525 q 685 215 708 286 q 620 93 663 144 q 517 13 578 42 q 379 -17 456 -17 m 386 149 q 481 199 444 149 q 518 358 518 250 q 518 390 518 375 q 517 421 518 406 q 451 468 485 456 q 382 481 418 481 q 283 440 321 481 q 244 317 244 400 q 287 192 244 235 q 386 149 329 149 z "},"þ":{"ha":796,"x_min":90,"x_max":742,"o":"m 90 -256 l 90 974 l 294 974 l 294 735 l 289 638 q 369 688 325 669 q 461 706 414 706 q 578 681 526 706 q 667 610 631 656 q 722 499 703 564 q 742 356 742 435 q 717 198 742 267 q 652 81 693 129 q 559 8 611 33 q 451 -17 507 -17 q 363 0 401 -17 q 289 49 325 17 l 294 -54 l 294 -256 l 90 -256 m 404 150 q 494 198 457 150 q 532 353 532 246 q 413 539 532 539 q 294 476 353 539 l 294 194 q 350 160 322 169 q 404 150 378 150 z "},"ŋ":{"ha":794,"x_min":90,"x_max":711,"o":"m 465 -260 q 394 -254 422 -260 q 343 -240 365 -249 l 381 -90 q 433 -99 407 -99 q 491 -72 475 -99 q 507 13 507 -46 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 l 90 689 l 257 689 l 271 601 l 276 601 q 374 674 321 643 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 18 q 699 -90 711 -39 q 659 -178 688 -140 q 583 -237 631 -215 q 465 -260 536 -260 z "},"ȷ":{"ha":386,"x_min":-71,"x_max":296,"o":"m 50 -272 q -22 -267 7 -272 q -71 -253 -50 -261 l -35 -103 q -8 -110 -21 -107 q 19 -112 4 -112 q 76 -86 60 -112 q 92 -1 92 -60 l 92 689 l 296 689 l 296 4 q 284 -103 296 -53 q 244 -190 272 -153 q 168 -250 215 -228 q 50 -272 121 -272 z "},"ij":{"ha":769,"x_min":74,"x_max":696,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m 192 790 q 107 820 140 790 q 74 897 74 850 q 107 974 74 944 q 192 1003 140 1003 q 277 974 244 1003 q 310 897 310 944 q 277 820 310 850 q 192 790 244 790 m 433 -272 q 362 -267 390 -272 q 313 -253 333 -261 l 349 -103 q 375 -110 363 -107 q 403 -112 388 -112 q 459 -86 443 -112 q 475 -1 475 -60 l 475 689 l 679 689 l 679 4 q 667 -103 679 -53 q 627 -190 656 -153 q 551 -250 599 -228 q 433 -272 504 -272 m 578 790 q 493 820 526 790 q 460 897 460 850 q 493 974 460 944 q 578 1003 526 1003 q 663 974 629 1003 q 696 897 696 944 q 663 820 696 850 q 578 790 629 790 z "},"ɐ":{"ha":742,"x_min":81,"x_max":674,"o":"m 385 -17 q 159 63 238 -17 q 81 303 81 143 l 81 689 l 247 689 l 263 604 l 268 604 q 363 678 308 650 q 486 706 417 706 q 624 652 575 706 q 674 517 674 599 q 582 335 674 406 q 285 243 490 265 q 319 172 289 199 q 415 146 349 146 q 501 163 460 146 q 593 208 543 181 l 665 74 q 532 8 603 33 q 385 -17 461 -17 m 285 368 q 436 414 394 383 q 478 485 478 444 q 458 532 478 517 q 408 547 439 547 q 344 528 374 547 q 285 475 314 510 l 285 368 z "},"ɒ":{"ha":796,"x_min":90,"x_max":742,"o":"m 451 -17 q 360 3 407 -17 q 272 68 314 24 l 267 68 l 250 0 l 90 0 l 90 689 l 257 689 l 271 621 l 276 621 q 367 681 317 657 q 472 706 418 706 q 585 681 535 706 q 669 610 635 656 q 723 499 704 564 q 742 356 742 435 q 717 198 742 267 q 652 81 693 129 q 559 8 611 33 q 451 -17 507 -17 m 404 150 q 494 198 457 150 q 532 353 532 246 q 413 539 532 539 q 294 476 353 539 l 294 194 q 350 160 322 169 q 404 150 378 150 z "},"ɓ":{"ha":796,"x_min":90,"x_max":742,"o":"m 451 -17 q 359 6 406 -17 q 272 72 313 28 l 267 72 l 250 0 l 90 0 l 90 694 q 106 808 90 754 q 154 902 121 861 q 242 967 188 943 q 374 990 296 990 q 452 982 417 990 q 511 965 488 974 l 474 815 q 438 826 457 822 q 403 829 419 829 q 324 799 350 829 q 292 700 297 769 l 289 607 q 376 663 329 642 q 471 683 422 683 q 583 659 533 683 q 669 591 633 635 q 723 484 704 547 q 742 344 742 421 q 717 191 742 258 q 652 78 693 124 q 559 8 611 32 q 451 -17 507 -17 m 404 150 q 494 195 457 150 q 532 342 532 240 q 413 515 532 515 q 352 501 381 515 q 294 454 324 486 l 294 194 q 350 160 322 169 q 404 150 378 150 z "},"ɔ":{"ha":649,"x_min":32,"x_max":600,"o":"m 258 -17 q 142 2 201 -17 q 32 65 82 21 l 111 199 q 170 163 139 178 q 236 149 201 149 q 347 201 303 149 q 390 344 390 254 q 349 488 390 435 q 243 540 307 540 q 185 531 208 540 q 136 500 161 522 l 39 632 q 136 685 79 664 q 267 706 193 706 q 394 682 333 706 q 500 613 454 658 q 573 499 546 567 q 600 344 600 432 q 574 191 600 258 q 501 78 547 124 q 392 8 454 32 q 258 -17 329 -17 z "},"ɕ":{"ha":649,"x_min":32,"x_max":636,"o":"m 408 139 q 465 156 444 139 q 485 196 485 172 q 472 228 485 213 q 432 243 460 243 q 321 169 379 243 q 408 139 360 139 m 190 -101 l 32 -32 q 69 53 50 13 q 110 129 88 93 q 66 226 82 172 q 50 344 50 279 q 79 498 50 431 q 158 611 108 565 q 272 681 207 657 q 408 706 338 706 q 522 685 472 706 q 610 632 571 664 l 521 510 q 421 550 472 550 q 294 495 342 550 q 247 344 247 440 q 251 299 247 319 q 449 378 347 378 q 586 329 536 378 q 636 196 636 281 q 620 113 636 151 q 574 45 604 74 q 500 0 543 17 q 401 -17 457 -17 q 235 19 310 -17 q 212 -38 222 -8 q 190 -101 201 -68 z "},"ɖ":{"ha":796,"x_min":54,"x_max":842,"o":"m 733 -260 q 633 -242 675 -260 q 563 -197 590 -225 q 522 -130 535 -168 q 508 -50 508 -92 l 510 60 q 429 5 474 26 q 336 -17 385 -17 q 220 8 272 -17 q 131 80 168 33 q 74 193 94 126 q 54 344 54 260 q 78 496 54 429 q 142 609 103 563 q 234 681 182 656 q 340 706 286 706 q 436 686 399 706 q 510 633 474 667 l 501 739 l 501 990 l 706 990 l 706 -1 q 719 -76 706 -53 q 765 -99 732 -99 q 806 -90 785 -99 l 842 -240 q 797 -254 822 -249 q 733 -260 772 -260 m 389 150 q 449 164 422 150 q 501 213 476 178 l 501 494 q 444 529 474 519 q 388 539 415 539 q 301 492 339 539 q 264 347 264 446 q 297 197 264 244 q 389 150 329 150 z "},"ɗ":{"ha":796,"x_min":54,"x_max":843,"o":"m 336 -17 q 220 8 272 -17 q 131 80 168 33 q 74 193 94 126 q 54 344 54 260 q 78 496 54 429 q 142 609 103 563 q 234 681 182 656 q 340 706 286 706 q 436 686 399 706 q 510 633 474 667 l 508 747 q 521 842 508 797 q 562 919 533 886 q 636 971 590 951 q 747 990 682 990 q 803 987 781 990 q 843 976 825 983 l 807 826 q 779 831 792 831 q 722 806 739 831 q 706 731 706 782 l 706 0 l 539 0 l 525 68 l 519 68 q 435 8 483 32 q 336 -17 386 -17 m 389 150 q 449 164 422 150 q 501 213 476 178 l 501 494 q 444 529 474 519 q 388 539 415 539 q 301 492 339 539 q 264 347 264 446 q 297 197 264 244 q 389 150 329 150 z "},"ɘ":{"ha":719,"x_min":50,"x_max":669,"o":"m 326 -17 q 197 4 264 -17 q 76 61 129 25 l 143 185 q 299 139 218 139 q 413 174 369 139 q 471 285 457 210 l 58 285 q 53 322 56 297 q 50 375 50 347 q 70 506 50 446 q 130 611 90 567 q 227 681 169 656 q 358 706 285 706 q 477 681 421 706 q 576 609 533 656 q 644 495 619 563 q 669 344 669 428 q 644 192 669 258 q 572 78 618 125 q 463 8 526 32 q 326 -17 400 -17 m 225 419 l 474 419 q 433 518 465 486 q 351 550 401 550 q 257 514 289 550 q 225 419 225 478 z "},"ɑ":{"ha":796,"x_min":54,"x_max":706,"o":"m 336 -17 q 220 8 272 -17 q 131 80 168 33 q 74 193 94 126 q 54 344 54 260 q 79 496 54 429 q 145 609 104 563 q 238 681 186 656 q 344 706 290 706 q 440 685 397 706 q 524 621 483 665 l 529 621 l 546 689 l 706 689 l 706 0 l 539 0 l 525 68 l 519 68 q 435 8 483 32 q 336 -17 386 -17 m 389 150 q 449 164 422 150 q 501 213 476 178 l 501 494 q 444 529 474 519 q 388 539 415 539 q 301 492 339 539 q 264 347 264 446 q 297 197 264 244 q 389 150 329 150 z "},"ʙ":{"ha":733,"x_min":90,"x_max":686,"o":"m 90 0 l 90 689 l 383 689 q 492 680 442 689 q 579 649 542 671 q 638 593 617 628 q 660 507 660 558 q 633 422 660 463 q 544 365 607 382 l 544 360 q 648 307 610 344 q 686 199 686 269 q 663 108 686 146 q 601 46 640 69 q 510 11 563 22 q 400 0 458 0 l 90 0 m 289 419 l 369 419 q 443 437 421 419 q 465 486 465 454 q 444 536 465 518 q 371 554 422 554 l 289 554 l 289 419 m 289 135 l 388 135 q 466 156 443 135 q 489 213 489 178 q 465 264 489 243 q 386 285 440 285 l 289 285 l 289 135 z "},"ə":{"ha":719,"x_min":50,"x_max":669,"o":"m 346 -17 q 217 8 272 -17 q 124 78 161 33 q 69 185 88 124 q 50 317 50 246 q 53 369 50 344 q 58 407 56 394 l 471 407 q 419 515 460 481 q 313 550 378 550 q 163 504 236 550 l 94 636 q 217 690 151 674 q 347 706 282 706 q 474 681 415 706 q 576 609 533 656 q 644 496 619 563 q 669 344 669 429 q 643 194 669 261 q 572 80 617 126 q 469 8 528 33 q 346 -17 410 -17 m 342 139 q 427 170 392 139 q 474 272 463 201 l 225 272 q 252 176 225 213 q 342 139 279 139 z "},"ɚ":{"ha":982,"x_min":50,"x_max":1010,"o":"m 361 -17 q 225 10 282 -17 q 131 80 168 36 q 74 181 93 124 q 50 301 54 239 l 451 472 q 397 531 432 513 q 311 550 361 550 q 235 538 271 550 q 163 504 199 526 l 94 636 q 217 690 153 674 q 339 706 281 706 q 510 663 439 706 q 622 544 582 619 l 751 600 l 849 564 q 865 458 850 486 q 913 431 881 431 q 943 435 929 431 q 968 446 957 439 l 1010 349 q 963 324 989 335 q 904 314 936 314 q 854 319 879 314 q 807 340 829 325 q 766 381 785 356 q 736 449 747 407 l 663 417 q 667 376 665 397 q 669 332 669 354 q 647 196 669 260 q 584 85 625 132 q 486 10 543 38 q 361 -17 429 -17 m 354 136 q 445 185 410 136 q 481 314 481 235 l 481 338 l 232 231 q 276 161 243 186 q 354 136 308 136 z "},"ɛ":{"ha":642,"x_min":64,"x_max":615,"o":"m 374 -17 q 259 -3 315 -17 q 160 38 203 11 q 90 103 117 64 q 64 196 64 143 q 104 306 64 267 q 208 361 144 346 l 208 367 q 123 426 150 385 q 96 508 96 467 q 119 597 96 560 q 181 658 142 635 q 270 694 219 682 q 376 706 321 706 q 597 643 494 706 l 522 511 q 456 540 488 531 q 388 550 425 550 q 320 531 344 550 q 296 481 296 513 q 392 419 296 419 l 486 419 l 486 285 l 369 285 q 290 269 315 285 q 264 217 264 253 q 300 160 264 181 q 393 139 336 139 q 461 149 425 139 q 535 182 497 158 l 615 53 q 496 -2 553 13 q 374 -17 439 -17 z "},"ɜ":{"ha":661,"x_min":46,"x_max":597,"o":"m 300 -17 q 172 -2 232 -17 q 46 53 113 13 l 126 182 q 200 149 164 158 q 268 139 236 139 q 362 160 326 139 q 397 217 397 181 q 372 269 397 253 q 292 285 346 285 l 176 285 l 176 419 l 269 419 q 365 481 365 419 q 342 531 365 513 q 275 550 319 550 q 206 540 238 550 q 139 511 174 531 l 64 643 q 299 706 172 706 q 401 694 353 706 q 485 658 449 682 q 544 597 522 635 q 565 508 565 560 q 538 426 565 467 q 453 367 511 385 l 453 361 q 557 306 517 346 q 597 196 597 267 q 572 103 597 143 q 506 38 547 64 q 410 -3 464 11 q 300 -17 357 -17 z "},"ɞ":{"ha":786,"x_min":64,"x_max":739,"o":"m 375 -17 q 259 -3 315 -17 q 160 38 203 11 q 90 103 117 64 q 64 196 64 143 q 104 306 64 267 q 208 361 144 346 l 208 367 q 123 426 150 385 q 96 508 96 467 q 118 597 96 560 q 179 658 140 635 q 268 694 218 682 q 375 706 318 706 q 512 683 446 706 q 628 616 578 661 q 709 503 679 571 q 739 344 739 435 q 710 186 739 254 q 632 73 682 118 q 516 6 582 28 q 375 -17 450 -17 m 375 139 q 490 188 450 139 q 529 344 529 236 q 491 501 529 453 q 381 550 453 550 q 320 531 344 550 q 296 481 296 513 q 381 419 296 419 l 424 419 l 424 285 l 358 285 q 287 269 310 285 q 264 217 264 253 q 295 160 264 181 q 375 139 326 139 z "},"ɟ":{"ha":446,"x_min":-43,"x_max":422,"o":"m 78 -272 q 6 -267 35 -272 q -43 -253 -22 -261 l -7 -103 q 19 -110 7 -107 q 47 -112 32 -112 q 103 -86 88 -112 q 119 -1 119 -60 l 119 310 l 17 310 l 17 400 l 119 408 l 119 689 l 324 689 l 324 408 l 422 408 l 422 310 l 324 310 l 324 4 q 312 -103 324 -53 q 272 -190 300 -153 q 196 -250 243 -228 q 78 -272 149 -272 z "},"ɠ":{"ha":810,"x_min":61,"x_max":850,"o":"m 363 -269 q 235 -251 306 -269 q 106 -193 165 -232 l 172 -58 q 271 -98 221 -86 q 363 -110 321 -110 q 471 -78 439 -110 q 508 1 503 -47 l 514 88 q 435 37 479 56 q 343 18 392 18 q 227 43 279 18 q 138 113 175 68 q 81 220 101 158 q 61 357 61 282 q 86 501 61 436 q 152 610 111 565 q 245 681 193 656 q 351 706 297 706 q 441 686 404 706 q 514 633 478 667 l 514 681 q 526 763 514 722 q 567 835 539 803 q 642 888 596 868 q 754 907 688 907 q 810 903 788 907 q 850 893 832 900 l 814 742 q 786 747 803 747 q 729 722 746 747 q 713 647 713 696 l 713 7 q 622 -199 713 -128 q 363 -269 531 -269 m 396 182 q 455 197 429 182 q 508 247 481 211 l 508 494 q 451 529 481 519 q 394 539 422 539 q 306 493 343 539 q 268 360 268 447 q 302 228 268 274 q 396 182 336 182 z "},"ɡ":{"ha":810,"x_min":61,"x_max":713,"o":"m 363 -269 q 235 -251 306 -269 q 106 -193 165 -232 l 172 -58 q 271 -98 221 -86 q 363 -110 321 -110 q 471 -78 439 -110 q 508 1 503 -47 l 514 88 q 435 37 479 56 q 343 18 392 18 q 227 43 279 18 q 138 113 175 68 q 81 220 101 158 q 61 357 61 282 q 86 501 61 436 q 152 610 111 565 q 245 681 193 656 q 351 706 297 706 q 447 687 404 706 q 528 625 489 668 l 533 625 l 549 689 l 713 689 l 713 7 q 622 -199 713 -128 q 363 -269 531 -269 m 396 182 q 455 197 429 182 q 508 247 481 211 l 508 494 q 451 529 481 519 q 394 539 422 539 q 306 493 343 539 q 268 360 268 447 q 302 228 268 274 q 396 182 336 182 z "},"ɢ":{"ha":718,"x_min":50,"x_max":660,"o":"m 400 -17 q 269 5 332 -17 q 157 71 206 26 q 79 183 108 115 q 50 342 50 250 q 80 497 50 429 q 159 611 110 565 q 272 681 208 657 q 404 706 336 706 q 544 681 490 706 q 643 622 599 657 l 551 500 q 492 536 519 522 q 418 550 465 550 q 358 538 388 550 q 307 500 329 525 q 271 435 285 475 q 257 342 257 396 q 301 192 257 244 q 415 139 344 139 q 486 158 458 139 l 486 276 l 369 276 l 369 413 l 660 413 l 660 74 q 549 9 617 35 q 400 -17 481 -17 z "},"ɣ":{"ha":726,"x_min":17,"x_max":710,"o":"m 368 -293 q 213 -238 271 -293 q 154 -92 154 -183 q 160 -42 154 -65 q 176 7 165 -18 q 201 60 186 32 q 235 121 215 88 l 17 689 l 222 689 l 311 400 q 338 319 325 356 q 365 236 351 283 l 371 236 q 397 319 383 283 q 424 400 410 356 l 514 689 l 710 689 l 500 122 q 534 60 519 89 q 559 7 549 32 q 575 -42 569 -18 q 581 -92 581 -65 q 523 -238 581 -183 q 368 -293 465 -293 m 368 -165 q 402 -149 389 -165 q 415 -106 415 -133 q 404 -43 415 -76 q 369 35 393 -10 l 363 35 q 331 -44 340 -10 q 321 -106 321 -78 q 333 -149 321 -133 q 368 -165 346 -165 z "},"ɤ":{"ha":790,"x_min":22,"x_max":768,"o":"m 396 -17 q 196 48 269 -17 q 122 236 122 113 q 158 361 122 297 q 257 483 194 425 q 203 527 232 514 q 144 540 174 540 q 81 521 104 540 l 22 669 q 89 697 46 688 q 172 706 132 706 q 288 680 229 706 q 396 596 346 654 q 503 680 444 654 q 618 706 561 706 q 702 697 660 706 q 768 669 744 688 l 711 521 q 646 540 685 540 q 588 527 617 540 q 533 483 558 514 q 633 361 596 425 q 669 236 669 297 q 595 48 669 113 q 396 -17 521 -17 m 396 149 q 457 174 436 149 q 478 242 478 200 q 455 317 478 278 q 396 392 432 357 q 335 317 358 357 q 313 242 313 278 q 334 174 313 200 q 396 149 356 149 z "},"ɥ":{"ha":794,"x_min":83,"x_max":704,"o":"m 500 -256 l 500 -46 l 510 85 q 419 13 471 43 q 297 -17 368 -17 q 134 57 185 -17 q 83 261 83 131 l 83 689 l 288 689 l 288 288 q 308 185 288 213 q 374 157 329 157 q 441 174 413 157 q 500 233 469 192 l 500 689 l 704 689 l 704 -256 l 500 -256 z "},"ɦ":{"ha":793,"x_min":90,"x_max":711,"o":"m 90 0 l 90 694 q 106 808 90 754 q 154 902 121 861 q 242 967 188 943 q 374 990 296 990 q 452 982 417 990 q 511 965 488 974 l 474 815 q 438 826 457 822 q 403 829 419 829 q 324 799 350 829 q 292 700 297 769 l 285 588 q 326 622 304 606 q 375 653 349 639 q 432 675 401 667 q 497 683 463 683 q 660 610 610 683 q 711 406 711 536 l 711 0 l 507 0 l 507 379 q 487 481 507 454 q 422 508 467 508 q 356 491 383 508 q 294 442 328 474 l 294 0 l 90 0 z "},"ɧ":{"ha":793,"x_min":90,"x_max":711,"o":"m 465 -260 q 394 -254 422 -260 q 343 -240 365 -249 l 381 -90 q 433 -99 407 -99 q 491 -72 475 -99 q 507 13 507 -46 l 507 379 q 487 481 507 454 q 422 508 467 508 q 356 491 383 508 q 294 442 328 474 l 294 0 l 90 0 l 90 694 q 106 808 90 754 q 154 902 121 861 q 242 967 188 943 q 374 990 296 990 q 452 982 417 990 q 511 965 488 974 l 474 815 q 438 826 457 822 q 403 829 419 829 q 324 799 350 829 q 292 700 297 769 l 285 588 q 326 622 304 606 q 375 653 349 639 q 432 675 401 667 q 497 683 463 683 q 660 610 610 683 q 711 406 711 536 l 711 18 q 699 -90 711 -39 q 659 -178 688 -140 q 583 -237 631 -215 q 465 -260 536 -260 z "},"ʜ":{"ha":808,"x_min":93,"x_max":722,"o":"m 93 0 l 93 689 l 297 689 l 297 440 l 518 440 l 518 689 l 722 689 l 722 0 l 518 0 l 518 263 l 297 263 l 297 0 l 93 0 z "},"ɨ":{"ha":446,"x_min":17,"x_max":422,"o":"m 17 310 l 17 400 l 121 408 l 121 689 l 325 689 l 325 408 l 422 408 l 422 310 l 325 310 l 325 0 l 121 0 l 121 310 l 17 310 m 222 790 q 138 820 171 790 q 104 897 104 850 q 138 974 104 944 q 222 1003 171 1003 q 308 974 275 1003 q 340 897 340 944 q 308 820 340 850 q 222 790 275 790 z "},"ɪ":{"ha":549,"x_min":72,"x_max":476,"o":"m 72 0 l 72 160 l 172 160 l 172 529 l 72 529 l 72 689 l 476 689 l 476 529 l 376 529 l 376 160 l 476 160 l 476 0 l 72 0 z "},"ʝ":{"ha":500,"x_min":-71,"x_max":579,"o":"m 422 -357 q 382 -269 403 -310 q 338 -193 361 -229 q 256 -251 304 -229 q 143 -272 207 -272 q 53 -256 93 -272 q -14 -212 14 -240 q -56 -147 -42 -185 q -71 -67 -71 -110 q -16 67 -71 17 q 139 118 39 118 q 207 107 169 118 l 207 689 l 411 689 l 411 17 q 410 -5 411 6 q 408 -26 410 -15 q 500 -140 457 -75 q 579 -286 543 -204 l 422 -357 m 138 -117 q 184 -97 168 -117 q 206 -44 200 -78 q 136 -17 165 -17 q 97 -30 111 -17 q 82 -62 82 -43 q 96 -100 82 -83 q 138 -117 110 -117 m 308 790 q 224 820 257 790 q 190 897 190 850 q 224 974 190 944 q 308 1003 257 1003 q 394 974 361 1003 q 428 897 428 944 q 394 820 428 850 q 308 790 361 790 z "},"ɬ":{"ha":524,"x_min":-14,"x_max":503,"o":"m 190 406 q 35 447 83 406 q -14 550 -14 489 q 26 647 -14 608 q 128 686 65 686 q 169 681 151 686 q 201 665 186 675 l 201 974 l 406 974 l 406 504 l 503 504 l 503 406 l 406 406 l 406 206 q 417 161 406 174 q 442 149 429 149 q 453 149 449 149 q 467 151 458 149 l 492 0 q 449 -12 475 -7 q 389 -17 424 -17 q 300 0 336 -17 q 242 47 264 17 q 211 119 221 76 q 201 214 201 161 l 201 406 l 190 406 m 171 504 l 201 504 l 201 507 q 199 533 201 518 q 188 560 196 547 q 168 581 181 572 q 136 590 156 590 q 104 579 114 590 q 94 550 94 568 q 113 517 94 531 q 171 504 131 504 z "},"ɭ":{"ha":397,"x_min":90,"x_max":429,"o":"m 322 -260 q 211 -239 256 -260 q 140 -181 167 -218 q 101 -97 113 -144 q 90 6 90 -49 l 90 974 l 294 974 l 294 -1 q 308 -76 294 -53 q 354 -99 321 -99 q 393 -90 372 -99 l 429 -240 q 385 -254 410 -249 q 322 -260 360 -260 z "},"ɮ":{"ha":889,"x_min":90,"x_max":858,"o":"m 542 -272 q 374 -239 443 -272 q 256 -160 304 -206 l 347 -33 q 424 -85 382 -64 q 518 -107 465 -107 q 616 -69 578 -107 q 654 40 654 -31 q 618 136 654 103 q 521 169 582 169 q 478 166 493 169 q 439 153 463 163 l 372 251 l 583 529 l 294 529 l 294 0 l 90 0 l 90 974 l 294 974 l 294 689 l 826 689 l 826 581 l 619 308 q 721 283 676 304 q 796 226 765 261 q 842 145 826 192 q 858 44 858 99 q 833 -91 858 -32 q 764 -190 807 -150 q 663 -251 721 -231 q 542 -272 606 -272 z "},"ʟ":{"ha":600,"x_min":90,"x_max":564,"o":"m 90 0 l 90 689 l 294 689 l 294 160 l 564 160 l 564 0 l 90 0 z "},"ɯ":{"ha":1190,"x_min":88,"x_max":1106,"o":"m 303 -17 q 140 58 192 -17 q 88 261 88 132 l 88 689 l 292 689 l 292 288 q 313 185 292 213 q 378 157 333 157 q 494 224 429 157 l 494 689 l 699 689 l 699 288 q 719 185 699 213 q 783 157 740 157 q 901 224 835 157 l 901 689 l 1106 689 l 1106 0 l 939 0 l 924 89 l 919 89 q 827 15 876 46 q 710 -17 778 -17 q 591 13 636 -17 q 519 100 546 43 q 424 17 475 51 q 303 -17 372 -17 z "},"ɰ":{"ha":1190,"x_min":88,"x_max":1106,"o":"m 901 -256 l 901 -46 l 911 83 q 818 9 864 35 q 710 -17 772 -17 q 591 13 636 -17 q 519 100 546 43 q 424 17 475 51 q 303 -17 372 -17 q 140 58 192 -17 q 88 261 88 132 l 88 689 l 292 689 l 292 288 q 313 185 292 213 q 378 157 333 157 q 494 224 429 157 l 494 689 l 699 689 l 699 288 q 719 185 699 213 q 783 157 740 157 q 901 224 835 157 l 901 689 l 1106 689 l 1106 -256 l 901 -256 z "},"ɱ":{"ha":1190,"x_min":90,"x_max":1107,"o":"m 872 -260 q 808 -254 835 -260 q 763 -240 782 -249 l 799 -90 q 842 -99 819 -99 q 890 -72 878 -99 q 903 13 903 -46 l 903 401 q 883 504 903 476 q 818 532 863 532 q 700 465 767 532 l 700 0 l 496 0 l 496 401 q 476 504 496 476 q 411 532 456 532 q 294 465 358 532 l 294 0 l 90 0 l 90 689 l 257 689 l 271 600 l 276 600 q 368 674 319 643 q 485 706 417 706 q 603 676 558 706 q 675 590 649 646 q 772 672 721 638 q 892 706 822 706 q 1055 631 1003 706 q 1107 428 1107 557 l 1107 18 q 1095 -90 1107 -39 q 1056 -178 1083 -140 q 984 -237 1029 -215 q 872 -260 939 -260 z "},"ɲ":{"ha":794,"x_min":-46,"x_max":711,"o":"m 63 -260 q -1 -254 24 -260 q -46 -240 -26 -249 l -10 -90 q 31 -99 11 -99 q 77 -76 64 -99 q 90 -1 90 -53 l 90 689 l 257 689 l 271 601 l 276 601 q 374 674 321 643 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 6 q 283 -97 294 -49 q 245 -181 272 -144 q 174 -239 218 -218 q 63 -260 129 -260 z "},"ɳ":{"ha":794,"x_min":90,"x_max":847,"o":"m 739 -260 q 628 -239 672 -260 q 556 -181 583 -218 q 518 -97 529 -144 q 507 6 507 -49 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 l 90 689 l 257 689 l 271 601 l 276 601 q 374 674 321 643 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 -1 q 724 -76 711 -53 q 771 -99 738 -99 q 811 -90 790 -99 l 847 -240 q 803 -254 828 -249 q 739 -260 778 -260 z "},"ɴ":{"ha":779,"x_min":90,"x_max":689,"o":"m 90 0 l 90 689 l 278 689 l 442 399 q 476 326 457 368 q 511 254 496 285 l 515 254 q 504 381 510 317 q 499 497 499 446 l 499 689 l 689 689 l 689 0 l 501 0 l 336 290 q 302 362 321 321 q 268 435 283 403 l 263 435 q 275 308 269 371 q 281 192 281 244 l 281 0 l 90 0 z "},"ɵ":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 258 6 319 -17 q 151 75 197 29 q 78 188 106 121 q 50 344 50 256 q 78 501 50 433 q 151 614 106 568 q 258 683 197 660 q 386 706 319 706 q 513 683 453 706 q 619 614 574 660 q 693 501 665 568 q 721 344 721 433 q 693 188 721 256 q 619 75 665 121 q 513 6 574 29 q 386 -17 453 -17 m 386 554 q 247 419 272 554 l 524 419 q 386 554 499 554 m 386 136 q 480 174 444 136 q 526 285 515 211 l 244 285 q 292 174 256 211 q 386 136 328 136 z "},"ɶ":{"ha":1008,"x_min":50,"x_max":972,"o":"m 404 -17 q 274 5 338 -17 q 160 71 210 26 q 80 183 110 115 q 50 343 50 251 q 80 501 50 433 q 160 615 110 569 q 274 683 210 660 q 404 706 338 706 q 478 702 444 706 q 564 689 513 699 l 958 689 l 958 540 l 674 540 l 674 419 l 915 419 l 915 285 l 674 285 l 674 146 l 972 146 l 972 0 l 564 0 q 480 -14 515 -11 q 404 -17 444 -17 m 414 144 q 474 153 442 144 l 474 533 q 414 542 442 542 q 357 531 385 542 q 308 496 329 519 q 273 435 286 472 q 260 343 260 397 q 273 248 260 286 q 308 187 286 210 q 357 154 329 164 q 414 144 385 144 z "},"ɸ":{"ha":1025,"x_min":50,"x_max":975,"o":"m 260 344 q 303 197 260 249 q 419 142 346 146 l 419 547 q 303 492 346 543 q 260 344 260 440 m 765 344 q 723 492 765 440 q 606 547 681 543 l 606 142 q 722 197 679 146 q 765 344 765 249 m 419 -256 l 419 -11 q 281 17 347 -7 q 163 87 214 42 q 81 197 111 132 q 50 344 50 261 q 81 492 50 428 q 163 602 111 557 q 281 672 214 647 q 419 700 347 696 l 419 974 l 606 974 l 606 700 q 744 672 678 696 q 863 602 811 647 q 944 492 914 557 q 975 344 975 428 q 944 197 975 261 q 863 87 914 132 q 744 17 811 42 q 606 -11 678 -7 l 606 -256 l 419 -256 z "},"ɹ":{"ha":553,"x_min":-1,"x_max":464,"o":"m 81 -17 q 33 -13 51 -17 q -1 -3 14 -10 l 33 174 q 68 166 51 169 q 107 163 85 163 q 190 191 147 163 q 260 290 232 219 l 260 689 l 464 689 l 464 0 l 297 0 l 282 121 l 276 121 q 186 17 239 50 q 81 -17 133 -17 z "},"ɺ":{"ha":553,"x_min":-1,"x_max":464,"o":"m 81 -17 q 33 -13 51 -17 q -1 -3 14 -10 l 33 174 q 68 166 51 169 q 107 163 85 163 q 190 191 147 163 q 260 290 232 219 l 260 974 l 464 974 l 464 0 l 297 0 l 282 121 l 276 121 q 186 17 239 50 q 81 -17 133 -17 z "},"ɻ":{"ha":553,"x_min":-1,"x_max":599,"o":"m 492 -260 q 392 -241 432 -260 q 327 -190 351 -222 q 292 -115 303 -157 q 282 -25 282 -72 l 282 121 l 276 121 q 186 17 239 50 q 81 -17 133 -17 q 33 -13 51 -17 q -1 -3 14 -10 l 33 174 q 68 166 51 169 q 107 163 85 163 q 190 191 147 163 q 260 290 232 219 l 260 689 l 464 689 l 464 -1 q 477 -76 464 -53 q 522 -99 490 -99 q 563 -90 542 -99 l 599 -240 q 554 -254 579 -249 q 492 -260 529 -260 z "},"ɽ":{"ha":553,"x_min":90,"x_max":554,"o":"m 322 -260 q 211 -239 256 -260 q 140 -181 167 -218 q 101 -97 113 -144 q 90 6 90 -49 l 90 689 l 257 689 l 271 568 l 276 568 q 367 672 314 639 q 472 706 419 706 q 520 702 501 706 q 554 692 539 699 l 521 515 q 485 524 501 521 q 446 526 468 526 q 365 499 407 526 q 294 400 322 471 l 294 -1 q 308 -76 294 -53 q 354 -99 321 -99 q 393 -90 372 -99 l 429 -240 q 385 -254 410 -249 q 322 -260 360 -260 z "},"ɾ":{"ha":528,"x_min":90,"x_max":529,"o":"m 90 0 l 90 422 q 106 532 90 481 q 157 622 122 583 q 245 683 192 661 q 374 706 299 706 q 464 700 425 706 q 529 686 503 694 l 497 515 q 451 526 468 524 q 403 529 433 529 q 366 522 385 529 q 331 496 347 514 q 305 449 315 478 q 294 378 294 419 l 294 0 l 90 0 z "},"ʀ":{"ha":739,"x_min":90,"x_max":718,"o":"m 90 0 l 90 689 l 374 689 q 485 678 433 689 q 575 640 536 667 q 636 569 614 613 q 658 461 658 525 q 627 343 658 390 q 547 268 596 296 l 718 0 l 492 0 l 368 225 l 294 225 l 294 0 l 90 0 m 294 363 l 349 363 q 430 388 403 363 q 457 456 457 414 q 349 539 457 539 l 294 539 l 294 363 z "},"ʁ":{"ha":739,"x_min":21,"x_max":649,"o":"m 365 0 q 253 12 306 0 q 163 50 201 24 q 103 120 125 76 q 81 229 81 164 q 112 347 81 300 q 192 422 143 394 l 21 689 l 247 689 l 371 465 l 444 465 l 444 689 l 649 689 l 649 0 l 365 0 m 390 150 l 444 150 l 444 328 l 390 328 q 309 301 336 328 q 282 235 282 275 q 390 150 282 150 z "},"ʂ":{"ha":615,"x_min":29,"x_max":576,"o":"m 293 -17 q 208 -8 251 -17 q 283 -104 214 -104 q 310 -101 299 -104 q 338 -94 322 -99 l 374 -240 q 324 -254 353 -249 q 251 -260 296 -260 q 145 -237 188 -260 q 77 -178 103 -215 q 40 -90 51 -140 q 29 18 29 -39 l 29 72 l 121 200 q 211 150 168 165 q 299 135 254 135 q 365 150 344 135 q 386 193 386 165 q 374 223 386 210 q 342 247 363 236 q 297 267 322 258 q 246 288 272 276 q 182 317 214 300 q 124 358 150 333 q 81 415 97 382 q 64 490 64 447 q 83 578 64 538 q 136 646 101 618 q 219 690 171 674 q 328 706 268 706 q 467 678 407 706 q 571 618 526 651 l 479 496 q 406 539 442 524 q 333 554 369 554 q 256 500 256 554 q 267 472 256 483 q 297 450 278 460 q 340 431 315 440 q 390 413 364 422 q 456 384 424 400 q 516 344 489 368 q 560 287 543 321 q 576 206 576 253 q 558 118 576 158 q 504 48 540 78 q 415 1 468 18 q 293 -17 363 -17 z "},"ʃ":{"ha":386,"x_min":-71,"x_max":460,"o":"m 50 -272 q -22 -267 7 -272 q -71 -253 -50 -261 l -35 -103 q -8 -110 -21 -107 q 19 -112 4 -112 q 76 -86 60 -112 q 92 -1 92 -60 l 92 713 q 104 820 92 769 q 147 908 117 871 q 227 968 178 946 q 351 990 276 990 q 415 985 390 990 q 460 971 440 979 l 424 821 q 403 828 413 825 q 383 831 394 831 q 315 804 335 831 q 296 719 296 778 l 296 4 q 284 -103 296 -53 q 244 -190 272 -153 q 168 -250 215 -228 q 50 -272 121 -272 z "},"ʄ":{"ha":446,"x_min":-43,"x_max":488,"o":"m 78 -272 q 6 -267 35 -272 q -43 -253 -22 -261 l -7 -103 q 19 -110 7 -107 q 47 -112 32 -112 q 103 -86 88 -112 q 119 -1 119 -60 l 119 310 l 17 310 l 17 400 l 119 408 l 119 713 q 132 820 119 769 q 175 908 144 871 q 255 968 206 946 q 379 990 304 990 q 443 985 418 990 q 488 971 468 979 l 451 821 q 431 828 440 825 q 411 831 422 831 q 343 804 363 831 q 324 719 324 778 l 324 408 l 422 408 l 422 310 l 324 310 l 324 4 q 312 -103 324 -53 q 272 -190 300 -153 q 196 -250 243 -228 q 78 -272 149 -272 z "},"ʈ":{"ha":532,"x_min":24,"x_max":508,"o":"m 356 -260 q 247 -240 292 -260 q 173 -186 201 -221 q 131 -102 144 -151 q 118 7 118 -53 l 118 529 l 24 529 l 24 681 l 129 689 l 153 872 l 322 872 l 322 689 l 488 689 l 488 529 l 322 529 l 322 10 q 347 -74 322 -49 q 411 -100 371 -100 q 445 -96 428 -100 q 476 -86 463 -92 l 508 -235 q 443 -251 481 -243 q 356 -260 406 -260 z "},"ʉ":{"ha":857,"x_min":17,"x_max":835,"o":"m 17 372 l 17 463 l 121 471 l 121 689 l 325 689 l 325 471 l 533 471 l 533 689 l 738 689 l 738 471 l 835 471 l 835 372 l 738 372 l 738 0 l 571 0 l 556 96 l 551 96 q 456 13 507 43 q 335 -17 406 -17 q 172 57 222 -17 q 121 261 121 131 l 121 372 l 17 372 m 411 157 q 476 175 450 157 q 533 233 503 193 l 533 372 l 325 372 l 325 288 q 346 185 325 213 q 411 157 367 157 z "},"ʊ":{"ha":775,"x_min":40,"x_max":733,"o":"m 388 -17 q 247 9 308 -17 q 142 76 185 35 q 78 171 100 118 q 56 279 56 224 q 86 425 56 363 q 154 525 117 488 l 154 529 l 40 529 l 40 689 l 338 689 l 338 557 q 279 456 299 508 q 260 324 260 403 q 267 254 260 286 q 291 199 275 222 q 331 162 307 175 q 388 149 354 149 q 444 162 421 149 q 484 199 468 175 q 508 254 500 222 q 515 324 515 286 q 496 456 515 403 q 438 557 476 508 l 438 689 l 733 689 l 733 529 l 621 529 l 621 525 q 689 425 658 488 q 719 279 719 363 q 697 171 719 224 q 633 76 675 118 q 528 9 590 35 q 388 -17 467 -17 z "},"ʋ":{"ha":767,"x_min":83,"x_max":715,"o":"m 379 -17 q 163 63 243 -17 q 83 301 83 143 l 83 689 l 288 689 l 288 304 q 314 185 288 222 q 389 149 340 149 q 476 212 446 149 q 506 385 506 275 q 488 508 506 468 q 433 547 471 547 q 406 543 419 547 l 383 694 q 424 703 403 701 q 478 706 446 706 q 572 689 528 706 q 647 637 615 672 q 697 547 679 601 q 715 415 715 492 q 694 239 715 318 q 631 103 672 160 q 526 15 589 46 q 379 -17 463 -17 z "},"ʌ":{"ha":726,"x_min":17,"x_max":710,"o":"m 17 0 l 242 689 l 476 689 l 710 0 l 504 0 l 414 325 q 388 430 401 376 q 361 538 374 483 l 356 538 q 328 430 342 483 q 301 325 315 376 l 213 0 l 17 0 z "},"ʍ":{"ha":1078,"x_min":33,"x_max":1044,"o":"m 33 0 l 199 689 l 438 689 l 500 414 q 519 317 510 365 q 538 213 528 268 l 543 213 q 559 317 551 268 q 578 414 567 365 l 638 689 l 872 689 l 1044 0 l 842 0 l 775 319 q 760 421 767 371 q 744 524 753 471 l 739 524 q 719 419 729 471 q 697 319 710 368 l 622 0 l 446 0 l 368 319 q 346 421 356 371 q 325 524 336 471 l 319 524 q 303 421 310 471 q 288 319 297 371 l 222 0 l 33 0 z "},"ʎ":{"ha":724,"x_min":17,"x_max":707,"o":"m 17 0 l 268 728 q 320 841 293 792 q 383 924 347 890 q 463 974 418 957 q 569 990 508 990 q 624 987 601 990 q 667 976 646 983 l 631 821 q 608 826 621 824 q 585 829 596 829 q 506 804 533 829 q 464 739 478 779 l 442 671 l 707 0 l 503 0 l 404 296 q 376 392 389 343 q 349 492 363 440 l 343 492 q 320 394 332 443 q 296 296 308 344 l 213 0 l 17 0 z "},"ʏ":{"ha":647,"x_min":-11,"x_max":658,"o":"m 222 0 l 222 208 l -11 689 l 204 689 l 264 540 q 292 459 278 497 q 322 376 307 421 l 328 376 q 358 459 343 421 q 389 540 374 497 l 446 689 l 658 689 l 426 208 l 426 0 l 222 0 z "},"ʐ":{"ha":639,"x_min":53,"x_max":728,"o":"m 619 -260 q 510 -239 554 -260 q 439 -184 467 -218 q 399 -107 411 -150 q 388 -18 388 -64 l 388 0 l 53 0 l 53 110 l 342 529 l 85 529 l 85 689 l 596 689 l 596 581 l 307 160 l 592 160 l 592 -1 q 605 -76 592 -53 q 651 -99 618 -99 q 692 -90 671 -99 l 728 -240 q 683 -254 708 -249 q 619 -260 658 -260 z "},"ʑ":{"ha":699,"x_min":53,"x_max":718,"o":"m 399 -114 l 301 -93 q 312 -46 307 -69 q 324 0 317 -22 l 53 0 l 53 110 l 342 529 l 85 529 l 85 689 l 582 689 l 582 581 l 293 160 q 334 156 314 157 q 374 154 354 156 q 462 299 413 246 q 574 353 511 353 q 679 315 640 353 q 718 200 718 276 q 704 123 718 160 q 660 59 690 86 q 584 16 631 32 q 474 0 538 0 l 425 0 q 412 -53 418 -25 q 399 -114 406 -82 m 526 149 q 590 166 569 149 q 610 207 610 183 q 568 244 610 244 q 524 222 547 244 q 476 149 500 199 l 526 149 z "},"ʒ":{"ha":639,"x_min":7,"x_max":610,"o":"m 293 -272 q 125 -239 194 -272 q 7 -160 56 -206 l 99 -33 q 175 -85 133 -64 q 269 -107 217 -107 q 367 -69 329 -107 q 406 40 406 -31 q 369 136 406 103 q 272 169 333 169 q 229 166 244 169 q 190 153 214 163 l 124 251 l 335 529 l 53 529 l 53 689 l 578 689 l 578 581 l 371 308 q 472 283 428 304 q 547 226 517 261 q 594 145 578 192 q 610 44 610 99 q 584 -91 610 -32 q 515 -190 558 -150 q 415 -251 472 -231 q 293 -272 357 -272 z "},"ʔ":{"ha":622,"x_min":-8,"x_max":599,"o":"m 179 0 l 179 440 q 280 510 239 478 q 347 572 321 542 q 383 633 372 603 q 394 696 394 663 q 360 792 394 758 q 265 825 325 825 q 169 799 213 825 q 92 736 126 772 l -8 865 q 113 954 40 918 q 288 990 185 990 q 407 972 350 990 q 506 919 464 954 q 574 830 549 883 q 599 706 599 776 q 583 602 599 649 q 538 515 567 556 q 470 438 510 474 q 383 364 431 401 l 383 0 l 179 0 z "},"ʕ":{"ha":703,"x_min":58,"x_max":665,"o":"m 274 0 l 274 364 q 187 438 226 401 q 119 515 147 474 q 74 602 90 556 q 58 706 58 649 q 85 830 58 776 q 156 919 111 883 q 259 972 200 954 q 383 990 318 990 q 548 954 479 990 q 665 865 617 918 l 564 736 q 494 799 533 772 q 406 825 454 825 q 301 792 339 825 q 263 696 263 758 q 274 633 263 663 q 310 572 285 603 q 377 510 336 542 q 478 440 418 478 l 478 0 l 274 0 z "},"ʡ":{"ha":661,"x_min":13,"x_max":639,"o":"m 200 0 l 200 279 l 15 279 l 15 432 l 121 440 l 225 440 q 373 577 331 517 q 415 696 415 638 q 381 792 415 758 q 288 825 346 825 q 191 799 235 825 q 114 736 147 772 l 13 865 q 135 954 63 918 q 310 990 207 990 q 429 972 372 990 q 528 919 486 954 q 596 830 571 883 q 621 706 621 776 q 608 632 621 667 q 574 565 596 597 q 522 501 551 532 q 458 440 492 469 l 639 440 l 639 279 l 404 279 l 404 0 l 200 0 z "},"ʢ":{"ha":661,"x_min":24,"x_max":649,"o":"m 258 0 l 258 279 l 24 279 l 24 440 l 203 440 q 89 564 136 500 q 42 706 42 628 q 68 830 42 776 q 139 919 94 883 q 242 972 183 954 q 367 990 301 990 q 531 954 463 990 q 649 865 600 918 l 547 736 q 477 799 517 772 q 389 825 438 825 q 284 792 322 825 q 246 696 246 758 q 288 577 246 638 q 436 440 331 517 l 542 440 l 647 432 l 647 279 l 463 279 l 463 0 l 258 0 z "},"ǂ":{"ha":458,"x_min":8,"x_max":447,"o":"m 8 458 l 8 550 l 114 557 l 167 557 l 167 1042 l 300 1042 l 300 557 l 447 557 l 447 458 l 300 458 l 300 285 l 447 285 l 447 186 l 300 186 l 300 -347 l 167 -347 l 167 186 l 8 186 l 8 276 l 114 285 l 167 285 l 167 458 l 8 458 z "},"ʘ":{"ha":772,"x_min":67,"x_max":706,"o":"m 386 -17 q 256 15 315 -17 q 156 109 197 46 q 90 267 114 172 q 67 489 67 361 q 90 710 67 615 q 156 867 114 804 q 256 960 197 929 q 386 990 315 990 q 516 960 457 990 q 617 867 575 929 q 682 710 658 804 q 706 489 706 615 q 682 267 706 361 q 617 109 658 172 q 516 15 575 46 q 386 -17 457 -17 m 386 149 q 435 165 411 149 q 477 220 458 181 q 508 325 496 260 q 519 489 519 390 q 508 649 519 585 q 477 752 496 713 q 435 808 458 792 q 386 825 411 825 q 337 808 361 825 q 294 752 313 792 q 264 649 275 713 q 253 489 253 585 q 264 325 253 390 q 294 220 275 260 q 337 165 313 181 q 386 149 361 149 m 386 403 q 324 428 350 403 q 297 490 297 454 q 324 552 297 526 q 386 578 350 578 q 449 552 422 578 q 475 490 475 526 q 449 428 475 454 q 386 403 422 403 z "},"ff":{"ha":913,"x_min":33,"x_max":956,"o":"m 564 0 l 564 529 l 329 529 l 329 0 l 125 0 l 125 529 l 33 529 l 33 681 l 125 688 l 125 719 q 140 819 125 772 q 185 901 154 867 q 266 956 217 936 q 386 976 315 976 q 468 969 431 976 q 529 951 506 961 l 492 800 q 457 811 475 807 q 411 815 439 815 q 352 792 375 815 q 329 721 329 769 l 329 689 l 564 689 l 564 725 q 577 828 564 779 q 621 913 590 876 q 700 969 651 949 q 818 990 749 990 q 897 982 861 990 q 956 965 932 974 l 918 815 q 847 829 879 829 q 789 806 810 829 q 768 731 768 783 l 768 689 l 892 689 l 892 529 l 768 529 l 768 0 l 564 0 z "},"ffi":{"ha":1296,"x_min":33,"x_max":1222,"o":"m 564 0 l 564 529 l 329 529 l 329 0 l 125 0 l 125 529 l 33 529 l 33 681 l 125 688 l 125 719 q 140 819 125 772 q 185 901 154 867 q 266 956 217 936 q 386 976 315 976 q 468 969 431 976 q 529 951 506 961 l 492 800 q 457 811 475 807 q 411 815 439 815 q 352 792 375 815 q 329 721 329 769 l 329 689 l 564 689 l 564 725 q 577 828 564 779 q 621 913 590 876 q 700 969 651 949 q 818 990 749 990 q 897 982 861 990 q 956 965 932 974 l 918 815 q 847 829 879 829 q 789 806 810 829 q 768 731 768 783 l 768 689 l 892 689 l 892 529 l 768 529 l 768 0 l 564 0 m 1003 0 l 1003 689 l 1207 689 l 1207 0 l 1003 0 m 1104 790 q 1019 820 1053 790 q 986 897 986 850 q 1019 974 986 944 q 1104 1003 1053 1003 q 1190 974 1157 1003 q 1222 897 1222 944 q 1190 820 1222 850 q 1104 790 1157 790 z "},"ffl":{"ha":1310,"x_min":33,"x_max":1293,"o":"m 564 0 l 564 529 l 329 529 l 329 0 l 125 0 l 125 529 l 33 529 l 33 681 l 125 688 l 125 719 q 140 819 125 772 q 185 901 154 867 q 266 956 217 936 q 386 976 315 976 q 468 969 431 976 q 529 951 506 961 l 492 800 q 457 811 475 807 q 411 815 439 815 q 352 792 375 815 q 329 721 329 769 l 329 689 l 564 689 l 564 725 q 577 828 564 779 q 621 913 590 876 q 700 969 651 949 q 818 990 749 990 q 897 982 861 990 q 956 965 932 974 l 918 815 q 847 829 879 829 q 789 806 810 829 q 768 731 768 783 l 768 689 l 892 689 l 892 529 l 768 529 l 768 0 l 564 0 m 1190 -17 q 1101 0 1138 -17 q 1044 47 1065 17 q 1013 119 1022 76 q 1003 214 1003 161 l 1003 974 l 1207 974 l 1207 206 q 1219 161 1207 174 q 1243 149 1231 149 q 1255 149 1250 149 q 1268 151 1260 149 l 1293 0 q 1251 -12 1276 -7 q 1190 -17 1225 -17 z "},"Α":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 z "},"Β":{"ha":840,"x_min":107,"x_max":794,"o":"m 107 0 l 107 906 l 417 906 q 548 895 488 906 q 653 858 608 885 q 724 789 699 832 q 750 681 750 746 q 742 619 750 650 q 718 563 733 589 q 681 515 703 536 q 632 485 660 494 l 632 479 q 696 453 667 471 q 747 410 725 436 q 782 348 769 383 q 794 267 794 313 q 767 147 794 197 q 692 65 740 97 q 581 16 644 32 q 443 0 517 0 l 107 0 m 311 543 l 407 543 q 516 572 482 543 q 550 650 550 601 q 515 725 550 703 q 408 747 481 747 l 311 747 l 311 543 m 311 158 l 426 158 q 594 281 594 158 q 553 366 594 340 q 426 392 511 392 l 311 392 l 311 158 z "},"Γ":{"ha":724,"x_min":107,"x_max":678,"o":"m 107 0 l 107 906 l 678 906 l 678 733 l 311 733 l 311 0 l 107 0 z "},"Δ":{"ha":889,"x_min":47,"x_max":842,"o":"m 47 0 l 47 124 l 322 906 l 567 906 l 842 124 l 842 0 l 47 0 m 267 172 l 617 172 l 521 478 l 443 749 l 438 749 l 361 478 l 267 172 z "},"Ε":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 z "},"Ζ":{"ha":751,"x_min":50,"x_max":706,"o":"m 50 0 l 50 124 l 450 733 l 88 733 l 88 906 l 701 906 l 701 782 l 301 172 l 706 172 l 706 0 l 50 0 z "},"Η":{"ha":936,"x_min":107,"x_max":829,"o":"m 107 0 l 107 906 l 311 906 l 311 557 l 624 557 l 624 906 l 829 906 l 829 0 l 624 0 l 624 378 l 311 378 l 311 0 l 107 0 z "},"Θ":{"ha":950,"x_min":64,"x_max":886,"o":"m 339 378 l 339 557 l 611 557 l 611 378 l 339 378 m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 z "},"Ι":{"ha":418,"x_min":107,"x_max":311,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 z "},"Κ":{"ha":853,"x_min":107,"x_max":861,"o":"m 107 0 l 107 906 l 311 906 l 311 535 l 317 535 l 586 906 l 811 906 l 538 544 l 861 0 l 638 0 l 417 382 l 311 243 l 311 0 l 107 0 z "},"Λ":{"ha":772,"x_min":-10,"x_max":782,"o":"m -10 0 l 263 906 l 508 906 l 782 0 l 565 0 l 457 422 q 420 567 436 497 q 385 713 404 638 l 379 713 q 342 567 358 638 q 306 422 325 497 l 199 0 l -10 0 z "},"Μ":{"ha":1058,"x_min":107,"x_max":951,"o":"m 107 0 l 107 906 l 331 906 l 476 503 q 503 420 490 463 q 529 336 515 378 l 535 336 q 560 420 549 378 q 586 503 572 463 l 729 906 l 951 906 l 951 0 l 765 0 l 765 332 q 768 406 765 365 q 775 487 771 446 q 783 567 779 528 q 792 640 788 607 l 786 640 l 713 425 l 583 79 l 471 79 l 342 425 l 269 640 l 264 640 q 272 567 268 607 q 281 487 276 528 q 288 406 285 446 q 290 332 290 365 l 290 0 l 107 0 z "},"Ν":{"ha":924,"x_min":107,"x_max":817,"o":"m 107 0 l 107 906 l 317 906 l 553 456 l 642 256 l 647 256 q 631 417 640 328 q 622 586 622 506 l 622 906 l 817 906 l 817 0 l 607 0 l 371 451 l 282 649 l 276 649 q 292 488 283 574 q 301 321 301 401 l 301 0 l 107 0 z "},"Ξ":{"ha":793,"x_min":74,"x_max":721,"o":"m 74 0 l 74 172 l 721 172 l 721 0 l 74 0 m 168 381 l 168 551 l 625 551 l 625 381 l 168 381 m 88 733 l 88 906 l 707 906 l 707 733 l 88 733 z "},"Ο":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 z "},"Π":{"ha":921,"x_min":107,"x_max":814,"o":"m 107 0 l 107 906 l 814 906 l 814 0 l 610 0 l 610 733 l 311 733 l 311 0 l 107 0 z "},"Ρ":{"ha":828,"x_min":107,"x_max":778,"o":"m 107 0 l 107 906 l 418 906 q 558 891 493 906 q 672 842 624 876 q 749 752 721 808 q 778 614 778 696 q 749 476 778 535 q 672 381 721 418 q 560 325 624 343 q 424 307 496 307 l 311 307 l 311 0 l 107 0 m 311 469 l 411 469 q 578 614 578 469 q 533 714 578 685 q 406 743 489 743 l 311 743 l 311 469 z "},"Σ":{"ha":763,"x_min":53,"x_max":715,"o":"m 53 0 l 53 124 l 333 457 l 57 782 l 57 906 l 678 906 l 678 733 l 313 733 l 538 463 l 308 172 l 715 172 l 715 0 l 53 0 z "},"Τ":{"ha":772,"x_min":35,"x_max":738,"o":"m 283 0 l 283 733 l 35 733 l 35 906 l 738 906 l 738 733 l 489 733 l 489 0 l 283 0 z "},"Υ":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 z "},"Φ":{"ha":1056,"x_min":67,"x_max":989,"o":"m 260 457 q 308 314 260 369 q 438 246 356 258 l 438 664 q 308 598 356 651 q 260 457 260 544 m 796 457 q 748 598 796 544 q 618 664 700 651 l 618 246 q 748 314 700 258 q 796 457 796 369 m 438 -31 l 438 90 q 285 124 354 97 q 168 198 217 151 q 93 310 119 244 q 67 457 67 375 q 93 603 67 539 q 168 712 119 667 q 285 783 217 757 q 438 817 354 810 l 438 936 l 618 936 l 618 817 q 770 783 701 810 q 888 712 839 757 q 963 603 936 667 q 989 457 989 539 q 963 310 989 375 q 888 198 936 244 q 770 124 839 151 q 618 90 701 97 l 618 -31 l 438 -31 z "},"Χ":{"ha":788,"x_min":15,"x_max":772,"o":"m 15 0 l 267 465 l 31 906 l 258 906 l 338 735 q 368 667 353 703 q 403 589 383 632 l 408 589 q 438 667 424 632 q 467 735 453 703 l 539 906 l 757 906 l 522 456 l 772 0 l 544 0 l 454 185 q 422 256 438 221 q 386 333 406 292 l 381 333 q 350 256 365 292 q 319 185 335 221 l 235 0 l 15 0 z "},"Ψ":{"ha":1044,"x_min":72,"x_max":971,"o":"m 426 0 l 426 304 q 278 335 343 310 q 167 406 213 360 q 97 520 121 451 q 72 682 72 589 l 72 906 l 272 906 l 272 694 q 312 527 272 578 q 426 467 351 476 l 426 906 l 618 906 l 618 467 q 732 527 693 476 q 771 694 771 578 l 771 906 l 971 906 l 971 682 q 947 520 971 589 q 876 406 922 451 q 765 335 831 360 q 618 304 700 310 l 618 0 l 426 0 z "},"Ω":{"ha":988,"x_min":61,"x_max":926,"o":"m 61 0 l 61 165 l 214 165 l 214 171 q 168 226 192 193 q 126 301 144 260 q 95 391 107 342 q 83 497 83 440 q 113 669 83 592 q 196 803 142 747 q 326 891 250 860 q 494 922 401 922 q 662 891 586 922 q 792 803 738 860 q 876 669 846 747 q 906 497 906 592 q 893 391 906 440 q 862 301 881 342 q 819 226 843 260 q 774 171 796 193 l 774 165 l 926 165 l 926 0 l 556 0 l 556 147 q 661 292 626 214 q 696 476 696 369 q 682 585 696 535 q 642 670 668 635 q 578 726 615 706 q 494 746 542 746 q 410 726 447 746 q 347 670 372 706 q 307 585 321 635 q 293 476 293 535 q 327 292 293 369 q 432 147 361 214 l 432 0 l 61 0 z "},"Ά":{"ha":864,"x_min":-7,"x_max":872,"o":"m 388 458 l 365 375 l 558 375 l 538 458 q 500 603 518 526 q 464 750 482 679 l 458 750 q 424 602 442 678 q 388 458 407 526 m 60 0 l 343 906 l 589 906 l 872 0 l 656 0 l 600 215 l 324 215 l 268 0 l 60 0 m -7 635 l 32 931 l 206 906 l 122 611 l -7 635 z "},"Έ":{"ha":926,"x_min":-17,"x_max":853,"o":"m 272 0 l 272 906 l 839 906 l 839 733 l 476 733 l 476 551 l 785 551 l 785 381 l 476 381 l 476 172 l 853 172 l 853 0 l 272 0 m -17 635 l 22 931 l 196 906 l 113 611 l -17 635 z "},"Ή":{"ha":1100,"x_min":-17,"x_max":994,"o":"m 272 0 l 272 906 l 476 906 l 476 557 l 789 557 l 789 906 l 994 906 l 994 0 l 789 0 l 789 378 l 476 378 l 476 0 l 272 0 m -17 635 l 22 931 l 196 906 l 113 611 l -17 635 z "},"Ί":{"ha":583,"x_min":-17,"x_max":476,"o":"m 272 0 l 272 906 l 476 906 l 476 0 l 272 0 m -17 635 l 22 931 l 196 906 l 113 611 l -17 635 z "},"Ϊ":{"ha":418,"x_min":-43,"x_max":460,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m 54 972 q -16 1000 11 972 q -43 1069 -43 1028 q -16 1139 -43 1111 q 54 1167 11 1167 q 124 1139 97 1167 q 151 1069 151 1111 q 124 1000 151 1028 q 54 972 97 972 m 363 972 q 292 1000 319 972 q 265 1069 265 1028 q 292 1139 265 1111 q 363 1167 319 1167 q 433 1139 406 1167 q 460 1069 460 1111 q 433 1000 460 1028 q 363 972 406 972 z "},"Ό":{"ha":1079,"x_min":-17,"x_max":1014,"o":"m 603 -17 q 435 16 511 -17 q 306 110 360 49 q 222 258 251 171 q 192 457 192 346 q 222 655 192 568 q 306 801 251 742 q 435 891 360 860 q 603 922 511 922 q 770 891 694 922 q 900 800 846 860 q 984 653 954 740 q 1014 457 1014 567 q 984 258 1014 346 q 900 110 954 171 q 770 16 846 49 q 603 -17 694 -17 m 603 160 q 750 240 696 160 q 804 457 804 319 q 750 669 804 593 q 603 746 696 746 q 456 669 510 746 q 401 457 401 593 q 456 240 401 319 q 603 160 510 160 m -17 635 l 22 931 l 196 906 l 113 611 l -17 635 z "},"Ύ":{"ha":978,"x_min":-17,"x_max":989,"o":"m 511 0 l 511 322 l 238 906 l 457 906 l 538 697 q 574 598 557 646 q 611 497 592 550 l 617 497 q 655 598 636 550 q 693 697 674 646 l 775 906 l 989 906 l 715 322 l 715 0 l 511 0 m -17 635 l 22 931 l 196 906 l 113 611 l -17 635 z "},"Ϋ":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 m 210 972 q 140 1000 167 972 q 113 1069 113 1028 q 140 1139 113 1111 q 210 1167 167 1167 q 280 1139 253 1167 q 307 1069 307 1111 q 280 1000 307 1028 q 210 972 253 972 m 518 972 q 448 1000 475 972 q 421 1069 421 1028 q 448 1139 421 1111 q 518 1167 475 1167 q 588 1139 561 1167 q 615 1069 615 1111 q 588 1000 615 1028 q 518 972 561 972 z "},"Ώ":{"ha":1115,"x_min":-26,"x_max":1054,"o":"m 189 0 l 189 165 l 342 165 l 342 171 q 296 226 319 193 q 253 301 272 260 q 223 391 235 342 q 211 497 211 440 q 240 669 211 592 q 324 803 269 747 q 453 891 378 860 q 622 922 529 922 q 790 891 714 922 q 919 803 865 860 q 1003 669 974 747 q 1033 497 1033 592 q 1021 391 1033 440 q 990 301 1008 342 q 947 226 971 260 q 901 171 924 193 l 901 165 l 1054 165 l 1054 0 l 683 0 l 683 147 q 789 292 754 214 q 824 476 824 369 q 810 585 824 535 q 769 670 796 635 q 706 726 743 706 q 622 746 669 746 q 538 726 575 746 q 474 670 500 706 q 435 585 449 635 q 421 476 421 535 q 455 292 421 369 q 560 147 489 214 l 560 0 l 189 0 m -26 635 l 13 931 l 186 906 l 103 611 l -26 635 z "},"α":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 z "},"β":{"ha":833,"x_min":89,"x_max":785,"o":"m 89 -246 l 89 647 q 108 782 89 719 q 167 891 128 844 q 267 964 207 938 q 411 990 328 990 q 522 975 468 990 q 619 928 576 960 q 687 850 661 897 q 713 738 713 803 q 683 616 713 667 q 596 529 653 565 l 596 524 q 669 494 635 515 q 730 442 704 474 q 770 368 756 410 q 785 278 785 326 q 760 146 785 201 q 697 54 736 90 q 608 1 657 18 q 508 -17 558 -17 q 392 2 451 -17 q 281 76 333 21 q 288 -87 285 -7 q 296 -246 292 -167 l 89 -246 m 449 150 q 544 185 504 150 q 585 290 585 219 q 553 383 585 344 q 456 422 521 422 q 400 414 425 422 l 375 563 q 486 617 456 574 q 517 718 517 660 q 485 802 517 775 q 411 829 453 829 q 319 776 350 829 q 286 635 289 724 q 281 435 283 533 q 279 235 279 336 q 364 166 319 182 q 449 150 408 150 z "},"γ":{"ha":740,"x_min":-1,"x_max":717,"o":"m 257 -246 q 262 -206 260 -225 q 265 -165 264 -186 q 266 -119 265 -144 q 267 -57 267 -93 q 245 99 267 8 q 188 290 224 190 q 103 486 151 389 q -1 661 54 583 l 207 706 q 254 619 229 671 q 303 506 279 568 q 350 374 328 444 q 392 231 372 304 l 397 231 q 514 689 500 442 l 717 689 q 683 525 701 601 q 635 370 664 449 q 561 207 606 292 q 450 18 517 122 q 465 -117 461 -47 q 468 -246 468 -187 l 257 -246 z "},"δ":{"ha":761,"x_min":57,"x_max":706,"o":"m 379 -17 q 254 5 313 -17 q 152 67 196 26 q 83 167 108 108 q 57 300 57 225 q 74 399 57 354 q 119 478 90 443 q 187 541 149 514 q 267 586 225 568 q 212 632 238 607 q 166 685 186 657 q 134 747 146 714 q 122 821 122 781 q 138 885 122 854 q 184 940 153 917 q 263 976 215 963 q 375 990 310 990 q 529 974 450 990 q 681 935 608 958 l 635 783 q 494 824 561 808 q 375 839 428 839 q 326 828 342 839 q 311 801 311 818 q 327 765 311 783 q 370 725 343 746 q 432 681 397 704 q 506 629 467 657 q 589 563 551 596 q 652 492 626 529 q 692 410 678 454 q 706 310 706 365 q 683 176 706 236 q 619 74 661 117 q 516 7 576 31 q 379 -17 456 -17 m 383 149 q 474 187 439 149 q 508 311 508 225 q 478 414 508 371 q 401 493 447 457 q 290 428 331 474 q 250 303 250 382 q 290 188 250 228 q 383 149 329 149 z "},"ε":{"ha":654,"x_min":50,"x_max":626,"o":"m 372 -17 q 247 -3 306 -17 q 144 36 188 10 q 75 103 100 63 q 50 196 50 143 q 85 305 50 267 q 183 360 121 343 l 183 365 q 105 424 131 382 q 79 508 79 467 q 103 597 79 560 q 169 658 128 635 q 263 694 210 682 q 375 706 317 706 q 499 687 438 706 q 613 635 561 668 l 538 504 q 386 550 468 550 q 308 531 338 550 q 279 481 279 513 q 376 419 279 419 q 424 421 399 419 q 472 425 449 422 l 472 279 q 413 283 443 282 q 354 285 382 285 q 275 269 300 285 q 250 217 250 253 q 285 160 250 181 q 392 139 321 139 q 466 150 425 139 q 547 192 507 161 l 626 63 q 499 -1 560 14 q 372 -17 439 -17 z "},"ζ":{"ha":647,"x_min":57,"x_max":624,"o":"m 540 -260 l 381 -207 q 427 -140 410 -167 q 444 -86 444 -114 q 438 -62 444 -72 q 417 -43 432 -51 q 376 -27 403 -35 q 311 -11 350 -19 q 217 19 263 -1 q 136 78 172 40 q 78 173 100 115 q 57 317 57 231 q 81 444 57 378 q 149 576 106 510 q 253 706 193 642 q 388 825 314 769 q 330 823 365 824 q 253 821 294 822 q 172 817 213 819 q 100 813 132 815 l 100 974 l 611 974 l 611 813 l 603 813 q 474 710 535 771 q 366 581 413 649 q 292 447 319 514 q 265 328 265 379 q 274 256 265 286 q 301 206 282 226 q 352 172 321 185 q 431 149 383 158 q 579 88 535 128 q 624 -32 624 49 q 604 -130 624 -68 q 540 -260 585 -192 z "},"η":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 z "},"θ":{"ha":763,"x_min":67,"x_max":696,"o":"m 382 -17 q 253 15 311 -17 q 153 109 194 46 q 90 267 113 172 q 67 489 67 361 q 90 710 67 615 q 153 867 113 804 q 253 960 194 929 q 382 990 311 990 q 510 960 453 990 q 609 867 568 929 q 673 710 650 804 q 696 489 696 615 q 673 267 696 361 q 609 109 650 172 q 510 15 568 46 q 382 -17 453 -17 m 382 825 q 340 814 360 825 q 306 773 321 803 q 280 691 290 743 q 267 557 269 639 l 497 557 q 484 691 494 639 q 458 773 474 743 q 424 814 443 803 q 382 825 404 825 m 382 149 q 424 160 404 149 q 458 203 443 172 q 484 288 474 235 q 497 422 494 340 l 267 422 q 280 288 269 340 q 306 203 290 235 q 340 160 321 172 q 382 149 360 149 z "},"ι":{"ha":418,"x_min":90,"x_max":407,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 z "},"κ":{"ha":758,"x_min":74,"x_max":765,"o":"m 536 -15 q 361 275 456 86 q 351 264 358 271 q 298 172 314 224 q 282 40 282 119 l 282 0 l 90 0 l 90 478 q 88 576 90 518 q 74 689 85 635 l 276 689 q 286 612 283 656 q 289 519 289 568 l 289 390 l 294 390 q 376 503 333 450 q 466 599 418 557 q 567 669 514 642 q 682 706 621 697 l 699 515 q 599 477 646 503 q 494 403 551 451 q 553 297 519 353 q 622 189 586 242 q 694 87 657 136 q 765 0 732 38 l 536 -15 z "},"λ":{"ha":767,"x_min":18,"x_max":761,"o":"m 239 -15 l 18 0 l 314 692 l 310 711 q 263 791 297 764 q 185 818 229 818 q 132 813 153 818 q 88 796 111 807 l 43 961 q 112 983 76 975 q 208 990 147 990 q 400 921 328 990 q 517 700 472 851 l 761 0 l 542 0 l 407 464 l 401 464 l 239 -15 z "},"μ":{"ha":825,"x_min":90,"x_max":818,"o":"m 90 -246 l 90 689 l 294 689 l 294 288 q 315 185 294 214 q 379 157 335 157 q 442 177 414 157 q 497 247 469 197 l 497 689 l 703 689 q 699 562 701 628 q 694 431 696 496 q 690 308 692 367 q 689 207 689 250 q 706 161 689 174 q 750 149 722 149 q 794 157 771 149 l 818 6 q 769 -10 796 -4 q 697 -17 742 -17 q 519 99 553 -17 l 514 99 q 368 -10 463 -10 q 321 -3 343 -10 q 282 22 299 3 q 283 -50 282 -17 q 286 -115 285 -83 q 290 -178 288 -146 q 296 -246 292 -210 l 90 -246 z "},"ν":{"ha":726,"x_min":-1,"x_max":703,"o":"m 253 0 q 211 188 238 96 q 151 363 185 279 q 79 523 118 447 q -1 661 40 599 l 207 706 q 262 595 235 658 q 313 465 289 532 q 354 330 336 397 q 383 208 372 263 l 389 208 q 465 448 440 326 q 500 689 490 569 l 703 689 q 667 514 688 597 q 616 349 646 431 q 545 181 586 267 q 447 0 504 96 l 253 0 z "},"ξ":{"ha":651,"x_min":24,"x_max":629,"o":"m 544 -260 l 385 -207 q 433 -140 415 -167 q 450 -86 450 -114 q 422 -43 450 -58 q 317 -11 394 -28 q 217 19 264 0 q 134 69 169 38 q 78 145 99 100 q 58 256 58 190 q 74 340 58 300 q 115 413 89 381 q 175 470 140 446 q 249 507 210 494 l 249 513 q 155 585 188 536 q 122 697 122 635 q 138 768 122 733 q 186 825 154 803 q 149 823 167 824 q 113 821 132 822 q 73 817 94 819 q 24 813 51 815 l 24 974 l 615 974 l 615 813 l 453 813 q 361 780 396 813 q 326 690 326 747 q 335 644 326 667 q 359 603 343 621 q 397 576 375 586 q 446 565 418 565 q 497 567 475 565 q 547 578 519 569 l 547 418 q 489 428 515 425 q 435 431 463 431 q 369 420 400 431 q 317 391 339 410 q 281 346 294 372 q 268 288 268 319 q 278 229 268 251 q 311 192 289 207 q 367 167 333 176 q 447 149 401 157 q 538 123 503 138 q 594 88 574 108 q 622 38 614 67 q 629 -32 629 8 q 609 -130 629 -68 q 544 -260 589 -192 z "},"ο":{"ha":768,"x_min":50,"x_max":718,"o":"m 383 -17 q 258 8 318 -17 q 151 78 197 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 151 611 106 565 q 258 681 197 657 q 383 706 318 706 q 510 681 450 706 q 617 611 571 657 q 690 498 663 565 q 718 344 718 431 q 690 191 718 258 q 617 78 663 124 q 510 8 571 32 q 383 -17 450 -17 m 383 149 q 478 201 449 149 q 508 344 508 254 q 478 488 508 435 q 383 540 449 540 q 290 488 319 540 q 260 344 260 435 q 290 201 260 254 q 383 149 319 149 z "},"π":{"ha":882,"x_min":25,"x_max":850,"o":"m 725 -17 q 628 0 667 -17 q 565 48 589 17 q 530 122 540 79 q 519 219 519 165 q 520 269 519 235 q 522 346 521 303 q 524 437 524 389 q 525 528 525 485 l 365 528 q 354 265 365 404 q 329 -12 343 125 l 125 0 q 163 276 150 139 q 175 528 175 413 l 25 528 l 25 681 l 128 689 l 850 689 l 850 528 l 721 528 q 716 431 718 482 q 713 336 714 381 q 711 258 711 292 q 711 211 711 224 q 727 162 711 175 q 774 149 743 149 q 797 150 783 149 q 825 154 810 151 l 849 4 q 797 -10 829 -4 q 725 -17 764 -17 z "},"ρ":{"ha":790,"x_min":85,"x_max":735,"o":"m 85 -246 l 85 329 q 110 498 85 426 q 179 615 135 569 q 283 683 224 661 q 414 706 343 706 q 650 614 565 706 q 735 356 735 522 q 710 198 735 267 q 647 81 686 129 q 556 8 607 33 q 450 -17 504 -17 q 360 -1 406 -17 q 276 60 314 15 q 284 -94 281 -19 q 290 -246 288 -169 l 85 -246 m 401 150 q 490 198 453 150 q 526 353 526 246 q 407 539 526 539 q 313 488 349 539 q 276 349 276 436 l 276 206 q 340 161 308 172 q 401 150 371 150 z "},"σ":{"ha":796,"x_min":50,"x_max":779,"o":"m 376 -17 q 250 6 310 -17 q 146 74 190 29 q 76 185 101 119 q 50 336 50 250 q 78 492 50 425 q 153 602 107 558 q 260 667 200 646 q 386 689 321 689 l 779 689 l 779 521 q 727 526 751 524 q 680 531 703 529 q 634 535 657 533 q 585 536 611 536 l 585 531 q 664 442 636 501 q 692 304 692 383 q 668 170 692 229 q 603 69 644 111 q 503 6 561 28 q 376 -17 446 -17 m 379 149 q 466 194 435 149 q 497 325 497 240 q 490 401 497 365 q 467 465 482 438 q 430 508 451 492 q 379 524 408 524 q 292 480 324 524 q 260 336 260 436 q 292 197 260 246 q 379 149 324 149 z "},"τ":{"ha":683,"x_min":36,"x_max":647,"o":"m 432 -17 q 341 0 378 -17 q 281 48 304 17 q 249 122 258 79 q 239 219 239 165 l 239 529 l 36 529 l 36 681 l 139 689 l 647 689 l 647 529 l 439 529 q 433 356 435 439 q 432 211 432 274 q 447 162 432 175 q 485 149 461 149 q 522 151 504 149 q 563 160 539 153 l 589 7 q 516 -10 556 -3 q 432 -17 476 -17 z "},"υ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 z "},"φ":{"ha":1025,"x_min":50,"x_max":975,"o":"m 260 344 q 303 197 260 249 q 419 142 346 146 l 419 547 q 303 492 346 543 q 260 344 260 440 m 765 344 q 723 492 765 440 q 606 547 681 543 l 606 142 q 722 197 679 146 q 765 344 765 249 m 419 -246 l 419 -11 q 281 17 347 -7 q 163 87 214 42 q 81 197 111 132 q 50 344 50 261 q 81 492 50 428 q 163 602 111 557 q 281 672 214 647 q 419 700 347 696 l 419 872 l 606 872 l 606 700 q 744 672 678 696 q 863 602 811 647 q 944 492 914 557 q 975 344 975 428 q 944 197 975 261 q 863 87 914 132 q 744 17 811 42 q 606 -11 678 -7 l 606 -246 l 419 -246 z "},"χ":{"ha":731,"x_min":11,"x_max":750,"o":"m 222 -262 l 11 -246 l 274 229 l 11 661 l 213 706 l 372 408 l 378 408 l 500 689 l 713 689 l 475 235 l 750 -218 l 549 -262 l 378 67 l 372 67 l 222 -262 z "},"ψ":{"ha":1044,"x_min":61,"x_max":981,"o":"m 426 -246 l 426 -17 q 261 14 328 -15 q 153 90 194 43 q 94 198 113 136 q 76 329 76 260 l 76 478 q 74 575 76 518 q 61 689 71 632 l 258 689 q 269 610 267 653 q 271 519 271 568 q 270 471 271 499 q 269 415 269 443 q 269 359 269 386 q 268 313 268 332 q 276 249 268 279 q 302 194 283 218 q 351 157 321 171 q 426 143 382 143 l 426 872 l 613 872 l 613 143 q 734 199 693 146 q 775 381 775 251 q 765 510 775 444 q 731 663 756 576 l 928 706 q 967 551 953 629 q 981 390 981 472 q 888 90 981 194 q 613 -17 794 -14 l 613 -246 l 426 -246 z "},"ω":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 z "},"ς":{"ha":619,"x_min":50,"x_max":597,"o":"m 485 -258 l 324 -206 q 372 -136 353 -165 q 392 -79 392 -107 q 374 -26 392 -46 q 314 10 357 -6 q 218 50 265 26 q 133 113 171 74 q 73 212 96 153 q 50 357 50 271 q 78 505 50 440 q 152 614 106 569 q 261 682 199 658 q 393 706 324 706 q 508 685 457 706 q 597 632 560 664 l 500 500 q 406 540 454 540 q 298 490 336 540 q 260 357 260 440 q 269 285 260 314 q 296 235 278 256 q 340 200 314 214 q 399 174 365 186 q 480 140 447 157 q 533 99 513 122 q 562 47 553 76 q 571 -26 571 17 q 550 -126 571 -62 q 485 -258 529 -190 z "},"ϐ":{"ha":822,"x_min":89,"x_max":774,"o":"m 443 -17 q 313 3 376 -17 q 200 65 250 22 q 119 174 150 107 q 89 338 89 242 l 89 647 q 108 782 89 719 q 165 890 126 844 q 261 962 203 936 q 399 988 319 988 q 510 973 456 988 q 606 928 564 958 q 674 850 649 897 q 700 738 700 803 q 666 614 700 667 q 558 529 632 561 l 558 524 q 645 495 606 517 q 713 441 685 474 q 758 366 742 408 q 774 275 774 324 q 747 145 774 200 q 676 54 721 90 q 570 1 631 18 q 443 -17 510 -17 m 286 635 q 282 535 283 582 q 394 571 350 551 q 462 613 438 590 q 495 660 486 635 q 504 715 504 686 q 476 800 504 774 q 408 826 449 826 q 319 775 349 826 q 286 635 290 724 m 436 160 q 533 192 493 160 q 572 289 572 225 q 539 385 572 344 q 431 426 506 426 q 372 417 404 426 q 279 389 339 408 l 279 356 q 294 264 279 301 q 331 203 308 226 q 381 170 353 181 q 436 160 408 160 z "},"ϑ":{"ha":763,"x_min":69,"x_max":696,"o":"m 257 713 q 267 652 257 682 q 302 601 276 622 q 375 569 328 579 q 497 567 422 558 q 481 692 493 642 q 449 773 468 743 q 406 815 431 803 q 354 825 382 826 q 282 790 307 824 q 257 713 257 757 m 381 -17 q 253 2 306 -17 q 168 56 201 21 q 119 138 135 90 q 104 243 104 186 q 103 326 104 292 q 92 393 101 361 l 283 393 q 290 371 288 385 q 294 340 293 357 q 295 306 294 324 q 296 272 296 288 q 319 175 296 201 q 388 149 343 149 q 432 160 413 149 q 465 203 451 171 q 488 292 479 235 q 499 443 496 350 q 345 442 411 433 q 231 471 279 450 q 152 522 183 492 q 103 588 121 553 q 77 657 85 622 q 69 721 69 692 q 90 826 69 776 q 148 911 111 875 q 235 969 185 947 q 344 990 286 990 q 605 862 514 990 q 696 493 696 733 q 618 108 696 233 q 381 -17 540 -17 z "},"ϕ":{"ha":1025,"x_min":50,"x_max":975,"o":"m 422 -246 l 422 -11 q 279 17 347 -8 q 160 88 211 42 q 80 203 110 135 q 50 358 50 271 q 60 452 50 404 q 90 547 71 500 q 135 637 110 593 q 193 717 161 681 l 363 599 q 284 472 310 533 q 258 339 258 410 q 297 201 258 254 q 422 140 335 147 l 422 358 q 442 517 422 451 q 497 625 463 583 q 580 686 532 667 q 685 706 628 706 q 897 617 819 706 q 975 367 975 529 q 944 210 975 279 q 863 94 914 142 q 746 19 813 46 q 608 -11 679 -7 q 617 -246 610 -129 l 422 -246 m 603 388 q 603 265 603 326 q 604 140 603 203 q 722 197 679 149 q 765 353 765 246 q 742 496 765 453 q 678 539 718 539 q 623 503 643 539 q 603 388 603 467 z "},"ά":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 332 796 l 379 1101 l 578 1068 l 468 771 l 332 796 z "},"έ":{"ha":654,"x_min":50,"x_max":626,"o":"m 372 -17 q 247 -3 306 -17 q 144 36 188 10 q 75 103 100 63 q 50 196 50 143 q 85 305 50 267 q 183 360 121 343 l 183 365 q 105 424 131 382 q 79 508 79 467 q 103 597 79 560 q 169 658 128 635 q 263 694 210 682 q 375 706 317 706 q 499 687 438 706 q 613 635 561 668 l 538 504 q 386 550 468 550 q 308 531 338 550 q 279 481 279 513 q 376 419 279 419 q 424 421 399 419 q 472 425 449 422 l 472 279 q 413 283 443 282 q 354 285 382 285 q 275 269 300 285 q 250 217 250 253 q 285 160 250 181 q 392 139 321 139 q 466 150 425 139 q 547 192 507 161 l 626 63 q 499 -1 560 14 q 372 -17 439 -17 m 286 796 l 333 1101 l 532 1068 l 422 771 l 286 796 z "},"ή":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 350 796 l 397 1101 l 596 1068 l 486 771 l 350 796 z "},"ί":{"ha":418,"x_min":90,"x_max":407,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 117 796 l 164 1101 l 363 1068 l 253 771 l 117 796 z "},"ϊ":{"ha":418,"x_min":-60,"x_max":443,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 40 790 q -32 819 -4 790 q -60 890 -60 847 q -32 960 -60 932 q 40 989 -4 989 q 112 960 85 989 q 139 890 139 932 q 112 819 139 847 q 40 790 85 790 m 343 790 q 272 819 299 790 q 244 890 244 847 q 272 960 244 932 q 343 989 299 989 q 415 960 388 989 q 443 890 443 932 q 415 819 443 847 q 343 790 388 790 z "},"ό":{"ha":768,"x_min":50,"x_max":718,"o":"m 383 -17 q 258 8 318 -17 q 151 78 197 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 151 611 106 565 q 258 681 197 657 q 383 706 318 706 q 510 681 450 706 q 617 611 571 657 q 690 498 663 565 q 718 344 718 431 q 690 191 718 258 q 617 78 663 124 q 510 8 571 32 q 383 -17 450 -17 m 383 149 q 478 201 449 149 q 508 344 508 254 q 478 488 508 435 q 383 540 449 540 q 290 488 319 540 q 260 344 260 435 q 290 201 260 254 q 383 149 319 149 m 313 796 l 360 1101 l 558 1068 l 449 771 l 313 796 z "},"ύ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 290 796 l 338 1101 l 536 1068 l 426 771 l 290 796 z "},"ϋ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 214 790 q 142 819 169 790 q 114 890 114 847 q 142 960 114 932 q 214 989 169 989 q 285 960 258 989 q 313 890 313 932 q 285 819 313 847 q 214 790 258 790 m 517 790 q 445 819 472 790 q 418 890 418 847 q 445 960 418 932 q 517 989 472 989 q 589 960 561 989 q 617 890 617 932 q 589 819 617 847 q 517 790 561 790 z "},"ώ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 443 796 l 490 1101 l 689 1068 l 579 771 l 443 796 z "},"ΐ":{"ha":418,"x_min":-71,"x_max":454,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 121 807 l 171 1113 l 314 1083 l 211 788 l 121 807 m 7 811 q -48 833 -25 811 q -71 890 -71 854 q -48 947 -71 926 q 7 968 -25 968 q 63 947 40 968 q 86 890 86 926 q 63 833 86 854 q 7 811 40 811 m 376 811 q 320 833 343 811 q 297 890 297 854 q 320 947 297 926 q 376 968 343 968 q 431 947 408 968 q 454 890 454 926 q 431 833 454 854 q 376 811 408 811 z "},"ΰ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 294 807 l 344 1113 l 488 1083 l 385 788 l 294 807 m 181 811 q 126 833 149 811 q 103 890 103 854 q 126 947 103 926 q 181 968 149 968 q 237 947 214 968 q 260 890 260 926 q 237 833 260 854 q 181 811 214 811 m 550 811 q 494 833 517 811 q 471 890 471 854 q 494 947 471 926 q 550 968 517 968 q 605 947 582 968 q 628 890 628 926 q 605 833 628 854 q 550 811 582 811 z "},"Ἀ":{"ha":910,"x_min":-10,"x_max":918,"o":"m 433 458 l 411 375 l 604 375 l 583 458 q 546 603 564 526 q 510 750 528 679 l 504 750 q 470 602 488 678 q 433 458 453 526 m 106 0 l 389 906 l 635 906 l 918 0 l 701 0 l 646 215 l 369 215 l 314 0 l 106 0 m 54 597 l 39 678 q 81 701 63 686 q 100 747 100 715 q 75 789 100 772 q -10 810 50 806 l 14 913 q 195 870 143 910 q 247 769 247 831 q 232 696 247 726 q 190 644 217 665 q 128 613 164 624 q 54 597 93 601 z "},"Ἁ":{"ha":888,"x_min":-17,"x_max":896,"o":"m 411 458 l 389 375 l 582 375 l 561 458 q 524 603 542 526 q 488 750 506 679 l 482 750 q 448 602 465 678 q 411 458 431 526 m 83 0 l 367 906 l 613 906 l 896 0 l 679 0 l 624 215 l 347 215 l 292 0 l 83 0 m 176 597 q 101 613 136 601 q 40 644 67 624 q -1 696 14 665 q -17 769 -17 726 q 35 870 -17 831 q 217 913 88 910 l 240 810 q 155 789 181 806 q 129 747 129 772 q 149 701 129 715 q 192 678 168 686 l 176 597 z "},"Ὰ":{"ha":864,"x_min":-21,"x_max":872,"o":"m 388 458 l 365 375 l 558 375 l 538 458 q 500 603 518 526 q 464 750 482 679 l 458 750 q 424 602 442 678 q 388 458 407 526 m 60 0 l 343 906 l 589 906 l 872 0 l 656 0 l 600 215 l 324 215 l 268 0 l 60 0 m 63 611 l -21 906 l 153 931 l 192 635 l 63 611 z "},"Ά":{"ha":864,"x_min":-7,"x_max":872,"o":"m 388 458 l 365 375 l 558 375 l 538 458 q 500 603 518 526 q 464 750 482 679 l 458 750 q 424 602 442 678 q 388 458 407 526 m 60 0 l 343 906 l 589 906 l 872 0 l 656 0 l 600 215 l 324 215 l 268 0 l 60 0 m -7 635 l 32 931 l 206 906 l 122 611 l -7 635 z "},"Ἂ":{"ha":1142,"x_min":-12,"x_max":1150,"o":"m 665 458 l 643 375 l 836 375 l 815 458 q 778 603 796 526 q 742 750 760 679 l 736 750 q 702 602 719 678 q 665 458 685 526 m 338 0 l 621 906 l 867 906 l 1150 0 l 933 0 l 878 215 l 601 215 l 546 0 l 338 0 m 340 611 l 257 906 l 431 931 l 469 635 l 340 611 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 z "},"Ἃ":{"ha":1140,"x_min":-17,"x_max":1149,"o":"m 664 458 l 642 375 l 835 375 l 814 458 q 776 603 794 526 q 740 750 758 679 l 735 750 q 701 602 718 678 q 664 458 683 526 m 336 0 l 619 906 l 865 906 l 1149 0 l 932 0 l 876 215 l 600 215 l 544 0 l 336 0 m 339 611 l 256 906 l 429 931 l 468 635 l 339 611 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ἄ":{"ha":1128,"x_min":-12,"x_max":1136,"o":"m 651 458 l 629 375 l 822 375 l 801 458 q 764 603 782 526 q 728 750 746 679 l 722 750 q 688 602 706 678 q 651 458 671 526 m 324 0 l 607 906 l 853 906 l 1136 0 l 919 0 l 864 215 l 588 215 l 532 0 l 324 0 m 258 635 l 299 931 l 472 906 l 388 611 l 258 635 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 z "},"Ἅ":{"ha":1126,"x_min":-17,"x_max":1135,"o":"m 650 458 l 628 375 l 821 375 l 800 458 q 763 603 781 526 q 726 750 744 679 l 721 750 q 687 602 704 678 q 650 458 669 526 m 322 0 l 606 906 l 851 906 l 1135 0 l 918 0 l 863 215 l 586 215 l 531 0 l 322 0 m 257 635 l 297 931 l 471 906 l 386 611 l 257 635 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ἆ":{"ha":943,"x_min":-33,"x_max":951,"o":"m 467 458 l 444 375 l 638 375 l 617 458 q 579 603 597 526 q 543 750 561 679 l 538 750 q 503 602 521 678 q 467 458 486 526 m 139 0 l 422 906 l 668 906 l 951 0 l 735 0 l 679 215 l 403 215 l 347 0 l 139 0 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 m 106 560 l 93 625 q 124 633 113 628 q 135 650 135 639 q 116 671 135 663 q 44 682 97 679 l 64 764 q 223 737 178 760 q 268 671 268 714 q 220 593 268 619 q 106 560 172 567 z "},"Ἇ":{"ha":943,"x_min":-33,"x_max":951,"o":"m 467 458 l 444 375 l 638 375 l 617 458 q 579 603 597 526 q 543 750 561 679 l 538 750 q 503 602 521 678 q 467 458 486 526 m 139 0 l 422 906 l 668 906 l 951 0 l 735 0 l 679 215 l 403 215 l 347 0 l 139 0 m 203 560 q 88 593 136 567 q 40 671 40 619 q 51 708 40 692 q 85 737 61 725 q 149 755 110 749 q 246 764 189 761 l 265 682 q 193 671 213 679 q 174 650 174 663 q 217 625 174 632 l 203 560 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 z "},"Ᾰ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 393 968 q 233 1017 289 968 q 167 1158 176 1065 l 278 1178 q 317 1110 288 1135 q 393 1086 346 1086 q 469 1110 440 1086 q 508 1178 499 1135 l 619 1158 q 553 1017 610 1065 q 393 968 497 968 z "},"Ᾱ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 183 1001 l 183 1132 l 603 1132 l 603 1001 l 183 1001 z "},"Ἐ":{"ha":988,"x_min":-12,"x_max":914,"o":"m 333 0 l 333 906 l 900 906 l 900 733 l 538 733 l 538 551 l 846 551 l 846 381 l 538 381 l 538 172 l 914 172 l 914 0 l 333 0 m 51 597 l 36 678 q 78 701 60 686 q 97 747 97 715 q 72 789 97 772 q -12 810 47 806 l 11 913 q 192 870 140 910 q 244 769 244 831 q 229 696 244 726 q 188 644 214 665 q 126 613 161 624 q 51 597 90 601 z "},"Ἑ":{"ha":988,"x_min":-17,"x_max":914,"o":"m 333 0 l 333 906 l 900 906 l 900 733 l 538 733 l 538 551 l 846 551 l 846 381 l 538 381 l 538 172 l 914 172 l 914 0 l 333 0 m 176 597 q 101 613 136 601 q 40 644 67 624 q -1 696 14 665 q -17 769 -17 726 q 35 870 -17 831 q 217 913 88 910 l 240 810 q 155 789 181 806 q 129 747 129 772 q 149 701 129 715 q 192 678 168 686 l 176 597 z "},"Ὲ":{"ha":926,"x_min":-31,"x_max":853,"o":"m 272 0 l 272 906 l 839 906 l 839 733 l 476 733 l 476 551 l 785 551 l 785 381 l 476 381 l 476 172 l 853 172 l 853 0 l 272 0 m 53 611 l -31 906 l 143 931 l 182 635 l 53 611 z "},"Έ":{"ha":926,"x_min":-17,"x_max":853,"o":"m 272 0 l 272 906 l 839 906 l 839 733 l 476 733 l 476 551 l 785 551 l 785 381 l 476 381 l 476 172 l 853 172 l 853 0 l 272 0 m -17 635 l 22 931 l 196 906 l 113 611 l -17 635 z "},"Ἒ":{"ha":1214,"x_min":-12,"x_max":1140,"o":"m 560 0 l 560 906 l 1126 906 l 1126 733 l 764 733 l 764 551 l 1072 551 l 1072 381 l 764 381 l 764 172 l 1140 172 l 1140 0 l 560 0 m 340 611 l 257 906 l 431 931 l 469 635 l 340 611 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 z "},"Ἓ":{"ha":1213,"x_min":-17,"x_max":1139,"o":"m 558 0 l 558 906 l 1125 906 l 1125 733 l 763 733 l 763 551 l 1071 551 l 1071 381 l 763 381 l 763 172 l 1139 172 l 1139 0 l 558 0 m 339 611 l 256 906 l 429 931 l 468 635 l 339 611 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ἔ":{"ha":1200,"x_min":-12,"x_max":1126,"o":"m 546 0 l 546 906 l 1113 906 l 1113 733 l 750 733 l 750 551 l 1058 551 l 1058 381 l 750 381 l 750 172 l 1126 172 l 1126 0 l 546 0 m 258 635 l 299 931 l 472 906 l 388 611 l 258 635 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 z "},"Ἕ":{"ha":1199,"x_min":-17,"x_max":1125,"o":"m 544 0 l 544 906 l 1111 906 l 1111 733 l 749 733 l 749 551 l 1057 551 l 1057 381 l 749 381 l 749 172 l 1125 172 l 1125 0 l 544 0 m 257 635 l 297 931 l 471 906 l 386 611 l 257 635 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ἠ":{"ha":1161,"x_min":-12,"x_max":1056,"o":"m 333 0 l 333 906 l 538 906 l 538 557 l 850 557 l 850 906 l 1056 906 l 1056 0 l 850 0 l 850 378 l 538 378 l 538 0 l 333 0 m 51 597 l 36 678 q 78 701 60 686 q 97 747 97 715 q 72 789 97 772 q -12 810 47 806 l 11 913 q 192 870 140 910 q 244 769 244 831 q 229 696 244 726 q 188 644 214 665 q 126 613 161 624 q 51 597 90 601 z "},"Ἡ":{"ha":1161,"x_min":-17,"x_max":1056,"o":"m 333 0 l 333 906 l 538 906 l 538 557 l 850 557 l 850 906 l 1056 906 l 1056 0 l 850 0 l 850 378 l 538 378 l 538 0 l 333 0 m 176 597 q 101 613 136 601 q 40 644 67 624 q -1 696 14 665 q -17 769 -17 726 q 35 870 -17 831 q 217 913 88 910 l 240 810 q 155 789 181 806 q 129 747 129 772 q 149 701 129 715 q 192 678 168 686 l 176 597 z "},"Ὴ":{"ha":1100,"x_min":-31,"x_max":994,"o":"m 272 0 l 272 906 l 476 906 l 476 557 l 789 557 l 789 906 l 994 906 l 994 0 l 789 0 l 789 378 l 476 378 l 476 0 l 272 0 m 53 611 l -31 906 l 143 931 l 182 635 l 53 611 z "},"Ή":{"ha":1100,"x_min":-17,"x_max":994,"o":"m 272 0 l 272 906 l 476 906 l 476 557 l 789 557 l 789 906 l 994 906 l 994 0 l 789 0 l 789 378 l 476 378 l 476 0 l 272 0 m -17 635 l 22 931 l 196 906 l 113 611 l -17 635 z "},"Ἢ":{"ha":1388,"x_min":-12,"x_max":1282,"o":"m 560 0 l 560 906 l 764 906 l 764 557 l 1076 557 l 1076 906 l 1282 906 l 1282 0 l 1076 0 l 1076 378 l 764 378 l 764 0 l 560 0 m 340 611 l 257 906 l 431 931 l 469 635 l 340 611 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 z "},"Ἣ":{"ha":1386,"x_min":-17,"x_max":1281,"o":"m 558 0 l 558 906 l 763 906 l 763 557 l 1075 557 l 1075 906 l 1281 906 l 1281 0 l 1075 0 l 1075 378 l 763 378 l 763 0 l 558 0 m 339 611 l 256 906 l 429 931 l 468 635 l 339 611 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ἤ":{"ha":1375,"x_min":-12,"x_max":1268,"o":"m 546 0 l 546 906 l 750 906 l 750 557 l 1063 557 l 1063 906 l 1268 906 l 1268 0 l 1063 0 l 1063 378 l 750 378 l 750 0 l 546 0 m 258 635 l 299 931 l 472 906 l 388 611 l 258 635 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 z "},"Ἥ":{"ha":1372,"x_min":-17,"x_max":1267,"o":"m 544 0 l 544 906 l 749 906 l 749 557 l 1061 557 l 1061 906 l 1267 906 l 1267 0 l 1061 0 l 1061 378 l 749 378 l 749 0 l 544 0 m 257 635 l 297 931 l 471 906 l 386 611 l 257 635 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ἦ":{"ha":1244,"x_min":-33,"x_max":1139,"o":"m 417 0 l 417 906 l 621 906 l 621 557 l 933 557 l 933 906 l 1139 906 l 1139 0 l 933 0 l 933 378 l 621 378 l 621 0 l 417 0 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 m 106 560 l 93 625 q 124 633 113 628 q 135 650 135 639 q 116 671 135 663 q 44 682 97 679 l 64 764 q 223 737 178 760 q 268 671 268 714 q 220 593 268 619 q 106 560 172 567 z "},"Ἧ":{"ha":1244,"x_min":-33,"x_max":1139,"o":"m 417 0 l 417 906 l 621 906 l 621 557 l 933 557 l 933 906 l 1139 906 l 1139 0 l 933 0 l 933 378 l 621 378 l 621 0 l 417 0 m 203 560 q 88 593 136 567 q 40 671 40 619 q 51 708 40 692 q 85 737 61 725 q 149 755 110 749 q 246 764 189 761 l 265 682 q 193 671 213 679 q 174 650 174 663 q 217 625 174 632 l 203 560 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 z "},"Ἰ":{"ha":644,"x_min":-12,"x_max":538,"o":"m 333 0 l 333 906 l 538 906 l 538 0 l 333 0 m 51 597 l 36 678 q 78 701 60 686 q 97 747 97 715 q 72 789 97 772 q -12 810 47 806 l 11 913 q 192 870 140 910 q 244 769 244 831 q 229 696 244 726 q 188 644 214 665 q 126 613 161 624 q 51 597 90 601 z "},"Ἱ":{"ha":644,"x_min":-17,"x_max":538,"o":"m 333 0 l 333 906 l 538 906 l 538 0 l 333 0 m 176 597 q 101 613 136 601 q 40 644 67 624 q -1 696 14 665 q -17 769 -17 726 q 35 870 -17 831 q 217 913 88 910 l 240 810 q 155 789 181 806 q 129 747 129 772 q 149 701 129 715 q 192 678 168 686 l 176 597 z "},"Ὶ":{"ha":583,"x_min":-31,"x_max":476,"o":"m 272 0 l 272 906 l 476 906 l 476 0 l 272 0 m 53 611 l -31 906 l 143 931 l 182 635 l 53 611 z "},"Ί":{"ha":583,"x_min":-17,"x_max":476,"o":"m 272 0 l 272 906 l 476 906 l 476 0 l 272 0 m -17 635 l 22 931 l 196 906 l 113 611 l -17 635 z "},"Ἲ":{"ha":871,"x_min":-12,"x_max":764,"o":"m 560 0 l 560 906 l 764 906 l 764 0 l 560 0 m 340 611 l 257 906 l 431 931 l 469 635 l 340 611 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 z "},"Ἳ":{"ha":869,"x_min":-17,"x_max":763,"o":"m 558 0 l 558 906 l 763 906 l 763 0 l 558 0 m 339 611 l 256 906 l 429 931 l 468 635 l 339 611 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ἴ":{"ha":857,"x_min":-12,"x_max":750,"o":"m 546 0 l 546 906 l 750 906 l 750 0 l 546 0 m 258 635 l 299 931 l 472 906 l 388 611 l 258 635 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 z "},"Ἵ":{"ha":856,"x_min":-17,"x_max":749,"o":"m 544 0 l 544 906 l 749 906 l 749 0 l 544 0 m 257 635 l 297 931 l 471 906 l 386 611 l 257 635 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ἶ":{"ha":728,"x_min":-33,"x_max":621,"o":"m 417 0 l 417 906 l 621 906 l 621 0 l 417 0 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 m 106 560 l 93 625 q 124 633 113 628 q 135 650 135 639 q 116 671 135 663 q 44 682 97 679 l 64 764 q 223 737 178 760 q 268 671 268 714 q 220 593 268 619 q 106 560 172 567 z "},"Ἷ":{"ha":728,"x_min":-33,"x_max":621,"o":"m 417 0 l 417 906 l 621 906 l 621 0 l 417 0 m 203 560 q 88 593 136 567 q 40 671 40 619 q 51 708 40 692 q 85 737 61 725 q 149 755 110 749 q 246 764 189 761 l 265 682 q 193 671 213 679 q 174 650 174 663 q 217 625 174 632 l 203 560 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 z "},"Ῐ":{"ha":418,"x_min":-18,"x_max":435,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m 208 968 q 48 1017 104 968 q -18 1158 -8 1065 l 93 1178 q 132 1110 103 1135 q 208 1086 161 1086 q 285 1110 256 1086 q 324 1178 314 1135 l 435 1158 q 369 1017 425 1065 q 208 968 313 968 z "},"Ῑ":{"ha":418,"x_min":-1,"x_max":418,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m -1 1001 l -1 1132 l 418 1132 l 418 1001 l -1 1001 z "},"Ὀ":{"ha":1149,"x_min":-12,"x_max":1083,"o":"m 672 -17 q 505 16 581 -17 q 375 110 429 49 q 291 258 321 171 q 261 457 261 346 q 291 655 261 568 q 375 801 321 742 q 505 891 429 860 q 672 922 581 922 q 840 891 764 922 q 969 800 915 860 q 1053 653 1024 740 q 1083 457 1083 567 q 1053 258 1083 346 q 969 110 1024 171 q 840 16 915 49 q 672 -17 764 -17 m 672 160 q 819 240 765 160 q 874 457 874 319 q 819 669 874 593 q 672 746 765 746 q 525 669 579 746 q 471 457 471 593 q 525 240 471 319 q 672 160 579 160 m 51 597 l 36 678 q 78 701 60 686 q 97 747 97 715 q 72 789 97 772 q -12 810 47 806 l 11 913 q 192 870 140 910 q 244 769 244 831 q 229 696 244 726 q 188 644 214 665 q 126 613 161 624 q 51 597 90 601 z "},"Ὁ":{"ha":1122,"x_min":-17,"x_max":1058,"o":"m 647 -17 q 480 16 556 -17 q 350 110 404 49 q 266 258 296 171 q 236 457 236 346 q 266 655 236 568 q 350 801 296 742 q 480 891 404 860 q 647 922 556 922 q 815 891 739 922 q 944 800 890 860 q 1028 653 999 740 q 1058 457 1058 567 q 1028 258 1058 346 q 944 110 999 171 q 815 16 890 49 q 647 -17 739 -17 m 647 160 q 794 240 740 160 q 849 457 849 319 q 794 669 849 593 q 647 746 740 746 q 500 669 554 746 q 446 457 446 593 q 500 240 446 319 q 647 160 554 160 m 176 597 q 101 613 136 601 q 40 644 67 624 q -1 696 14 665 q -17 769 -17 726 q 35 870 -17 831 q 217 913 88 910 l 240 810 q 155 789 181 806 q 129 747 129 772 q 149 701 129 715 q 192 678 168 686 l 176 597 z "},"Ὸ":{"ha":1097,"x_min":-31,"x_max":1033,"o":"m 622 -17 q 455 16 531 -17 q 325 110 379 49 q 241 258 271 171 q 211 457 211 346 q 241 655 211 568 q 325 801 271 742 q 455 891 379 860 q 622 922 531 922 q 790 891 714 922 q 919 800 865 860 q 1003 653 974 740 q 1033 457 1033 567 q 1003 258 1033 346 q 919 110 974 171 q 790 16 865 49 q 622 -17 714 -17 m 622 160 q 769 240 715 160 q 824 457 824 319 q 769 669 824 593 q 622 746 715 746 q 475 669 529 746 q 421 457 421 593 q 475 240 421 319 q 622 160 529 160 m 53 611 l -31 906 l 143 931 l 182 635 l 53 611 z "},"Ό":{"ha":1079,"x_min":-17,"x_max":1014,"o":"m 603 -17 q 435 16 511 -17 q 306 110 360 49 q 222 258 251 171 q 192 457 192 346 q 222 655 192 568 q 306 801 251 742 q 435 891 360 860 q 603 922 511 922 q 770 891 694 922 q 900 800 846 860 q 984 653 954 740 q 1014 457 1014 567 q 984 258 1014 346 q 900 110 954 171 q 770 16 846 49 q 603 -17 694 -17 m 603 160 q 750 240 696 160 q 804 457 804 319 q 750 669 804 593 q 603 746 696 746 q 456 669 510 746 q 401 457 401 593 q 456 240 401 319 q 603 160 510 160 m -17 635 l 22 931 l 196 906 l 113 611 l -17 635 z "},"Ὂ":{"ha":1367,"x_min":-12,"x_max":1321,"o":"m 910 -17 q 742 16 818 -17 q 613 110 667 49 q 528 258 558 171 q 499 457 499 346 q 528 655 499 568 q 613 801 558 742 q 742 891 667 860 q 910 922 818 922 q 1077 891 1001 922 q 1207 800 1153 860 q 1291 653 1261 740 q 1321 457 1321 567 q 1291 258 1321 346 q 1207 110 1261 171 q 1077 16 1153 49 q 910 -17 1001 -17 m 910 160 q 1057 240 1003 160 q 1111 457 1111 319 q 1057 669 1111 593 q 910 746 1003 746 q 763 669 817 746 q 708 457 708 593 q 763 240 708 319 q 910 160 817 160 m 340 611 l 257 906 l 431 931 l 469 635 l 340 611 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 z "},"Ὃ":{"ha":1383,"x_min":-17,"x_max":1319,"o":"m 908 -17 q 741 16 817 -17 q 611 110 665 49 q 527 258 557 171 q 497 457 497 346 q 527 655 497 568 q 611 801 557 742 q 741 891 665 860 q 908 922 817 922 q 1076 891 1000 922 q 1206 800 1151 860 q 1290 653 1260 740 q 1319 457 1319 567 q 1290 258 1319 346 q 1206 110 1260 171 q 1076 16 1151 49 q 908 -17 1000 -17 m 908 160 q 1056 240 1001 160 q 1110 457 1110 319 q 1056 669 1110 593 q 908 746 1001 746 q 761 669 815 746 q 707 457 707 593 q 761 240 707 319 q 908 160 815 160 m 339 611 l 256 906 l 429 931 l 468 635 l 339 611 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ὄ":{"ha":1353,"x_min":-12,"x_max":1288,"o":"m 876 -17 q 709 16 785 -17 q 579 110 633 49 q 495 258 525 171 q 465 457 465 346 q 495 655 465 568 q 579 801 525 742 q 709 891 633 860 q 876 922 785 922 q 1044 891 968 922 q 1174 800 1119 860 q 1258 653 1228 740 q 1288 457 1288 567 q 1258 258 1288 346 q 1174 110 1228 171 q 1044 16 1119 49 q 876 -17 968 -17 m 876 160 q 1024 240 969 160 q 1078 457 1078 319 q 1024 669 1078 593 q 876 746 969 746 q 729 669 783 746 q 675 457 675 593 q 729 240 675 319 q 876 160 783 160 m 258 635 l 299 931 l 472 906 l 388 611 l 258 635 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 z "},"Ὅ":{"ha":1351,"x_min":-17,"x_max":1286,"o":"m 875 -17 q 708 16 783 -17 q 578 110 632 49 q 494 258 524 171 q 464 457 464 346 q 494 655 464 568 q 578 801 524 742 q 708 891 632 860 q 875 922 783 922 q 1042 891 967 922 q 1172 800 1118 860 q 1256 653 1226 740 q 1286 457 1286 567 q 1256 258 1286 346 q 1172 110 1226 171 q 1042 16 1118 49 q 875 -17 967 -17 m 875 160 q 1022 240 968 160 q 1076 457 1076 319 q 1022 669 1076 593 q 875 746 968 746 q 728 669 782 746 q 674 457 674 593 q 728 240 674 319 q 875 160 782 160 m 257 635 l 297 931 l 471 906 l 386 611 l 257 635 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ῥ":{"ha":1054,"x_min":-17,"x_max":1004,"o":"m 333 0 l 333 906 l 644 906 q 785 891 719 906 q 899 842 850 876 q 976 752 947 808 q 1004 614 1004 696 q 976 476 1004 535 q 899 381 947 418 q 786 325 850 343 q 650 307 722 307 l 538 307 l 538 0 l 333 0 m 538 469 l 638 469 q 804 614 804 469 q 760 714 804 685 q 632 743 715 743 l 538 743 l 538 469 m 176 597 q 101 613 136 601 q 40 644 67 624 q -1 696 14 665 q -17 769 -17 726 q 35 870 -17 831 q 217 913 88 910 l 240 810 q 155 789 181 806 q 129 747 129 772 q 149 701 129 715 q 192 678 168 686 l 176 597 z "},"Ὑ":{"ha":1015,"x_min":-17,"x_max":1026,"o":"m 549 0 l 549 322 l 275 906 l 494 906 l 575 697 q 612 598 594 646 q 649 497 629 550 l 654 497 q 692 598 674 550 q 731 697 711 646 l 813 906 l 1026 906 l 753 322 l 753 0 l 549 0 m 176 597 q 101 613 136 601 q 40 644 67 624 q -1 696 14 665 q -17 769 -17 726 q 35 870 -17 831 q 217 913 88 910 l 240 810 q 155 789 181 806 q 129 747 129 772 q 149 701 129 715 q 192 678 168 686 l 176 597 z "},"Ὺ":{"ha":978,"x_min":-31,"x_max":989,"o":"m 511 0 l 511 322 l 238 906 l 457 906 l 538 697 q 574 598 557 646 q 611 497 592 550 l 617 497 q 655 598 636 550 q 693 697 674 646 l 775 906 l 989 906 l 715 322 l 715 0 l 511 0 m 53 611 l -31 906 l 143 931 l 182 635 l 53 611 z "},"Ύ":{"ha":978,"x_min":-17,"x_max":989,"o":"m 511 0 l 511 322 l 238 906 l 457 906 l 538 697 q 574 598 557 646 q 611 497 592 550 l 617 497 q 655 598 636 550 q 693 697 674 646 l 775 906 l 989 906 l 715 322 l 715 0 l 511 0 m -17 635 l 22 931 l 196 906 l 113 611 l -17 635 z "},"Ὓ":{"ha":1264,"x_min":-17,"x_max":1275,"o":"m 797 0 l 797 322 l 524 906 l 743 906 l 824 697 q 860 598 843 646 q 897 497 878 550 l 903 497 q 941 598 922 550 q 979 697 960 646 l 1061 906 l 1275 906 l 1001 322 l 1001 0 l 797 0 m 339 611 l 256 906 l 429 931 l 468 635 l 339 611 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ὕ":{"ha":1250,"x_min":-17,"x_max":1261,"o":"m 783 0 l 783 322 l 510 906 l 729 906 l 810 697 q 847 598 829 646 q 883 497 864 550 l 889 497 q 927 598 908 550 q 965 697 946 646 l 1047 906 l 1261 906 l 988 322 l 988 0 l 783 0 m 257 635 l 297 931 l 471 906 l 386 611 l 257 635 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ὗ":{"ha":1103,"x_min":-33,"x_max":1114,"o":"m 636 0 l 636 322 l 363 906 l 582 906 l 663 697 q 699 598 682 646 q 736 497 717 550 l 742 497 q 780 598 761 550 q 818 697 799 646 l 900 906 l 1114 906 l 840 322 l 840 0 l 636 0 m 203 560 q 88 593 136 567 q 40 671 40 619 q 51 708 40 692 q 85 737 61 725 q 149 755 110 749 q 246 764 189 761 l 265 682 q 193 671 213 679 q 174 650 174 663 q 217 625 174 632 l 203 560 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 z "},"Ῠ":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 m 364 968 q 203 1017 260 968 q 138 1158 147 1065 l 249 1178 q 288 1110 258 1135 q 364 1086 317 1086 q 440 1110 411 1086 q 479 1178 469 1135 l 590 1158 q 524 1017 581 1065 q 364 968 468 968 z "},"Ῡ":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 m 154 1001 l 154 1132 l 574 1132 l 574 1001 l 154 1001 z "},"Ὠ":{"ha":1185,"x_min":-12,"x_max":1124,"o":"m 258 0 l 258 165 l 411 165 l 411 171 q 365 226 389 193 q 323 301 342 260 q 292 391 304 342 q 281 497 281 440 q 310 669 281 592 q 393 803 339 747 q 523 891 447 860 q 692 922 599 922 q 859 891 783 922 q 989 803 935 860 q 1073 669 1043 747 q 1103 497 1103 592 q 1090 391 1103 440 q 1059 301 1078 342 q 1017 226 1040 260 q 971 171 993 193 l 971 165 l 1124 165 l 1124 0 l 753 0 l 753 147 q 858 292 824 214 q 893 476 893 369 q 879 585 893 535 q 839 670 865 635 q 776 726 813 706 q 692 746 739 746 q 607 726 644 746 q 544 670 569 706 q 504 585 518 635 q 490 476 490 535 q 524 292 490 369 q 629 147 558 214 l 629 0 l 258 0 m 51 597 l 36 678 q 78 701 60 686 q 97 747 97 715 q 72 789 97 772 q -12 810 47 806 l 11 913 q 192 870 140 910 q 244 769 244 831 q 229 696 244 726 q 188 644 214 665 q 126 613 161 624 q 51 597 90 601 z "},"Ὡ":{"ha":1160,"x_min":-17,"x_max":1099,"o":"m 233 0 l 233 165 l 386 165 l 386 171 q 340 226 364 193 q 298 301 317 260 q 267 391 279 342 q 256 497 256 440 q 285 669 256 592 q 368 803 314 747 q 498 891 422 860 q 667 922 574 922 q 834 891 758 922 q 964 803 910 860 q 1048 669 1018 747 q 1078 497 1078 592 q 1065 391 1078 440 q 1034 301 1053 342 q 992 226 1015 260 q 946 171 968 193 l 946 165 l 1099 165 l 1099 0 l 728 0 l 728 147 q 833 292 799 214 q 868 476 868 369 q 854 585 868 535 q 814 670 840 635 q 751 726 788 706 q 667 746 714 746 q 582 726 619 746 q 519 670 544 706 q 479 585 493 635 q 465 476 465 535 q 499 292 465 369 q 604 147 533 214 l 604 0 l 233 0 m 176 597 q 101 613 136 601 q 40 644 67 624 q -1 696 14 665 q -17 769 -17 726 q 35 870 -17 831 q 217 913 88 910 l 240 810 q 155 789 181 806 q 129 747 129 772 q 149 701 129 715 q 192 678 168 686 l 176 597 z "},"Ὼ":{"ha":1126,"x_min":-31,"x_max":1067,"o":"m 201 0 l 201 165 l 354 165 l 354 171 q 308 226 332 193 q 266 301 285 260 q 235 391 247 342 q 224 497 224 440 q 253 669 224 592 q 336 803 282 747 q 466 891 390 860 q 635 922 542 922 q 802 891 726 922 q 932 803 878 860 q 1016 669 986 747 q 1046 497 1046 592 q 1033 391 1046 440 q 1002 301 1021 342 q 960 226 983 260 q 914 171 936 193 l 914 165 l 1067 165 l 1067 0 l 696 0 l 696 147 q 801 292 767 214 q 836 476 836 369 q 822 585 836 535 q 782 670 808 635 q 719 726 756 706 q 635 746 682 746 q 550 726 588 746 q 487 670 513 706 q 447 585 461 635 q 433 476 433 535 q 467 292 433 369 q 572 147 501 214 l 572 0 l 201 0 m 53 611 l -31 906 l 143 931 l 182 635 l 53 611 z "},"Ώ":{"ha":1115,"x_min":-26,"x_max":1054,"o":"m 189 0 l 189 165 l 342 165 l 342 171 q 296 226 319 193 q 253 301 272 260 q 223 391 235 342 q 211 497 211 440 q 240 669 211 592 q 324 803 269 747 q 453 891 378 860 q 622 922 529 922 q 790 891 714 922 q 919 803 865 860 q 1003 669 974 747 q 1033 497 1033 592 q 1021 391 1033 440 q 990 301 1008 342 q 947 226 971 260 q 901 171 924 193 l 901 165 l 1054 165 l 1054 0 l 683 0 l 683 147 q 789 292 754 214 q 824 476 824 369 q 810 585 824 535 q 769 670 796 635 q 706 726 743 706 q 622 746 669 746 q 538 726 575 746 q 474 670 500 706 q 435 585 449 635 q 421 476 421 535 q 455 292 421 369 q 560 147 489 214 l 560 0 l 189 0 m -26 635 l 13 931 l 186 906 l 103 611 l -26 635 z "},"Ὢ":{"ha":1414,"x_min":-12,"x_max":1354,"o":"m 489 0 l 489 165 l 642 165 l 642 171 q 596 226 619 193 q 553 301 572 260 q 523 391 535 342 q 511 497 511 440 q 540 669 511 592 q 624 803 569 747 q 753 891 678 860 q 922 922 829 922 q 1090 891 1014 922 q 1219 803 1165 860 q 1303 669 1274 747 q 1333 497 1333 592 q 1321 391 1333 440 q 1290 301 1308 342 q 1247 226 1271 260 q 1201 171 1224 193 l 1201 165 l 1354 165 l 1354 0 l 983 0 l 983 147 q 1089 292 1054 214 q 1124 476 1124 369 q 1110 585 1124 535 q 1069 670 1096 635 q 1006 726 1043 706 q 922 746 969 746 q 838 726 875 746 q 774 670 800 706 q 735 585 749 635 q 721 476 721 535 q 755 292 721 369 q 860 147 789 214 l 860 0 l 489 0 m 340 611 l 257 906 l 431 931 l 469 635 l 340 611 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 z "},"Ὣ":{"ha":1413,"x_min":-17,"x_max":1353,"o":"m 488 0 l 488 165 l 640 165 l 640 171 q 594 226 618 193 q 552 301 571 260 q 522 391 533 342 q 510 497 510 440 q 539 669 510 592 q 622 803 568 747 q 752 891 676 860 q 921 922 828 922 q 1088 891 1013 922 q 1218 803 1164 860 q 1302 669 1272 747 q 1332 497 1332 592 q 1319 391 1332 440 q 1288 301 1307 342 q 1246 226 1269 260 q 1200 171 1222 193 l 1200 165 l 1353 165 l 1353 0 l 982 0 l 982 147 q 1088 292 1053 214 q 1122 476 1122 369 q 1108 585 1122 535 q 1068 670 1094 635 q 1005 726 1042 706 q 921 746 968 746 q 836 726 874 746 q 773 670 799 706 q 733 585 747 635 q 719 476 719 535 q 753 292 719 369 q 858 147 788 214 l 858 0 l 488 0 m 339 611 l 256 906 l 429 931 l 468 635 l 339 611 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ὤ":{"ha":1400,"x_min":-12,"x_max":1340,"o":"m 475 0 l 475 165 l 628 165 l 628 171 q 582 226 606 193 q 540 301 558 260 q 509 391 521 342 q 497 497 497 440 q 526 669 497 592 q 610 803 556 747 q 740 891 664 860 q 908 922 815 922 q 1076 891 1000 922 q 1206 803 1151 860 q 1290 669 1260 747 q 1319 497 1319 592 q 1307 391 1319 440 q 1276 301 1294 342 q 1233 226 1257 260 q 1188 171 1210 193 l 1188 165 l 1340 165 l 1340 0 l 969 0 l 969 147 q 1075 292 1040 214 q 1110 476 1110 369 q 1096 585 1110 535 q 1056 670 1082 635 q 992 726 1029 706 q 908 746 956 746 q 824 726 861 746 q 760 670 786 706 q 721 585 735 635 q 707 476 707 535 q 741 292 707 369 q 846 147 775 214 l 846 0 l 475 0 m 258 635 l 299 931 l 472 906 l 388 611 l 258 635 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 z "},"Ὥ":{"ha":1399,"x_min":-17,"x_max":1339,"o":"m 474 0 l 474 165 l 626 165 l 626 171 q 581 226 604 193 q 538 301 557 260 q 508 391 519 342 q 496 497 496 440 q 525 669 496 592 q 608 803 554 747 q 738 891 663 860 q 907 922 814 922 q 1074 891 999 922 q 1204 803 1150 860 q 1288 669 1258 747 q 1318 497 1318 592 q 1306 391 1318 440 q 1274 301 1293 342 q 1232 226 1256 260 q 1186 171 1208 193 l 1186 165 l 1339 165 l 1339 0 l 968 0 l 968 147 q 1074 292 1039 214 q 1108 476 1108 369 q 1094 585 1108 535 q 1054 670 1081 635 q 991 726 1028 706 q 907 746 954 746 q 822 726 860 746 q 759 670 785 706 q 719 585 733 635 q 706 476 706 535 q 740 292 706 369 q 844 147 774 214 l 844 0 l 474 0 m 257 635 l 297 931 l 471 906 l 386 611 l 257 635 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 z "},"Ὦ":{"ha":1218,"x_min":-33,"x_max":1157,"o":"m 292 0 l 292 165 l 444 165 l 444 171 q 399 226 422 193 q 356 301 375 260 q 326 391 338 342 q 314 497 314 440 q 343 669 314 592 q 426 803 372 747 q 556 891 481 860 q 725 922 632 922 q 892 891 817 922 q 1022 803 968 860 q 1106 669 1076 747 q 1136 497 1136 592 q 1124 391 1136 440 q 1092 301 1111 342 q 1050 226 1074 260 q 1004 171 1026 193 l 1004 165 l 1157 165 l 1157 0 l 786 0 l 786 147 q 892 292 857 214 q 926 476 926 369 q 913 585 926 535 q 872 670 899 635 q 809 726 846 706 q 725 746 772 746 q 640 726 678 746 q 577 670 603 706 q 538 585 551 635 q 524 476 524 535 q 558 292 524 369 q 663 147 592 214 l 663 0 l 292 0 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 m 106 560 l 93 625 q 124 633 113 628 q 135 650 135 639 q 116 671 135 663 q 44 682 97 679 l 64 764 q 223 737 178 760 q 268 671 268 714 q 220 593 268 619 q 106 560 172 567 z "},"Ὧ":{"ha":1218,"x_min":-33,"x_max":1157,"o":"m 292 0 l 292 165 l 444 165 l 444 171 q 399 226 422 193 q 356 301 375 260 q 326 391 338 342 q 314 497 314 440 q 343 669 314 592 q 426 803 372 747 q 556 891 481 860 q 725 922 632 922 q 892 891 817 922 q 1022 803 968 860 q 1106 669 1076 747 q 1136 497 1136 592 q 1124 391 1136 440 q 1092 301 1111 342 q 1050 226 1074 260 q 1004 171 1026 193 l 1004 165 l 1157 165 l 1157 0 l 786 0 l 786 147 q 892 292 857 214 q 926 476 926 369 q 913 585 926 535 q 872 670 899 635 q 809 726 846 706 q 725 746 772 746 q 640 726 678 746 q 577 670 603 706 q 538 585 551 635 q 524 476 524 535 q 558 292 524 369 q 663 147 592 214 l 663 0 l 292 0 m 203 560 q 88 593 136 567 q 40 671 40 619 q 51 708 40 692 q 85 737 61 725 q 149 755 110 749 q 246 764 189 761 l 265 682 q 193 671 213 679 q 174 650 174 663 q 217 625 174 632 l 203 560 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 z "},"ᾼ":{"ha":1204,"x_min":-8,"x_max":1203,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 1082 -17 q 987 0 1025 -17 q 925 47 949 17 q 892 119 901 76 q 882 215 882 163 l 882 578 l 1088 578 q 1083 478 1085 529 q 1078 378 1081 428 q 1075 285 1076 329 q 1074 207 1074 242 q 1090 161 1074 174 q 1136 149 1107 149 q 1156 151 1144 149 q 1179 157 1168 153 l 1203 6 q 1153 -10 1181 -4 q 1082 -17 1126 -17 z "},"ᾈ":{"ha":1318,"x_min":-10,"x_max":1317,"o":"m 433 458 l 411 375 l 604 375 l 583 458 q 546 603 564 526 q 510 750 528 679 l 504 750 q 470 602 488 678 q 433 458 453 526 m 106 0 l 389 906 l 635 906 l 918 0 l 701 0 l 646 215 l 369 215 l 314 0 l 106 0 m 54 597 l 39 678 q 81 701 63 686 q 100 747 100 715 q 75 789 100 772 q -10 810 50 806 l 14 913 q 195 870 143 910 q 247 769 247 831 q 232 696 247 726 q 190 644 217 665 q 128 613 164 624 q 54 597 93 601 m 1196 -17 q 1101 0 1139 -17 q 1039 47 1063 17 q 1006 119 1015 76 q 996 215 996 163 l 996 578 l 1201 578 q 1197 478 1199 529 q 1192 378 1194 428 q 1189 285 1190 329 q 1188 207 1188 242 q 1204 161 1188 174 q 1250 149 1221 149 q 1270 151 1258 149 q 1293 157 1282 153 l 1317 6 q 1267 -10 1294 -4 q 1196 -17 1240 -17 z "},"ᾉ":{"ha":1296,"x_min":-17,"x_max":1293,"o":"m 411 458 l 389 375 l 582 375 l 561 458 q 524 603 542 526 q 488 750 506 679 l 482 750 q 448 602 465 678 q 411 458 431 526 m 83 0 l 367 906 l 613 906 l 896 0 l 679 0 l 624 215 l 347 215 l 292 0 l 83 0 m 176 597 q 101 613 136 601 q 40 644 67 624 q -1 696 14 665 q -17 769 -17 726 q 35 870 -17 831 q 217 913 88 910 l 240 810 q 155 789 181 806 q 129 747 129 772 q 149 701 129 715 q 192 678 168 686 l 176 597 m 1172 -17 q 1077 0 1115 -17 q 1015 47 1039 17 q 982 119 992 76 q 972 215 972 163 l 972 578 l 1178 578 q 1173 478 1175 529 q 1169 378 1171 428 q 1165 285 1167 329 q 1164 207 1164 242 q 1181 161 1164 174 q 1226 149 1197 149 q 1247 151 1235 149 q 1269 157 1258 153 l 1293 6 q 1244 -10 1271 -4 q 1172 -17 1217 -17 z "},"ᾊ":{"ha":1550,"x_min":-12,"x_max":1547,"o":"m 665 458 l 643 375 l 836 375 l 815 458 q 778 603 796 526 q 742 750 760 679 l 736 750 q 702 602 719 678 q 665 458 685 526 m 338 0 l 621 906 l 867 906 l 1150 0 l 933 0 l 878 215 l 601 215 l 546 0 l 338 0 m 340 611 l 257 906 l 431 931 l 469 635 l 340 611 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 m 1426 -17 q 1331 0 1369 -17 q 1269 47 1293 17 q 1236 119 1246 76 q 1226 215 1226 163 l 1226 578 l 1432 578 q 1427 478 1429 529 q 1423 378 1425 428 q 1419 285 1421 329 q 1418 207 1418 242 q 1435 161 1418 174 q 1481 149 1451 149 q 1501 151 1489 149 q 1524 157 1513 153 l 1547 6 q 1498 -10 1525 -4 q 1426 -17 1471 -17 z "},"ᾋ":{"ha":1549,"x_min":-17,"x_max":1547,"o":"m 664 458 l 642 375 l 835 375 l 814 458 q 776 603 794 526 q 740 750 758 679 l 735 750 q 701 602 718 678 q 664 458 683 526 m 336 0 l 619 906 l 865 906 l 1149 0 l 932 0 l 876 215 l 600 215 l 544 0 l 336 0 m 339 611 l 256 906 l 429 931 l 468 635 l 339 611 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 m 1426 -17 q 1331 0 1369 -17 q 1269 47 1293 17 q 1236 119 1246 76 q 1226 215 1226 163 l 1226 578 l 1432 578 q 1427 478 1429 529 q 1423 378 1425 428 q 1419 285 1421 329 q 1418 207 1418 242 q 1435 161 1418 174 q 1481 149 1451 149 q 1501 151 1489 149 q 1524 157 1513 153 l 1547 6 q 1498 -10 1525 -4 q 1426 -17 1471 -17 z "},"ᾌ":{"ha":1536,"x_min":-12,"x_max":1533,"o":"m 651 458 l 629 375 l 822 375 l 801 458 q 764 603 782 526 q 728 750 746 679 l 722 750 q 688 602 706 678 q 651 458 671 526 m 324 0 l 607 906 l 853 906 l 1136 0 l 919 0 l 864 215 l 588 215 l 532 0 l 324 0 m 258 635 l 299 931 l 472 906 l 388 611 l 258 635 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 m 1413 -17 q 1317 0 1356 -17 q 1256 47 1279 17 q 1222 119 1232 76 q 1213 215 1213 163 l 1213 578 l 1418 578 q 1413 478 1415 529 q 1409 378 1411 428 q 1406 285 1407 329 q 1404 207 1404 242 q 1421 161 1404 174 q 1467 149 1438 149 q 1487 151 1475 149 q 1510 157 1499 153 l 1533 6 q 1484 -10 1511 -4 q 1413 -17 1457 -17 z "},"ᾍ":{"ha":1535,"x_min":-17,"x_max":1533,"o":"m 650 458 l 628 375 l 821 375 l 800 458 q 763 603 781 526 q 726 750 744 679 l 721 750 q 687 602 704 678 q 650 458 669 526 m 322 0 l 606 906 l 851 906 l 1135 0 l 918 0 l 863 215 l 586 215 l 531 0 l 322 0 m 257 635 l 297 931 l 471 906 l 386 611 l 257 635 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 m 1413 -17 q 1317 0 1356 -17 q 1256 47 1279 17 q 1222 119 1232 76 q 1213 215 1213 163 l 1213 578 l 1418 578 q 1413 478 1415 529 q 1409 378 1411 428 q 1406 285 1407 329 q 1404 207 1404 242 q 1421 161 1404 174 q 1467 149 1438 149 q 1487 151 1475 149 q 1510 157 1499 153 l 1533 6 q 1484 -10 1511 -4 q 1413 -17 1457 -17 z "},"ᾎ":{"ha":1351,"x_min":-33,"x_max":1349,"o":"m 467 458 l 444 375 l 638 375 l 617 458 q 579 603 597 526 q 543 750 561 679 l 538 750 q 503 602 521 678 q 467 458 486 526 m 139 0 l 422 906 l 668 906 l 951 0 l 735 0 l 679 215 l 403 215 l 347 0 l 139 0 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 m 106 560 l 93 625 q 124 633 113 628 q 135 650 135 639 q 116 671 135 663 q 44 682 97 679 l 64 764 q 223 737 178 760 q 268 671 268 714 q 220 593 268 619 q 106 560 172 567 m 1228 -17 q 1133 0 1171 -17 q 1071 47 1094 17 q 1038 119 1047 76 q 1028 215 1028 163 l 1028 578 l 1233 578 q 1228 478 1231 529 q 1224 378 1226 428 q 1221 285 1222 329 q 1219 207 1219 242 q 1236 161 1219 174 q 1282 149 1253 149 q 1302 151 1290 149 q 1325 157 1314 153 l 1349 6 q 1299 -10 1326 -4 q 1228 -17 1272 -17 z "},"ᾏ":{"ha":1351,"x_min":-33,"x_max":1349,"o":"m 467 458 l 444 375 l 638 375 l 617 458 q 579 603 597 526 q 543 750 561 679 l 538 750 q 503 602 521 678 q 467 458 486 526 m 139 0 l 422 906 l 668 906 l 951 0 l 735 0 l 679 215 l 403 215 l 347 0 l 139 0 m 203 560 q 88 593 136 567 q 40 671 40 619 q 51 708 40 692 q 85 737 61 725 q 149 755 110 749 q 246 764 189 761 l 265 682 q 193 671 213 679 q 174 650 174 663 q 217 625 174 632 l 203 560 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 m 1228 -17 q 1133 0 1171 -17 q 1071 47 1094 17 q 1038 119 1047 76 q 1028 215 1028 163 l 1028 578 l 1233 578 q 1228 478 1231 529 q 1224 378 1226 428 q 1221 285 1222 329 q 1219 207 1219 242 q 1236 161 1219 174 q 1282 149 1253 149 q 1302 151 1290 149 q 1325 157 1314 153 l 1349 6 q 1299 -10 1326 -4 q 1228 -17 1272 -17 z "},"ῌ":{"ha":1344,"x_min":107,"x_max":1342,"o":"m 107 0 l 107 906 l 311 906 l 311 557 l 624 557 l 624 906 l 829 906 l 829 0 l 624 0 l 624 378 l 311 378 l 311 0 l 107 0 m 1221 -17 q 1126 0 1164 -17 q 1064 47 1088 17 q 1031 119 1040 76 q 1021 215 1021 163 l 1021 578 l 1226 578 q 1222 478 1224 529 q 1217 378 1219 428 q 1214 285 1215 329 q 1213 207 1213 242 q 1229 161 1213 174 q 1275 149 1246 149 q 1295 151 1283 149 q 1318 157 1307 153 l 1342 6 q 1292 -10 1319 -4 q 1221 -17 1265 -17 z "},"ᾘ":{"ha":1571,"x_min":-12,"x_max":1567,"o":"m 333 0 l 333 906 l 538 906 l 538 557 l 850 557 l 850 906 l 1056 906 l 1056 0 l 850 0 l 850 378 l 538 378 l 538 0 l 333 0 m 51 597 l 36 678 q 78 701 60 686 q 97 747 97 715 q 72 789 97 772 q -12 810 47 806 l 11 913 q 192 870 140 910 q 244 769 244 831 q 229 696 244 726 q 188 644 214 665 q 126 613 161 624 q 51 597 90 601 m 1446 -17 q 1351 0 1389 -17 q 1289 47 1313 17 q 1256 119 1265 76 q 1246 215 1246 163 l 1246 578 l 1451 578 q 1447 478 1449 529 q 1442 378 1444 428 q 1439 285 1440 329 q 1438 207 1438 242 q 1454 161 1438 174 q 1500 149 1471 149 q 1520 151 1508 149 q 1543 157 1532 153 l 1567 6 q 1517 -10 1544 -4 q 1446 -17 1490 -17 z "},"ᾙ":{"ha":1571,"x_min":-17,"x_max":1567,"o":"m 333 0 l 333 906 l 538 906 l 538 557 l 850 557 l 850 906 l 1056 906 l 1056 0 l 850 0 l 850 378 l 538 378 l 538 0 l 333 0 m 176 597 q 101 613 136 601 q 40 644 67 624 q -1 696 14 665 q -17 769 -17 726 q 35 870 -17 831 q 217 913 88 910 l 240 810 q 155 789 181 806 q 129 747 129 772 q 149 701 129 715 q 192 678 168 686 l 176 597 m 1446 -17 q 1351 0 1389 -17 q 1289 47 1313 17 q 1256 119 1265 76 q 1246 215 1246 163 l 1246 578 l 1451 578 q 1447 478 1449 529 q 1442 378 1444 428 q 1439 285 1440 329 q 1438 207 1438 242 q 1454 161 1438 174 q 1500 149 1471 149 q 1520 151 1508 149 q 1543 157 1532 153 l 1567 6 q 1517 -10 1544 -4 q 1446 -17 1490 -17 z "},"ᾚ":{"ha":1797,"x_min":-12,"x_max":1794,"o":"m 560 0 l 560 906 l 764 906 l 764 557 l 1076 557 l 1076 906 l 1282 906 l 1282 0 l 1076 0 l 1076 378 l 764 378 l 764 0 l 560 0 m 340 611 l 257 906 l 431 931 l 469 635 l 340 611 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 m 1674 -17 q 1578 0 1617 -17 q 1517 47 1540 17 q 1483 119 1493 76 q 1474 215 1474 163 l 1474 578 l 1679 578 q 1674 478 1676 529 q 1670 378 1672 428 q 1667 285 1668 329 q 1665 207 1665 242 q 1682 161 1665 174 q 1728 149 1699 149 q 1748 151 1736 149 q 1771 157 1760 153 l 1794 6 q 1745 -10 1772 -4 q 1674 -17 1718 -17 z "},"ᾛ":{"ha":1796,"x_min":-17,"x_max":1792,"o":"m 558 0 l 558 906 l 763 906 l 763 557 l 1075 557 l 1075 906 l 1281 906 l 1281 0 l 1075 0 l 1075 378 l 763 378 l 763 0 l 558 0 m 339 611 l 256 906 l 429 931 l 468 635 l 339 611 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 m 1671 -17 q 1576 0 1614 -17 q 1514 47 1538 17 q 1481 119 1490 76 q 1471 215 1471 163 l 1471 578 l 1676 578 q 1672 478 1674 529 q 1667 378 1669 428 q 1664 285 1665 329 q 1663 207 1663 242 q 1679 161 1663 174 q 1725 149 1696 149 q 1745 151 1733 149 q 1768 157 1757 153 l 1792 6 q 1742 -10 1769 -4 q 1671 -17 1715 -17 z "},"ᾜ":{"ha":1783,"x_min":-12,"x_max":1781,"o":"m 546 0 l 546 906 l 750 906 l 750 557 l 1063 557 l 1063 906 l 1268 906 l 1268 0 l 1063 0 l 1063 378 l 750 378 l 750 0 l 546 0 m 258 635 l 299 931 l 472 906 l 388 611 l 258 635 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 m 1660 -17 q 1565 0 1603 -17 q 1503 47 1526 17 q 1469 119 1479 76 q 1460 215 1460 163 l 1460 578 l 1665 578 q 1660 478 1663 529 q 1656 378 1658 428 q 1653 285 1654 329 q 1651 207 1651 242 q 1668 161 1651 174 q 1714 149 1685 149 q 1734 151 1722 149 q 1757 157 1746 153 l 1781 6 q 1731 -10 1758 -4 q 1660 -17 1704 -17 z "},"ᾝ":{"ha":1782,"x_min":-17,"x_max":1778,"o":"m 544 0 l 544 906 l 749 906 l 749 557 l 1061 557 l 1061 906 l 1267 906 l 1267 0 l 1061 0 l 1061 378 l 749 378 l 749 0 l 544 0 m 257 635 l 297 931 l 471 906 l 386 611 l 257 635 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 m 1657 -17 q 1562 0 1600 -17 q 1500 47 1524 17 q 1467 119 1476 76 q 1457 215 1457 163 l 1457 578 l 1663 578 q 1658 478 1660 529 q 1653 378 1656 428 q 1650 285 1651 329 q 1649 207 1649 242 q 1665 161 1649 174 q 1711 149 1682 149 q 1731 151 1719 149 q 1754 157 1743 153 l 1778 6 q 1728 -10 1756 -4 q 1657 -17 1701 -17 z "},"ᾞ":{"ha":1653,"x_min":-33,"x_max":1650,"o":"m 417 0 l 417 906 l 621 906 l 621 557 l 933 557 l 933 906 l 1139 906 l 1139 0 l 933 0 l 933 378 l 621 378 l 621 0 l 417 0 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 m 106 560 l 93 625 q 124 633 113 628 q 135 650 135 639 q 116 671 135 663 q 44 682 97 679 l 64 764 q 223 737 178 760 q 268 671 268 714 q 220 593 268 619 q 106 560 172 567 m 1529 -17 q 1434 0 1472 -17 q 1372 47 1396 17 q 1339 119 1349 76 q 1329 215 1329 163 l 1329 578 l 1535 578 q 1530 478 1532 529 q 1526 378 1528 428 q 1522 285 1524 329 q 1521 207 1521 242 q 1538 161 1521 174 q 1583 149 1554 149 q 1603 151 1592 149 q 1626 157 1615 153 l 1650 6 q 1601 -10 1628 -4 q 1529 -17 1574 -17 z "},"ᾟ":{"ha":1653,"x_min":-33,"x_max":1650,"o":"m 417 0 l 417 906 l 621 906 l 621 557 l 933 557 l 933 906 l 1139 906 l 1139 0 l 933 0 l 933 378 l 621 378 l 621 0 l 417 0 m 203 560 q 88 593 136 567 q 40 671 40 619 q 51 708 40 692 q 85 737 61 725 q 149 755 110 749 q 246 764 189 761 l 265 682 q 193 671 213 679 q 174 650 174 663 q 217 625 174 632 l 203 560 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 m 1529 -17 q 1434 0 1472 -17 q 1372 47 1396 17 q 1339 119 1349 76 q 1329 215 1329 163 l 1329 578 l 1535 578 q 1530 478 1532 529 q 1526 378 1528 428 q 1522 285 1524 329 q 1521 207 1521 242 q 1538 161 1521 174 q 1583 149 1554 149 q 1603 151 1592 149 q 1626 157 1615 153 l 1650 6 q 1601 -10 1628 -4 q 1529 -17 1574 -17 z "},"ῼ":{"ha":1396,"x_min":61,"x_max":1393,"o":"m 61 0 l 61 165 l 214 165 l 214 171 q 168 226 192 193 q 126 301 144 260 q 95 391 107 342 q 83 497 83 440 q 113 669 83 592 q 196 803 142 747 q 326 891 250 860 q 494 922 401 922 q 662 891 586 922 q 792 803 738 860 q 876 669 846 747 q 906 497 906 592 q 893 391 906 440 q 862 301 881 342 q 819 226 843 260 q 774 171 796 193 l 774 165 l 926 165 l 926 0 l 556 0 l 556 147 q 661 292 626 214 q 696 476 696 369 q 682 585 696 535 q 642 670 668 635 q 578 726 615 706 q 494 746 542 746 q 410 726 447 746 q 347 670 372 706 q 307 585 321 635 q 293 476 293 535 q 327 292 293 369 q 432 147 361 214 l 432 0 l 61 0 m 1272 -17 q 1177 0 1215 -17 q 1115 47 1139 17 q 1082 119 1092 76 q 1072 215 1072 163 l 1072 578 l 1278 578 q 1273 478 1275 529 q 1269 378 1271 428 q 1265 285 1267 329 q 1264 207 1264 242 q 1281 161 1264 174 q 1326 149 1297 149 q 1347 151 1335 149 q 1369 157 1358 153 l 1393 6 q 1344 -10 1371 -4 q 1272 -17 1317 -17 z "},"ᾨ":{"ha":1593,"x_min":-12,"x_max":1592,"o":"m 258 0 l 258 165 l 411 165 l 411 171 q 365 226 389 193 q 323 301 342 260 q 292 391 304 342 q 281 497 281 440 q 310 669 281 592 q 393 803 339 747 q 523 891 447 860 q 692 922 599 922 q 859 891 783 922 q 989 803 935 860 q 1073 669 1043 747 q 1103 497 1103 592 q 1090 391 1103 440 q 1059 301 1078 342 q 1017 226 1040 260 q 971 171 993 193 l 971 165 l 1124 165 l 1124 0 l 753 0 l 753 147 q 858 292 824 214 q 893 476 893 369 q 879 585 893 535 q 839 670 865 635 q 776 726 813 706 q 692 746 739 746 q 607 726 644 746 q 544 670 569 706 q 504 585 518 635 q 490 476 490 535 q 524 292 490 369 q 629 147 558 214 l 629 0 l 258 0 m 51 597 l 36 678 q 78 701 60 686 q 97 747 97 715 q 72 789 97 772 q -12 810 47 806 l 11 913 q 192 870 140 910 q 244 769 244 831 q 229 696 244 726 q 188 644 214 665 q 126 613 161 624 q 51 597 90 601 m 1471 -17 q 1376 0 1414 -17 q 1314 47 1338 17 q 1281 119 1290 76 q 1271 215 1271 163 l 1271 578 l 1476 578 q 1472 478 1474 529 q 1467 378 1469 428 q 1464 285 1465 329 q 1463 207 1463 242 q 1479 161 1463 174 q 1525 149 1496 149 q 1545 151 1533 149 q 1568 157 1557 153 l 1592 6 q 1542 -10 1569 -4 q 1471 -17 1515 -17 z "},"ᾩ":{"ha":1568,"x_min":-17,"x_max":1567,"o":"m 233 0 l 233 165 l 386 165 l 386 171 q 340 226 364 193 q 298 301 317 260 q 267 391 279 342 q 256 497 256 440 q 285 669 256 592 q 368 803 314 747 q 498 891 422 860 q 667 922 574 922 q 834 891 758 922 q 964 803 910 860 q 1048 669 1018 747 q 1078 497 1078 592 q 1065 391 1078 440 q 1034 301 1053 342 q 992 226 1015 260 q 946 171 968 193 l 946 165 l 1099 165 l 1099 0 l 728 0 l 728 147 q 833 292 799 214 q 868 476 868 369 q 854 585 868 535 q 814 670 840 635 q 751 726 788 706 q 667 746 714 746 q 582 726 619 746 q 519 670 544 706 q 479 585 493 635 q 465 476 465 535 q 499 292 465 369 q 604 147 533 214 l 604 0 l 233 0 m 176 597 q 101 613 136 601 q 40 644 67 624 q -1 696 14 665 q -17 769 -17 726 q 35 870 -17 831 q 217 913 88 910 l 240 810 q 155 789 181 806 q 129 747 129 772 q 149 701 129 715 q 192 678 168 686 l 176 597 m 1446 -17 q 1351 0 1389 -17 q 1289 47 1313 17 q 1256 119 1265 76 q 1246 215 1246 163 l 1246 578 l 1451 578 q 1447 478 1449 529 q 1442 378 1444 428 q 1439 285 1440 329 q 1438 207 1438 242 q 1454 161 1438 174 q 1500 149 1471 149 q 1520 151 1508 149 q 1543 157 1532 153 l 1567 6 q 1517 -10 1544 -4 q 1446 -17 1490 -17 z "},"ᾪ":{"ha":1824,"x_min":-12,"x_max":1819,"o":"m 489 0 l 489 165 l 642 165 l 642 171 q 596 226 619 193 q 553 301 572 260 q 523 391 535 342 q 511 497 511 440 q 540 669 511 592 q 624 803 569 747 q 753 891 678 860 q 922 922 829 922 q 1090 891 1014 922 q 1219 803 1165 860 q 1303 669 1274 747 q 1333 497 1333 592 q 1321 391 1333 440 q 1290 301 1308 342 q 1247 226 1271 260 q 1201 171 1224 193 l 1201 165 l 1354 165 l 1354 0 l 983 0 l 983 147 q 1089 292 1054 214 q 1124 476 1124 369 q 1110 585 1124 535 q 1069 670 1096 635 q 1006 726 1043 706 q 922 746 969 746 q 838 726 875 746 q 774 670 800 706 q 735 585 749 635 q 721 476 721 535 q 755 292 721 369 q 860 147 789 214 l 860 0 l 489 0 m 340 611 l 257 906 l 431 931 l 469 635 l 340 611 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 m 1699 -17 q 1603 0 1642 -17 q 1542 47 1565 17 q 1508 119 1518 76 q 1499 215 1499 163 l 1499 578 l 1704 578 q 1699 478 1701 529 q 1695 378 1697 428 q 1692 285 1693 329 q 1690 207 1690 242 q 1707 161 1690 174 q 1753 149 1724 149 q 1773 151 1761 149 q 1796 157 1785 153 l 1819 6 q 1770 -10 1797 -4 q 1699 -17 1743 -17 z "},"ᾫ":{"ha":1821,"x_min":-17,"x_max":1819,"o":"m 488 0 l 488 165 l 640 165 l 640 171 q 594 226 618 193 q 552 301 571 260 q 522 391 533 342 q 510 497 510 440 q 539 669 510 592 q 622 803 568 747 q 752 891 676 860 q 921 922 828 922 q 1088 891 1013 922 q 1218 803 1164 860 q 1302 669 1272 747 q 1332 497 1332 592 q 1319 391 1332 440 q 1288 301 1307 342 q 1246 226 1269 260 q 1200 171 1222 193 l 1200 165 l 1353 165 l 1353 0 l 982 0 l 982 147 q 1088 292 1053 214 q 1122 476 1122 369 q 1108 585 1122 535 q 1068 670 1094 635 q 1005 726 1042 706 q 921 746 968 746 q 836 726 874 746 q 773 670 799 706 q 733 585 747 635 q 719 476 719 535 q 753 292 719 369 q 858 147 788 214 l 858 0 l 488 0 m 339 611 l 256 906 l 429 931 l 468 635 l 339 611 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 m 1699 -17 q 1603 0 1642 -17 q 1542 47 1565 17 q 1508 119 1518 76 q 1499 215 1499 163 l 1499 578 l 1704 578 q 1699 478 1701 529 q 1695 378 1697 428 q 1692 285 1693 329 q 1690 207 1690 242 q 1707 161 1690 174 q 1753 149 1724 149 q 1773 151 1761 149 q 1796 157 1785 153 l 1819 6 q 1770 -10 1797 -4 q 1699 -17 1743 -17 z "},"ᾬ":{"ha":1810,"x_min":-12,"x_max":1806,"o":"m 475 0 l 475 165 l 628 165 l 628 171 q 582 226 606 193 q 540 301 558 260 q 509 391 521 342 q 497 497 497 440 q 526 669 497 592 q 610 803 556 747 q 740 891 664 860 q 908 922 815 922 q 1076 891 1000 922 q 1206 803 1151 860 q 1290 669 1260 747 q 1319 497 1319 592 q 1307 391 1319 440 q 1276 301 1294 342 q 1233 226 1257 260 q 1188 171 1210 193 l 1188 165 l 1340 165 l 1340 0 l 969 0 l 969 147 q 1075 292 1040 214 q 1110 476 1110 369 q 1096 585 1110 535 q 1056 670 1082 635 q 992 726 1029 706 q 908 746 956 746 q 824 726 861 746 q 760 670 786 706 q 721 585 735 635 q 707 476 707 535 q 741 292 707 369 q 846 147 775 214 l 846 0 l 475 0 m 258 635 l 299 931 l 472 906 l 388 611 l 258 635 m 51 607 l 35 688 q 68 713 54 699 q 82 751 82 726 q 60 795 82 776 q -12 819 39 814 l 11 922 q 167 878 117 918 q 217 772 217 839 q 202 707 217 735 q 164 658 188 679 q 110 625 140 638 q 51 607 81 613 m 1685 -17 q 1590 0 1628 -17 q 1528 47 1551 17 q 1494 119 1504 76 q 1485 215 1485 163 l 1485 578 l 1690 578 q 1685 478 1688 529 q 1681 378 1683 428 q 1678 285 1679 329 q 1676 207 1676 242 q 1693 161 1676 174 q 1739 149 1710 149 q 1759 151 1747 149 q 1782 157 1771 153 l 1806 6 q 1756 -10 1783 -4 q 1685 -17 1729 -17 z "},"ᾭ":{"ha":1808,"x_min":-17,"x_max":1806,"o":"m 474 0 l 474 165 l 626 165 l 626 171 q 581 226 604 193 q 538 301 557 260 q 508 391 519 342 q 496 497 496 440 q 525 669 496 592 q 608 803 554 747 q 738 891 663 860 q 907 922 814 922 q 1074 891 999 922 q 1204 803 1150 860 q 1288 669 1258 747 q 1318 497 1318 592 q 1306 391 1318 440 q 1274 301 1293 342 q 1232 226 1256 260 q 1186 171 1208 193 l 1186 165 l 1339 165 l 1339 0 l 968 0 l 968 147 q 1074 292 1039 214 q 1108 476 1108 369 q 1094 585 1108 535 q 1054 670 1081 635 q 991 726 1028 706 q 907 746 954 746 q 822 726 860 746 q 759 670 785 706 q 719 585 733 635 q 706 476 706 535 q 740 292 706 369 q 844 147 774 214 l 844 0 l 474 0 m 257 635 l 297 931 l 471 906 l 386 611 l 257 635 m 149 607 q 90 625 119 613 q 36 658 60 638 q -2 707 13 679 q -17 772 -17 735 q 33 878 -17 839 q 189 922 83 918 l 213 819 q 140 795 161 814 q 118 751 118 776 q 132 713 118 726 q 165 688 146 699 l 149 607 m 1685 -17 q 1590 0 1628 -17 q 1528 47 1551 17 q 1494 119 1504 76 q 1485 215 1485 163 l 1485 578 l 1690 578 q 1685 478 1688 529 q 1681 378 1683 428 q 1678 285 1679 329 q 1676 207 1676 242 q 1693 161 1676 174 q 1739 149 1710 149 q 1759 151 1747 149 q 1782 157 1771 153 l 1806 6 q 1756 -10 1783 -4 q 1685 -17 1729 -17 z "},"ᾮ":{"ha":1628,"x_min":-33,"x_max":1625,"o":"m 292 0 l 292 165 l 444 165 l 444 171 q 399 226 422 193 q 356 301 375 260 q 326 391 338 342 q 314 497 314 440 q 343 669 314 592 q 426 803 372 747 q 556 891 481 860 q 725 922 632 922 q 892 891 817 922 q 1022 803 968 860 q 1106 669 1076 747 q 1136 497 1136 592 q 1124 391 1136 440 q 1092 301 1111 342 q 1050 226 1074 260 q 1004 171 1026 193 l 1004 165 l 1157 165 l 1157 0 l 786 0 l 786 147 q 892 292 857 214 q 926 476 926 369 q 913 585 926 535 q 872 670 899 635 q 809 726 846 706 q 725 746 772 746 q 640 726 678 746 q 577 670 603 706 q 538 585 551 635 q 524 476 524 535 q 558 292 524 369 q 663 147 592 214 l 663 0 l 292 0 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 m 106 560 l 93 625 q 124 633 113 628 q 135 650 135 639 q 116 671 135 663 q 44 682 97 679 l 64 764 q 223 737 178 760 q 268 671 268 714 q 220 593 268 619 q 106 560 172 567 m 1504 -17 q 1409 0 1447 -17 q 1347 47 1371 17 q 1314 119 1324 76 q 1304 215 1304 163 l 1304 578 l 1510 578 q 1505 478 1507 529 q 1501 378 1503 428 q 1497 285 1499 329 q 1496 207 1496 242 q 1513 161 1496 174 q 1558 149 1529 149 q 1578 151 1567 149 q 1601 157 1590 153 l 1625 6 q 1576 -10 1603 -4 q 1504 -17 1549 -17 z "},"ᾯ":{"ha":1628,"x_min":-33,"x_max":1625,"o":"m 292 0 l 292 165 l 444 165 l 444 171 q 399 226 422 193 q 356 301 375 260 q 326 391 338 342 q 314 497 314 440 q 343 669 314 592 q 426 803 372 747 q 556 891 481 860 q 725 922 632 922 q 892 891 817 922 q 1022 803 968 860 q 1106 669 1076 747 q 1136 497 1136 592 q 1124 391 1136 440 q 1092 301 1111 342 q 1050 226 1074 260 q 1004 171 1026 193 l 1004 165 l 1157 165 l 1157 0 l 786 0 l 786 147 q 892 292 857 214 q 926 476 926 369 q 913 585 926 535 q 872 670 899 635 q 809 726 846 706 q 725 746 772 746 q 640 726 678 746 q 577 670 603 706 q 538 585 551 635 q 524 476 524 535 q 558 292 524 369 q 663 147 592 214 l 663 0 l 292 0 m 203 560 q 88 593 136 567 q 40 671 40 619 q 51 708 40 692 q 85 737 61 725 q 149 755 110 749 q 246 764 189 761 l 265 682 q 193 671 213 679 q 174 650 174 663 q 217 625 174 632 l 203 560 m -33 808 q 5 904 -24 879 q 83 929 33 929 q 127 922 108 929 q 161 906 146 915 q 190 890 176 897 q 218 883 204 883 q 242 891 233 883 q 254 922 250 899 l 343 910 q 305 813 333 838 q 226 789 276 789 q 183 796 201 789 q 149 811 164 803 q 119 826 133 819 q 90 833 104 833 q 67 826 75 833 q 56 796 58 818 l -33 808 m 1504 -17 q 1409 0 1447 -17 q 1347 47 1371 17 q 1314 119 1324 76 q 1304 215 1304 163 l 1304 578 l 1510 578 q 1505 478 1507 529 q 1501 378 1503 428 q 1497 285 1499 329 q 1496 207 1496 242 q 1513 161 1496 174 q 1558 149 1529 149 q 1578 151 1567 149 q 1601 157 1590 153 l 1625 6 q 1576 -10 1603 -4 q 1504 -17 1549 -17 z "},"ἀ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 347 803 l 331 883 q 375 899 357 889 q 393 932 393 910 q 368 972 393 957 q 282 990 343 986 l 294 1115 q 410 1101 363 1114 q 486 1066 457 1088 q 528 1014 515 1044 q 542 947 542 983 q 526 885 542 911 q 483 842 510 860 q 422 815 457 825 q 347 803 386 806 z "},"ἁ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 467 789 q 392 801 428 792 q 331 828 357 811 q 288 872 304 846 q 272 933 272 897 q 285 996 272 968 q 328 1044 299 1024 q 404 1076 357 1064 q 519 1090 451 1088 l 532 976 q 446 958 471 972 q 421 918 421 943 q 439 885 421 896 q 483 869 457 875 l 467 789 z "},"ὰ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 393 794 l 142 1013 l 279 1147 l 493 894 l 393 794 z "},"ά":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 421 794 l 321 894 l 535 1147 l 672 1013 l 421 794 z "},"ἂ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 203 799 l 186 879 q 220 893 206 883 q 235 925 235 903 q 213 958 235 946 q 138 974 190 971 l 147 1088 q 315 1047 261 1085 q 369 947 369 1010 q 355 884 369 910 q 316 841 340 858 q 262 813 292 824 q 203 799 232 803 m 503 774 l 406 1069 l 571 1101 l 615 796 l 503 774 z "},"ἃ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 304 799 q 244 813 274 803 q 190 841 214 824 q 151 884 165 858 q 136 947 136 910 q 190 1047 136 1010 q 358 1088 244 1085 l 368 974 q 293 958 315 971 q 271 925 271 946 q 285 893 271 903 q 319 879 300 883 l 304 799 m 500 774 l 403 1069 l 568 1101 l 614 796 l 500 774 z "},"ἄ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 203 799 l 186 879 q 220 893 206 883 q 235 925 235 903 q 213 958 235 946 q 138 974 190 971 l 147 1088 q 315 1047 261 1085 q 369 947 369 1010 q 355 884 369 910 q 316 841 340 858 q 262 813 292 824 q 203 799 232 803 m 419 796 l 467 1101 l 631 1069 l 533 774 l 419 796 z "},"ἅ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 318 799 q 258 813 288 803 q 203 841 228 824 q 165 884 179 858 q 150 947 150 910 q 204 1047 150 1010 q 372 1088 258 1085 l 382 974 q 307 958 329 971 q 285 925 285 946 q 299 893 285 903 q 333 879 314 883 l 318 799 m 417 796 l 464 1101 l 629 1069 l 531 774 l 417 796 z "},"ἆ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 190 1024 q 233 1140 199 1103 q 326 1178 268 1178 q 376 1169 356 1178 q 415 1149 397 1160 q 447 1128 432 1138 q 476 1119 461 1119 q 519 1172 508 1119 l 624 1163 q 581 1046 615 1083 q 488 1008 546 1008 q 438 1017 458 1008 q 399 1038 417 1026 q 367 1058 382 1049 q 338 1067 353 1067 q 294 1014 306 1067 l 190 1024 m 358 782 l 346 847 q 376 856 365 850 q 388 872 388 861 q 369 892 388 885 q 297 904 350 900 l 315 986 q 475 958 429 982 q 521 893 521 935 q 473 815 521 842 q 358 782 425 789 z "},"ἇ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 456 782 q 341 815 389 789 q 293 893 293 842 q 303 931 293 914 q 338 958 314 947 q 402 976 363 969 q 499 986 442 983 l 517 904 q 445 892 464 900 q 426 872 426 885 q 438 856 426 861 q 468 847 449 850 l 456 782 m 190 1024 q 233 1140 199 1103 q 326 1178 268 1178 q 376 1169 356 1178 q 415 1149 397 1160 q 447 1128 432 1138 q 476 1119 461 1119 q 519 1172 508 1119 l 624 1163 q 581 1046 615 1083 q 488 1008 546 1008 q 438 1017 458 1008 q 399 1038 417 1026 q 367 1058 382 1049 q 338 1067 353 1067 q 294 1014 306 1067 l 190 1024 z "},"ᾰ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 407 794 q 304 811 347 794 q 232 858 261 828 q 188 927 203 888 q 172 1013 174 967 l 289 1032 q 324 955 296 988 q 407 922 351 922 q 490 955 463 922 q 525 1032 518 988 l 642 1013 q 626 927 640 967 q 583 858 611 888 q 510 811 554 828 q 407 794 467 794 z "},"ᾱ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 201 822 l 201 951 l 613 951 l 613 822 l 201 822 z "},"ᾶ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 499 796 q 440 810 465 796 q 392 840 414 824 q 353 871 371 857 q 319 885 336 885 q 287 867 299 885 q 271 808 275 849 l 143 815 q 190 975 146 924 q 315 1026 235 1026 q 374 1013 349 1026 q 422 982 400 999 q 460 951 443 965 q 494 938 478 938 q 543 1014 535 938 l 671 1007 q 624 847 668 899 q 499 796 579 796 z "},"ἐ":{"ha":654,"x_min":50,"x_max":626,"o":"m 372 -17 q 247 -3 306 -17 q 144 36 188 10 q 75 103 100 63 q 50 196 50 143 q 85 305 50 267 q 183 360 121 343 l 183 365 q 105 424 131 382 q 79 508 79 467 q 103 597 79 560 q 169 658 128 635 q 263 694 210 682 q 375 706 317 706 q 499 687 438 706 q 613 635 561 668 l 538 504 q 386 550 468 550 q 308 531 338 550 q 279 481 279 513 q 376 419 279 419 q 424 421 399 419 q 472 425 449 422 l 472 279 q 413 283 443 282 q 354 285 382 285 q 275 269 300 285 q 250 217 250 253 q 285 160 250 181 q 392 139 321 139 q 466 150 425 139 q 547 192 507 161 l 626 63 q 499 -1 560 14 q 372 -17 439 -17 m 301 789 l 285 869 q 329 885 311 875 q 347 918 347 896 q 322 958 347 943 q 236 976 297 972 l 249 1101 q 364 1087 317 1100 q 440 1052 411 1074 q 483 1000 469 1031 q 496 933 496 969 q 480 872 496 897 q 438 828 464 846 q 376 801 411 811 q 301 789 340 792 z "},"ἑ":{"ha":654,"x_min":50,"x_max":626,"o":"m 372 -17 q 247 -3 306 -17 q 144 36 188 10 q 75 103 100 63 q 50 196 50 143 q 85 305 50 267 q 183 360 121 343 l 183 365 q 105 424 131 382 q 79 508 79 467 q 103 597 79 560 q 169 658 128 635 q 263 694 210 682 q 375 706 317 706 q 499 687 438 706 q 613 635 561 668 l 538 504 q 386 550 468 550 q 308 531 338 550 q 279 481 279 513 q 376 419 279 419 q 424 421 399 419 q 472 425 449 422 l 472 279 q 413 283 443 282 q 354 285 382 285 q 275 269 300 285 q 250 217 250 253 q 285 160 250 181 q 392 139 321 139 q 466 150 425 139 q 547 192 507 161 l 626 63 q 499 -1 560 14 q 372 -17 439 -17 m 421 789 q 347 801 382 792 q 285 828 311 811 q 242 872 258 846 q 226 933 226 897 q 240 996 226 968 q 282 1044 253 1024 q 358 1076 311 1064 q 474 1090 406 1088 l 486 976 q 400 958 425 972 q 375 918 375 943 q 393 885 375 896 q 438 869 411 875 l 421 789 z "},"ὲ":{"ha":654,"x_min":50,"x_max":626,"o":"m 372 -17 q 247 -3 306 -17 q 144 36 188 10 q 75 103 100 63 q 50 196 50 143 q 85 305 50 267 q 183 360 121 343 l 183 365 q 105 424 131 382 q 79 508 79 467 q 103 597 79 560 q 169 658 128 635 q 263 694 210 682 q 375 706 317 706 q 499 687 438 706 q 613 635 561 668 l 538 504 q 386 550 468 550 q 308 531 338 550 q 279 481 279 513 q 376 419 279 419 q 424 421 399 419 q 472 425 449 422 l 472 279 q 413 283 443 282 q 354 285 382 285 q 275 269 300 285 q 250 217 250 253 q 285 160 250 181 q 392 139 321 139 q 466 150 425 139 q 547 192 507 161 l 626 63 q 499 -1 560 14 q 372 -17 439 -17 m 347 794 l 96 1013 l 233 1147 l 447 894 l 347 794 z "},"έ":{"ha":654,"x_min":50,"x_max":626,"o":"m 372 -17 q 247 -3 306 -17 q 144 36 188 10 q 75 103 100 63 q 50 196 50 143 q 85 305 50 267 q 183 360 121 343 l 183 365 q 105 424 131 382 q 79 508 79 467 q 103 597 79 560 q 169 658 128 635 q 263 694 210 682 q 375 706 317 706 q 499 687 438 706 q 613 635 561 668 l 538 504 q 386 550 468 550 q 308 531 338 550 q 279 481 279 513 q 376 419 279 419 q 424 421 399 419 q 472 425 449 422 l 472 279 q 413 283 443 282 q 354 285 382 285 q 275 269 300 285 q 250 217 250 253 q 285 160 250 181 q 392 139 321 139 q 466 150 425 139 q 547 192 507 161 l 626 63 q 499 -1 560 14 q 372 -17 439 -17 m 375 794 l 275 894 l 489 1147 l 626 1013 l 375 794 z "},"ἒ":{"ha":654,"x_min":50,"x_max":626,"o":"m 372 -17 q 247 -3 306 -17 q 144 36 188 10 q 75 103 100 63 q 50 196 50 143 q 85 305 50 267 q 183 360 121 343 l 183 365 q 105 424 131 382 q 79 508 79 467 q 103 597 79 560 q 169 658 128 635 q 263 694 210 682 q 375 706 317 706 q 499 687 438 706 q 613 635 561 668 l 538 504 q 386 550 468 550 q 308 531 338 550 q 279 481 279 513 q 376 419 279 419 q 424 421 399 419 q 472 425 449 422 l 472 279 q 413 283 443 282 q 354 285 382 285 q 275 269 300 285 q 250 217 250 253 q 285 160 250 181 q 392 139 321 139 q 466 150 425 139 q 547 192 507 161 l 626 63 q 499 -1 560 14 q 372 -17 439 -17 m 157 799 l 140 879 q 174 893 160 883 q 189 925 189 903 q 167 958 189 946 q 92 974 144 971 l 101 1088 q 269 1047 215 1085 q 324 947 324 1010 q 309 884 324 910 q 270 841 294 858 q 216 813 246 824 q 157 799 186 803 m 457 774 l 360 1069 l 525 1101 l 569 796 l 457 774 z "},"ἓ":{"ha":654,"x_min":50,"x_max":626,"o":"m 372 -17 q 247 -3 306 -17 q 144 36 188 10 q 75 103 100 63 q 50 196 50 143 q 85 305 50 267 q 183 360 121 343 l 183 365 q 105 424 131 382 q 79 508 79 467 q 103 597 79 560 q 169 658 128 635 q 263 694 210 682 q 375 706 317 706 q 499 687 438 706 q 613 635 561 668 l 538 504 q 386 550 468 550 q 308 531 338 550 q 279 481 279 513 q 376 419 279 419 q 424 421 399 419 q 472 425 449 422 l 472 279 q 413 283 443 282 q 354 285 382 285 q 275 269 300 285 q 250 217 250 253 q 285 160 250 181 q 392 139 321 139 q 466 150 425 139 q 547 192 507 161 l 626 63 q 499 -1 560 14 q 372 -17 439 -17 m 258 799 q 198 813 228 803 q 144 841 168 824 q 105 884 119 858 q 90 947 90 910 q 144 1047 90 1010 q 313 1088 199 1085 l 322 974 q 247 958 269 971 q 225 925 225 946 q 240 893 225 903 q 274 879 254 883 l 258 799 m 454 774 l 357 1069 l 522 1101 l 568 796 l 454 774 z "},"ἔ":{"ha":654,"x_min":50,"x_max":626,"o":"m 372 -17 q 247 -3 306 -17 q 144 36 188 10 q 75 103 100 63 q 50 196 50 143 q 85 305 50 267 q 183 360 121 343 l 183 365 q 105 424 131 382 q 79 508 79 467 q 103 597 79 560 q 169 658 128 635 q 263 694 210 682 q 375 706 317 706 q 499 687 438 706 q 613 635 561 668 l 538 504 q 386 550 468 550 q 308 531 338 550 q 279 481 279 513 q 376 419 279 419 q 424 421 399 419 q 472 425 449 422 l 472 279 q 413 283 443 282 q 354 285 382 285 q 275 269 300 285 q 250 217 250 253 q 285 160 250 181 q 392 139 321 139 q 466 150 425 139 q 547 192 507 161 l 626 63 q 499 -1 560 14 q 372 -17 439 -17 m 157 799 l 140 879 q 174 893 160 883 q 189 925 189 903 q 167 958 189 946 q 92 974 144 971 l 101 1088 q 269 1047 215 1085 q 324 947 324 1010 q 309 884 324 910 q 270 841 294 858 q 216 813 246 824 q 157 799 186 803 m 374 796 l 421 1101 l 585 1069 l 488 774 l 374 796 z "},"ἕ":{"ha":654,"x_min":50,"x_max":626,"o":"m 372 -17 q 247 -3 306 -17 q 144 36 188 10 q 75 103 100 63 q 50 196 50 143 q 85 305 50 267 q 183 360 121 343 l 183 365 q 105 424 131 382 q 79 508 79 467 q 103 597 79 560 q 169 658 128 635 q 263 694 210 682 q 375 706 317 706 q 499 687 438 706 q 613 635 561 668 l 538 504 q 386 550 468 550 q 308 531 338 550 q 279 481 279 513 q 376 419 279 419 q 424 421 399 419 q 472 425 449 422 l 472 279 q 413 283 443 282 q 354 285 382 285 q 275 269 300 285 q 250 217 250 253 q 285 160 250 181 q 392 139 321 139 q 466 150 425 139 q 547 192 507 161 l 626 63 q 499 -1 560 14 q 372 -17 439 -17 m 272 799 q 212 813 242 803 q 158 841 182 824 q 119 884 133 858 q 104 947 104 910 q 158 1047 104 1010 q 326 1088 213 1085 l 336 974 q 261 958 283 971 q 239 925 239 946 q 253 893 239 903 q 288 879 268 883 l 272 799 m 371 796 l 418 1101 l 583 1069 l 485 774 l 371 796 z "},"ἠ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 365 789 l 349 869 q 393 885 375 875 q 411 918 411 896 q 386 958 411 943 q 300 976 361 972 l 313 1101 q 428 1087 381 1100 q 504 1052 475 1074 q 547 1000 533 1031 q 560 933 560 969 q 544 872 560 897 q 501 828 528 846 q 440 801 475 811 q 365 789 404 792 z "},"ἡ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 485 789 q 410 801 446 792 q 349 828 375 811 q 306 872 322 846 q 290 933 290 897 q 303 996 290 968 q 346 1044 317 1024 q 422 1076 375 1064 q 538 1090 469 1088 l 550 976 q 464 958 489 972 q 439 918 439 943 q 457 885 439 896 q 501 869 475 875 l 485 789 z "},"ὴ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 411 794 l 160 1013 l 297 1147 l 511 894 l 411 794 z "},"ή":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 439 794 l 339 894 l 553 1147 l 690 1013 l 439 794 z "},"ἢ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 221 799 l 204 879 q 238 893 224 883 q 253 925 253 903 q 231 958 253 946 q 156 974 208 971 l 165 1088 q 333 1047 279 1085 q 388 947 388 1010 q 373 884 388 910 q 334 841 358 858 q 280 813 310 824 q 221 799 250 803 m 521 774 l 424 1069 l 589 1101 l 633 796 l 521 774 z "},"ἣ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 322 799 q 262 813 292 803 q 208 841 232 824 q 169 884 183 858 q 154 947 154 910 q 208 1047 154 1010 q 376 1088 263 1085 l 386 974 q 311 958 333 971 q 289 925 289 946 q 303 893 289 903 q 338 879 318 883 l 322 799 m 518 774 l 421 1069 l 586 1101 l 632 796 l 518 774 z "},"ἤ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 221 799 l 204 879 q 238 893 224 883 q 253 925 253 903 q 231 958 253 946 q 156 974 208 971 l 165 1088 q 333 1047 279 1085 q 388 947 388 1010 q 373 884 388 910 q 334 841 358 858 q 280 813 310 824 q 221 799 250 803 m 438 796 l 485 1101 l 649 1069 l 551 774 l 438 796 z "},"ἥ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 336 799 q 276 813 306 803 q 222 841 246 824 q 183 884 197 858 q 168 947 168 910 q 222 1047 168 1010 q 390 1088 276 1085 l 400 974 q 325 958 347 971 q 303 925 303 946 q 317 893 303 903 q 351 879 332 883 l 336 799 m 435 796 l 482 1101 l 647 1069 l 549 774 l 435 796 z "},"ἦ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 208 1024 q 251 1140 217 1103 q 344 1178 286 1178 q 394 1169 374 1178 q 433 1149 415 1160 q 465 1128 450 1138 q 494 1119 479 1119 q 538 1172 526 1119 l 642 1163 q 599 1046 633 1083 q 506 1008 564 1008 q 456 1017 476 1008 q 417 1038 435 1026 q 385 1058 400 1049 q 356 1067 371 1067 q 313 1014 324 1067 l 208 1024 m 376 782 l 364 847 q 394 856 383 850 q 406 872 406 861 q 387 892 406 885 q 315 904 368 900 l 333 986 q 493 958 447 982 q 539 893 539 935 q 491 815 539 842 q 376 782 443 789 z "},"ἧ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 474 782 q 359 815 407 789 q 311 893 311 842 q 322 931 311 914 q 356 958 332 947 q 420 976 381 969 q 517 986 460 983 l 535 904 q 463 892 482 900 q 444 872 444 885 q 456 856 444 861 q 486 847 467 850 l 474 782 m 208 1024 q 251 1140 217 1103 q 344 1178 286 1178 q 394 1169 374 1178 q 433 1149 415 1160 q 465 1128 450 1138 q 494 1119 479 1119 q 538 1172 526 1119 l 642 1163 q 599 1046 633 1083 q 506 1008 564 1008 q 456 1017 476 1008 q 417 1038 435 1026 q 385 1058 400 1049 q 356 1067 371 1067 q 313 1014 324 1067 l 208 1024 z "},"ῆ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 517 796 q 458 810 483 796 q 410 840 432 824 q 372 871 389 857 q 338 885 354 885 q 305 867 317 885 q 289 808 293 849 l 161 815 q 208 975 164 924 q 333 1026 253 1026 q 392 1013 367 1026 q 440 982 418 999 q 478 951 461 965 q 513 938 496 938 q 561 1014 553 938 l 689 1007 q 642 847 686 899 q 517 796 597 796 z "},"ἰ":{"ha":418,"x_min":67,"x_max":407,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 132 803 l 115 883 q 160 899 142 889 q 178 932 178 910 q 153 972 178 957 q 67 990 128 986 l 79 1115 q 194 1101 147 1114 q 271 1066 242 1088 q 313 1014 300 1044 q 326 947 326 983 q 310 885 326 911 q 268 842 294 860 q 206 815 242 825 q 132 803 171 806 z "},"ἱ":{"ha":418,"x_min":57,"x_max":407,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 251 789 q 177 801 213 792 q 115 828 142 811 q 73 872 89 846 q 57 933 57 897 q 70 996 57 968 q 113 1044 83 1024 q 189 1076 142 1064 q 304 1090 236 1088 l 317 976 q 231 958 256 972 q 206 918 206 943 q 224 885 206 896 q 268 869 242 875 l 251 789 z "},"ὶ":{"ha":418,"x_min":-74,"x_max":407,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 178 794 l -74 1013 l 64 1147 l 278 894 l 178 794 z "},"ί":{"ha":418,"x_min":90,"x_max":457,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 206 794 l 106 894 l 319 1147 l 457 1013 l 206 794 z "},"ἲ":{"ha":418,"x_min":-78,"x_max":407,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m -12 799 l -29 879 q 5 893 -10 883 q 19 925 19 903 q -3 958 19 946 q -78 974 -25 971 l -68 1088 q 100 1047 46 1085 q 154 947 154 1010 q 140 884 154 910 q 101 841 125 858 q 47 813 76 824 q -12 799 17 803 m 288 774 l 190 1069 l 356 1101 l 400 796 l 288 774 z "},"ἳ":{"ha":418,"x_min":-79,"x_max":407,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 89 799 q 28 813 58 803 q -26 841 -1 824 q -65 884 -50 858 q -79 947 -79 910 q -25 1047 -79 1010 q 143 1088 29 1085 l 153 974 q 78 958 100 971 q 56 925 56 946 q 70 893 56 903 q 104 879 85 883 l 89 799 m 285 774 l 188 1069 l 353 1101 l 399 796 l 285 774 z "},"ἴ":{"ha":418,"x_min":-78,"x_max":415,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m -12 799 l -29 879 q 5 893 -10 883 q 19 925 19 903 q -3 958 19 946 q -78 974 -25 971 l -68 1088 q 100 1047 46 1085 q 154 947 154 1010 q 140 884 154 910 q 101 841 125 858 q 47 813 76 824 q -12 799 17 803 m 204 796 l 251 1101 l 415 1069 l 318 774 l 204 796 z "},"ἵ":{"ha":418,"x_min":-65,"x_max":414,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 103 799 q 42 813 72 803 q -12 841 13 824 q -51 884 -36 858 q -65 947 -65 910 q -11 1047 -65 1010 q 157 1088 43 1085 l 167 974 q 92 958 114 971 q 69 925 69 946 q 84 893 69 903 q 118 879 99 883 l 103 799 m 201 796 l 249 1101 l 414 1069 l 315 774 l 201 796 z "},"ἶ":{"ha":418,"x_min":-25,"x_max":408,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m -25 1024 q 18 1140 -17 1103 q 111 1178 53 1178 q 161 1169 140 1178 q 199 1149 182 1160 q 231 1128 217 1138 q 261 1119 246 1119 q 304 1172 293 1119 l 408 1163 q 365 1046 400 1083 q 272 1008 331 1008 q 222 1017 243 1008 q 184 1038 201 1026 q 152 1058 167 1049 q 122 1067 138 1067 q 79 1014 90 1067 l -25 1024 m 143 782 l 131 847 q 161 856 150 850 q 172 872 172 861 q 153 892 172 885 q 82 904 135 900 l 100 986 q 260 958 214 982 q 306 893 306 935 q 258 815 306 842 q 143 782 210 789 z "},"ἷ":{"ha":418,"x_min":-25,"x_max":408,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 240 782 q 126 815 174 789 q 78 893 78 842 q 88 931 78 914 q 123 958 99 947 q 187 976 147 969 q 283 986 226 983 l 301 904 q 230 892 249 900 q 211 872 211 885 q 222 856 211 861 q 253 847 233 850 l 240 782 m -25 1024 q 18 1140 -17 1103 q 111 1178 53 1178 q 161 1169 140 1178 q 199 1149 182 1160 q 231 1128 217 1138 q 261 1119 246 1119 q 304 1172 293 1119 l 408 1163 q 365 1046 400 1083 q 272 1008 331 1008 q 222 1017 243 1008 q 184 1038 201 1026 q 152 1058 167 1049 q 122 1067 138 1067 q 79 1014 90 1067 l -25 1024 z "},"ῐ":{"ha":418,"x_min":-43,"x_max":426,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 192 794 q 89 811 132 794 q 17 858 46 828 q -27 927 -12 888 q -43 1013 -42 967 l 74 1032 q 108 955 81 988 q 192 922 136 922 q 275 955 247 922 q 310 1032 303 988 l 426 1013 q 410 927 425 967 q 367 858 396 888 q 295 811 339 828 q 192 794 251 794 z "},"ῑ":{"ha":418,"x_min":-14,"x_max":407,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m -14 822 l -14 951 l 397 951 l 397 822 l -14 822 z "},"ῖ":{"ha":418,"x_min":-72,"x_max":456,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 283 796 q 224 810 250 796 q 177 840 199 824 q 138 871 156 857 q 104 885 121 885 q 72 867 83 885 q 56 808 60 849 l -72 815 q -25 975 -69 924 q 100 1026 19 1026 q 159 1013 133 1026 q 206 982 185 999 q 245 951 228 965 q 279 938 263 938 q 328 1014 319 938 l 456 1007 q 408 847 453 899 q 283 796 364 796 z "},"ῒ":{"ha":418,"x_min":-71,"x_max":454,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 7 811 q -48 833 -25 811 q -71 890 -71 854 q -48 947 -71 926 q 7 968 -25 968 q 63 947 40 968 q 86 890 86 926 q 63 833 86 854 q 7 811 40 811 m 172 788 l 71 1083 l 214 1113 l 263 807 l 172 788 m 376 811 q 320 833 343 811 q 297 890 297 854 q 320 947 297 926 q 376 968 343 968 q 431 947 408 968 q 454 890 454 926 q 431 833 454 854 q 376 811 408 811 z "},"ΐ":{"ha":418,"x_min":-71,"x_max":454,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m 121 807 l 171 1113 l 314 1083 l 211 788 l 121 807 m 7 811 q -48 833 -25 811 q -71 890 -71 854 q -48 947 -71 926 q 7 968 -25 968 q 63 947 40 968 q 86 890 86 926 q 63 833 86 854 q 7 811 40 811 m 376 811 q 320 833 343 811 q 297 890 297 854 q 320 947 297 926 q 376 968 343 968 q 431 947 408 968 q 454 890 454 926 q 431 833 454 854 q 376 811 408 811 z "},"ῗ":{"ha":418,"x_min":-46,"x_max":429,"o":"m 286 -17 q 191 0 229 -17 q 131 47 153 17 q 99 119 108 76 q 90 215 90 163 l 90 689 l 296 689 q 292 562 294 628 q 287 431 289 496 q 283 308 285 367 q 282 207 282 250 q 297 161 282 174 q 339 149 311 149 q 360 151 347 149 q 383 157 372 153 l 407 6 q 358 -10 385 -4 q 286 -17 331 -17 m -31 1010 q 11 1126 -24 1088 q 99 1165 46 1165 q 157 1156 132 1165 q 201 1135 182 1146 q 238 1114 221 1124 q 274 1104 254 1104 q 325 1158 313 1104 l 414 1149 q 372 1033 407 1072 q 285 993 338 993 q 226 1003 251 993 q 182 1024 201 1013 q 145 1044 163 1035 q 110 1054 128 1054 q 78 1042 90 1054 q 58 1000 65 1029 l -31 1010 m 40 793 q -22 817 3 793 q -46 878 -46 842 q -22 939 -46 914 q 40 964 3 964 q 102 939 78 964 q 126 878 126 914 q 102 817 126 842 q 40 793 78 793 m 343 793 q 281 817 306 793 q 257 878 257 842 q 281 939 257 914 q 343 964 306 964 q 405 939 381 964 q 429 878 429 914 q 405 817 429 842 q 343 793 381 793 z "},"ὀ":{"ha":768,"x_min":50,"x_max":718,"o":"m 383 -17 q 258 8 318 -17 q 151 78 197 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 151 611 106 565 q 258 681 197 657 q 383 706 318 706 q 510 681 450 706 q 617 611 571 657 q 690 498 663 565 q 718 344 718 431 q 690 191 718 258 q 617 78 663 124 q 510 8 571 32 q 383 -17 450 -17 m 383 149 q 478 201 449 149 q 508 344 508 254 q 478 488 508 435 q 383 540 449 540 q 290 488 319 540 q 260 344 260 435 q 290 201 260 254 q 383 149 319 149 m 328 803 l 311 883 q 356 899 338 889 q 374 932 374 910 q 349 972 374 957 q 263 990 324 986 l 275 1115 q 390 1101 343 1114 q 467 1066 438 1088 q 509 1014 496 1044 q 522 947 522 983 q 506 885 522 911 q 464 842 490 860 q 402 815 438 825 q 328 803 367 806 z "},"ὁ":{"ha":768,"x_min":50,"x_max":718,"o":"m 383 -17 q 258 8 318 -17 q 151 78 197 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 151 611 106 565 q 258 681 197 657 q 383 706 318 706 q 510 681 450 706 q 617 611 571 657 q 690 498 663 565 q 718 344 718 431 q 690 191 718 258 q 617 78 663 124 q 510 8 571 32 q 383 -17 450 -17 m 383 149 q 478 201 449 149 q 508 344 508 254 q 478 488 508 435 q 383 540 449 540 q 290 488 319 540 q 260 344 260 435 q 290 201 260 254 q 383 149 319 149 m 447 789 q 373 801 408 792 q 311 828 338 811 q 269 872 285 846 q 253 933 253 897 q 266 996 253 968 q 308 1044 279 1024 q 385 1076 338 1064 q 500 1090 432 1088 l 513 976 q 426 958 451 972 q 401 918 401 943 q 419 885 401 896 q 464 869 438 875 l 447 789 z "},"ὸ":{"ha":768,"x_min":50,"x_max":718,"o":"m 383 -17 q 258 8 318 -17 q 151 78 197 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 151 611 106 565 q 258 681 197 657 q 383 706 318 706 q 510 681 450 706 q 617 611 571 657 q 690 498 663 565 q 718 344 718 431 q 690 191 718 258 q 617 78 663 124 q 510 8 571 32 q 383 -17 450 -17 m 383 149 q 478 201 449 149 q 508 344 508 254 q 478 488 508 435 q 383 540 449 540 q 290 488 319 540 q 260 344 260 435 q 290 201 260 254 q 383 149 319 149 m 374 794 l 122 1013 l 260 1147 l 474 894 l 374 794 z "},"ό":{"ha":768,"x_min":50,"x_max":718,"o":"m 383 -17 q 258 8 318 -17 q 151 78 197 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 151 611 106 565 q 258 681 197 657 q 383 706 318 706 q 510 681 450 706 q 617 611 571 657 q 690 498 663 565 q 718 344 718 431 q 690 191 718 258 q 617 78 663 124 q 510 8 571 32 q 383 -17 450 -17 m 383 149 q 478 201 449 149 q 508 344 508 254 q 478 488 508 435 q 383 540 449 540 q 290 488 319 540 q 260 344 260 435 q 290 201 260 254 q 383 149 319 149 m 401 794 l 301 894 l 515 1147 l 653 1013 l 401 794 z "},"ὂ":{"ha":768,"x_min":50,"x_max":718,"o":"m 383 -17 q 258 8 318 -17 q 151 78 197 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 151 611 106 565 q 258 681 197 657 q 383 706 318 706 q 510 681 450 706 q 617 611 571 657 q 690 498 663 565 q 718 344 718 431 q 690 191 718 258 q 617 78 663 124 q 510 8 571 32 q 383 -17 450 -17 m 383 149 q 478 201 449 149 q 508 344 508 254 q 478 488 508 435 q 383 540 449 540 q 290 488 319 540 q 260 344 260 435 q 290 201 260 254 q 383 149 319 149 m 183 799 l 167 879 q 201 893 186 883 q 215 925 215 903 q 193 958 215 946 q 118 974 171 971 l 128 1088 q 296 1047 242 1085 q 350 947 350 1010 q 335 884 350 910 q 297 841 321 858 q 242 813 272 824 q 183 799 213 803 m 483 774 l 386 1069 l 551 1101 l 596 796 l 483 774 z "},"ὃ":{"ha":768,"x_min":50,"x_max":718,"o":"m 383 -17 q 258 8 318 -17 q 151 78 197 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 151 611 106 565 q 258 681 197 657 q 383 706 318 706 q 510 681 450 706 q 617 611 571 657 q 690 498 663 565 q 718 344 718 431 q 690 191 718 258 q 617 78 663 124 q 510 8 571 32 q 383 -17 450 -17 m 383 149 q 478 201 449 149 q 508 344 508 254 q 478 488 508 435 q 383 540 449 540 q 290 488 319 540 q 260 344 260 435 q 290 201 260 254 q 383 149 319 149 m 285 799 q 224 813 254 803 q 170 841 194 824 q 131 884 146 858 q 117 947 117 910 q 171 1047 117 1010 q 339 1088 225 1085 l 349 974 q 274 958 296 971 q 251 925 251 946 q 266 893 251 903 q 300 879 281 883 l 285 799 m 481 774 l 383 1069 l 549 1101 l 594 796 l 481 774 z "},"ὄ":{"ha":768,"x_min":50,"x_max":718,"o":"m 383 -17 q 258 8 318 -17 q 151 78 197 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 151 611 106 565 q 258 681 197 657 q 383 706 318 706 q 510 681 450 706 q 617 611 571 657 q 690 498 663 565 q 718 344 718 431 q 690 191 718 258 q 617 78 663 124 q 510 8 571 32 q 383 -17 450 -17 m 383 149 q 478 201 449 149 q 508 344 508 254 q 478 488 508 435 q 383 540 449 540 q 290 488 319 540 q 260 344 260 435 q 290 201 260 254 q 383 149 319 149 m 183 799 l 167 879 q 201 893 186 883 q 215 925 215 903 q 193 958 215 946 q 118 974 171 971 l 128 1088 q 296 1047 242 1085 q 350 947 350 1010 q 335 884 350 910 q 297 841 321 858 q 242 813 272 824 q 183 799 213 803 m 400 796 l 447 1101 l 611 1069 l 514 774 l 400 796 z "},"ὅ":{"ha":768,"x_min":50,"x_max":718,"o":"m 383 -17 q 258 8 318 -17 q 151 78 197 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 151 611 106 565 q 258 681 197 657 q 383 706 318 706 q 510 681 450 706 q 617 611 571 657 q 690 498 663 565 q 718 344 718 431 q 690 191 718 258 q 617 78 663 124 q 510 8 571 32 q 383 -17 450 -17 m 383 149 q 478 201 449 149 q 508 344 508 254 q 478 488 508 435 q 383 540 449 540 q 290 488 319 540 q 260 344 260 435 q 290 201 260 254 q 383 149 319 149 m 299 799 q 238 813 268 803 q 184 841 208 824 q 145 884 160 858 q 131 947 131 910 q 185 1047 131 1010 q 353 1088 239 1085 l 363 974 q 288 958 310 971 q 265 925 265 946 q 280 893 265 903 q 314 879 294 883 l 299 799 m 397 796 l 444 1101 l 610 1069 l 511 774 l 397 796 z "},"ῤ":{"ha":790,"x_min":85,"x_max":735,"o":"m 85 -246 l 85 329 q 110 498 85 426 q 179 615 135 569 q 283 683 224 661 q 414 706 343 706 q 650 614 565 706 q 735 356 735 522 q 710 198 735 267 q 647 81 686 129 q 556 8 607 33 q 450 -17 504 -17 q 360 -1 406 -17 q 276 60 314 15 q 284 -94 281 -19 q 290 -246 288 -169 l 85 -246 m 401 150 q 490 198 453 150 q 526 353 526 246 q 407 539 526 539 q 313 488 349 539 q 276 349 276 436 l 276 206 q 340 161 308 172 q 401 150 371 150 m 356 803 l 339 883 q 383 899 365 889 q 401 932 401 910 q 376 972 401 957 q 290 990 351 986 l 303 1115 q 418 1101 371 1114 q 494 1066 465 1088 q 537 1014 524 1044 q 550 947 550 983 q 534 885 550 911 q 492 842 518 860 q 430 815 465 825 q 356 803 394 806 z "},"ῥ":{"ha":790,"x_min":85,"x_max":735,"o":"m 85 -246 l 85 329 q 110 498 85 426 q 179 615 135 569 q 283 683 224 661 q 414 706 343 706 q 650 614 565 706 q 735 356 735 522 q 710 198 735 267 q 647 81 686 129 q 556 8 607 33 q 450 -17 504 -17 q 360 -1 406 -17 q 276 60 314 15 q 284 -94 281 -19 q 290 -246 288 -169 l 85 -246 m 401 150 q 490 198 453 150 q 526 353 526 246 q 407 539 526 539 q 313 488 349 539 q 276 349 276 436 l 276 206 q 340 161 308 172 q 401 150 371 150 m 475 789 q 401 801 436 792 q 339 828 365 811 q 297 872 313 846 q 281 933 281 897 q 294 996 281 968 q 336 1044 307 1024 q 413 1076 365 1064 q 528 1090 460 1088 l 540 976 q 454 958 479 972 q 429 918 429 943 q 447 885 429 896 q 492 869 465 875 l 475 789 z "},"ὐ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 306 803 l 289 883 q 333 899 315 889 q 351 932 351 910 q 326 972 351 957 q 240 990 301 986 l 253 1115 q 368 1101 321 1114 q 444 1066 415 1088 q 487 1014 474 1044 q 500 947 500 983 q 484 885 500 911 q 442 842 468 860 q 380 815 415 825 q 306 803 344 806 z "},"ὑ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 425 789 q 351 801 386 792 q 289 828 315 811 q 247 872 263 846 q 231 933 231 897 q 244 996 231 968 q 286 1044 257 1024 q 363 1076 315 1064 q 478 1090 410 1088 l 490 976 q 404 958 429 972 q 379 918 379 943 q 397 885 379 896 q 442 869 415 875 l 425 789 z "},"ὺ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 351 794 l 100 1013 l 238 1147 l 451 894 l 351 794 z "},"ύ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 379 794 l 279 894 l 493 1147 l 631 1013 l 379 794 z "},"ὒ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 161 799 l 144 879 q 178 893 164 883 q 193 925 193 903 q 171 958 193 946 q 96 974 149 971 l 106 1088 q 274 1047 219 1085 q 328 947 328 1010 q 313 884 328 910 q 274 841 299 858 q 220 813 250 824 q 161 799 190 803 m 461 774 l 364 1069 l 529 1101 l 574 796 l 461 774 z "},"ὓ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 263 799 q 202 813 232 803 q 148 841 172 824 q 109 884 124 858 q 94 947 94 910 q 149 1047 94 1010 q 317 1088 203 1085 l 326 974 q 251 958 274 971 q 229 925 229 946 q 244 893 229 903 q 278 879 258 883 l 263 799 m 458 774 l 361 1069 l 526 1101 l 572 796 l 458 774 z "},"ὔ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 161 799 l 144 879 q 178 893 164 883 q 193 925 193 903 q 171 958 193 946 q 96 974 149 971 l 106 1088 q 274 1047 219 1085 q 328 947 328 1010 q 313 884 328 910 q 274 841 299 858 q 220 813 250 824 q 161 799 190 803 m 378 796 l 425 1101 l 589 1069 l 492 774 l 378 796 z "},"ὕ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 276 799 q 216 813 246 803 q 162 841 186 824 q 123 884 138 858 q 108 947 108 910 q 163 1047 108 1010 q 331 1088 217 1085 l 340 974 q 265 958 288 971 q 243 925 243 946 q 258 893 243 903 q 292 879 272 883 l 276 799 m 375 796 l 422 1101 l 588 1069 l 489 774 l 375 796 z "},"ὖ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 149 1024 q 192 1140 157 1103 q 285 1178 226 1178 q 335 1169 314 1178 q 373 1149 356 1160 q 405 1128 390 1138 q 435 1119 419 1119 q 478 1172 467 1119 l 582 1163 q 539 1046 574 1083 q 446 1008 504 1008 q 396 1017 417 1008 q 358 1038 375 1026 q 326 1058 340 1049 q 296 1067 311 1067 q 253 1014 264 1067 l 149 1024 m 317 782 l 304 847 q 335 856 324 850 q 346 872 346 861 q 327 892 346 885 q 256 904 308 900 l 274 986 q 433 958 388 982 q 479 893 479 935 q 431 815 479 842 q 317 782 383 789 z "},"ὗ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 414 782 q 299 815 347 789 q 251 893 251 842 q 262 931 251 914 q 297 958 272 947 q 360 976 321 969 q 457 986 400 983 l 475 904 q 403 892 422 900 q 385 872 385 885 q 396 856 385 861 q 426 847 407 850 l 414 782 m 149 1024 q 192 1140 157 1103 q 285 1178 226 1178 q 335 1169 314 1178 q 373 1149 356 1160 q 405 1128 390 1138 q 435 1119 419 1119 q 478 1172 467 1119 l 582 1163 q 539 1046 574 1083 q 446 1008 504 1008 q 396 1017 417 1008 q 358 1038 375 1026 q 326 1058 340 1049 q 296 1067 311 1067 q 253 1014 264 1067 l 149 1024 z "},"ῦ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 457 796 q 398 810 424 796 q 351 840 372 824 q 312 871 329 857 q 278 885 294 885 q 245 867 257 885 q 229 808 233 849 l 101 815 q 149 975 104 924 q 274 1026 193 1026 q 333 1013 307 1026 q 380 982 358 999 q 419 951 401 965 q 453 938 436 938 q 501 1014 493 938 l 629 1007 q 582 847 626 899 q 457 796 538 796 z "},"ῠ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 365 794 q 263 811 306 794 q 190 858 219 828 q 147 927 161 888 q 131 1013 132 967 l 247 1032 q 282 955 254 988 q 365 922 310 922 q 449 955 421 922 q 483 1032 476 988 l 600 1013 q 584 927 599 967 q 541 858 569 888 q 469 811 513 828 q 365 794 425 794 z "},"ῡ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 160 822 l 160 951 l 571 951 l 571 822 l 160 822 z "},"ῢ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 181 811 q 126 833 149 811 q 103 890 103 854 q 126 947 103 926 q 181 968 149 968 q 237 947 214 968 q 260 890 260 926 q 237 833 260 854 q 181 811 214 811 m 346 788 l 244 1083 l 388 1113 l 436 807 l 346 788 m 550 811 q 494 833 517 811 q 471 890 471 854 q 494 947 471 926 q 550 968 517 968 q 605 947 582 968 q 628 890 628 926 q 605 833 628 854 q 550 811 582 811 z "},"ΰ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 294 807 l 344 1113 l 488 1083 l 385 788 l 294 807 m 181 811 q 126 833 149 811 q 103 890 103 854 q 126 947 103 926 q 181 968 149 968 q 237 947 214 968 q 260 890 260 926 q 237 833 260 854 q 181 811 214 811 m 550 811 q 494 833 517 811 q 471 890 471 854 q 494 947 471 926 q 550 968 517 968 q 605 947 582 968 q 628 890 628 926 q 605 833 628 854 q 550 811 582 811 z "},"ῧ":{"ha":739,"x_min":60,"x_max":679,"o":"m 361 -17 q 228 5 283 -17 q 138 65 174 26 q 86 158 103 104 q 69 278 69 213 q 72 377 69 326 q 75 478 75 428 q 72 575 75 518 q 60 689 69 632 l 257 689 q 267 610 264 653 q 269 519 269 568 q 265 402 269 475 q 261 260 261 329 q 290 176 261 204 q 361 149 318 149 q 446 197 417 149 q 475 351 475 246 q 465 493 475 418 q 429 663 454 568 l 626 706 q 665 535 650 622 q 679 361 679 449 q 598 84 679 185 q 361 -17 517 -17 m 143 1010 q 185 1126 150 1088 q 272 1165 219 1165 q 331 1156 306 1165 q 375 1135 356 1146 q 411 1114 394 1124 q 447 1104 428 1104 q 499 1158 486 1104 l 588 1149 q 546 1033 581 1072 q 458 993 511 993 q 400 1003 425 993 q 356 1024 375 1013 q 319 1044 336 1035 q 283 1054 301 1054 q 251 1042 264 1054 q 232 1000 239 1029 l 143 1010 m 214 793 q 152 817 176 793 q 128 878 128 842 q 152 939 128 914 q 214 964 176 964 q 276 939 251 964 q 300 878 300 914 q 276 817 300 842 q 214 793 251 793 m 517 793 q 455 817 479 793 q 431 878 431 842 q 455 939 431 914 q 517 964 479 964 q 578 939 554 964 q 603 878 603 914 q 578 817 603 842 q 517 793 554 793 z "},"ὠ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 458 803 l 442 883 q 486 899 468 889 q 504 932 504 910 q 479 972 504 957 q 393 990 454 986 l 406 1115 q 521 1101 474 1114 q 597 1066 568 1088 q 640 1014 626 1044 q 653 947 653 983 q 637 885 653 911 q 594 842 621 860 q 533 815 568 825 q 458 803 497 806 z "},"ὡ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 578 789 q 503 801 539 792 q 442 828 468 811 q 399 872 415 846 q 383 933 383 897 q 397 996 383 968 q 439 1044 410 1024 q 515 1076 468 1064 q 631 1090 563 1088 l 643 976 q 557 958 582 972 q 532 918 532 943 q 550 885 532 896 q 594 869 568 875 l 578 789 z "},"ὼ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 504 794 l 253 1013 l 390 1147 l 604 894 l 504 794 z "},"ώ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 532 794 l 432 894 l 646 1147 l 783 1013 l 532 794 z "},"ὢ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 314 799 l 297 879 q 331 893 317 883 q 346 925 346 903 q 324 958 346 946 q 249 974 301 971 l 258 1088 q 426 1047 372 1085 q 481 947 481 1010 q 466 884 481 910 q 427 841 451 858 q 373 813 403 824 q 314 799 343 803 m 614 774 l 517 1069 l 682 1101 l 726 796 l 614 774 z "},"ὣ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 415 799 q 355 813 385 803 q 301 841 325 824 q 262 884 276 858 q 247 947 247 910 q 301 1047 247 1010 q 469 1088 356 1085 l 479 974 q 404 958 426 971 q 382 925 382 946 q 397 893 382 903 q 431 879 411 883 l 415 799 m 611 774 l 514 1069 l 679 1101 l 725 796 l 611 774 z "},"ὤ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 314 799 l 297 879 q 331 893 317 883 q 346 925 346 903 q 324 958 346 946 q 249 974 301 971 l 258 1088 q 426 1047 372 1085 q 481 947 481 1010 q 466 884 481 910 q 427 841 451 858 q 373 813 403 824 q 314 799 343 803 m 531 796 l 578 1101 l 742 1069 l 644 774 l 531 796 z "},"ὥ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 429 799 q 369 813 399 803 q 315 841 339 824 q 276 884 290 858 q 261 947 261 910 q 315 1047 261 1010 q 483 1088 369 1085 l 493 974 q 418 958 440 971 q 396 925 396 946 q 410 893 396 903 q 444 879 425 883 l 429 799 m 528 796 l 575 1101 l 740 1069 l 642 774 l 528 796 z "},"ὦ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 301 1024 q 344 1140 310 1103 q 438 1178 379 1178 q 488 1169 467 1178 q 526 1149 508 1160 q 558 1128 543 1138 q 588 1119 572 1119 q 631 1172 619 1119 l 735 1163 q 692 1046 726 1083 q 599 1008 657 1008 q 549 1017 569 1008 q 510 1038 528 1026 q 478 1058 493 1049 q 449 1067 464 1067 q 406 1014 417 1067 l 301 1024 m 469 782 l 457 847 q 488 856 476 850 q 499 872 499 861 q 480 892 499 885 q 408 904 461 900 l 426 986 q 586 958 540 982 q 632 893 632 935 q 584 815 632 842 q 469 782 536 789 z "},"ὧ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 567 782 q 452 815 500 789 q 404 893 404 842 q 415 931 404 914 q 449 958 425 947 q 513 976 474 969 q 610 986 553 983 l 628 904 q 556 892 575 900 q 538 872 538 885 q 549 856 538 861 q 579 847 560 850 l 567 782 m 301 1024 q 344 1140 310 1103 q 438 1178 379 1178 q 488 1169 467 1178 q 526 1149 508 1160 q 558 1128 543 1138 q 588 1119 572 1119 q 631 1172 619 1119 l 735 1163 q 692 1046 726 1083 q 599 1008 657 1008 q 549 1017 569 1008 q 510 1038 528 1026 q 478 1058 493 1049 q 449 1067 464 1067 q 406 1014 417 1067 l 301 1024 z "},"ῶ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 610 796 q 551 810 576 796 q 503 840 525 824 q 465 871 482 857 q 431 885 447 885 q 398 867 410 885 q 382 808 386 849 l 254 815 q 301 975 257 924 q 426 1026 346 1026 q 485 1013 460 1026 q 533 982 511 999 q 572 951 554 965 q 606 938 589 938 q 654 1014 646 938 l 782 1007 q 735 847 779 899 q 610 796 690 796 z "},"ᾳ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 501 -300 q 381 -252 415 -300 q 347 -124 347 -204 l 347 -76 l 494 -76 q 492 -107 492 -92 q 492 -132 492 -122 q 506 -169 492 -160 q 543 -178 521 -178 q 553 -178 549 -178 q 567 -175 557 -178 l 586 -285 q 551 -296 571 -292 q 501 -300 531 -300 z "},"ᾀ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 501 -300 q 381 -252 415 -300 q 347 -124 347 -204 l 347 -76 l 494 -76 q 492 -107 492 -92 q 492 -132 492 -122 q 506 -169 492 -160 q 543 -178 521 -178 q 553 -178 549 -178 q 567 -175 557 -178 l 586 -285 q 551 -296 571 -292 q 501 -300 531 -300 m 347 803 l 331 883 q 375 899 357 889 q 393 932 393 910 q 368 972 393 957 q 282 990 343 986 l 294 1115 q 410 1101 363 1114 q 486 1066 457 1088 q 528 1014 515 1044 q 542 947 542 983 q 526 885 542 911 q 483 842 510 860 q 422 815 457 825 q 347 803 386 806 z "},"ᾁ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 501 -300 q 381 -252 415 -300 q 347 -124 347 -204 l 347 -76 l 494 -76 q 492 -107 492 -92 q 492 -132 492 -122 q 506 -169 492 -160 q 543 -178 521 -178 q 553 -178 549 -178 q 567 -175 557 -178 l 586 -285 q 551 -296 571 -292 q 501 -300 531 -300 m 467 789 q 392 801 428 792 q 331 828 357 811 q 288 872 304 846 q 272 933 272 897 q 285 996 272 968 q 328 1044 299 1024 q 404 1076 357 1064 q 519 1090 451 1088 l 532 976 q 446 958 471 972 q 421 918 421 943 q 439 885 421 896 q 483 869 457 875 l 467 789 z "},"ᾲ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 501 -300 q 381 -252 415 -300 q 347 -124 347 -204 l 347 -76 l 494 -76 q 492 -107 492 -92 q 492 -132 492 -122 q 506 -169 492 -160 q 543 -178 521 -178 q 553 -178 549 -178 q 567 -175 557 -178 l 586 -285 q 551 -296 571 -292 q 501 -300 531 -300 m 393 794 l 142 1013 l 279 1147 l 493 894 l 393 794 z "},"ᾴ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 501 -300 q 381 -252 415 -300 q 347 -124 347 -204 l 347 -76 l 494 -76 q 492 -107 492 -92 q 492 -132 492 -122 q 506 -169 492 -160 q 543 -178 521 -178 q 553 -178 549 -178 q 567 -175 557 -178 l 586 -285 q 551 -296 571 -292 q 501 -300 531 -300 m 421 794 l 321 894 l 535 1147 l 672 1013 l 421 794 z "},"ᾂ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 501 -300 q 381 -252 415 -300 q 347 -124 347 -204 l 347 -76 l 494 -76 q 492 -107 492 -92 q 492 -132 492 -122 q 506 -169 492 -160 q 543 -178 521 -178 q 553 -178 549 -178 q 567 -175 557 -178 l 586 -285 q 551 -296 571 -292 q 501 -300 531 -300 m 203 799 l 186 879 q 220 893 206 883 q 235 925 235 903 q 213 958 235 946 q 138 974 190 971 l 147 1088 q 315 1047 261 1085 q 369 947 369 1010 q 355 884 369 910 q 316 841 340 858 q 262 813 292 824 q 203 799 232 803 m 503 774 l 406 1069 l 571 1101 l 615 796 l 503 774 z "},"ᾃ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 501 -300 q 381 -252 415 -300 q 347 -124 347 -204 l 347 -76 l 494 -76 q 492 -107 492 -92 q 492 -132 492 -122 q 506 -169 492 -160 q 543 -178 521 -178 q 553 -178 549 -178 q 567 -175 557 -178 l 586 -285 q 551 -296 571 -292 q 501 -300 531 -300 m 304 799 q 244 813 274 803 q 190 841 214 824 q 151 884 165 858 q 136 947 136 910 q 190 1047 136 1010 q 358 1088 244 1085 l 368 974 q 293 958 315 971 q 271 925 271 946 q 285 893 271 903 q 319 879 300 883 l 304 799 m 500 774 l 403 1069 l 568 1101 l 614 796 l 500 774 z "},"ᾄ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 501 -300 q 381 -252 415 -300 q 347 -124 347 -204 l 347 -76 l 494 -76 q 492 -107 492 -92 q 492 -132 492 -122 q 506 -169 492 -160 q 543 -178 521 -178 q 553 -178 549 -178 q 567 -175 557 -178 l 586 -285 q 551 -296 571 -292 q 501 -300 531 -300 m 203 799 l 186 879 q 220 893 206 883 q 235 925 235 903 q 213 958 235 946 q 138 974 190 971 l 147 1088 q 315 1047 261 1085 q 369 947 369 1010 q 355 884 369 910 q 316 841 340 858 q 262 813 292 824 q 203 799 232 803 m 419 796 l 467 1101 l 631 1069 l 533 774 l 419 796 z "},"ᾅ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 501 -300 q 381 -252 415 -300 q 347 -124 347 -204 l 347 -76 l 494 -76 q 492 -107 492 -92 q 492 -132 492 -122 q 506 -169 492 -160 q 543 -178 521 -178 q 553 -178 549 -178 q 567 -175 557 -178 l 586 -285 q 551 -296 571 -292 q 501 -300 531 -300 m 318 799 q 258 813 288 803 q 203 841 228 824 q 165 884 179 858 q 150 947 150 910 q 204 1047 150 1010 q 372 1088 258 1085 l 382 974 q 307 958 329 971 q 285 925 285 946 q 299 893 285 903 q 333 879 314 883 l 318 799 m 417 796 l 464 1101 l 629 1069 l 531 774 l 417 796 z "},"ᾆ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 501 -300 q 381 -252 415 -300 q 347 -124 347 -204 l 347 -76 l 494 -76 q 492 -107 492 -92 q 492 -132 492 -122 q 506 -169 492 -160 q 543 -178 521 -178 q 553 -178 549 -178 q 567 -175 557 -178 l 586 -285 q 551 -296 571 -292 q 501 -300 531 -300 m 190 1024 q 233 1140 199 1103 q 326 1178 268 1178 q 376 1169 356 1178 q 415 1149 397 1160 q 447 1128 432 1138 q 476 1119 461 1119 q 519 1172 508 1119 l 624 1163 q 581 1046 615 1083 q 488 1008 546 1008 q 438 1017 458 1008 q 399 1038 417 1026 q 367 1058 382 1049 q 338 1067 353 1067 q 294 1014 306 1067 l 190 1024 m 358 782 l 346 847 q 376 856 365 850 q 388 872 388 861 q 369 892 388 885 q 297 904 350 900 l 315 986 q 475 958 429 982 q 521 893 521 935 q 473 815 521 842 q 358 782 425 789 z "},"ᾇ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 501 -300 q 381 -252 415 -300 q 347 -124 347 -204 l 347 -76 l 494 -76 q 492 -107 492 -92 q 492 -132 492 -122 q 506 -169 492 -160 q 543 -178 521 -178 q 553 -178 549 -178 q 567 -175 557 -178 l 586 -285 q 551 -296 571 -292 q 501 -300 531 -300 m 456 782 q 341 815 389 789 q 293 893 293 842 q 303 931 293 914 q 338 958 314 947 q 402 976 363 969 q 499 986 442 983 l 517 904 q 445 892 464 900 q 426 872 426 885 q 438 856 426 861 q 468 847 449 850 l 456 782 m 190 1024 q 233 1140 199 1103 q 326 1178 268 1178 q 376 1169 356 1178 q 415 1149 397 1160 q 447 1128 432 1138 q 476 1119 461 1119 q 519 1172 508 1119 l 624 1163 q 581 1046 615 1083 q 488 1008 546 1008 q 438 1017 458 1008 q 399 1038 417 1026 q 367 1058 382 1049 q 338 1067 353 1067 q 294 1014 306 1067 l 190 1024 z "},"ᾷ":{"ha":826,"x_min":50,"x_max":821,"o":"m 326 -17 q 213 8 264 -17 q 126 78 163 32 q 69 190 89 124 q 50 342 50 257 q 75 494 50 426 q 142 609 100 563 q 240 681 185 656 q 354 706 294 706 q 462 674 413 706 q 544 568 511 643 l 550 568 l 572 689 l 774 689 q 744 562 760 629 q 716 430 729 494 q 694 308 703 365 q 685 211 685 250 q 703 163 685 176 q 751 149 722 149 q 796 157 772 149 l 821 7 q 772 -10 801 -3 q 700 -17 742 -17 q 584 9 626 -17 q 522 97 542 35 l 518 97 q 326 -17 449 -17 m 375 150 q 419 162 397 150 q 459 194 442 174 q 488 241 476 214 q 500 299 499 268 l 510 418 q 386 539 467 539 q 340 528 363 539 q 299 492 317 517 q 271 431 282 468 q 260 343 260 394 q 291 197 260 243 q 375 150 322 150 m 501 -300 q 381 -252 415 -300 q 347 -124 347 -204 l 347 -76 l 494 -76 q 492 -107 492 -92 q 492 -132 492 -122 q 506 -169 492 -160 q 543 -178 521 -178 q 553 -178 549 -178 q 567 -175 557 -178 l 586 -285 q 551 -296 571 -292 q 501 -300 531 -300 m 499 796 q 440 810 465 796 q 392 840 414 824 q 353 871 371 857 q 319 885 336 885 q 287 867 299 885 q 271 808 275 849 l 143 815 q 190 975 146 924 q 315 1026 235 1026 q 374 1013 349 1026 q 422 982 400 999 q 460 951 443 965 q 494 938 478 938 q 543 1014 535 938 l 671 1007 q 624 847 668 899 q 499 796 579 796 z "},"ῃ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 267 -300 q 147 -252 181 -300 q 113 -124 113 -204 l 113 -76 l 260 -76 q 257 -107 257 -92 q 257 -132 257 -122 q 272 -169 257 -160 q 308 -178 286 -178 q 318 -178 314 -178 q 332 -175 322 -178 l 351 -285 q 316 -296 336 -292 q 267 -300 296 -300 z "},"ᾐ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 267 -300 q 147 -252 181 -300 q 113 -124 113 -204 l 113 -76 l 260 -76 q 257 -107 257 -92 q 257 -132 257 -122 q 272 -169 257 -160 q 308 -178 286 -178 q 318 -178 314 -178 q 332 -175 322 -178 l 351 -285 q 316 -296 336 -292 q 267 -300 296 -300 m 365 803 l 349 883 q 393 899 375 889 q 411 932 411 910 q 386 972 411 957 q 300 990 361 986 l 313 1115 q 428 1101 381 1114 q 504 1066 475 1088 q 547 1014 533 1044 q 560 947 560 983 q 544 885 560 911 q 501 842 528 860 q 440 815 475 825 q 365 803 404 806 z "},"ᾑ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 267 -300 q 147 -252 181 -300 q 113 -124 113 -204 l 113 -76 l 260 -76 q 257 -107 257 -92 q 257 -132 257 -122 q 272 -169 257 -160 q 308 -178 286 -178 q 318 -178 314 -178 q 332 -175 322 -178 l 351 -285 q 316 -296 336 -292 q 267 -300 296 -300 m 485 789 q 410 801 446 792 q 349 828 375 811 q 306 872 322 846 q 290 933 290 897 q 303 996 290 968 q 346 1044 317 1024 q 422 1076 375 1064 q 538 1090 469 1088 l 550 976 q 464 958 489 972 q 439 918 439 943 q 457 885 439 896 q 501 869 475 875 l 485 789 z "},"ῂ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 267 -300 q 147 -252 181 -300 q 113 -124 113 -204 l 113 -76 l 260 -76 q 257 -107 257 -92 q 257 -132 257 -122 q 272 -169 257 -160 q 308 -178 286 -178 q 318 -178 314 -178 q 332 -175 322 -178 l 351 -285 q 316 -296 336 -292 q 267 -300 296 -300 m 411 794 l 160 1013 l 297 1147 l 511 894 l 411 794 z "},"ῄ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 267 -300 q 147 -252 181 -300 q 113 -124 113 -204 l 113 -76 l 260 -76 q 257 -107 257 -92 q 257 -132 257 -122 q 272 -169 257 -160 q 308 -178 286 -178 q 318 -178 314 -178 q 332 -175 322 -178 l 351 -285 q 316 -296 336 -292 q 267 -300 296 -300 m 439 794 l 339 894 l 553 1147 l 690 1013 l 439 794 z "},"ᾒ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 267 -300 q 147 -252 181 -300 q 113 -124 113 -204 l 113 -76 l 260 -76 q 257 -107 257 -92 q 257 -132 257 -122 q 272 -169 257 -160 q 308 -178 286 -178 q 318 -178 314 -178 q 332 -175 322 -178 l 351 -285 q 316 -296 336 -292 q 267 -300 296 -300 m 221 799 l 204 879 q 238 893 224 883 q 253 925 253 903 q 231 958 253 946 q 156 974 208 971 l 165 1088 q 333 1047 279 1085 q 388 947 388 1010 q 373 884 388 910 q 334 841 358 858 q 280 813 310 824 q 221 799 250 803 m 521 774 l 424 1069 l 589 1101 l 633 796 l 521 774 z "},"ᾓ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 267 -300 q 147 -252 181 -300 q 113 -124 113 -204 l 113 -76 l 260 -76 q 257 -107 257 -92 q 257 -132 257 -122 q 272 -169 257 -160 q 308 -178 286 -178 q 318 -178 314 -178 q 332 -175 322 -178 l 351 -285 q 316 -296 336 -292 q 267 -300 296 -300 m 322 799 q 262 813 292 803 q 208 841 232 824 q 169 884 183 858 q 154 947 154 910 q 208 1047 154 1010 q 376 1088 263 1085 l 386 974 q 311 958 333 971 q 289 925 289 946 q 303 893 289 903 q 338 879 318 883 l 322 799 m 518 774 l 421 1069 l 586 1101 l 632 796 l 518 774 z "},"ᾔ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 267 -300 q 147 -252 181 -300 q 113 -124 113 -204 l 113 -76 l 260 -76 q 257 -107 257 -92 q 257 -132 257 -122 q 272 -169 257 -160 q 308 -178 286 -178 q 318 -178 314 -178 q 332 -175 322 -178 l 351 -285 q 316 -296 336 -292 q 267 -300 296 -300 m 221 799 l 204 879 q 238 893 224 883 q 253 925 253 903 q 231 958 253 946 q 156 974 208 971 l 165 1088 q 333 1047 279 1085 q 388 947 388 1010 q 373 884 388 910 q 334 841 358 858 q 280 813 310 824 q 221 799 250 803 m 438 796 l 485 1101 l 649 1069 l 551 774 l 438 796 z "},"ᾕ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 267 -300 q 147 -252 181 -300 q 113 -124 113 -204 l 113 -76 l 260 -76 q 257 -107 257 -92 q 257 -132 257 -122 q 272 -169 257 -160 q 308 -178 286 -178 q 318 -178 314 -178 q 332 -175 322 -178 l 351 -285 q 316 -296 336 -292 q 267 -300 296 -300 m 336 799 q 276 813 306 803 q 222 841 246 824 q 183 884 197 858 q 168 947 168 910 q 222 1047 168 1010 q 390 1088 276 1085 l 400 974 q 325 958 347 971 q 303 925 303 946 q 317 893 303 903 q 351 879 332 883 l 336 799 m 435 796 l 482 1101 l 647 1069 l 549 774 l 435 796 z "},"ᾖ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 267 -300 q 147 -252 181 -300 q 113 -124 113 -204 l 113 -76 l 260 -76 q 257 -107 257 -92 q 257 -132 257 -122 q 272 -169 257 -160 q 308 -178 286 -178 q 318 -178 314 -178 q 332 -175 322 -178 l 351 -285 q 316 -296 336 -292 q 267 -300 296 -300 m 208 1024 q 251 1140 217 1103 q 344 1178 286 1178 q 394 1169 374 1178 q 433 1149 415 1160 q 465 1128 450 1138 q 494 1119 479 1119 q 538 1172 526 1119 l 642 1163 q 599 1046 633 1083 q 506 1008 564 1008 q 456 1017 476 1008 q 417 1038 435 1026 q 385 1058 400 1049 q 356 1067 371 1067 q 313 1014 324 1067 l 208 1024 m 376 782 l 364 847 q 394 856 383 850 q 406 872 406 861 q 387 892 406 885 q 315 904 368 900 l 333 986 q 493 958 447 982 q 539 893 539 935 q 491 815 539 842 q 376 782 443 789 z "},"ᾗ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 267 -300 q 147 -252 181 -300 q 113 -124 113 -204 l 113 -76 l 260 -76 q 257 -107 257 -92 q 257 -132 257 -122 q 272 -169 257 -160 q 308 -178 286 -178 q 318 -178 314 -178 q 332 -175 322 -178 l 351 -285 q 316 -296 336 -292 q 267 -300 296 -300 m 474 782 q 359 815 407 789 q 311 893 311 842 q 322 931 311 914 q 356 958 332 947 q 420 976 381 969 q 517 986 460 983 l 535 904 q 463 892 482 900 q 444 872 444 885 q 456 856 444 861 q 486 847 467 850 l 474 782 m 208 1024 q 251 1140 217 1103 q 344 1178 286 1178 q 394 1169 374 1178 q 433 1149 415 1160 q 465 1128 450 1138 q 494 1119 479 1119 q 538 1172 526 1119 l 642 1163 q 599 1046 633 1083 q 506 1008 564 1008 q 456 1017 476 1008 q 417 1038 435 1026 q 385 1058 400 1049 q 356 1067 371 1067 q 313 1014 324 1067 l 208 1024 z "},"ῇ":{"ha":781,"x_min":75,"x_max":697,"o":"m 490 -246 q 496 -76 493 -165 q 501 100 499 14 q 504 264 503 186 q 506 401 506 342 q 488 504 506 476 q 424 532 469 532 q 358 507 388 532 q 294 432 328 482 l 294 0 l 90 0 l 90 478 q 88 575 90 518 q 75 689 85 632 l 257 689 l 271 569 l 276 569 q 372 667 321 628 q 496 706 424 706 q 651 631 606 706 q 697 428 697 557 l 697 -246 l 490 -246 m 267 -300 q 147 -252 181 -300 q 113 -124 113 -204 l 113 -76 l 260 -76 q 257 -107 257 -92 q 257 -132 257 -122 q 272 -169 257 -160 q 308 -178 286 -178 q 318 -178 314 -178 q 332 -175 322 -178 l 351 -285 q 316 -296 336 -292 q 267 -300 296 -300 m 517 796 q 458 810 483 796 q 410 840 432 824 q 372 871 389 857 q 338 885 354 885 q 305 867 317 885 q 289 808 293 849 l 161 815 q 208 975 164 924 q 333 1026 253 1026 q 392 1013 367 1026 q 440 982 418 999 q 478 951 461 965 q 513 938 496 938 q 561 1014 553 938 l 689 1007 q 642 847 686 899 q 517 796 597 796 z "},"ῳ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 590 -300 q 470 -252 504 -300 q 436 -124 436 -204 l 436 -76 l 583 -76 q 581 -107 581 -92 q 581 -132 581 -122 q 595 -169 581 -160 q 632 -178 610 -178 q 642 -178 638 -178 q 656 -175 646 -178 l 675 -285 q 640 -296 660 -292 q 590 -300 619 -300 z "},"ᾠ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 590 -300 q 470 -252 504 -300 q 436 -124 436 -204 l 436 -76 l 583 -76 q 581 -107 581 -92 q 581 -132 581 -122 q 595 -169 581 -160 q 632 -178 610 -178 q 642 -178 638 -178 q 656 -175 646 -178 l 675 -285 q 640 -296 660 -292 q 590 -300 619 -300 m 458 803 l 442 883 q 486 899 468 889 q 504 932 504 910 q 479 972 504 957 q 393 990 454 986 l 406 1115 q 521 1101 474 1114 q 597 1066 568 1088 q 640 1014 626 1044 q 653 947 653 983 q 637 885 653 911 q 594 842 621 860 q 533 815 568 825 q 458 803 497 806 z "},"ᾡ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 590 -300 q 470 -252 504 -300 q 436 -124 436 -204 l 436 -76 l 583 -76 q 581 -107 581 -92 q 581 -132 581 -122 q 595 -169 581 -160 q 632 -178 610 -178 q 642 -178 638 -178 q 656 -175 646 -178 l 675 -285 q 640 -296 660 -292 q 590 -300 619 -300 m 578 789 q 503 801 539 792 q 442 828 468 811 q 399 872 415 846 q 383 933 383 897 q 397 996 383 968 q 439 1044 410 1024 q 515 1076 468 1064 q 631 1090 563 1088 l 643 976 q 557 958 582 972 q 532 918 532 943 q 550 885 532 896 q 594 869 568 875 l 578 789 z "},"ῲ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 590 -300 q 470 -252 504 -300 q 436 -124 436 -204 l 436 -76 l 583 -76 q 581 -107 581 -92 q 581 -132 581 -122 q 595 -169 581 -160 q 632 -178 610 -178 q 642 -178 638 -178 q 656 -175 646 -178 l 675 -285 q 640 -296 660 -292 q 590 -300 619 -300 m 504 794 l 253 1013 l 390 1147 l 604 894 l 504 794 z "},"ῴ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 590 -300 q 470 -252 504 -300 q 436 -124 436 -204 l 436 -76 l 583 -76 q 581 -107 581 -92 q 581 -132 581 -122 q 595 -169 581 -160 q 632 -178 610 -178 q 642 -178 638 -178 q 656 -175 646 -178 l 675 -285 q 640 -296 660 -292 q 590 -300 619 -300 m 532 794 l 432 894 l 646 1147 l 783 1013 l 532 794 z "},"ᾢ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 590 -300 q 470 -252 504 -300 q 436 -124 436 -204 l 436 -76 l 583 -76 q 581 -107 581 -92 q 581 -132 581 -122 q 595 -169 581 -160 q 632 -178 610 -178 q 642 -178 638 -178 q 656 -175 646 -178 l 675 -285 q 640 -296 660 -292 q 590 -300 619 -300 m 314 799 l 297 879 q 331 893 317 883 q 346 925 346 903 q 324 958 346 946 q 249 974 301 971 l 258 1088 q 426 1047 372 1085 q 481 947 481 1010 q 466 884 481 910 q 427 841 451 858 q 373 813 403 824 q 314 799 343 803 m 614 774 l 517 1069 l 682 1101 l 726 796 l 614 774 z "},"ᾣ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 590 -300 q 470 -252 504 -300 q 436 -124 436 -204 l 436 -76 l 583 -76 q 581 -107 581 -92 q 581 -132 581 -122 q 595 -169 581 -160 q 632 -178 610 -178 q 642 -178 638 -178 q 656 -175 646 -178 l 675 -285 q 640 -296 660 -292 q 590 -300 619 -300 m 415 799 q 355 813 385 803 q 301 841 325 824 q 262 884 276 858 q 247 947 247 910 q 301 1047 247 1010 q 469 1088 356 1085 l 479 974 q 404 958 426 971 q 382 925 382 946 q 397 893 382 903 q 431 879 411 883 l 415 799 m 611 774 l 514 1069 l 679 1101 l 725 796 l 611 774 z "},"ᾤ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 590 -300 q 470 -252 504 -300 q 436 -124 436 -204 l 436 -76 l 583 -76 q 581 -107 581 -92 q 581 -132 581 -122 q 595 -169 581 -160 q 632 -178 610 -178 q 642 -178 638 -178 q 656 -175 646 -178 l 675 -285 q 640 -296 660 -292 q 590 -300 619 -300 m 314 799 l 297 879 q 331 893 317 883 q 346 925 346 903 q 324 958 346 946 q 249 974 301 971 l 258 1088 q 426 1047 372 1085 q 481 947 481 1010 q 466 884 481 910 q 427 841 451 858 q 373 813 403 824 q 314 799 343 803 m 531 796 l 578 1101 l 742 1069 l 644 774 l 531 796 z "},"ᾥ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 590 -300 q 470 -252 504 -300 q 436 -124 436 -204 l 436 -76 l 583 -76 q 581 -107 581 -92 q 581 -132 581 -122 q 595 -169 581 -160 q 632 -178 610 -178 q 642 -178 638 -178 q 656 -175 646 -178 l 675 -285 q 640 -296 660 -292 q 590 -300 619 -300 m 429 799 q 369 813 399 803 q 315 841 339 824 q 276 884 290 858 q 261 947 261 910 q 315 1047 261 1010 q 483 1088 369 1085 l 493 974 q 418 958 440 971 q 396 925 396 946 q 410 893 396 903 q 444 879 425 883 l 429 799 m 528 796 l 575 1101 l 740 1069 l 642 774 l 528 796 z "},"ᾦ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 590 -300 q 470 -252 504 -300 q 436 -124 436 -204 l 436 -76 l 583 -76 q 581 -107 581 -92 q 581 -132 581 -122 q 595 -169 581 -160 q 632 -178 610 -178 q 642 -178 638 -178 q 656 -175 646 -178 l 675 -285 q 640 -296 660 -292 q 590 -300 619 -300 m 301 1024 q 344 1140 310 1103 q 438 1178 379 1178 q 488 1169 467 1178 q 526 1149 508 1160 q 558 1128 543 1138 q 588 1119 572 1119 q 631 1172 619 1119 l 735 1163 q 692 1046 726 1083 q 599 1008 657 1008 q 549 1017 569 1008 q 510 1038 528 1026 q 478 1058 493 1049 q 449 1067 464 1067 q 406 1014 417 1067 l 301 1024 m 469 782 l 457 847 q 488 856 476 850 q 499 872 499 861 q 480 892 499 885 q 408 904 461 900 l 426 986 q 586 958 540 982 q 632 893 632 935 q 584 815 632 842 q 469 782 536 789 z "},"ᾧ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 590 -300 q 470 -252 504 -300 q 436 -124 436 -204 l 436 -76 l 583 -76 q 581 -107 581 -92 q 581 -132 581 -122 q 595 -169 581 -160 q 632 -178 610 -178 q 642 -178 638 -178 q 656 -175 646 -178 l 675 -285 q 640 -296 660 -292 q 590 -300 619 -300 m 567 782 q 452 815 500 789 q 404 893 404 842 q 415 931 404 914 q 449 958 425 947 q 513 976 474 969 q 610 986 553 983 l 628 904 q 556 892 575 900 q 538 872 538 885 q 549 856 538 861 q 579 847 560 850 l 567 782 m 301 1024 q 344 1140 310 1103 q 438 1178 379 1178 q 488 1169 467 1178 q 526 1149 508 1160 q 558 1128 543 1138 q 588 1119 572 1119 q 631 1172 619 1119 l 735 1163 q 692 1046 726 1083 q 599 1008 657 1008 q 549 1017 569 1008 q 510 1038 528 1026 q 478 1058 493 1049 q 449 1067 464 1067 q 406 1014 417 1067 l 301 1024 z "},"ῷ":{"ha":1036,"x_min":56,"x_max":981,"o":"m 325 -17 q 128 77 200 -17 q 56 351 56 171 q 64 441 56 394 q 86 534 72 488 q 119 624 100 581 q 163 706 139 668 l 354 633 q 276 474 303 550 q 249 311 249 397 q 269 193 249 238 q 335 149 290 149 q 425 278 425 149 q 424 322 425 301 q 420 363 422 342 q 415 406 418 383 q 408 460 413 429 l 624 460 q 617 406 619 429 q 612 363 614 383 q 608 322 610 342 q 607 278 607 301 q 628 176 607 204 q 690 149 649 149 q 753 198 729 149 q 776 343 776 247 q 772 421 776 385 q 758 491 768 457 q 730 560 747 525 q 688 638 713 596 l 875 706 q 951 547 922 631 q 981 356 981 464 q 913 80 981 176 q 718 -17 846 -17 q 601 13 656 -17 q 519 114 547 42 l 514 114 q 437 13 486 42 q 325 -17 388 -17 m 590 -300 q 470 -252 504 -300 q 436 -124 436 -204 l 436 -76 l 583 -76 q 581 -107 581 -92 q 581 -132 581 -122 q 595 -169 581 -160 q 632 -178 610 -178 q 642 -178 638 -178 q 656 -175 646 -178 l 675 -285 q 640 -296 660 -292 q 590 -300 619 -300 m 610 796 q 551 810 576 796 q 503 840 525 824 q 465 871 482 857 q 431 885 447 885 q 398 867 410 885 q 382 808 386 849 l 254 815 q 301 975 257 924 q 426 1026 346 1026 q 485 1013 460 1026 q 533 982 511 999 q 572 951 554 965 q 606 938 589 938 q 654 1014 646 938 l 782 1007 q 735 847 779 899 q 610 796 690 796 z "},"ϗ":{"ha":758,"x_min":74,"x_max":765,"o":"m 585 -261 l 346 -246 q 447 -131 397 -190 q 533 -12 496 -71 q 450 112 493 40 q 361 275 407 183 q 351 264 358 271 q 298 172 314 224 q 282 40 282 119 l 282 0 l 90 0 l 90 478 q 88 576 90 518 q 74 689 85 635 l 276 689 q 286 612 283 656 q 289 519 289 568 l 289 390 l 294 390 q 376 503 333 450 q 466 599 418 557 q 567 669 514 642 q 682 706 621 697 l 699 515 q 599 477 646 503 q 494 403 551 451 q 553 297 519 353 q 622 189 586 242 q 694 87 657 136 q 765 0 732 38 q 717 -74 742 -36 q 668 -147 692 -112 q 623 -211 644 -182 q 585 -261 601 -240 z "},"ϙ":{"ha":768,"x_min":50,"x_max":718,"o":"m 383 139 q 478 194 449 139 q 508 344 508 249 q 478 488 508 435 q 383 540 449 540 q 290 488 319 540 q 260 344 260 435 q 290 194 260 249 q 383 139 319 139 m 289 -246 l 289 -3 q 195 42 239 11 q 119 116 151 72 q 69 217 88 160 q 50 344 50 275 q 78 498 50 431 q 151 611 106 565 q 258 681 197 657 q 383 706 318 706 q 510 681 450 706 q 617 611 571 657 q 690 498 663 565 q 718 344 718 431 q 700 218 718 275 q 651 117 682 161 q 577 44 619 74 q 485 -1 535 14 q 490 -124 488 -64 q 496 -246 493 -183 l 289 -246 z "},"ϛ":{"ha":681,"x_min":50,"x_max":644,"o":"m 531 -260 l 371 -207 q 419 -139 403 -167 q 436 -89 436 -111 q 433 -67 436 -76 q 419 -47 429 -57 q 390 -30 408 -37 q 339 -14 371 -22 q 233 26 285 0 q 140 95 181 53 q 75 197 100 138 q 50 336 50 257 q 78 492 50 425 q 156 602 107 558 q 272 667 206 646 q 414 689 338 689 l 644 689 l 644 521 q 536 524 594 524 q 431 524 478 524 q 306 480 353 524 q 260 336 260 436 q 300 222 260 265 q 433 153 340 178 q 523 122 488 138 q 579 83 558 106 q 608 33 600 61 q 615 -32 615 6 q 594 -132 615 -68 q 531 -260 574 -196 z "},"ϝ":{"ha":601,"x_min":90,"x_max":565,"o":"m 90 -246 l 90 689 l 565 689 l 565 529 l 279 529 l 282 308 l 538 308 l 538 174 l 285 174 q 288 -31 285 68 q 296 -246 290 -131 l 90 -246 z "},"ϡ":{"ha":744,"x_min":13,"x_max":725,"o":"m 697 -251 l 499 -228 q 517 -96 511 -158 q 524 29 524 -33 q 519 119 524 75 q 375 49 447 86 q 224 -32 303 13 l 140 139 l 490 294 q 471 362 482 329 q 446 426 460 394 q 274 345 358 388 q 96 251 190 303 l 13 422 l 361 576 q 106 822 263 717 l 238 972 q 601 563 476 807 q 725 26 725 319 q 717 -112 725 -43 q 697 -251 710 -181 z "},";":{"ha":417,"x_min":64,"x_max":356,"o":"m 208 433 q 120 470 156 433 q 85 561 85 507 q 120 653 85 617 q 208 690 156 690 q 297 653 261 690 q 332 561 332 617 q 297 470 332 507 q 208 433 261 433 m 106 -269 l 64 -161 q 182 -89 142 -133 q 221 8 222 -44 l 210 8 q 124 38 161 8 q 86 124 86 68 q 124 208 86 176 q 214 240 161 240 q 319 190 283 240 q 356 47 356 139 q 292 -151 356 -68 q 106 -269 228 -233 z "},"·":{"ha":417,"x_min":85,"x_max":332,"o":"m 208 433 q 120 470 156 433 q 85 561 85 507 q 120 653 85 617 q 208 690 156 690 q 297 653 261 690 q 332 561 332 617 q 297 470 332 507 q 208 433 261 433 z "},"ʹ":{"ha":417,"x_min":114,"x_max":344,"o":"m 114 539 l 140 953 l 344 953 l 313 776 l 247 539 l 114 539 z "},"͵":{"ha":417,"x_min":74,"x_max":303,"o":"m 74 0 l 104 176 l 169 414 l 303 414 l 276 0 l 74 0 z "},"΄":{"ha":771,"x_min":311,"x_max":557,"o":"m 311 796 l 358 1101 l 557 1068 l 447 771 l 311 796 z "},"΅":{"ha":771,"x_min":125,"x_max":650,"o":"m 317 807 l 367 1113 l 510 1083 l 407 788 l 317 807 m 203 811 q 148 833 171 811 q 125 890 125 854 q 148 947 125 926 q 203 968 171 968 q 259 947 236 968 q 282 890 282 926 q 259 833 282 854 q 203 811 236 811 m 572 811 q 516 833 539 811 q 493 890 493 854 q 516 947 493 926 q 572 968 539 968 q 627 947 604 968 q 650 890 650 926 q 627 833 650 854 q 572 811 604 811 z "},"ͺ":{"ha":771,"x_min":308,"x_max":547,"o":"m 463 -300 q 342 -252 376 -300 q 308 -124 308 -204 l 308 -76 l 456 -76 q 453 -107 453 -92 q 453 -132 453 -122 q 467 -169 453 -160 q 504 -178 482 -178 q 514 -178 510 -178 q 528 -175 518 -178 l 547 -285 q 512 -296 532 -292 q 463 -300 492 -300 z "},"ι":{"ha":418,"x_min":90,"x_max":411,"o":"m 290 -17 q 195 0 233 -17 q 133 47 157 17 q 100 119 110 76 q 90 215 90 163 l 90 578 l 296 578 q 291 478 293 529 q 287 378 289 428 q 283 285 285 329 q 282 207 282 242 q 299 161 282 174 q 344 149 315 149 q 365 151 353 149 q 388 157 376 153 l 411 6 q 362 -10 389 -4 q 290 -17 335 -17 z "},"᾽":{"ha":771,"x_min":261,"x_max":521,"o":"m 326 789 l 310 869 q 354 885 336 875 q 372 918 372 896 q 347 958 372 943 q 261 976 322 972 l 274 1101 q 389 1087 342 1100 q 465 1052 436 1074 q 508 1000 494 1031 q 521 933 521 969 q 505 872 521 897 q 463 828 489 846 q 401 801 436 811 q 326 789 365 792 z "},"᾿":{"ha":771,"x_min":261,"x_max":521,"o":"m 326 789 l 310 869 q 354 885 336 875 q 372 918 372 896 q 347 958 372 943 q 261 976 322 972 l 274 1101 q 389 1087 342 1100 q 465 1052 436 1074 q 508 1000 494 1031 q 521 933 521 969 q 505 872 521 897 q 463 828 489 846 q 401 801 436 811 q 326 789 365 792 z "},"῾":{"ha":771,"x_min":251,"x_max":511,"o":"m 446 789 q 372 801 407 792 q 310 828 336 811 q 267 872 283 846 q 251 933 251 897 q 265 996 251 968 q 307 1044 278 1024 q 383 1076 336 1064 q 499 1090 431 1088 l 511 976 q 425 958 450 972 q 400 918 400 943 q 418 885 400 896 q 463 869 436 875 l 446 789 z "},"`":{"ha":771,"x_min":217,"x_max":461,"o":"m 325 771 l 217 1068 l 415 1101 l 461 796 l 325 771 z "},"´":{"ha":771,"x_min":311,"x_max":557,"o":"m 311 796 l 358 1101 l 557 1068 l 447 771 l 311 796 z "},"῍":{"ha":771,"x_min":117,"x_max":594,"o":"m 182 799 l 165 879 q 199 893 185 883 q 214 925 214 903 q 192 958 214 946 q 117 974 169 971 l 126 1088 q 294 1047 240 1085 q 349 947 349 1010 q 334 884 349 910 q 295 841 319 858 q 241 813 271 824 q 182 799 211 803 m 482 774 l 385 1069 l 550 1101 l 594 796 l 482 774 z "},"῝":{"ha":771,"x_min":115,"x_max":593,"o":"m 283 799 q 223 813 253 803 q 169 841 193 824 q 130 884 144 858 q 115 947 115 910 q 169 1047 115 1010 q 338 1088 224 1085 l 347 974 q 272 958 294 971 q 250 925 250 946 q 265 893 250 903 q 299 879 279 883 l 283 799 m 479 774 l 382 1069 l 547 1101 l 593 796 l 479 774 z "},"῎":{"ha":771,"x_min":117,"x_max":610,"o":"m 182 799 l 165 879 q 199 893 185 883 q 214 925 214 903 q 192 958 214 946 q 117 974 169 971 l 126 1088 q 294 1047 240 1085 q 349 947 349 1010 q 334 884 349 910 q 295 841 319 858 q 241 813 271 824 q 182 799 211 803 m 399 796 l 446 1101 l 610 1069 l 513 774 l 399 796 z "},"῞":{"ha":771,"x_min":129,"x_max":608,"o":"m 297 799 q 237 813 267 803 q 183 841 207 824 q 144 884 158 858 q 129 947 129 910 q 183 1047 129 1010 q 351 1088 238 1085 l 361 974 q 286 958 308 971 q 264 925 264 946 q 278 893 264 903 q 313 879 293 883 l 297 799 m 396 796 l 443 1101 l 608 1069 l 510 774 l 396 796 z "},"῏":{"ha":771,"x_min":169,"x_max":603,"o":"m 169 1024 q 213 1140 178 1103 q 306 1178 247 1178 q 356 1169 335 1178 q 394 1149 376 1160 q 426 1128 411 1138 q 456 1119 440 1119 q 499 1172 488 1119 l 603 1163 q 560 1046 594 1083 q 467 1008 525 1008 q 417 1017 438 1008 q 378 1038 396 1026 q 347 1058 361 1049 q 317 1067 332 1067 q 274 1014 285 1067 l 169 1024 m 338 782 l 325 847 q 356 856 344 850 q 367 872 367 861 q 348 892 367 885 q 276 904 329 900 l 294 986 q 454 958 408 982 q 500 893 500 935 q 452 815 500 842 q 338 782 404 789 z "},"῟":{"ha":771,"x_min":169,"x_max":603,"o":"m 435 782 q 320 815 368 789 q 272 893 272 842 q 283 931 272 914 q 317 958 293 947 q 381 976 342 969 q 478 986 421 983 l 496 904 q 424 892 443 900 q 406 872 406 885 q 417 856 406 861 q 447 847 428 850 l 435 782 m 169 1024 q 213 1140 178 1103 q 306 1178 247 1178 q 356 1169 335 1178 q 394 1149 376 1160 q 426 1128 411 1138 q 456 1119 440 1119 q 499 1172 488 1119 l 603 1163 q 560 1046 594 1083 q 467 1008 525 1008 q 417 1017 438 1008 q 378 1038 396 1026 q 347 1058 361 1049 q 317 1067 332 1067 q 274 1014 285 1067 l 169 1024 z "},"῀":{"ha":771,"x_min":122,"x_max":650,"o":"m 478 796 q 419 810 444 796 q 372 840 393 824 q 333 871 350 857 q 299 885 315 885 q 266 867 278 885 q 250 808 254 849 l 122 815 q 169 975 125 924 q 294 1026 214 1026 q 353 1013 328 1026 q 401 982 379 999 q 440 951 422 965 q 474 938 457 938 q 522 1014 514 938 l 650 1007 q 603 847 647 899 q 478 796 558 796 z "},"῭":{"ha":771,"x_min":124,"x_max":649,"o":"m 201 811 q 147 833 169 811 q 124 890 124 854 q 147 947 124 926 q 201 968 169 968 q 258 947 235 968 q 281 890 281 926 q 258 833 281 854 q 201 811 235 811 m 367 788 l 265 1083 l 408 1113 l 457 807 l 367 788 m 571 811 q 515 833 538 811 q 492 890 492 854 q 515 947 492 926 q 571 968 538 968 q 626 947 603 968 q 649 890 649 926 q 626 833 649 854 q 571 811 603 811 z "},"΅":{"ha":771,"x_min":124,"x_max":649,"o":"m 315 807 l 365 1113 l 508 1083 l 406 788 l 315 807 m 201 811 q 147 833 169 811 q 124 890 124 854 q 147 947 124 926 q 201 968 169 968 q 258 947 235 968 q 281 890 281 926 q 258 833 281 854 q 201 811 235 811 m 571 811 q 515 833 538 811 q 492 890 492 854 q 515 947 492 926 q 571 968 538 968 q 626 947 603 968 q 649 890 649 926 q 626 833 649 854 q 571 811 603 811 z "},"῁":{"ha":771,"x_min":149,"x_max":624,"o":"m 164 1010 q 206 1126 171 1088 q 293 1165 240 1165 q 351 1156 326 1165 q 396 1135 376 1146 q 432 1114 415 1124 q 468 1104 449 1104 q 519 1158 507 1104 l 608 1149 q 567 1033 601 1072 q 479 993 532 993 q 421 1003 446 993 q 376 1024 396 1013 q 340 1044 357 1035 q 304 1054 322 1054 q 272 1042 285 1054 q 253 1000 260 1029 l 164 1010 m 235 793 q 173 817 197 793 q 149 878 149 842 q 173 939 149 914 q 235 964 197 964 q 297 939 272 964 q 321 878 321 914 q 297 817 321 842 q 235 793 272 793 m 538 793 q 476 817 500 793 q 451 878 451 842 q 476 939 451 914 q 538 964 500 964 q 599 939 575 964 q 624 878 624 914 q 599 817 624 842 q 538 793 575 793 z "},"А":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 z "},"Б":{"ha":833,"x_min":107,"x_max":783,"o":"m 107 0 l 107 906 l 725 906 l 725 733 l 311 733 l 311 551 l 436 551 q 570 538 507 551 q 681 494 633 525 q 756 413 728 463 q 783 288 783 363 q 757 155 783 210 q 684 66 731 100 q 575 16 638 32 q 442 0 513 0 l 107 0 m 311 158 l 421 158 q 543 188 503 158 q 583 285 583 218 q 542 375 583 349 q 419 401 500 401 l 311 401 l 311 158 z "},"В":{"ha":840,"x_min":107,"x_max":794,"o":"m 107 0 l 107 906 l 417 906 q 548 895 488 906 q 653 858 608 885 q 724 789 699 832 q 750 681 750 746 q 742 619 750 650 q 718 563 733 589 q 681 515 703 536 q 632 485 660 494 l 632 479 q 696 453 667 471 q 747 410 725 436 q 782 348 769 383 q 794 267 794 313 q 767 147 794 197 q 692 65 740 97 q 581 16 644 32 q 443 0 517 0 l 107 0 m 311 543 l 407 543 q 516 572 482 543 q 550 650 550 601 q 515 725 550 703 q 408 747 481 747 l 311 747 l 311 543 m 311 158 l 426 158 q 594 281 594 158 q 553 366 594 340 q 426 392 511 392 l 311 392 l 311 158 z "},"Г":{"ha":724,"x_min":107,"x_max":678,"o":"m 107 0 l 107 906 l 678 906 l 678 733 l 311 733 l 311 0 l 107 0 z "},"Д":{"ha":931,"x_min":18,"x_max":913,"o":"m 218 0 l 218 -261 l 36 -261 l 18 44 l 18 172 l 60 172 q 91 197 75 178 q 124 251 107 215 q 157 345 140 288 q 189 485 174 403 q 209 593 200 544 q 226 690 218 642 q 244 789 235 738 q 264 906 253 840 l 801 906 l 801 172 l 913 172 l 913 44 l 894 -261 l 713 -261 l 713 0 l 218 0 m 372 458 q 332 296 354 367 q 278 172 310 225 l 597 172 l 597 733 l 422 733 q 410 660 415 693 q 399 597 404 628 q 387 533 393 565 q 372 458 381 500 z "},"Е":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 z "},"Ж":{"ha":1206,"x_min":3,"x_max":1203,"o":"m 3 0 l 264 478 l 188 649 q 140 714 164 697 q 86 731 117 731 q 69 730 79 731 q 47 725 58 729 l 13 910 q 48 919 28 917 q 88 922 68 922 q 222 888 164 922 q 326 758 279 853 l 425 550 l 506 550 l 506 906 l 700 906 l 700 550 l 781 550 l 878 758 q 928 838 901 806 q 983 888 954 869 q 1046 915 1013 907 q 1118 922 1079 922 q 1157 919 1138 922 q 1192 910 1176 917 l 1158 725 q 1137 730 1147 729 q 1119 731 1126 731 q 1065 714 1088 731 q 1018 649 1042 697 l 940 476 l 1203 0 l 983 0 l 793 385 l 700 385 l 700 0 l 506 0 l 506 385 l 413 385 l 222 0 l 3 0 z "},"З":{"ha":783,"x_min":49,"x_max":738,"o":"m 382 -17 q 207 12 293 -17 q 49 108 121 40 l 157 249 q 263 181 208 201 q 379 160 318 160 q 494 192 450 160 q 538 282 538 224 q 497 366 538 340 q 374 392 457 392 l 253 392 l 253 543 l 346 543 q 461 570 428 543 q 494 646 494 597 q 459 722 494 699 q 367 746 424 746 q 269 727 314 746 q 181 675 225 708 l 78 811 q 215 894 139 865 q 374 922 290 922 q 613 857 531 922 q 694 679 694 792 q 666 561 694 613 q 579 483 638 510 l 579 478 q 692 403 647 458 q 738 267 738 349 q 710 144 738 197 q 635 55 683 90 q 522 1 588 19 q 382 -17 457 -17 z "},"И":{"ha":939,"x_min":107,"x_max":832,"o":"m 107 0 l 107 906 l 310 906 l 310 586 q 300 417 310 506 q 283 256 290 328 l 289 256 l 378 454 l 615 906 l 832 906 l 832 0 l 631 0 l 631 321 q 640 488 631 401 q 656 649 649 574 l 650 649 l 561 451 l 324 0 l 107 0 z "},"Й":{"ha":939,"x_min":107,"x_max":832,"o":"m 107 0 l 107 906 l 310 906 l 310 586 q 300 417 310 506 q 283 256 290 328 l 289 256 l 378 454 l 615 906 l 832 906 l 832 0 l 631 0 l 631 321 q 640 488 631 401 q 656 649 649 574 l 650 649 l 561 451 l 324 0 l 107 0 m 475 979 q 362 994 408 979 q 286 1033 315 1008 q 243 1094 257 1058 q 228 1171 229 1129 l 400 1171 q 420 1106 403 1129 q 475 1082 438 1082 q 530 1106 513 1082 q 550 1171 547 1129 l 722 1171 q 706 1094 719 1129 q 663 1033 692 1058 q 588 994 633 1008 q 475 979 542 979 z "},"К":{"ha":864,"x_min":107,"x_max":867,"o":"m 107 0 l 107 906 l 311 906 l 311 550 l 411 550 l 529 758 q 581 835 556 804 q 636 886 607 867 q 697 914 665 906 q 768 922 729 922 q 808 919 788 922 q 843 910 828 917 l 810 725 q 788 730 799 729 q 769 731 776 731 q 717 714 739 731 q 668 649 696 697 l 572 482 l 867 0 l 651 0 l 411 385 l 311 385 l 311 0 l 107 0 z "},"Л":{"ha":913,"x_min":-14,"x_max":807,"o":"m 92 -17 q 32 -14 56 -17 q -14 -3 8 -11 l 22 181 q 41 176 32 178 q 61 175 50 175 q 93 181 78 175 q 122 210 108 188 q 151 276 136 233 q 181 392 165 318 q 232 646 208 518 q 279 906 256 774 l 807 906 l 807 0 l 601 0 l 601 733 l 436 733 q 403 549 419 638 q 369 369 386 460 q 322 181 347 256 q 263 62 296 106 q 188 1 229 18 q 92 -17 146 -17 z "},"М":{"ha":1058,"x_min":107,"x_max":951,"o":"m 107 0 l 107 906 l 331 906 l 476 503 q 503 420 490 463 q 529 336 515 378 l 535 336 q 560 420 549 378 q 586 503 572 463 l 729 906 l 951 906 l 951 0 l 765 0 l 765 332 q 768 406 765 365 q 775 487 771 446 q 783 567 779 528 q 792 640 788 607 l 786 640 l 713 425 l 583 79 l 471 79 l 342 425 l 269 640 l 264 640 q 272 567 268 607 q 281 487 276 528 q 288 406 285 446 q 290 332 290 365 l 290 0 l 107 0 z "},"Н":{"ha":936,"x_min":107,"x_max":829,"o":"m 107 0 l 107 906 l 311 906 l 311 557 l 624 557 l 624 906 l 829 906 l 829 0 l 624 0 l 624 378 l 311 378 l 311 0 l 107 0 z "},"О":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 z "},"П":{"ha":921,"x_min":107,"x_max":814,"o":"m 107 0 l 107 906 l 814 906 l 814 0 l 610 0 l 610 733 l 311 733 l 311 0 l 107 0 z "},"Р":{"ha":828,"x_min":107,"x_max":778,"o":"m 107 0 l 107 906 l 418 906 q 558 891 493 906 q 672 842 624 876 q 749 752 721 808 q 778 614 778 696 q 749 476 778 535 q 672 381 721 418 q 560 325 624 343 q 424 307 496 307 l 311 307 l 311 0 l 107 0 m 311 469 l 411 469 q 578 614 578 469 q 533 714 578 685 q 406 743 489 743 l 311 743 l 311 469 z "},"С":{"ha":808,"x_min":64,"x_max":778,"o":"m 485 -17 q 322 13 399 -17 q 188 101 246 43 q 97 247 131 160 q 64 447 64 333 q 99 648 64 560 q 192 797 133 736 q 328 890 250 858 q 492 922 406 922 q 649 887 579 922 q 764 804 718 851 l 656 674 q 583 726 621 706 q 496 746 544 746 q 409 726 450 746 q 338 668 368 706 q 291 576 308 631 q 274 454 274 522 q 333 237 274 314 q 493 160 393 160 q 592 184 549 160 q 669 244 636 208 l 778 117 q 485 -17 664 -17 z "},"Т":{"ha":772,"x_min":35,"x_max":738,"o":"m 283 0 l 283 733 l 35 733 l 35 906 l 738 906 l 738 733 l 489 733 l 489 0 l 283 0 z "},"У":{"ha":771,"x_min":1,"x_max":778,"o":"m 219 -17 q 151 -12 179 -17 q 104 1 124 -7 l 140 179 q 167 172 153 175 q 208 168 181 168 q 296 210 272 168 l 308 236 l 1 906 l 218 906 l 324 642 l 400 425 l 406 425 l 476 642 l 572 906 l 778 906 l 499 206 q 391 42 457 101 q 219 -17 325 -17 z "},"Ф":{"ha":1061,"x_min":63,"x_max":999,"o":"m 807 457 q 756 598 807 551 q 618 651 706 644 l 618 257 q 756 313 706 264 q 807 457 807 361 m 254 457 q 304 313 254 361 q 442 257 354 264 l 442 651 q 304 598 354 644 q 254 457 254 551 m 442 -17 l 442 106 q 164 203 265 115 q 63 457 63 292 q 164 706 63 621 q 442 803 265 792 l 442 922 l 618 922 l 618 803 q 897 707 796 792 q 999 457 999 622 q 897 203 999 290 q 618 106 796 117 l 618 -17 l 442 -17 z "},"Х":{"ha":788,"x_min":15,"x_max":772,"o":"m 15 0 l 267 465 l 31 906 l 258 906 l 338 735 q 368 667 353 703 q 403 589 383 632 l 408 589 q 438 667 424 632 q 467 735 453 703 l 539 906 l 757 906 l 522 456 l 772 0 l 544 0 l 454 185 q 422 256 438 221 q 386 333 406 292 l 381 333 q 350 256 365 292 q 319 185 335 221 l 235 0 l 15 0 z "},"Ц":{"ha":929,"x_min":107,"x_max":913,"o":"m 107 0 l 107 906 l 311 906 l 311 172 l 597 172 l 597 906 l 801 906 l 801 172 l 913 172 l 913 44 l 894 -261 l 711 -261 l 711 0 l 107 0 z "},"Ч":{"ha":875,"x_min":83,"x_max":768,"o":"m 563 0 l 563 367 q 501 359 532 361 q 426 357 471 357 q 283 374 346 357 q 175 431 219 392 q 107 533 131 471 q 83 688 83 596 l 83 906 l 285 906 l 285 688 q 324 556 285 593 q 447 519 363 519 q 515 522 488 519 q 563 529 542 525 l 563 906 l 768 906 l 768 0 l 563 0 z "},"Ш":{"ha":1264,"x_min":107,"x_max":1157,"o":"m 107 0 l 107 906 l 307 906 l 307 172 l 535 172 l 535 906 l 731 906 l 731 172 l 957 172 l 957 906 l 1157 906 l 1157 0 l 107 0 z "},"Щ":{"ha":1286,"x_min":107,"x_max":1268,"o":"m 1068 -261 l 1068 0 l 107 0 l 107 906 l 307 906 l 307 172 l 535 172 l 535 906 l 731 906 l 731 172 l 957 172 l 957 906 l 1157 906 l 1157 172 l 1268 172 l 1268 44 l 1250 -261 l 1068 -261 z "},"Ъ":{"ha":1014,"x_min":35,"x_max":963,"o":"m 300 0 l 300 733 l 35 733 l 35 906 l 506 906 l 506 575 l 603 575 q 740 559 675 575 q 855 509 806 543 q 933 422 904 475 q 963 296 963 369 q 935 158 963 214 q 859 66 907 101 q 747 15 811 31 q 610 0 683 0 l 300 0 m 506 163 l 597 163 q 720 192 678 163 q 763 293 763 222 q 592 413 763 413 l 506 413 l 506 163 z "},"Ы":{"ha":1185,"x_min":107,"x_max":1078,"o":"m 107 0 l 107 906 l 311 906 l 311 575 l 401 575 q 543 560 478 575 q 656 510 608 544 q 729 424 703 476 q 756 296 756 371 q 728 158 756 214 q 652 66 700 101 q 538 15 604 31 q 397 0 472 0 l 107 0 m 311 163 l 385 163 q 510 192 465 163 q 556 293 556 222 q 385 413 556 413 l 311 413 l 311 163 m 874 0 l 874 906 l 1078 906 l 1078 0 l 874 0 z "},"Ь":{"ha":833,"x_min":107,"x_max":782,"o":"m 107 0 l 107 906 l 311 906 l 311 575 l 428 575 q 569 560 504 575 q 682 510 635 544 q 756 424 729 476 q 782 296 782 371 q 754 158 782 214 q 678 66 726 101 q 565 15 631 31 q 425 0 500 0 l 107 0 m 311 163 l 413 163 q 538 192 493 163 q 582 293 582 222 q 411 413 582 413 l 311 413 l 311 163 z "},"Э":{"ha":808,"x_min":31,"x_max":744,"o":"m 332 -17 q 31 117 153 -17 l 139 244 q 222 184 175 208 q 329 160 269 160 q 470 211 417 160 q 538 381 524 263 l 222 381 l 222 551 l 535 551 q 465 699 518 653 q 325 746 411 746 q 233 726 274 746 q 153 674 192 707 l 44 804 q 170 887 94 851 q 336 922 246 922 q 497 893 422 922 q 627 805 572 864 q 713 657 682 746 q 744 447 744 568 q 712 239 744 326 q 623 94 679 151 q 492 10 567 38 q 332 -17 417 -17 z "},"Ю":{"ha":1319,"x_min":107,"x_max":1256,"o":"m 856 -17 q 588 87 690 -17 q 467 378 486 190 l 311 378 l 311 0 l 107 0 l 107 906 l 311 906 l 311 557 l 469 557 q 594 828 493 733 q 856 922 696 922 q 1021 891 947 922 q 1147 800 1094 860 q 1227 653 1199 740 q 1256 457 1256 567 q 1227 258 1256 346 q 1147 110 1199 171 q 1021 16 1094 49 q 856 -17 947 -17 m 856 160 q 997 240 947 160 q 1046 457 1046 319 q 997 669 1046 593 q 856 746 947 746 q 715 669 764 746 q 667 457 667 593 q 715 240 667 319 q 856 160 764 160 z "},"Я":{"ha":857,"x_min":17,"x_max":750,"o":"m 544 0 l 544 326 l 443 326 l 250 0 l 17 0 l 249 357 q 122 453 171 388 q 74 624 74 518 q 101 758 74 704 q 177 845 129 813 q 288 892 225 878 q 424 906 351 906 l 750 906 l 750 0 l 544 0 m 440 489 l 544 489 l 544 743 l 440 743 q 317 717 358 743 q 275 624 275 690 q 440 489 275 489 z "},"Ѐ":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 414 944 l 160 1110 l 268 1242 l 506 1047 l 414 944 z "},"Ё":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 246 972 q 176 1000 203 972 q 149 1069 149 1028 q 176 1139 149 1111 q 246 1167 203 1167 q 316 1139 289 1167 q 343 1069 343 1111 q 316 1000 343 1028 q 246 972 289 972 m 554 972 q 484 1000 511 972 q 457 1069 457 1028 q 484 1139 457 1111 q 554 1167 511 1167 q 624 1139 597 1167 q 651 1069 651 1111 q 624 1000 651 1028 q 554 972 597 972 z "},"Ђ":{"ha":974,"x_min":35,"x_max":919,"o":"m 656 -17 q 561 -3 599 -17 l 593 153 q 612 147 604 149 q 631 146 619 146 q 662 152 646 146 q 690 173 678 158 q 711 210 703 188 q 719 264 719 232 q 680 369 719 335 q 565 403 640 403 q 507 400 529 403 q 461 393 485 397 l 461 0 l 256 0 l 256 733 l 35 733 l 35 906 l 749 906 l 749 733 l 461 733 l 461 556 q 492 560 478 558 q 521 564 506 563 q 554 566 536 565 q 596 567 572 567 q 718 550 660 567 q 821 497 776 533 q 892 404 865 461 q 919 267 919 347 q 900 138 919 192 q 845 49 881 83 q 761 -1 810 15 q 656 -17 713 -17 z "},"Ѓ":{"ha":724,"x_min":107,"x_max":678,"o":"m 107 0 l 107 906 l 678 906 l 678 733 l 311 733 l 311 0 l 107 0 m 396 944 l 304 1047 l 542 1242 l 650 1110 l 396 944 z "},"Є":{"ha":808,"x_min":64,"x_max":778,"o":"m 485 -17 q 320 10 397 -17 q 186 94 243 38 q 97 239 129 151 q 64 447 64 326 q 98 657 64 568 q 190 805 132 746 q 325 893 247 864 q 490 922 403 922 q 649 887 579 922 q 764 804 718 851 l 656 674 q 583 726 621 706 q 496 746 544 746 q 353 699 413 746 q 275 551 294 653 l 586 551 l 586 381 l 271 381 q 342 211 285 263 q 493 160 399 160 q 592 184 549 160 q 669 244 636 208 l 778 117 q 485 -17 664 -17 z "},"Ѕ":{"ha":772,"x_min":49,"x_max":725,"o":"m 383 -17 q 206 16 294 -17 q 49 114 118 49 l 165 254 q 273 186 214 213 q 389 160 332 160 q 484 183 453 160 q 515 247 515 207 q 506 283 515 268 q 480 310 497 299 q 438 333 463 322 q 385 356 414 343 l 267 406 q 199 442 232 419 q 141 494 167 464 q 100 563 115 524 q 85 653 85 603 q 108 758 85 708 q 175 844 132 807 q 277 901 218 881 q 407 922 336 922 q 563 892 486 922 q 699 803 640 861 l 594 674 q 506 727 550 708 q 407 746 461 746 q 323 724 354 746 q 292 664 292 703 q 302 628 292 643 q 331 602 313 614 q 375 580 350 590 q 429 557 400 569 l 546 510 q 677 418 629 476 q 725 264 725 360 q 702 156 725 207 q 635 67 679 106 q 528 6 592 29 q 383 -17 464 -17 z "},"І":{"ha":418,"x_min":107,"x_max":311,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 z "},"Ї":{"ha":418,"x_min":-43,"x_max":460,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 m 54 972 q -16 1000 11 972 q -43 1069 -43 1028 q -16 1139 -43 1111 q 54 1167 11 1167 q 124 1139 97 1167 q 151 1069 151 1111 q 124 1000 151 1028 q 54 972 97 972 m 363 972 q 292 1000 319 972 q 265 1069 265 1028 q 292 1139 265 1111 q 363 1167 319 1167 q 433 1139 406 1167 q 460 1069 460 1111 q 433 1000 460 1028 q 363 972 406 972 z "},"Ј":{"ha":707,"x_min":22,"x_max":604,"o":"m 314 -17 q 140 24 210 -17 q 22 147 69 64 l 161 250 q 219 182 186 204 q 288 160 253 160 q 372 194 343 160 q 400 318 400 228 l 400 906 l 604 906 l 604 301 q 587 178 604 236 q 534 76 569 119 q 444 8 499 33 q 314 -17 389 -17 z "},"Љ":{"ha":1278,"x_min":4,"x_max":1226,"o":"m 110 -17 q 50 -14 74 -17 q 4 -3 26 -11 l 42 181 q 59 176 50 178 q 81 175 68 175 q 112 181 97 175 q 141 210 126 188 q 169 276 156 233 q 200 392 183 318 q 251 646 228 518 q 297 906 274 774 l 797 906 l 797 575 l 872 575 q 1014 560 949 575 q 1126 510 1079 544 q 1200 424 1174 476 q 1226 296 1226 371 q 1199 158 1226 214 q 1123 66 1171 101 q 1009 15 1075 31 q 868 0 943 0 l 592 0 l 592 733 l 454 733 q 422 548 438 638 q 390 369 407 458 q 342 181 368 256 q 282 62 315 106 q 206 1 249 18 q 110 -17 164 -17 m 797 163 l 856 163 q 982 192 938 163 q 1026 293 1026 222 q 856 413 1026 413 l 797 413 l 797 163 z "},"Њ":{"ha":1296,"x_min":107,"x_max":1244,"o":"m 107 0 l 107 906 l 311 906 l 311 557 l 610 557 l 610 906 l 815 906 l 815 575 l 890 575 q 1032 560 967 575 q 1144 510 1097 544 q 1218 424 1192 476 q 1244 296 1244 371 q 1217 158 1244 214 q 1141 66 1189 101 q 1027 15 1093 31 q 886 0 961 0 l 610 0 l 610 378 l 311 378 l 311 0 l 107 0 m 815 163 l 874 163 q 999 192 954 163 q 1044 293 1044 222 q 874 413 1044 413 l 815 413 l 815 163 z "},"Ћ":{"ha":997,"x_min":35,"x_max":913,"o":"m 256 0 l 256 733 l 35 733 l 35 906 l 749 906 l 749 733 l 461 733 l 461 556 q 522 564 493 561 q 583 567 551 567 q 719 549 658 567 q 823 494 781 532 q 889 399 865 457 q 913 258 913 340 l 913 0 l 713 0 l 713 258 q 678 368 713 333 q 561 403 643 403 q 510 400 536 403 q 461 393 485 397 l 461 0 l 256 0 z "},"Ќ":{"ha":864,"x_min":107,"x_max":867,"o":"m 107 0 l 107 906 l 311 906 l 311 550 l 411 550 l 529 758 q 581 835 556 804 q 636 886 607 867 q 697 914 665 906 q 768 922 729 922 q 808 919 788 922 q 843 910 828 917 l 810 725 q 788 730 799 729 q 769 731 776 731 q 717 714 739 731 q 668 649 696 697 l 572 482 l 867 0 l 651 0 l 411 385 l 311 385 l 311 0 l 107 0 m 463 956 l 371 1058 l 608 1253 l 717 1121 l 463 956 z "},"Ѝ":{"ha":939,"x_min":107,"x_max":832,"o":"m 107 0 l 107 906 l 310 906 l 310 586 q 300 417 310 506 q 283 256 290 328 l 289 256 l 378 454 l 615 906 l 832 906 l 832 0 l 631 0 l 631 321 q 640 488 631 401 q 656 649 649 574 l 650 649 l 561 451 l 324 0 l 107 0 m 489 956 l 235 1121 l 343 1253 l 581 1058 l 489 956 z "},"Ў":{"ha":771,"x_min":1,"x_max":778,"o":"m 219 -17 q 151 -12 179 -17 q 104 1 124 -7 l 140 179 q 167 172 153 175 q 208 168 181 168 q 296 210 272 168 l 308 236 l 1 906 l 218 906 l 324 642 l 400 425 l 406 425 l 476 642 l 572 906 l 778 906 l 499 206 q 391 42 457 101 q 219 -17 325 -17 m 397 968 q 284 983 331 968 q 208 1022 238 997 q 165 1083 179 1047 q 150 1160 151 1118 l 322 1160 q 342 1094 325 1118 q 397 1071 360 1071 q 452 1094 435 1071 q 472 1160 469 1118 l 644 1160 q 628 1083 642 1118 q 585 1022 614 1047 q 510 983 556 997 q 397 968 464 968 z "},"Џ":{"ha":921,"x_min":107,"x_max":814,"o":"m 107 0 l 107 906 l 311 906 l 311 172 l 610 172 l 610 906 l 814 906 l 814 0 l 569 0 l 554 -261 l 371 -261 l 371 0 l 107 0 z "},"Ѣ":{"ha":867,"x_min":35,"x_max":815,"o":"m 200 0 l 200 671 l 35 671 l 35 833 l 200 833 l 200 967 l 406 967 l 406 833 l 704 833 l 704 671 l 406 671 l 406 539 l 461 539 q 599 526 535 539 q 712 483 664 513 q 788 406 760 454 q 815 290 815 358 q 789 153 815 208 q 716 63 763 97 q 606 15 669 29 q 468 0 542 0 l 200 0 m 406 158 l 456 158 q 575 185 535 158 q 615 283 615 213 q 576 369 615 343 q 450 394 538 394 l 406 394 l 406 158 z "},"Ѳ":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 309 14 385 -17 q 179 105 233 44 q 94 253 125 165 q 64 457 64 342 q 94 659 64 572 q 179 804 125 746 q 309 892 233 863 q 475 922 385 922 q 642 892 567 922 q 772 804 718 863 q 856 658 826 746 q 886 457 886 571 q 856 253 886 342 q 772 105 826 165 q 642 14 718 44 q 475 -17 567 -17 m 475 754 q 342 702 394 754 q 274 547 289 650 l 676 547 q 609 702 661 650 q 475 754 557 754 m 475 151 q 613 210 560 151 q 679 385 665 269 l 271 385 q 338 210 285 269 q 475 151 392 151 z "},"Ѵ":{"ha":797,"x_min":-10,"x_max":846,"o":"m 264 0 l -10 906 l 207 906 l 315 483 q 351 338 335 408 q 389 193 368 268 l 394 193 q 424 338 411 268 q 456 483 438 408 l 507 679 q 592 865 538 807 q 747 922 647 922 q 804 918 783 922 q 846 906 825 914 l 810 722 q 790 728 801 725 q 768 731 779 731 q 718 706 736 731 q 689 642 700 682 l 519 0 l 264 0 z "},"Ґ":{"ha":724,"x_min":107,"x_max":692,"o":"m 107 0 l 107 906 l 489 906 l 517 1144 l 692 1144 l 678 733 l 311 733 l 311 0 l 107 0 z "},"Ғ":{"ha":758,"x_min":36,"x_max":713,"o":"m 36 393 l 36 485 l 142 492 l 142 906 l 713 906 l 713 733 l 346 733 l 346 492 l 519 492 l 519 393 l 346 393 l 346 0 l 142 0 l 142 393 l 36 393 z "},"Җ":{"ha":1257,"x_min":3,"x_max":1240,"o":"m 1039 -261 l 1039 0 l 983 0 l 793 385 l 700 385 l 700 0 l 506 0 l 506 385 l 413 385 l 222 0 l 3 0 l 264 478 l 188 649 q 140 714 164 697 q 86 731 117 731 q 69 730 79 731 q 47 725 58 729 l 13 910 q 48 919 28 917 q 88 922 68 922 q 222 888 164 922 q 326 758 279 853 l 425 550 l 506 550 l 506 906 l 700 906 l 700 550 l 781 550 l 878 758 q 928 838 901 806 q 983 888 954 869 q 1046 915 1013 907 q 1118 922 1079 922 q 1157 919 1138 922 q 1192 910 1176 917 l 1158 725 q 1137 730 1147 729 q 1119 731 1126 731 q 1065 714 1088 731 q 1018 649 1042 697 l 940 476 l 1108 172 l 1240 172 l 1240 44 l 1222 -261 l 1039 -261 z "},"Ҙ":{"ha":783,"x_min":49,"x_max":738,"o":"m 300 -261 l 300 -11 q 168 28 232 0 q 49 108 104 56 l 157 249 q 263 181 208 201 q 379 160 318 160 q 494 192 450 160 q 538 282 538 224 q 497 366 538 340 q 374 392 457 392 l 253 392 l 253 543 l 346 543 q 461 570 428 543 q 494 646 494 597 q 459 722 494 699 q 367 746 424 746 q 269 727 314 746 q 181 675 225 708 l 78 811 q 215 894 139 865 q 374 922 290 922 q 613 857 531 922 q 694 679 694 792 q 666 561 694 613 q 579 483 638 510 l 579 478 q 692 403 647 458 q 738 267 738 349 q 720 166 738 211 q 671 87 703 121 q 594 30 639 53 q 497 -4 550 7 l 482 -261 l 300 -261 z "},"Қ":{"ha":926,"x_min":107,"x_max":908,"o":"m 708 -261 l 708 0 l 651 0 l 411 385 l 311 385 l 311 0 l 107 0 l 107 906 l 311 906 l 311 550 l 411 550 l 529 758 q 581 835 556 804 q 636 886 607 867 q 697 914 665 906 q 768 922 729 922 q 808 919 788 922 q 843 910 828 917 l 810 725 q 788 730 799 729 q 769 731 776 731 q 717 714 739 731 q 668 649 696 697 l 572 482 l 761 172 l 908 172 l 908 44 l 890 -261 l 708 -261 z "},"Ҡ":{"ha":1040,"x_min":35,"x_max":1044,"o":"m 283 0 l 283 733 l 35 733 l 35 906 l 489 906 l 489 550 l 589 550 l 706 758 q 813 886 758 850 q 946 922 868 922 q 985 919 965 922 q 1019 910 1004 917 l 986 725 q 965 730 975 729 q 947 731 954 731 q 894 714 915 731 q 846 649 874 697 l 749 481 l 1044 0 l 829 0 l 588 385 l 489 385 l 489 0 l 283 0 z "},"Ң":{"ha":957,"x_min":107,"x_max":939,"o":"m 739 -261 l 739 0 l 624 0 l 624 378 l 311 378 l 311 0 l 107 0 l 107 906 l 311 906 l 311 557 l 624 557 l 624 906 l 829 906 l 829 172 l 939 172 l 939 44 l 922 -261 l 739 -261 z "},"Ҫ":{"ha":808,"x_min":64,"x_max":778,"o":"m 388 -261 l 388 -7 q 259 44 318 8 q 157 138 200 81 q 89 272 114 194 q 64 447 64 350 q 99 648 64 560 q 192 797 133 736 q 328 890 250 858 q 492 922 406 922 q 649 887 579 922 q 764 804 718 851 l 656 674 q 583 726 621 706 q 496 746 544 746 q 409 726 450 746 q 338 668 368 706 q 291 576 308 631 q 274 454 274 522 q 333 237 274 314 q 493 160 393 160 q 592 184 549 160 q 669 244 636 208 l 778 117 q 586 -4 697 24 l 571 -261 l 388 -261 z "},"Ү":{"ha":729,"x_min":-11,"x_max":740,"o":"m 263 0 l 263 322 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 467 322 l 467 0 l 263 0 z "},"Ұ":{"ha":729,"x_min":-11,"x_max":740,"o":"m 67 299 l 67 389 l 196 397 l 228 397 l -11 906 l 208 906 l 289 697 q 326 598 308 646 q 363 497 343 550 l 368 497 q 406 598 388 550 q 444 697 425 646 l 526 906 l 740 906 l 501 397 l 663 397 l 663 299 l 467 299 l 467 0 l 263 0 l 263 299 l 67 299 z "},"Ҳ":{"ha":840,"x_min":15,"x_max":822,"o":"m 628 -261 l 628 0 l 544 0 l 454 185 q 422 256 438 221 q 386 333 406 292 l 381 333 q 350 256 365 292 q 319 185 335 221 l 235 0 l 15 0 l 267 465 l 31 906 l 258 906 l 338 735 q 368 667 353 703 q 403 589 383 632 l 408 589 q 438 667 424 632 q 467 735 453 703 l 539 906 l 757 906 l 522 456 l 678 172 l 822 172 l 822 44 l 806 -261 l 628 -261 z "},"Ҷ":{"ha":896,"x_min":83,"x_max":878,"o":"m 683 -261 l 683 0 l 563 0 l 563 367 q 501 359 532 361 q 426 357 471 357 q 283 374 346 357 q 175 431 219 392 q 107 533 131 471 q 83 688 83 596 l 83 906 l 285 906 l 285 688 q 324 556 285 593 q 447 519 363 519 q 515 522 488 519 q 563 529 542 525 l 563 906 l 768 906 l 768 172 l 878 172 l 878 44 l 861 -261 l 683 -261 z "},"Һ":{"ha":875,"x_min":107,"x_max":790,"o":"m 107 0 l 107 906 l 311 906 l 311 576 q 372 584 342 582 q 447 586 403 586 q 591 569 528 586 q 699 512 654 551 q 767 410 743 472 q 790 256 790 347 l 790 0 l 590 0 l 590 256 q 551 387 590 350 q 426 424 513 424 q 360 421 386 424 q 311 414 333 418 l 311 0 l 107 0 z "},"Ӏ":{"ha":418,"x_min":107,"x_max":311,"o":"m 107 0 l 107 906 l 311 906 l 311 0 l 107 0 z "},"Ӂ":{"ha":1206,"x_min":3,"x_max":1203,"o":"m 3 0 l 264 478 l 188 649 q 140 714 164 697 q 86 731 117 731 q 69 730 79 731 q 47 725 58 729 l 13 910 q 48 919 28 917 q 88 922 68 922 q 222 888 164 922 q 326 758 279 853 l 425 550 l 506 550 l 506 906 l 700 906 l 700 550 l 781 550 l 878 758 q 928 838 901 806 q 983 888 954 869 q 1046 915 1013 907 q 1118 922 1079 922 q 1157 919 1138 922 q 1192 910 1176 917 l 1158 725 q 1137 730 1147 729 q 1119 731 1126 731 q 1065 714 1088 731 q 1018 649 1042 697 l 940 476 l 1203 0 l 983 0 l 793 385 l 700 385 l 700 0 l 506 0 l 506 385 l 413 385 l 222 0 l 3 0 m 603 968 q 490 983 536 968 q 414 1022 443 997 q 371 1083 385 1047 q 356 1160 357 1118 l 528 1160 q 548 1094 531 1118 q 603 1071 565 1071 q 658 1094 640 1071 q 678 1160 675 1118 l 850 1160 q 833 1083 847 1118 q 790 1022 819 1047 q 715 983 761 997 q 603 968 669 968 z "},"Ӑ":{"ha":796,"x_min":-8,"x_max":804,"o":"m 319 458 l 297 375 l 490 375 l 469 458 q 432 603 450 526 q 396 750 414 679 l 390 750 q 356 602 374 678 q 319 458 339 526 m -8 0 l 275 906 l 521 906 l 804 0 l 588 0 l 532 215 l 256 215 l 200 0 l -8 0 m 397 968 q 284 983 331 968 q 208 1022 238 997 q 165 1083 179 1047 q 150 1160 151 1118 l 322 1160 q 342 1094 325 1118 q 397 1071 360 1071 q 452 1094 435 1071 q 472 1160 469 1118 l 644 1160 q 628 1083 642 1118 q 585 1022 614 1047 q 510 983 556 997 q 397 968 464 968 z "},"Ӕ":{"ha":1174,"x_min":-19,"x_max":1101,"o":"m 421 494 l 363 365 l 536 365 l 536 751 l 531 751 q 476 619 503 685 q 421 494 449 554 m -19 0 l 411 906 l 1088 906 l 1088 733 l 740 733 l 740 551 l 1033 551 l 1033 381 l 740 381 l 740 172 l 1101 172 l 1101 0 l 536 0 l 536 207 l 290 207 l 196 0 l -19 0 z "},"Ӗ":{"ha":761,"x_min":107,"x_max":688,"o":"m 107 0 l 107 906 l 674 906 l 674 733 l 311 733 l 311 551 l 619 551 l 619 381 l 311 381 l 311 172 l 688 172 l 688 0 l 107 0 m 400 968 q 287 983 333 968 q 211 1022 240 997 q 168 1083 182 1047 q 153 1160 154 1118 l 325 1160 q 345 1094 328 1118 q 400 1071 363 1071 q 455 1094 438 1071 q 475 1160 472 1118 l 647 1160 q 631 1083 644 1118 q 588 1022 617 1047 q 513 983 558 997 q 400 968 467 968 z "},"Ә":{"ha":938,"x_min":71,"x_max":874,"o":"m 467 -17 q 302 13 375 -17 q 178 102 229 43 q 99 248 126 161 q 71 449 71 335 q 75 517 71 481 l 668 517 q 603 697 657 639 q 449 754 549 754 q 335 728 383 754 q 250 669 286 703 l 157 810 q 288 890 210 858 q 472 922 367 922 q 635 892 561 922 q 763 803 710 863 q 844 657 815 744 q 874 454 874 569 q 844 251 874 339 q 762 103 815 163 q 633 14 708 44 q 467 -17 558 -17 m 467 150 q 598 202 546 150 q 665 367 650 254 l 279 367 q 337 201 288 253 q 467 150 386 150 z "},"Ӣ":{"ha":939,"x_min":107,"x_max":832,"o":"m 107 0 l 107 906 l 310 906 l 310 586 q 300 417 310 506 q 283 256 290 328 l 289 256 l 378 454 l 615 906 l 832 906 l 832 0 l 631 0 l 631 321 q 640 488 631 401 q 656 649 649 574 l 650 649 l 561 451 l 324 0 l 107 0 m 265 1013 l 265 1143 l 685 1143 l 685 1013 l 265 1013 z "},"Ӧ":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 308 16 383 -17 q 178 110 232 49 q 94 258 124 171 q 64 457 64 346 q 94 655 64 568 q 178 801 124 742 q 308 891 232 860 q 475 922 383 922 q 642 891 567 922 q 772 800 718 860 q 856 653 826 740 q 886 457 886 567 q 856 258 886 346 q 772 110 826 171 q 642 16 718 49 q 475 -17 567 -17 m 475 160 q 622 240 568 160 q 676 457 676 319 q 622 669 676 593 q 475 746 568 746 q 328 669 382 746 q 274 457 274 593 q 328 240 274 319 q 475 160 382 160 m 321 972 q 251 1000 278 972 q 224 1069 224 1028 q 251 1139 224 1111 q 321 1167 278 1167 q 391 1139 364 1167 q 418 1069 418 1111 q 391 1000 418 1028 q 321 972 364 972 m 629 972 q 559 1000 586 972 q 532 1069 532 1028 q 559 1139 532 1111 q 629 1167 586 1167 q 699 1139 672 1167 q 726 1069 726 1111 q 699 1000 726 1028 q 629 972 672 972 z "},"Ө":{"ha":950,"x_min":64,"x_max":886,"o":"m 475 -17 q 309 14 385 -17 q 179 105 233 44 q 94 253 125 165 q 64 457 64 342 q 94 659 64 572 q 179 804 125 746 q 309 892 233 863 q 475 922 385 922 q 642 892 567 922 q 772 804 718 863 q 856 658 826 746 q 886 457 886 571 q 856 253 886 342 q 772 105 826 165 q 642 14 718 44 q 475 -17 567 -17 m 475 754 q 342 702 394 754 q 274 547 289 650 l 676 547 q 609 702 661 650 q 475 754 557 754 m 475 151 q 613 210 560 151 q 679 385 665 269 l 271 385 q 338 210 285 269 q 475 151 392 151 z "},"Ӯ":{"ha":771,"x_min":1,"x_max":778,"o":"m 219 -17 q 151 -12 179 -17 q 104 1 124 -7 l 140 179 q 167 172 153 175 q 208 168 181 168 q 296 210 272 168 l 308 236 l 1 906 l 218 906 l 324 642 l 400 425 l 406 425 l 476 642 l 572 906 l 778 906 l 499 206 q 391 42 457 101 q 219 -17 325 -17 m 186 1001 l 186 1132 l 606 1132 l 606 1001 l 186 1001 z "},"Ӳ":{"ha":771,"x_min":1,"x_max":778,"o":"m 219 -17 q 151 -12 179 -17 q 104 1 124 -7 l 140 179 q 167 172 153 175 q 208 168 181 168 q 296 210 272 168 l 308 236 l 1 906 l 218 906 l 324 642 l 400 425 l 406 425 l 476 642 l 572 906 l 778 906 l 499 206 q 391 42 457 101 q 219 -17 325 -17 m 208 1011 l 349 1235 l 478 1163 l 308 964 l 208 1011 m 468 1011 l 608 1235 l 739 1163 l 569 964 l 468 1011 z "},"а":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 z "},"б":{"ha":779,"x_min":58,"x_max":722,"o":"m 400 -17 q 147 101 235 -17 q 58 431 58 218 q 90 685 58 586 q 180 844 122 785 q 317 933 238 904 q 493 974 397 961 q 591 990 556 982 q 658 1014 626 999 l 697 836 q 626 803 669 815 q 536 785 582 792 q 415 765 464 775 q 333 735 365 756 q 285 676 301 714 q 261 569 268 638 q 349 633 297 611 q 457 654 400 654 q 559 634 511 654 q 644 574 607 614 q 701 475 681 535 q 722 336 722 415 q 698 192 722 257 q 631 80 674 126 q 528 8 588 33 q 400 -17 469 -17 m 397 149 q 484 199 454 149 q 514 336 514 249 q 482 466 514 428 q 396 504 450 504 q 323 485 360 504 q 254 421 286 467 l 254 382 q 292 206 254 263 q 397 149 329 149 z "},"в":{"ha":733,"x_min":90,"x_max":686,"o":"m 90 0 l 90 689 l 383 689 q 492 680 442 689 q 579 649 542 671 q 638 593 617 628 q 660 507 660 558 q 633 422 660 463 q 544 365 607 382 l 544 360 q 648 307 610 344 q 686 199 686 269 q 663 108 686 146 q 601 46 640 69 q 510 11 563 22 q 400 0 458 0 l 90 0 m 289 419 l 369 419 q 443 437 421 419 q 465 486 465 454 q 444 536 465 518 q 371 554 422 554 l 289 554 l 289 419 m 289 135 l 388 135 q 466 156 443 135 q 489 213 489 178 q 465 264 489 243 q 386 285 440 285 l 289 285 l 289 135 z "},"г":{"ha":600,"x_min":90,"x_max":564,"o":"m 90 0 l 90 689 l 564 689 l 564 529 l 294 529 l 294 0 l 90 0 z "},"д":{"ha":811,"x_min":15,"x_max":794,"o":"m 211 0 l 211 -239 l 35 -239 l 15 26 l 15 160 l 58 160 q 82 180 71 167 q 103 222 93 193 q 122 296 113 250 q 139 415 131 342 l 171 689 l 685 689 l 685 160 l 794 160 l 794 26 l 775 -239 l 600 -239 l 600 0 l 211 0 m 315 369 q 293 250 308 301 q 258 160 278 199 l 481 160 l 481 529 l 333 529 l 315 369 z "},"е":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 z "},"ж":{"ha":1057,"x_min":8,"x_max":1049,"o":"m 8 0 l 228 357 l 189 443 q 149 499 171 486 q 103 513 128 513 q 90 511 96 513 q 76 507 83 510 l 44 696 q 100 706 68 706 q 226 675 175 706 q 317 561 278 644 l 376 435 l 438 435 l 438 689 l 619 689 l 619 435 l 681 435 l 740 561 q 831 675 779 644 q 957 706 882 706 q 1013 696 989 706 l 981 507 q 967 511 974 510 q 954 513 961 513 q 908 499 929 513 q 868 443 886 486 l 829 357 l 1049 0 l 829 0 l 683 275 l 619 275 l 619 0 l 438 0 l 438 275 l 374 275 l 228 0 l 8 0 z "},"з":{"ha":661,"x_min":39,"x_max":614,"o":"m 306 -17 q 170 0 235 -17 q 39 65 106 17 l 118 194 q 206 152 161 165 q 286 139 250 139 q 377 160 340 139 q 414 217 414 181 q 308 285 414 285 l 199 285 l 199 419 l 296 419 q 393 486 393 419 q 289 550 393 550 q 206 540 244 550 q 126 504 167 531 l 51 635 q 171 688 108 671 q 303 706 233 706 q 410 694 358 706 q 501 658 461 682 q 564 597 540 635 q 588 508 588 560 q 562 425 588 467 q 479 365 536 383 l 479 360 q 578 305 542 343 q 614 196 614 267 q 588 103 614 143 q 518 38 561 64 q 419 -3 475 11 q 306 -17 364 -17 z "},"и":{"ha":810,"x_min":90,"x_max":719,"o":"m 90 0 l 90 689 l 288 689 l 288 497 q 282 381 288 446 q 271 253 276 317 l 275 253 q 315 326 292 285 q 354 397 339 367 l 533 689 l 719 689 l 719 0 l 522 0 l 522 192 q 528 308 522 244 q 540 436 533 372 l 535 436 q 495 363 518 404 q 456 292 472 321 l 276 0 l 90 0 z "},"й":{"ha":810,"x_min":90,"x_max":719,"o":"m 90 0 l 90 689 l 288 689 l 288 497 q 282 381 288 446 q 271 253 276 317 l 275 253 q 315 326 292 285 q 354 397 339 367 l 533 689 l 719 689 l 719 0 l 522 0 l 522 192 q 528 308 522 244 q 540 436 533 372 l 535 436 q 495 363 518 404 q 456 292 472 321 l 276 0 l 90 0 m 411 794 q 233 856 290 794 q 172 1022 175 918 l 331 1022 q 350 933 333 964 q 411 903 367 903 q 472 933 456 903 q 492 1022 489 964 l 650 1022 q 590 856 647 918 q 411 794 532 794 z "},"к":{"ha":758,"x_min":90,"x_max":749,"o":"m 90 0 l 90 689 l 294 689 l 294 435 l 365 435 l 425 561 q 468 633 446 604 q 517 677 490 661 q 575 699 544 693 q 643 706 606 706 q 699 696 674 706 l 667 507 q 653 511 660 510 q 640 513 647 513 q 593 500 614 513 q 553 443 572 488 l 517 361 l 749 0 l 525 0 l 367 275 l 294 275 l 294 0 l 90 0 z "},"л":{"ha":796,"x_min":8,"x_max":707,"o":"m 90 -17 q 47 -12 67 -17 q 8 -1 28 -8 l 42 182 q 58 178 50 179 q 76 176 67 176 q 124 199 104 176 q 151 279 144 222 q 176 483 165 382 q 199 689 186 585 l 707 689 l 707 0 l 503 0 l 503 529 l 360 529 q 341 376 350 453 q 321 222 332 299 q 247 44 304 106 q 90 -17 190 -17 z "},"м":{"ha":917,"x_min":90,"x_max":826,"o":"m 90 0 l 90 689 l 324 689 l 410 453 q 435 373 424 411 q 458 299 447 335 l 464 299 q 489 373 476 335 q 514 453 501 411 l 594 689 l 826 689 l 826 0 l 646 0 l 646 176 q 648 243 646 204 q 653 324 650 282 q 660 405 657 365 q 667 474 664 444 l 661 474 q 628 376 646 428 q 594 281 610 325 l 514 60 l 403 60 l 321 281 q 287 377 306 325 q 253 474 268 429 l 247 474 q 253 405 250 444 q 260 324 257 365 q 267 243 264 282 q 269 176 269 204 l 269 0 l 90 0 z "},"н":{"ha":808,"x_min":90,"x_max":719,"o":"m 90 0 l 90 689 l 294 689 l 294 440 l 515 440 l 515 689 l 719 689 l 719 0 l 515 0 l 515 263 l 294 263 l 294 0 l 90 0 z "},"о":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 z "},"п":{"ha":797,"x_min":90,"x_max":707,"o":"m 90 0 l 90 689 l 707 689 l 707 0 l 503 0 l 503 529 l 294 529 l 294 0 l 90 0 z "},"р":{"ha":796,"x_min":90,"x_max":742,"o":"m 90 -256 l 90 689 l 257 689 l 271 621 l 276 621 q 367 681 317 657 q 472 706 418 706 q 585 681 535 706 q 669 610 635 656 q 723 499 704 564 q 742 356 742 435 q 717 198 742 267 q 652 81 693 129 q 559 8 611 33 q 451 -17 507 -17 q 365 2 407 -17 q 288 56 324 21 l 294 -54 l 294 -256 l 90 -256 m 404 150 q 494 198 457 150 q 532 353 532 246 q 413 539 532 539 q 294 476 353 539 l 294 194 q 350 160 322 169 q 404 150 378 150 z "},"с":{"ha":649,"x_min":50,"x_max":618,"o":"m 390 -17 q 256 8 318 -17 q 149 78 194 32 q 76 191 103 124 q 50 344 50 258 q 79 498 50 431 q 158 611 108 565 q 272 681 207 657 q 408 706 338 706 q 522 685 472 706 q 610 632 571 664 l 514 500 q 421 540 465 540 q 303 488 346 540 q 260 344 260 435 q 303 201 260 254 q 414 149 347 149 q 478 163 447 149 q 538 199 510 178 l 618 65 q 507 2 567 21 q 390 -17 447 -17 z "},"т":{"ha":683,"x_min":36,"x_max":647,"o":"m 239 0 l 239 529 l 36 529 l 36 689 l 647 689 l 647 529 l 443 529 l 443 0 l 239 0 z "},"у":{"ha":724,"x_min":17,"x_max":707,"o":"m 167 -269 q 113 -266 135 -269 q 69 -256 90 -262 l 106 -100 q 128 -106 115 -103 q 151 -108 140 -108 q 231 -83 203 -108 q 272 -18 258 -58 l 282 18 l 17 689 l 222 689 l 321 393 q 349 297 336 346 q 375 197 361 249 l 381 197 q 403 295 392 246 q 428 393 415 344 l 511 689 l 707 689 l 468 -7 q 416 -122 443 -72 q 353 -203 389 -171 q 273 -253 318 -236 q 167 -269 228 -269 z "},"ф":{"ha":1082,"x_min":54,"x_max":1028,"o":"m 442 -256 l 442 -79 l 447 25 q 387 -4 419 8 q 319 -17 354 -17 q 210 8 258 -17 q 126 80 161 33 q 73 193 92 126 q 54 344 54 260 q 77 496 54 429 q 137 609 100 563 q 222 681 174 656 q 319 706 269 706 q 392 695 361 706 q 447 668 422 685 l 442 768 l 442 974 l 640 974 l 640 768 l 633 663 q 701 693 664 681 q 775 706 738 706 q 880 681 833 706 q 959 610 926 656 q 1010 499 992 564 q 1028 356 1028 435 q 1005 198 1028 267 q 944 81 982 129 q 858 8 907 33 q 757 -17 810 -17 q 633 21 689 -17 l 640 -79 l 640 -256 l 442 -256 m 374 150 q 447 181 417 150 l 447 513 q 408 533 429 528 q 368 539 388 539 q 294 492 325 539 q 264 347 264 446 q 292 197 264 244 q 374 150 321 150 m 710 150 q 788 198 757 150 q 818 353 818 246 q 714 539 818 539 q 674 533 693 539 q 633 510 654 526 l 633 178 q 672 156 653 161 q 710 150 692 150 z "},"х":{"ha":714,"x_min":19,"x_max":694,"o":"m 19 0 l 231 358 l 32 689 l 251 689 l 313 578 q 341 519 326 549 q 371 460 356 489 l 376 460 q 400 519 388 489 q 424 578 413 549 l 471 689 l 682 689 l 482 335 l 694 0 l 475 0 l 408 114 q 376 174 392 143 q 343 233 360 204 l 338 233 q 311 174 325 204 q 285 114 297 144 l 231 0 l 19 0 z "},"ц":{"ha":826,"x_min":90,"x_max":810,"o":"m 90 0 l 90 689 l 294 689 l 294 160 l 497 160 l 497 689 l 701 689 l 701 160 l 810 160 l 810 26 l 790 -239 l 615 -239 l 615 0 l 90 0 z "},"ч":{"ha":764,"x_min":67,"x_max":674,"o":"m 469 0 l 469 235 q 417 226 442 228 q 349 224 392 224 q 235 238 288 224 q 146 285 183 253 q 88 367 108 317 q 67 490 67 418 l 67 689 l 271 689 l 271 490 q 299 410 271 438 q 393 383 328 383 q 433 385 415 383 q 469 392 450 388 l 469 689 l 674 689 l 674 0 l 469 0 z "},"ш":{"ha":1115,"x_min":90,"x_max":1026,"o":"m 90 0 l 90 689 l 292 689 l 292 160 l 460 160 l 460 689 l 656 689 l 656 160 l 824 160 l 824 689 l 1026 689 l 1026 0 l 90 0 z "},"щ":{"ha":1151,"x_min":90,"x_max":1135,"o":"m 940 -239 l 940 0 l 90 0 l 90 689 l 292 689 l 292 160 l 460 160 l 460 689 l 656 689 l 656 160 l 824 160 l 824 689 l 1026 689 l 1026 160 l 1135 160 l 1135 26 l 1115 -239 l 940 -239 z "},"ъ":{"ha":865,"x_min":36,"x_max":815,"o":"m 243 0 l 243 529 l 36 529 l 36 689 l 447 689 l 447 469 l 521 469 q 637 458 583 469 q 730 418 690 446 q 792 346 769 390 q 815 238 815 301 q 792 126 815 171 q 730 52 769 81 q 637 12 690 24 q 521 0 583 0 l 243 0 m 447 156 l 511 156 q 621 239 621 156 q 511 318 621 318 l 447 318 l 447 156 z "},"ы":{"ha":1026,"x_min":90,"x_max":936,"o":"m 90 0 l 90 689 l 294 689 l 294 469 l 344 469 q 461 458 407 469 q 555 418 515 446 q 617 346 594 390 q 640 238 640 301 q 617 126 640 171 q 555 52 594 81 q 461 12 515 24 q 344 0 407 0 l 90 0 m 294 156 l 335 156 q 444 239 444 156 q 335 318 444 318 l 294 318 l 294 156 m 732 0 l 732 689 l 936 689 l 936 0 l 732 0 z "},"ь":{"ha":717,"x_min":90,"x_max":667,"o":"m 90 0 l 90 689 l 294 689 l 294 469 l 371 469 q 488 458 433 469 q 581 418 542 446 q 644 346 621 390 q 667 238 667 301 q 644 126 667 171 q 581 52 621 81 q 488 12 542 24 q 371 0 433 0 l 90 0 m 294 156 l 363 156 q 471 239 471 156 q 363 318 471 318 l 294 318 l 294 156 z "},"э":{"ha":649,"x_min":29,"x_max":600,"o":"m 260 -17 q 138 2 199 -17 q 29 65 76 21 l 104 185 q 165 152 129 165 q 236 139 200 139 q 348 172 304 139 q 404 285 392 206 l 165 285 l 165 419 l 401 419 q 347 520 388 490 q 244 550 307 550 q 181 540 210 550 q 126 510 153 529 l 39 626 q 133 684 75 663 q 257 706 190 706 q 392 683 329 706 q 501 616 454 661 q 574 503 547 571 q 600 344 600 436 q 574 187 600 254 q 503 74 549 119 q 394 6 457 29 q 260 -17 332 -17 z "},"ю":{"ha":1078,"x_min":90,"x_max":1028,"o":"m 714 -17 q 601 2 653 -17 q 507 57 549 21 q 438 144 465 93 q 399 261 410 196 l 294 261 l 294 0 l 90 0 l 90 689 l 294 689 l 294 439 l 400 439 q 510 635 425 565 q 714 706 594 706 q 836 681 779 706 q 936 611 893 657 q 1003 498 979 565 q 1028 344 1028 431 q 1003 191 1028 258 q 936 78 979 124 q 836 8 893 32 q 714 -17 779 -17 m 701 149 q 790 201 761 149 q 818 344 818 254 q 790 488 818 435 q 701 540 761 540 q 614 488 646 540 q 582 344 582 435 q 614 201 582 254 q 701 149 646 149 z "},"я":{"ha":756,"x_min":21,"x_max":667,"o":"m 463 0 l 463 225 l 386 225 l 247 0 l 21 0 l 204 267 q 119 342 153 294 q 85 461 85 389 q 107 569 85 525 q 168 640 129 613 q 260 678 207 667 q 372 689 313 689 l 667 689 l 667 0 l 463 0 m 397 363 l 463 363 l 463 539 l 397 539 q 286 456 286 539 q 314 388 286 414 q 397 363 342 363 z "},"ѐ":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 361 794 l 110 1013 l 247 1147 l 461 894 l 361 794 z "},"ё":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 224 790 q 151 819 179 790 q 124 890 124 847 q 151 960 124 932 q 224 989 179 989 q 295 960 268 989 q 322 890 322 932 q 295 819 322 847 q 224 790 268 790 m 526 790 q 455 819 482 790 q 428 890 428 847 q 455 960 428 932 q 526 989 482 989 q 599 960 571 989 q 626 890 626 932 q 599 819 626 847 q 526 790 571 790 z "},"ђ":{"ha":794,"x_min":-4,"x_max":742,"o":"m 419 -272 q 356 -267 382 -272 q 311 -253 331 -261 l 347 -103 q 373 -110 361 -107 q 399 -112 385 -112 q 451 -97 426 -112 q 494 -44 475 -82 q 523 60 513 -6 q 533 225 533 125 q 525 347 533 300 q 501 420 517 394 q 462 455 485 446 q 408 464 439 464 q 352 447 378 464 q 294 399 326 431 l 294 0 l 90 0 l 90 772 l -4 772 l -4 863 l 90 869 l 90 974 l 294 974 l 294 871 l 529 871 l 529 772 l 294 772 l 294 668 l 285 544 q 324 579 303 563 q 370 609 346 596 q 423 631 394 622 q 485 639 451 639 q 676 540 611 639 q 742 250 742 442 q 719 1 742 101 q 656 -160 697 -100 q 554 -247 614 -221 q 419 -272 494 -272 z "},"ѓ":{"ha":600,"x_min":90,"x_max":603,"o":"m 90 0 l 90 689 l 564 689 l 564 529 l 294 529 l 294 0 l 90 0 m 351 794 l 251 894 l 465 1147 l 603 1013 l 351 794 z "},"є":{"ha":649,"x_min":50,"x_max":618,"o":"m 390 -17 q 255 6 317 -17 q 147 74 193 29 q 76 187 101 119 q 50 344 50 254 q 78 502 50 435 q 156 615 107 569 q 270 683 206 660 q 407 706 335 706 q 521 685 471 706 q 610 632 571 664 l 522 507 q 468 539 496 528 q 407 550 440 550 q 303 519 344 550 q 247 419 263 488 l 482 419 l 482 285 l 244 285 q 301 174 257 208 q 414 139 346 139 q 485 155 451 139 q 544 190 519 171 l 618 65 q 507 2 567 21 q 390 -17 447 -17 z "},"ѕ":{"ha":615,"x_min":29,"x_max":576,"o":"m 293 -17 q 153 10 225 -17 q 29 79 82 36 l 121 207 q 211 153 168 171 q 299 135 254 135 q 365 150 344 135 q 386 193 386 165 q 374 223 386 210 q 342 247 363 236 q 297 267 322 258 q 246 288 272 276 q 182 317 214 300 q 124 358 150 333 q 81 415 97 382 q 64 490 64 447 q 83 578 64 538 q 136 646 101 618 q 219 690 171 674 q 328 706 268 706 q 467 678 407 706 q 571 618 526 651 l 479 496 q 406 539 442 524 q 333 554 369 554 q 256 500 256 554 q 267 472 256 483 q 297 450 278 460 q 340 431 315 440 q 390 413 364 422 q 456 384 424 400 q 516 344 489 368 q 560 287 543 321 q 576 206 576 253 q 558 118 576 158 q 504 48 540 78 q 415 1 468 18 q 293 -17 363 -17 z "},"і":{"ha":383,"x_min":74,"x_max":310,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m 192 790 q 107 820 140 790 q 74 897 74 850 q 107 974 74 944 q 192 1003 140 1003 q 277 974 244 1003 q 310 897 310 944 q 277 820 310 850 q 192 790 244 790 z "},"ї":{"ha":383,"x_min":-60,"x_max":443,"o":"m 90 0 l 90 689 l 294 689 l 294 0 l 90 0 m 40 790 q -32 819 -4 790 q -60 890 -60 847 q -32 960 -60 932 q 40 989 -4 989 q 112 960 85 989 q 139 890 139 932 q 112 819 139 847 q 40 790 85 790 m 343 790 q 272 819 299 790 q 244 890 244 847 q 272 960 244 932 q 343 989 299 989 q 415 960 388 989 q 443 890 443 932 q 415 819 443 847 q 343 790 388 790 z "},"ј":{"ha":386,"x_min":-71,"x_max":313,"o":"m 50 -272 q -22 -267 7 -272 q -71 -253 -50 -261 l -35 -103 q -8 -110 -21 -107 q 19 -112 4 -112 q 76 -86 60 -112 q 92 -1 92 -60 l 92 689 l 296 689 l 296 4 q 284 -103 296 -53 q 244 -190 272 -153 q 168 -250 215 -228 q 50 -272 121 -272 m 194 790 q 110 820 143 790 q 76 897 76 850 q 110 974 76 944 q 194 1003 143 1003 q 279 974 246 1003 q 313 897 313 944 q 279 820 313 850 q 194 790 246 790 z "},"љ":{"ha":1083,"x_min":8,"x_max":1033,"o":"m 90 -17 q 47 -12 67 -17 q 8 -1 28 -8 l 43 182 q 58 178 50 179 q 78 176 67 176 q 119 197 97 176 q 153 279 142 218 q 177 475 171 374 q 189 689 183 576 l 683 689 l 683 469 l 739 469 q 855 458 801 469 q 948 418 908 446 q 1010 346 988 390 q 1033 238 1033 301 q 1010 126 1033 171 q 948 52 988 81 q 855 12 908 24 q 739 0 801 0 l 479 0 l 479 529 l 364 529 q 350 356 357 442 q 324 183 343 271 q 247 35 303 88 q 90 -17 190 -17 m 683 156 l 729 156 q 839 239 839 156 q 729 318 839 318 l 683 318 l 683 156 z "},"њ":{"ha":1094,"x_min":90,"x_max":1044,"o":"m 90 0 l 90 689 l 294 689 l 294 440 l 490 440 l 490 689 l 694 689 l 694 469 l 750 469 q 866 458 813 469 q 959 418 919 446 q 1022 346 999 390 q 1044 238 1044 301 q 1022 126 1044 171 q 959 52 999 81 q 866 12 919 24 q 750 0 813 0 l 490 0 l 490 263 l 294 263 l 294 0 l 90 0 m 694 156 l 740 156 q 850 239 850 156 q 740 318 850 318 l 694 318 l 694 156 z "},"ћ":{"ha":793,"x_min":-4,"x_max":711,"o":"m 90 0 l 90 772 l -4 772 l -4 863 l 90 869 l 90 974 l 294 974 l 294 871 l 529 871 l 529 772 l 294 772 l 294 668 l 285 543 q 326 578 304 561 q 375 608 349 594 q 432 631 401 622 q 497 639 463 639 q 660 565 610 639 q 711 361 711 492 l 711 0 l 507 0 l 507 335 q 487 437 507 410 q 422 464 467 464 q 356 447 383 464 q 294 397 328 429 l 294 0 l 90 0 z "},"ќ":{"ha":758,"x_min":90,"x_max":749,"o":"m 90 0 l 90 689 l 294 689 l 294 435 l 365 435 l 425 561 q 468 633 446 604 q 517 677 490 661 q 575 699 544 693 q 643 706 606 706 q 699 696 674 706 l 667 507 q 653 511 660 510 q 640 513 647 513 q 593 500 614 513 q 553 443 572 488 l 517 361 l 749 0 l 525 0 l 367 275 l 294 275 l 294 0 l 90 0 m 424 794 l 324 894 l 538 1147 l 675 1013 l 424 794 z "},"ѝ":{"ha":810,"x_min":90,"x_max":719,"o":"m 90 0 l 90 689 l 288 689 l 288 497 q 282 381 288 446 q 271 253 276 317 l 275 253 q 315 326 292 285 q 354 397 339 367 l 533 689 l 719 689 l 719 0 l 522 0 l 522 192 q 528 308 522 244 q 540 436 533 372 l 535 436 q 495 363 518 404 q 456 292 472 321 l 276 0 l 90 0 m 397 794 l 146 1013 l 283 1147 l 497 894 l 397 794 z "},"ў":{"ha":724,"x_min":17,"x_max":707,"o":"m 167 -269 q 113 -266 135 -269 q 69 -256 90 -262 l 106 -100 q 128 -106 115 -103 q 151 -108 140 -108 q 231 -83 203 -108 q 272 -18 258 -58 l 282 18 l 17 689 l 222 689 l 321 393 q 349 297 336 346 q 375 197 361 249 l 381 197 q 403 295 392 246 q 428 393 415 344 l 511 689 l 707 689 l 468 -7 q 416 -122 443 -72 q 353 -203 389 -171 q 273 -253 318 -236 q 167 -269 228 -269 m 369 794 q 191 856 249 794 q 131 1022 133 918 l 289 1022 q 308 933 292 964 q 369 903 325 903 q 431 933 414 903 q 450 1022 447 964 l 608 1022 q 548 856 606 918 q 369 794 490 794 z "},"џ":{"ha":803,"x_min":90,"x_max":714,"o":"m 90 0 l 90 689 l 294 689 l 294 160 l 510 160 l 510 689 l 714 689 l 714 0 l 506 0 l 483 -239 l 308 -239 l 301 0 l 90 0 z "},"ѣ":{"ha":833,"x_min":36,"x_max":783,"o":"m 215 0 l 215 590 l 36 590 l 36 751 l 215 751 l 215 872 l 419 872 l 419 751 l 653 751 l 653 590 l 419 590 l 419 469 l 489 469 q 605 458 551 469 q 698 418 658 446 q 760 346 738 390 q 783 238 783 301 q 760 126 783 171 q 698 52 738 81 q 605 12 658 24 q 489 0 551 0 l 215 0 m 419 156 l 479 156 q 589 239 589 156 q 479 318 589 318 l 419 318 l 419 156 z "},"ѳ":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 258 6 319 -17 q 151 75 197 29 q 78 188 106 121 q 50 344 50 256 q 78 501 50 433 q 151 614 106 568 q 258 683 197 660 q 386 706 319 706 q 513 683 453 706 q 619 614 574 660 q 693 501 665 568 q 721 344 721 433 q 693 188 721 256 q 619 75 665 121 q 513 6 574 29 q 386 -17 453 -17 m 386 554 q 247 419 272 554 l 524 419 q 386 554 499 554 m 386 136 q 480 174 444 136 q 526 285 515 211 l 244 285 q 292 174 256 211 q 386 136 328 136 z "},"ѵ":{"ha":740,"x_min":17,"x_max":768,"o":"m 249 0 l 17 689 l 222 689 l 311 364 q 338 259 325 313 q 365 151 351 206 l 371 151 q 390 259 381 206 q 414 364 400 313 l 442 464 q 524 646 472 586 q 669 706 575 706 q 726 701 706 706 q 768 690 747 697 l 733 518 q 715 524 725 521 q 693 526 706 526 q 644 502 663 526 q 614 438 625 478 l 494 0 l 249 0 z "},"ґ":{"ha":601,"x_min":90,"x_max":579,"o":"m 90 0 l 90 689 l 383 689 l 413 928 l 579 928 l 565 529 l 294 529 l 294 0 l 90 0 z "},"ғ":{"ha":635,"x_min":33,"x_max":599,"o":"m 33 268 l 33 360 l 125 365 l 125 689 l 599 689 l 599 529 l 329 529 l 329 367 l 494 367 l 494 268 l 329 268 l 329 0 l 125 0 l 125 268 l 33 268 z "},"җ":{"ha":1115,"x_min":8,"x_max":1100,"o":"m 907 -239 l 907 0 l 829 0 l 683 275 l 619 275 l 619 0 l 438 0 l 438 275 l 374 275 l 228 0 l 8 0 l 228 357 l 189 443 q 149 499 171 486 q 103 513 128 513 q 90 511 96 513 q 76 507 83 510 l 44 696 q 100 706 68 706 q 226 675 175 706 q 317 561 278 644 l 376 435 l 438 435 l 438 689 l 619 689 l 619 435 l 681 435 l 740 561 q 831 675 779 644 q 957 706 882 706 q 1013 696 989 706 l 981 507 q 967 511 974 510 q 954 513 961 513 q 908 499 929 513 q 868 443 886 486 l 829 357 l 950 160 l 1100 160 l 1100 26 l 1081 -239 l 907 -239 z "},"ҙ":{"ha":661,"x_min":39,"x_max":614,"o":"m 226 -239 l 219 -11 q 129 14 174 -4 q 39 65 85 32 l 118 194 q 206 152 161 165 q 286 139 250 139 q 377 160 340 139 q 414 217 414 181 q 308 285 414 285 l 199 285 l 199 419 l 296 419 q 393 486 393 419 q 289 550 393 550 q 206 540 244 550 q 126 504 167 531 l 51 635 q 171 688 108 671 q 303 706 233 706 q 410 694 358 706 q 501 658 461 682 q 564 597 540 635 q 588 508 588 560 q 562 425 588 467 q 479 365 536 383 l 479 360 q 578 305 542 343 q 614 196 614 267 q 599 125 614 157 q 558 68 585 93 q 497 25 532 43 q 422 -3 463 7 l 399 -239 l 226 -239 z "},"қ":{"ha":817,"x_min":90,"x_max":801,"o":"m 608 -239 l 608 0 l 525 0 l 367 275 l 294 275 l 294 0 l 90 0 l 90 689 l 294 689 l 294 435 l 365 435 l 425 561 q 468 633 446 604 q 517 677 490 661 q 575 699 544 693 q 643 706 606 706 q 699 696 674 706 l 667 507 q 653 511 660 510 q 640 513 647 513 q 593 500 614 513 q 553 443 572 488 l 517 361 l 646 160 l 801 160 l 801 26 l 782 -239 l 608 -239 z "},"ҡ":{"ha":911,"x_min":36,"x_max":901,"o":"m 243 0 l 243 529 l 36 529 l 36 689 l 447 689 l 447 435 l 518 435 l 578 561 q 621 633 599 604 q 670 677 643 661 q 728 699 697 693 q 796 706 758 706 q 851 696 826 706 l 819 507 q 806 511 813 510 q 793 513 800 513 q 746 500 767 513 q 706 443 725 488 l 669 361 l 901 0 l 678 0 l 519 275 l 447 275 l 447 0 l 243 0 z "},"ң":{"ha":844,"x_min":93,"x_max":828,"o":"m 633 -239 l 633 0 l 518 0 l 518 263 l 297 263 l 297 0 l 93 0 l 93 689 l 297 689 l 297 440 l 518 440 l 518 689 l 722 689 l 722 160 l 828 160 l 828 26 l 810 -239 l 633 -239 z "},"ҫ":{"ha":649,"x_min":50,"x_max":618,"o":"m 293 -239 l 286 -3 q 116 116 182 28 q 50 344 50 204 q 79 498 50 431 q 158 611 108 565 q 272 681 207 657 q 408 706 338 706 q 522 685 472 706 q 610 632 571 664 l 514 500 q 421 540 465 540 q 303 488 346 540 q 260 344 260 435 q 303 201 260 254 q 414 149 347 149 q 478 163 447 149 q 538 199 510 178 l 618 65 q 556 22 589 39 q 489 -4 522 6 l 465 -239 l 293 -239 z "},"ү":{"ha":726,"x_min":17,"x_max":710,"o":"m 265 -256 l 265 0 l 17 689 l 222 689 l 310 385 q 337 282 322 332 q 365 179 351 232 l 371 179 q 398 282 383 232 q 426 385 413 332 l 514 689 l 710 689 l 469 0 l 469 -256 l 265 -256 z "},"ұ":{"ha":726,"x_min":17,"x_max":710,"o":"m 265 -256 l 265 0 l 68 0 l 68 90 l 175 99 l 229 99 l 17 689 l 222 689 l 310 385 q 337 282 322 332 q 365 179 351 232 l 371 179 q 398 282 383 232 q 426 385 413 332 l 514 689 l 710 689 l 504 99 l 657 99 l 657 0 l 469 0 l 469 -256 l 265 -256 z "},"ҳ":{"ha":761,"x_min":19,"x_max":746,"o":"m 553 -239 l 553 0 l 475 0 l 408 114 q 376 174 392 143 q 343 233 360 204 l 338 233 q 311 174 325 204 q 285 114 297 144 l 231 0 l 19 0 l 231 358 l 32 689 l 251 689 l 313 578 q 341 519 326 549 q 371 460 356 489 l 376 460 q 400 519 388 489 q 424 578 413 549 l 471 689 l 682 689 l 482 335 l 593 160 l 746 160 l 746 26 l 726 -239 l 553 -239 z "},"ҷ":{"ha":799,"x_min":67,"x_max":783,"o":"m 590 -239 l 590 0 l 469 0 l 469 235 q 417 226 442 228 q 349 224 392 224 q 235 238 288 224 q 146 285 183 253 q 88 367 108 317 q 67 490 67 418 l 67 689 l 271 689 l 271 490 q 299 410 271 438 q 393 383 328 383 q 433 385 415 383 q 469 392 450 388 l 469 689 l 674 689 l 674 160 l 783 160 l 783 26 l 764 -239 l 590 -239 z "},"һ":{"ha":793,"x_min":90,"x_max":711,"o":"m 90 0 l 90 974 l 294 974 l 294 735 l 285 611 q 375 676 324 646 q 497 706 426 706 q 660 632 610 706 q 711 428 711 558 l 711 0 l 507 0 l 507 401 q 487 504 507 476 q 422 532 467 532 q 356 515 383 532 q 294 465 328 497 l 294 0 l 90 0 z "},"ӂ":{"ha":1057,"x_min":8,"x_max":1049,"o":"m 8 0 l 228 357 l 189 443 q 149 499 171 486 q 103 513 128 513 q 90 511 96 513 q 76 507 83 510 l 44 696 q 100 706 68 706 q 226 675 175 706 q 317 561 278 644 l 376 435 l 438 435 l 438 689 l 619 689 l 619 435 l 681 435 l 740 561 q 831 675 779 644 q 957 706 882 706 q 1013 696 989 706 l 981 507 q 967 511 974 510 q 954 513 961 513 q 908 499 929 513 q 868 443 886 486 l 829 357 l 1049 0 l 829 0 l 683 275 l 619 275 l 619 0 l 438 0 l 438 275 l 374 275 l 228 0 l 8 0 m 528 794 q 349 856 407 794 q 289 1022 292 918 l 447 1022 q 467 933 450 964 q 528 903 483 903 q 589 933 572 903 q 608 1022 606 964 l 767 1022 q 706 856 764 918 q 528 794 649 794 z "},"ӏ":{"ha":397,"x_min":90,"x_max":381,"o":"m 278 -17 q 189 0 225 -17 q 131 47 153 17 q 100 119 110 76 q 90 214 90 161 l 90 974 l 294 974 l 294 206 q 306 161 294 174 q 331 149 318 149 q 342 149 338 149 q 356 151 347 149 l 381 0 q 338 -12 364 -7 q 278 -17 313 -17 z "},"ӑ":{"ha":732,"x_min":58,"x_max":650,"o":"m 264 -17 q 178 -1 217 -17 q 114 44 140 15 q 73 110 88 72 q 58 192 58 147 q 150 361 58 300 q 446 443 242 422 q 419 516 443 489 q 338 543 394 543 q 249 526 293 543 q 156 481 206 510 l 82 615 q 222 681 149 656 q 376 706 294 706 q 580 630 510 706 q 650 394 650 554 l 650 0 l 483 0 l 469 71 l 464 71 q 371 8 419 32 q 264 -17 322 -17 m 333 142 q 393 157 368 142 q 446 200 418 172 l 446 321 q 296 276 338 306 q 254 207 254 247 q 276 158 254 174 q 333 142 297 142 m 382 794 q 203 856 261 794 q 143 1022 146 918 l 301 1022 q 321 933 304 964 q 382 903 338 903 q 443 933 426 903 q 463 1022 460 964 l 621 1022 q 560 856 618 918 q 382 794 503 794 z "},"ӕ":{"ha":1092,"x_min":65,"x_max":1040,"o":"m 269 -17 q 185 -1 222 -17 q 121 44 147 15 q 80 110 94 72 q 65 190 65 147 q 156 362 65 300 q 449 444 246 424 q 423 516 446 489 q 342 543 400 543 q 256 526 300 543 q 161 481 211 510 l 89 615 q 226 681 156 656 q 371 706 296 706 q 483 678 435 706 q 563 601 532 650 q 656 678 607 651 q 767 706 704 706 q 886 680 835 706 q 972 609 938 654 q 1023 503 1006 564 q 1040 371 1040 442 q 1038 320 1040 343 q 1032 285 1035 297 l 635 285 q 692 178 646 213 q 800 143 738 143 q 874 157 839 143 q 946 193 908 171 l 1015 61 q 898 4 963 25 q 772 -17 833 -17 q 637 13 694 -17 q 535 90 579 42 q 400 8 461 32 q 269 -17 339 -17 m 339 142 q 408 157 375 142 q 468 200 440 172 q 449 292 453 243 l 447 321 q 303 276 346 306 q 260 207 260 247 q 281 158 260 174 q 339 142 303 142 m 635 410 l 867 410 q 842 511 867 472 q 760 550 817 550 q 677 516 711 550 q 635 410 643 482 z "},"ӗ":{"ha":719,"x_min":50,"x_max":668,"o":"m 399 -17 q 261 8 325 -17 q 150 78 197 32 q 76 192 103 125 q 50 344 50 258 q 78 495 50 428 q 151 609 106 563 q 254 681 196 656 q 375 706 313 706 q 503 681 449 706 q 595 611 558 656 q 650 506 632 567 q 668 375 668 446 q 665 322 668 347 q 660 285 663 297 l 247 285 q 309 174 261 210 q 426 139 357 139 q 575 185 500 139 l 643 61 q 526 4 590 25 q 399 -17 461 -17 m 246 419 l 494 419 q 468 514 494 478 q 379 550 442 550 q 294 518 331 550 q 246 419 257 486 m 375 794 q 197 856 254 794 q 136 1022 139 918 l 294 1022 q 314 933 297 964 q 375 903 331 903 q 436 933 419 903 q 456 1022 453 964 l 614 1022 q 553 856 611 918 q 375 794 496 794 z "},"ә":{"ha":719,"x_min":50,"x_max":669,"o":"m 346 -17 q 217 8 272 -17 q 124 78 161 33 q 69 185 88 124 q 50 317 50 246 q 53 369 50 344 q 58 407 56 394 l 471 407 q 419 515 460 481 q 313 550 378 550 q 163 504 236 550 l 94 636 q 217 690 151 674 q 347 706 282 706 q 474 681 415 706 q 576 609 533 656 q 644 496 619 563 q 669 344 669 429 q 643 194 669 261 q 572 80 617 126 q 469 8 528 33 q 346 -17 410 -17 m 342 139 q 427 170 392 139 q 474 272 463 201 l 225 272 q 252 176 225 213 q 342 139 279 139 z "},"ӣ":{"ha":810,"x_min":90,"x_max":719,"o":"m 90 0 l 90 689 l 288 689 l 288 497 q 282 381 288 446 q 271 253 276 317 l 275 253 q 315 326 292 285 q 354 397 339 367 l 533 689 l 719 689 l 719 0 l 522 0 l 522 192 q 528 308 522 244 q 540 436 533 372 l 535 436 q 495 363 518 404 q 456 292 472 321 l 276 0 l 90 0 m 204 822 l 204 951 l 615 951 l 615 822 l 204 822 z "},"ӧ":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 260 8 321 -17 q 152 78 199 32 q 78 191 106 124 q 50 344 50 258 q 78 498 50 431 q 152 611 106 565 q 260 681 199 657 q 386 706 321 706 q 512 681 451 706 q 619 611 572 657 q 693 498 665 565 q 721 344 721 431 q 693 191 721 258 q 619 78 665 124 q 512 8 572 32 q 386 -17 451 -17 m 386 149 q 481 201 449 149 q 513 344 513 254 q 481 488 513 435 q 386 540 449 540 q 291 488 322 540 q 260 344 260 435 q 291 201 260 254 q 386 149 322 149 m 233 790 q 161 819 189 790 q 133 890 133 847 q 161 960 133 932 q 233 989 189 989 q 305 960 278 989 q 332 890 332 932 q 305 819 332 847 q 233 790 278 790 m 536 790 q 465 819 492 790 q 438 890 438 847 q 465 960 438 932 q 536 989 492 989 q 608 960 581 989 q 636 890 636 932 q 608 819 636 847 q 536 790 581 790 z "},"ө":{"ha":771,"x_min":50,"x_max":721,"o":"m 386 -17 q 258 6 319 -17 q 151 75 197 29 q 78 188 106 121 q 50 344 50 256 q 78 501 50 433 q 151 614 106 568 q 258 683 197 660 q 386 706 319 706 q 513 683 453 706 q 619 614 574 660 q 693 501 665 568 q 721 344 721 433 q 693 188 721 256 q 619 75 665 121 q 513 6 574 29 q 386 -17 453 -17 m 386 554 q 247 419 272 554 l 524 419 q 386 554 499 554 m 386 136 q 480 174 444 136 q 526 285 515 211 l 244 285 q 292 174 256 211 q 386 136 328 136 z "},"ӯ":{"ha":724,"x_min":17,"x_max":707,"o":"m 167 -269 q 113 -266 135 -269 q 69 -256 90 -262 l 106 -100 q 128 -106 115 -103 q 151 -108 140 -108 q 231 -83 203 -108 q 272 -18 258 -58 l 282 18 l 17 689 l 222 689 l 321 393 q 349 297 336 346 q 375 197 361 249 l 381 197 q 403 295 392 246 q 428 393 415 344 l 511 689 l 707 689 l 468 -7 q 416 -122 443 -72 q 353 -203 389 -171 q 273 -253 318 -236 q 167 -269 228 -269 m 164 822 l 164 951 l 575 951 l 575 822 l 164 822 z "},"ӳ":{"ha":724,"x_min":17,"x_max":707,"o":"m 167 -269 q 113 -266 135 -269 q 69 -256 90 -262 l 106 -100 q 128 -106 115 -103 q 151 -108 140 -108 q 231 -83 203 -108 q 272 -18 258 -58 l 282 18 l 17 689 l 222 689 l 321 393 q 349 297 336 346 q 375 197 361 249 l 381 197 q 403 295 392 246 q 428 393 415 344 l 511 689 l 707 689 l 468 -7 q 416 -122 443 -72 q 353 -203 389 -171 q 273 -253 318 -236 q 167 -269 228 -269 m 297 785 l 190 833 l 311 1085 l 449 1024 l 297 785 m 546 785 l 439 833 l 560 1085 l 697 1024 l 546 785 z "},"№":{"ha":1343,"x_min":63,"x_max":1321,"o":"m 136 -17 q 103 -15 113 -17 q 78 -10 93 -12 l 63 149 q 106 160 94 149 q 118 208 118 172 l 118 882 l 342 882 q 453 601 399 740 q 560 318 507 461 l 597 221 l 603 221 q 590 335 596 283 q 581 431 585 388 q 576 512 578 475 q 574 583 574 549 l 574 717 q 613 852 574 806 q 738 899 651 899 q 771 897 761 899 q 796 892 781 894 l 811 733 q 767 722 779 733 q 756 674 756 710 l 756 0 l 532 0 q 421 281 475 142 q 314 564 367 421 l 276 661 l 271 661 q 283 547 278 599 q 292 451 289 494 q 298 370 296 407 q 300 299 300 333 l 300 165 q 261 30 300 76 q 136 -17 222 -17 m 1090 374 q 1003 389 1044 374 q 930 433 961 404 q 880 506 899 463 q 861 606 861 549 q 880 705 861 661 q 930 778 899 749 q 1003 824 961 808 q 1090 839 1044 839 q 1178 824 1136 839 q 1251 778 1219 808 q 1302 705 1283 749 q 1321 606 1321 661 q 1302 506 1321 549 q 1251 433 1283 463 q 1178 389 1219 404 q 1090 374 1136 374 m 1090 499 q 1142 524 1124 499 q 1161 606 1161 549 q 1142 688 1161 663 q 1090 714 1124 714 q 1038 688 1057 714 q 1019 606 1019 663 q 1038 524 1019 549 q 1090 499 1057 499 m 907 178 l 907 286 l 1274 286 l 1274 178 l 907 178 z "},"&":{"ha":926,"x_min":35,"x_max":901,"o":"m 336 -17 q 206 4 263 -17 q 112 60 150 25 q 54 142 74 96 q 35 242 35 189 q 48 327 35 289 q 84 396 61 365 q 137 451 107 426 q 200 497 167 476 q 159 594 174 546 q 144 685 144 642 q 162 776 144 733 q 211 852 179 819 q 288 903 243 885 q 390 922 333 922 q 553 867 493 922 q 613 717 613 811 q 597 635 613 672 q 553 567 581 599 q 492 510 526 536 q 424 460 458 483 q 509 373 463 415 q 606 294 556 331 q 667 393 640 339 q 710 511 693 447 l 896 511 q 834 352 871 428 q 744 206 797 276 q 827 169 788 183 q 901 149 867 154 l 853 -17 q 738 18 796 -6 q 621 75 679 42 q 492 8 563 32 q 336 -17 422 -17 m 313 686 q 320 633 313 661 q 342 578 328 606 q 424 639 390 607 q 457 717 457 671 q 442 768 457 749 q 394 788 426 788 q 336 760 360 788 q 313 686 313 733 m 363 139 q 476 175 419 139 q 376 265 424 218 q 289 363 329 313 q 244 313 261 339 q 228 254 228 286 q 265 171 228 203 q 363 139 301 139 z "},".":{"ha":417,"x_min":85,"x_max":332,"o":"m 208 -17 q 120 20 156 -17 q 85 111 85 57 q 120 203 85 167 q 208 240 156 240 q 297 203 261 240 q 332 111 332 167 q 297 20 332 57 q 208 -17 261 -17 z "},",":{"ha":417,"x_min":64,"x_max":356,"o":"m 106 -269 l 64 -161 q 182 -89 142 -133 q 221 8 222 -44 l 210 8 q 124 38 161 8 q 86 124 86 68 q 124 208 86 176 q 214 240 161 240 q 319 190 283 240 q 356 47 356 139 q 292 -151 356 -68 q 106 -269 228 -233 z "},":":{"ha":417,"x_min":85,"x_max":332,"o":"m 208 433 q 120 470 156 433 q 85 561 85 507 q 120 653 85 617 q 208 690 156 690 q 297 653 261 690 q 332 561 332 617 q 297 470 332 507 q 208 433 261 433 m 208 -17 q 120 20 156 -17 q 85 111 85 57 q 120 203 85 167 q 208 240 156 240 q 297 203 261 240 q 332 111 332 167 q 297 20 332 57 q 208 -17 261 -17 z "},";":{"ha":417,"x_min":64,"x_max":356,"o":"m 208 433 q 120 470 156 433 q 85 561 85 507 q 120 653 85 617 q 208 690 156 690 q 297 653 261 690 q 332 561 332 617 q 297 470 332 507 q 208 433 261 433 m 106 -269 l 64 -161 q 182 -89 142 -133 q 221 8 222 -44 l 210 8 q 124 38 161 8 q 86 124 86 68 q 124 208 86 176 q 214 240 161 240 q 319 190 283 240 q 356 47 356 139 q 292 -151 356 -68 q 106 -269 228 -233 z "},"…":{"ha":1357,"x_min":106,"x_max":1272,"o":"m 229 -17 q 141 20 176 -17 q 106 111 106 57 q 141 203 106 167 q 229 240 176 240 q 317 203 282 240 q 353 111 353 167 q 317 20 353 57 q 229 -17 282 -17 m 689 -17 q 601 20 636 -17 q 565 111 565 57 q 601 203 565 167 q 689 240 636 240 q 777 203 742 240 q 813 111 813 167 q 777 20 813 57 q 689 -17 742 -17 m 1149 -17 q 1060 20 1096 -17 q 1025 111 1025 57 q 1060 203 1025 167 q 1149 240 1096 240 q 1237 203 1201 240 q 1272 111 1272 167 q 1237 20 1272 57 q 1149 -17 1201 -17 z "},"!":{"ha":472,"x_min":113,"x_max":360,"o":"m 169 321 l 140 746 l 133 931 l 339 931 l 332 746 l 303 321 l 169 321 m 236 -17 q 148 20 183 -17 q 113 111 113 57 q 148 203 113 167 q 236 240 183 240 q 324 203 289 240 q 360 111 360 167 q 324 20 360 57 q 236 -17 289 -17 z "},"¡":{"ha":472,"x_min":113,"x_max":360,"o":"m 133 -242 l 140 -57 l 169 368 l 303 368 l 332 -57 l 339 -242 l 133 -242 m 236 449 q 148 485 183 449 q 113 578 113 522 q 148 669 113 632 q 236 706 183 706 q 324 669 289 706 q 360 578 360 632 q 324 485 360 522 q 236 449 289 449 z "},"?":{"ha":643,"x_min":57,"x_max":585,"o":"m 214 321 q 217 407 207 368 q 247 479 228 446 q 291 540 267 513 q 338 594 315 568 q 374 644 360 619 q 389 694 389 668 q 363 760 389 738 q 296 782 338 782 q 227 764 257 782 q 169 718 197 746 l 57 821 q 173 913 106 878 q 322 947 240 947 q 426 933 378 947 q 509 890 474 919 q 565 816 544 861 q 585 710 585 771 q 569 633 585 667 q 531 569 554 599 q 483 513 508 540 q 435 457 457 486 q 401 395 414 428 q 393 321 389 363 l 214 321 m 303 -17 q 215 20 250 -17 q 181 111 181 57 q 215 203 181 167 q 303 240 250 240 q 391 203 356 240 q 426 111 426 167 q 391 20 426 57 q 303 -17 356 -17 z "},"¿":{"ha":643,"x_min":58,"x_max":586,"o":"m 322 -258 q 217 -244 265 -258 q 134 -201 169 -231 q 78 -127 99 -172 q 58 -19 58 -82 q 74 58 58 24 q 112 121 89 92 q 160 177 135 150 q 208 233 186 204 q 242 294 229 261 q 251 368 256 326 l 429 368 q 426 282 436 321 q 396 210 415 243 q 352 149 376 176 q 306 95 328 121 q 269 45 283 69 q 254 -6 254 21 q 281 -71 254 -49 q 347 -93 307 -93 q 416 -75 386 -93 q 474 -29 446 -57 l 586 -132 q 470 -224 536 -189 q 322 -258 404 -258 m 340 449 q 252 485 288 449 q 217 578 217 522 q 252 669 217 632 q 340 706 288 706 q 428 669 393 706 q 464 578 464 632 q 428 485 464 522 q 340 449 393 449 z "},"'":{"ha":417,"x_min":106,"x_max":311,"o":"m 153 492 l 113 768 l 106 953 l 311 953 l 304 768 l 264 492 l 153 492 z "},"\"":{"ha":744,"x_min":106,"x_max":639,"o":"m 153 492 l 113 768 l 106 953 l 311 953 l 304 768 l 264 492 l 153 492 m 481 492 l 440 768 l 433 953 l 639 953 l 632 768 l 592 492 l 481 492 z "},"‘":{"ha":417,"x_min":76,"x_max":318,"o":"m 207 469 q 109 517 142 469 q 76 651 76 565 q 125 825 76 750 q 274 949 174 900 l 318 860 q 224 787 256 828 q 193 683 193 746 q 207 685 197 685 q 283 658 251 685 q 314 583 314 631 q 283 500 314 531 q 207 469 253 469 z "},"’":{"ha":417,"x_min":99,"x_max":342,"o":"m 143 489 l 99 578 q 192 651 161 610 q 224 754 224 692 q 211 753 219 753 q 135 780 167 753 q 104 854 104 807 q 134 938 104 907 q 211 968 164 968 q 308 921 275 968 q 342 786 342 874 q 292 613 342 688 q 143 489 243 538 z "},"“":{"ha":744,"x_min":76,"x_max":646,"o":"m 207 469 q 109 517 142 469 q 76 651 76 565 q 125 825 76 750 q 274 949 174 900 l 318 860 q 224 787 256 828 q 193 683 193 746 q 207 685 197 685 q 283 658 251 685 q 314 583 314 631 q 283 500 314 531 q 207 469 253 469 m 535 469 q 437 517 469 469 q 404 651 404 565 q 453 825 404 750 q 601 949 501 900 l 646 860 q 552 787 583 828 q 521 683 521 746 q 535 685 525 685 q 610 658 579 685 q 642 583 642 631 q 611 500 642 531 q 535 469 581 469 z "},"”":{"ha":744,"x_min":99,"x_max":669,"o":"m 143 489 l 99 578 q 192 651 161 610 q 224 754 224 692 q 211 753 219 753 q 135 780 167 753 q 104 854 104 807 q 134 938 104 907 q 211 968 164 968 q 308 921 275 968 q 342 786 342 874 q 292 613 342 688 q 143 489 243 538 m 471 489 l 426 578 q 520 651 489 610 q 551 754 551 692 q 539 753 547 753 q 463 780 494 753 q 432 854 432 807 q 462 938 432 907 q 539 968 492 968 q 636 921 603 968 q 669 786 669 874 q 620 613 669 688 q 471 489 571 538 z "},"‚":{"ha":417,"x_min":99,"x_max":342,"o":"m 143 -233 l 99 -144 q 192 -72 161 -112 q 224 32 224 -31 q 211 31 219 31 q 135 58 167 31 q 104 132 104 85 q 134 215 104 185 q 211 246 164 246 q 308 199 275 246 q 342 64 342 151 q 292 -110 342 -35 q 143 -233 243 -185 z "},"„":{"ha":744,"x_min":99,"x_max":669,"o":"m 143 -233 l 99 -144 q 192 -72 161 -112 q 224 32 224 -31 q 211 31 219 31 q 135 58 167 31 q 104 132 104 85 q 134 215 104 185 q 211 246 164 246 q 308 199 275 246 q 342 64 342 151 q 292 -110 342 -35 q 143 -233 243 -185 m 471 -233 l 426 -144 q 520 -72 489 -112 q 551 32 551 -31 q 539 31 547 31 q 463 58 494 31 q 432 132 432 85 q 462 215 432 185 q 539 246 492 246 q 636 199 603 246 q 669 64 669 151 q 620 -110 669 -35 q 471 -233 571 -185 z "},"‹":{"ha":406,"x_min":68,"x_max":331,"o":"m 254 78 l 68 278 l 68 422 l 254 622 l 331 561 l 176 350 l 331 139 l 254 78 z "},"›":{"ha":406,"x_min":75,"x_max":338,"o":"m 151 78 l 75 139 l 229 350 l 75 561 l 151 622 l 338 422 l 338 278 l 151 78 z "},"«":{"ha":667,"x_min":68,"x_max":592,"o":"m 254 78 l 68 278 l 68 422 l 254 622 l 331 561 l 176 350 l 331 139 l 254 78 m 515 78 l 329 278 l 329 422 l 515 622 l 592 561 l 438 350 l 592 139 l 515 78 z "},"»":{"ha":667,"x_min":75,"x_max":599,"o":"m 151 78 l 75 139 l 229 350 l 75 561 l 151 622 l 338 422 l 338 278 l 151 78 m 413 78 l 336 139 l 490 350 l 336 561 l 413 622 l 599 422 l 599 278 l 413 78 z "},"-":{"ha":461,"x_min":60,"x_max":401,"o":"m 60 279 l 60 424 l 401 424 l 401 279 l 60 279 z "},"­":{"ha":461,"x_min":60,"x_max":401,"o":"m 60 279 l 60 424 l 401 424 l 401 279 l 60 279 z "},"–":{"ha":667,"x_min":60,"x_max":607,"o":"m 60 286 l 60 417 l 607 417 l 607 286 l 60 286 z "},"—":{"ha":1111,"x_min":60,"x_max":1051,"o":"m 60 286 l 60 417 l 1051 417 l 1051 286 l 60 286 z "},"⸺":{"ha":2083,"x_min":60,"x_max":2024,"o":"m 60 286 l 60 417 l 2024 417 l 2024 286 l 60 286 z "},"⸻":{"ha":3056,"x_min":60,"x_max":2996,"o":"m 2996 417 l 2996 286 l 60 286 l 60 417 l 2996 417 z "},"‒":{"ha":733,"x_min":60,"x_max":674,"o":"m 60 286 l 60 417 l 674 417 l 674 286 l 60 286 z "},"―":{"ha":1111,"x_min":60,"x_max":1051,"o":"m 60 286 l 60 417 l 1051 417 l 1051 286 l 60 286 z "},"·":{"ha":417,"x_min":85,"x_max":332,"o":"m 208 317 q 120 353 156 317 q 85 444 85 390 q 120 537 85 500 q 208 574 156 574 q 297 537 261 574 q 332 444 332 500 q 297 353 332 390 q 208 317 261 317 z "},"•":{"ha":479,"x_min":56,"x_max":424,"o":"m 239 171 q 167 185 200 171 q 108 226 133 200 q 69 288 83 253 q 56 364 56 322 q 69 441 56 406 q 108 502 83 476 q 167 542 133 528 q 239 557 200 557 q 312 542 278 557 q 371 502 346 528 q 410 441 396 476 q 424 364 424 406 q 410 288 424 322 q 371 226 396 253 q 312 185 346 200 q 239 171 278 171 z "},"_":{"ha":694,"x_min":17,"x_max":678,"o":"m 17 -194 l 17 -79 l 678 -79 l 678 -194 l 17 -194 z "},"‾":{"ha":694,"x_min":17,"x_max":678,"o":"m 17 785 l 17 900 l 678 900 l 678 785 l 17 785 z "},"‿":{"ha":0,"x_min":-635,"x_max":635,"o":"m 0 -321 q -330 -278 -168 -321 q -635 -149 -492 -236 l -582 -56 q -439 -119 -514 -93 q -288 -161 -364 -146 q -139 -183 -212 -176 q 0 -190 -65 -190 q 139 -183 65 -190 q 288 -161 213 -176 q 439 -119 364 -146 q 582 -56 514 -93 l 635 -149 q 330 -278 492 -236 q 0 -321 168 -321 z "},"(":{"ha":478,"x_min":100,"x_max":411,"o":"m 283 -249 q 148 49 196 -106 q 100 386 100 203 q 148 724 100 569 q 283 1021 196 878 l 411 968 q 300 683 335 832 q 265 386 265 535 q 300 89 265 238 q 411 -196 335 -60 l 283 -249 z "},")":{"ha":478,"x_min":67,"x_max":378,"o":"m 194 -249 l 67 -196 q 179 89 144 -60 q 214 386 214 238 q 179 683 214 535 q 67 968 144 832 l 194 1021 q 330 724 282 878 q 378 386 378 569 q 330 49 378 203 q 194 -249 282 -106 z "},"[":{"ha":478,"x_min":121,"x_max":414,"o":"m 121 -211 l 121 983 l 414 983 l 414 875 l 274 875 l 274 -103 l 414 -103 l 414 -211 l 121 -211 z "},"]":{"ha":478,"x_min":64,"x_max":357,"o":"m 64 -211 l 64 -103 l 206 -103 l 206 875 l 64 875 l 64 983 l 357 983 l 357 -211 l 64 -211 z "},"{":{"ha":478,"x_min":43,"x_max":414,"o":"m 326 -211 q 192 -169 235 -211 q 149 -14 149 -126 q 151 53 149 24 q 156 109 153 82 q 160 163 158 136 q 163 224 163 190 q 156 260 163 242 q 136 292 150 278 q 99 316 122 307 q 43 326 76 325 l 43 446 q 99 456 76 447 q 136 480 122 465 q 156 513 150 494 q 163 549 163 531 q 160 609 163 582 q 156 663 158 636 q 151 719 153 690 q 149 786 149 749 q 192 941 149 899 q 326 983 235 983 l 414 983 l 414 875 l 388 875 q 329 855 344 875 q 314 778 314 835 q 317 668 314 721 q 319 551 319 615 q 294 437 319 472 q 217 389 269 401 l 217 383 q 294 335 269 371 q 319 221 319 300 q 317 104 319 157 q 314 -6 314 51 q 329 -83 314 -62 q 388 -103 344 -103 l 414 -103 l 414 -211 l 326 -211 z "},"}":{"ha":478,"x_min":64,"x_max":435,"o":"m 64 -211 l 64 -103 l 90 -103 q 149 -83 133 -103 q 164 -6 164 -62 q 161 104 164 51 q 158 221 158 157 q 183 335 158 300 q 261 383 208 371 l 261 389 q 183 437 208 401 q 158 551 158 472 q 161 668 158 615 q 164 778 164 721 q 149 855 164 835 q 90 875 133 875 l 64 875 l 64 983 l 151 983 q 286 941 243 983 q 329 786 329 899 q 327 719 329 749 q 322 663 325 690 q 317 609 319 636 q 315 549 315 582 q 322 513 315 531 q 342 480 328 494 q 378 456 356 465 q 435 446 401 447 l 435 326 q 378 316 401 325 q 342 292 356 307 q 322 260 328 278 q 315 224 315 242 q 317 163 315 190 q 322 109 319 136 q 327 53 325 82 q 329 -14 329 24 q 286 -169 329 -126 q 151 -211 243 -211 l 64 -211 z "},"/":{"ha":471,"x_min":18,"x_max":431,"o":"m 18 -222 l 297 986 l 431 986 l 151 -222 l 18 -222 z "},"|":{"ha":372,"x_min":119,"x_max":253,"o":"m 119 -347 l 119 1042 l 253 1042 l 253 -347 l 119 -347 z "},"\\":{"ha":471,"x_min":39,"x_max":453,"o":"m 319 -222 l 39 986 l 172 986 l 453 -222 l 319 -222 z "},"¦":{"ha":372,"x_min":119,"x_max":253,"o":"m 119 433 l 119 1042 l 253 1042 l 253 433 l 119 433 m 119 -347 l 119 283 l 253 283 l 253 -347 l 119 -347 z "},"*":{"ha":635,"x_min":53,"x_max":582,"o":"m 206 485 l 121 546 l 203 690 l 53 758 l 85 858 l 246 825 l 264 989 l 371 989 l 389 824 l 549 858 l 582 758 l 432 690 l 514 546 l 429 485 l 318 608 l 206 485 z "},"†":{"ha":708,"x_min":61,"x_max":647,"o":"m 272 -111 l 285 608 l 61 597 l 61 761 l 285 749 l 272 989 l 436 989 l 424 749 l 647 761 l 647 597 l 424 608 l 436 -111 l 272 -111 z "},"‡":{"ha":708,"x_min":61,"x_max":647,"o":"m 272 -111 l 285 129 l 61 117 l 61 281 l 285 264 l 272 439 l 285 614 l 61 597 l 61 761 l 285 749 l 272 989 l 436 989 l 424 749 l 647 761 l 647 597 l 424 614 l 436 439 l 424 264 l 647 281 l 647 117 l 424 129 l 436 -111 l 272 -111 z "},"§":{"ha":733,"x_min":51,"x_max":682,"o":"m 224 468 q 246 412 224 435 q 303 370 268 389 q 380 334 338 351 q 463 296 422 317 q 510 378 510 325 q 488 434 510 411 q 431 476 465 457 q 355 511 397 494 q 272 549 313 528 q 224 468 224 517 m 333 -117 q 184 -88 257 -117 q 64 0 111 -60 l 182 104 q 333 33 250 33 q 397 50 376 33 q 417 93 417 67 q 390 139 417 119 q 322 176 363 158 q 234 215 282 194 q 146 267 186 236 q 78 343 106 299 q 51 453 51 388 q 81 552 51 506 q 163 631 111 599 q 133 681 143 653 q 122 746 122 710 q 187 899 122 840 q 369 958 251 958 q 513 930 450 958 q 619 868 576 901 l 526 740 q 456 788 494 768 q 381 807 417 807 q 306 753 306 807 q 333 709 306 728 q 403 672 361 690 q 494 631 444 653 q 585 577 543 608 q 654 501 626 546 q 682 394 682 457 q 652 288 682 333 q 568 210 622 243 q 592 161 583 188 q 600 103 600 135 q 583 15 600 56 q 532 -54 565 -25 q 449 -100 499 -83 q 333 -117 399 -117 z "},"¶":{"ha":883,"x_min":54,"x_max":750,"o":"m 546 -111 l 546 906 l 750 906 l 750 -111 l 546 -111 m 413 274 q 274 294 339 274 q 160 355 208 314 q 83 456 111 396 q 54 596 54 517 q 82 742 54 683 q 158 838 110 801 q 270 890 206 875 q 407 906 335 906 l 468 906 l 468 274 l 413 274 z "},"‖":{"ha":628,"x_min":119,"x_max":508,"o":"m 119 -347 l 119 1042 l 253 1042 l 253 -347 l 119 -347 m 375 -347 l 375 1042 l 508 1042 l 508 -347 l 375 -347 z "},"‼":{"ha":853,"x_min":113,"x_max":740,"o":"m 169 321 l 140 746 l 133 931 l 339 931 l 332 746 l 303 321 l 169 321 m 236 -17 q 148 20 183 -17 q 113 111 113 57 q 148 203 113 167 q 236 240 183 240 q 324 203 289 240 q 360 111 360 167 q 324 20 360 57 q 236 -17 289 -17 m 550 321 l 521 746 l 514 931 l 719 931 l 713 746 l 683 321 l 550 321 m 617 -17 q 528 20 564 -17 q 493 111 493 57 q 528 203 493 167 q 617 240 564 240 q 705 203 669 240 q 740 111 740 167 q 705 20 740 57 q 617 -17 669 -17 z "},"⁇":{"ha":1213,"x_min":57,"x_max":1154,"o":"m 214 321 q 217 407 207 368 q 247 479 228 446 q 291 540 267 513 q 338 594 315 568 q 374 644 360 619 q 389 694 389 668 q 363 760 389 738 q 296 782 338 782 q 227 764 257 782 q 169 718 197 746 l 57 821 q 173 913 106 878 q 322 947 240 947 q 426 933 378 947 q 509 890 474 919 q 565 816 544 861 q 585 710 585 771 q 569 633 585 667 q 531 569 554 599 q 483 513 508 540 q 435 457 457 486 q 401 395 414 428 q 393 321 389 363 l 214 321 m 303 -17 q 215 20 250 -17 q 181 111 181 57 q 215 203 181 167 q 303 240 250 240 q 391 203 356 240 q 426 111 426 167 q 391 20 426 57 q 303 -17 356 -17 m 783 321 q 787 407 776 368 q 817 479 797 446 q 860 540 836 513 q 907 594 885 568 q 944 644 929 619 q 958 694 958 668 q 933 760 958 738 q 865 782 907 782 q 797 764 826 782 q 739 718 767 746 l 626 821 q 742 913 675 878 q 892 947 810 947 q 995 933 947 947 q 1078 890 1043 919 q 1134 816 1114 861 q 1154 710 1154 771 q 1139 633 1154 667 q 1101 569 1124 599 q 1052 513 1078 540 q 1005 457 1026 486 q 971 395 983 428 q 963 321 958 363 l 783 321 m 872 -17 q 785 20 819 -17 q 750 111 750 57 q 785 203 750 167 q 872 240 819 240 q 960 203 925 240 q 996 111 996 167 q 960 20 996 57 q 872 -17 925 -17 z "},"⁉":{"ha":1042,"x_min":113,"x_max":983,"o":"m 169 321 l 140 746 l 133 931 l 339 931 l 332 746 l 303 321 l 169 321 m 236 -17 q 148 20 183 -17 q 113 111 113 57 q 148 203 113 167 q 236 240 183 240 q 324 203 289 240 q 360 111 360 167 q 324 20 360 57 q 236 -17 289 -17 m 613 321 q 616 407 606 368 q 646 479 626 446 q 690 540 665 513 q 736 594 714 568 q 773 644 758 619 q 788 694 788 668 q 762 760 788 738 q 694 782 736 782 q 626 764 656 782 q 568 718 596 746 l 456 821 q 572 913 504 878 q 721 947 639 947 q 824 933 776 947 q 908 890 872 919 q 963 816 943 861 q 983 710 983 771 q 968 633 983 667 q 930 569 953 599 q 881 513 907 540 q 834 457 856 486 q 800 395 813 428 q 792 321 788 363 l 613 321 m 701 -17 q 614 20 649 -17 q 579 111 579 57 q 614 203 579 167 q 701 240 649 240 q 790 203 754 240 q 825 111 825 167 q 790 20 825 57 q 701 -17 754 -17 z "},"⁈":{"ha":1042,"x_min":57,"x_max":929,"o":"m 214 321 q 217 407 207 368 q 247 479 228 446 q 291 540 267 513 q 338 594 315 568 q 374 644 360 619 q 389 694 389 668 q 363 760 389 738 q 296 782 338 782 q 227 764 257 782 q 169 718 197 746 l 57 821 q 173 913 106 878 q 322 947 240 947 q 426 933 378 947 q 509 890 474 919 q 565 816 544 861 q 585 710 585 771 q 569 633 585 667 q 531 569 554 599 q 483 513 508 540 q 435 457 457 486 q 401 395 414 428 q 393 321 389 363 l 214 321 m 303 -17 q 215 20 250 -17 q 181 111 181 57 q 215 203 181 167 q 303 240 250 240 q 391 203 356 240 q 426 111 426 167 q 391 20 426 57 q 303 -17 356 -17 m 739 321 l 710 746 l 703 931 l 908 931 l 901 746 l 872 321 l 739 321 m 806 -17 q 717 20 753 -17 q 682 111 682 57 q 717 203 682 167 q 806 240 753 240 q 894 203 858 240 q 929 111 929 167 q 894 20 929 57 q 806 -17 858 -17 z "},"‽":{"ha":667,"x_min":22,"x_max":608,"o":"m 239 321 l 214 557 l 199 707 l 363 707 l 363 614 l 354 515 q 401 588 379 551 q 424 679 424 625 q 387 764 424 733 q 296 794 350 794 q 210 775 247 794 q 135 707 174 756 l 22 810 q 156 915 81 883 q 310 947 231 947 q 428 931 374 947 q 523 885 483 915 q 585 813 563 856 q 608 717 608 771 q 590 617 608 660 q 545 542 572 575 q 488 481 518 508 q 432 428 457 454 q 392 377 407 403 q 381 321 376 351 l 239 321 m 303 -17 q 215 20 250 -17 q 181 111 181 57 q 215 203 181 167 q 303 240 250 240 q 391 203 356 240 q 426 111 426 167 q 391 20 426 57 q 303 -17 356 -17 z "},"⌜":{"ha":478,"x_min":121,"x_max":414,"o":"m 121 0 l 121 960 l 414 960 l 414 851 l 274 851 l 274 0 l 121 0 z "},"⌝":{"ha":478,"x_min":64,"x_max":357,"o":"m 206 0 l 206 851 l 64 851 l 64 960 l 357 960 l 357 0 l 206 0 z "},"⌞":{"ha":478,"x_min":121,"x_max":414,"o":"m 121 -78 l 121 882 l 274 882 l 274 31 l 414 31 l 414 -78 l 121 -78 z "},"⌟":{"ha":478,"x_min":64,"x_max":357,"o":"m 64 -78 l 64 31 l 206 31 l 206 882 l 357 882 l 357 -78 l 64 -78 z "},"⟦":{"ha":607,"x_min":121,"x_max":543,"o":"m 121 -211 l 121 983 l 543 983 l 543 875 l 414 875 l 414 -103 l 543 -103 l 543 -211 l 121 -211 m 239 -103 l 308 -103 l 308 875 l 239 875 l 239 -103 z "},"⟧":{"ha":607,"x_min":64,"x_max":486,"o":"m 64 -211 l 64 -103 l 193 -103 l 193 875 l 64 875 l 64 983 l 486 983 l 486 -211 l 64 -211 m 299 -103 l 368 -103 l 368 875 l 299 875 l 299 -103 z "},"⸢":{"ha":478,"x_min":121,"x_max":414,"o":"m 121 386 l 121 983 l 414 983 l 414 875 l 274 875 l 274 386 l 121 386 z "},"⸣":{"ha":478,"x_min":64,"x_max":357,"o":"m 206 386 l 206 875 l 64 875 l 64 983 l 357 983 l 357 386 l 206 386 z "},"⸤":{"ha":478,"x_min":121,"x_max":414,"o":"m 121 -211 l 121 386 l 274 386 l 274 -103 l 414 -103 l 414 -211 l 121 -211 z "},"⸥":{"ha":478,"x_min":64,"x_max":357,"o":"m 64 -211 l 64 -103 l 206 -103 l 206 386 l 357 386 l 357 -211 l 64 -211 z "},"©":{"ha":1042,"x_min":63,"x_max":978,"o":"m 521 -12 q 346 19 429 -12 q 199 112 263 51 q 99 258 136 172 q 63 451 63 343 q 99 644 63 560 q 199 788 136 729 q 346 878 263 847 q 521 910 429 910 q 696 878 613 910 q 842 788 779 847 q 941 644 904 729 q 978 451 978 558 q 941 258 978 343 q 842 112 904 172 q 696 19 779 51 q 521 -12 613 -12 m 521 72 q 664 99 597 72 q 779 176 731 126 q 856 296 828 226 q 885 451 885 365 q 856 606 885 536 q 779 724 828 675 q 664 800 731 774 q 521 826 597 826 q 378 800 444 826 q 263 724 311 774 q 185 606 214 675 q 157 451 157 536 q 185 296 157 365 q 263 176 214 226 q 378 99 311 126 q 521 72 444 72 m 538 176 q 430 196 479 176 q 345 251 381 215 q 290 337 310 286 q 269 450 269 388 q 292 560 269 511 q 351 644 314 610 q 436 698 388 679 q 538 717 485 717 q 644 692 601 717 q 721 635 688 668 l 644 550 q 600 585 622 574 q 550 597 578 597 q 449 555 483 597 q 415 450 415 513 q 450 338 415 379 q 543 296 485 296 q 603 309 578 296 q 654 343 628 322 l 721 249 q 636 197 681 217 q 538 176 592 176 z "},"℗":{"ha":1042,"x_min":63,"x_max":978,"o":"m 521 -12 q 346 19 429 -12 q 199 112 263 51 q 99 258 136 172 q 63 451 63 343 q 99 644 63 560 q 199 788 136 729 q 346 878 263 847 q 521 910 429 910 q 696 878 613 910 q 842 788 779 847 q 941 644 904 729 q 978 451 978 558 q 941 258 978 343 q 842 112 904 172 q 696 19 779 51 q 521 -12 613 -12 m 521 72 q 664 99 597 72 q 779 176 731 126 q 856 296 828 226 q 885 451 885 365 q 856 606 885 536 q 779 724 828 675 q 664 800 731 774 q 521 826 597 826 q 378 800 444 826 q 263 724 311 774 q 185 606 214 675 q 157 451 157 536 q 185 296 157 365 q 263 176 214 226 q 378 99 311 126 q 521 72 444 72 m 332 193 l 332 700 l 533 700 q 627 690 583 700 q 703 660 671 681 q 753 604 735 639 q 772 519 772 569 q 753 431 772 468 q 701 368 733 393 q 625 331 668 343 q 533 319 582 319 l 479 319 l 479 193 l 332 193 m 479 425 l 522 425 q 628 514 628 425 q 601 572 628 554 q 522 590 574 590 l 479 590 l 479 425 z "},"®":{"ha":642,"x_min":44,"x_max":596,"o":"m 321 432 q 213 453 264 432 q 125 511 163 474 q 66 600 88 549 q 44 713 44 651 q 66 825 44 774 q 125 914 88 876 q 213 972 163 951 q 321 993 264 993 q 428 972 378 993 q 515 914 478 951 q 574 825 553 876 q 596 713 596 774 q 574 600 596 651 q 515 511 553 549 q 428 453 478 474 q 321 432 378 432 m 321 500 q 464 558 408 500 q 519 713 519 615 q 464 867 519 810 q 321 925 408 925 q 240 910 276 925 q 177 867 204 894 q 135 800 150 839 q 121 713 121 761 q 135 625 121 664 q 177 558 150 586 q 240 515 204 531 q 321 500 276 500 m 208 578 l 208 851 l 332 851 q 413 829 381 851 q 444 760 444 807 q 396 685 444 708 l 453 578 l 369 578 l 328 661 l 288 661 l 288 578 l 208 578 m 288 717 l 317 717 q 348 728 338 717 q 358 756 358 740 q 348 781 358 771 q 317 792 338 792 l 288 792 l 288 717 z "},"™":{"ha":947,"x_min":6,"x_max":915,"o":"m 126 503 l 126 818 l 6 818 l 6 939 l 379 939 l 379 818 l 258 818 l 258 503 l 126 503 m 439 503 l 439 939 l 589 939 l 643 801 l 674 710 l 679 710 l 711 801 l 764 939 l 915 939 l 915 503 l 793 503 l 793 636 l 808 796 l 803 796 l 724 567 l 629 567 l 551 796 l 546 796 l 561 636 l 561 503 l 439 503 z "},"℠":{"ha":947,"x_min":25,"x_max":915,"o":"m 194 486 q 25 554 101 486 l 93 638 q 146 601 117 615 q 204 586 175 586 q 244 615 244 586 q 231 640 244 632 q 193 660 217 649 l 133 686 q 72 733 97 703 q 47 815 47 763 q 92 913 47 872 q 214 954 136 954 q 297 938 258 954 q 365 899 335 922 l 303 814 q 256 841 281 829 q 207 853 231 853 q 176 844 185 853 q 167 822 167 835 q 180 801 167 808 q 218 782 193 793 l 276 757 q 343 711 319 740 q 367 629 367 682 q 355 576 367 601 q 320 530 343 550 q 265 498 297 510 q 194 486 233 486 m 439 503 l 439 939 l 589 939 l 643 801 l 674 710 l 679 710 l 711 801 l 764 939 l 915 939 l 915 503 l 793 503 l 793 636 l 808 796 l 803 796 l 724 567 l 629 567 l 551 796 l 546 796 l 561 636 l 561 503 l 439 503 z "},"@":{"ha":1254,"x_min":68,"x_max":1186,"o":"m 594 -239 q 395 -207 490 -239 q 227 -110 300 -175 q 111 53 154 -44 q 68 285 68 151 q 118 549 68 431 q 253 753 168 668 q 453 883 339 838 q 694 929 567 929 q 898 893 807 929 q 1053 791 989 857 q 1151 634 1117 725 q 1186 435 1186 543 q 1157 267 1186 339 q 1082 148 1128 196 q 980 76 1036 100 q 869 53 924 53 q 765 81 810 53 q 710 158 721 108 l 707 158 q 631 92 678 118 q 540 67 583 67 q 407 123 457 67 q 357 275 357 179 q 378 400 357 339 q 438 509 400 461 q 526 586 475 557 q 638 615 578 615 q 699 599 672 615 q 743 546 725 583 l 746 546 l 765 604 l 892 604 l 828 299 q 892 179 799 179 q 952 197 922 179 q 1006 247 982 214 q 1043 326 1029 279 q 1057 429 1057 372 q 1036 572 1057 504 q 969 692 1015 640 q 851 775 924 744 q 678 806 779 806 q 504 769 589 806 q 353 665 419 732 q 246 502 286 597 q 206 290 206 407 q 238 111 206 188 q 327 -15 271 35 q 456 -90 383 -65 q 611 -115 529 -115 q 722 -100 665 -115 q 822 -61 778 -85 l 867 -172 q 736 -223 803 -207 q 594 -239 669 -239 m 583 194 q 627 208 606 194 q 675 257 649 222 l 708 444 q 644 485 688 485 q 588 465 613 485 q 547 417 564 446 q 520 353 529 388 q 511 288 511 318 q 583 194 511 194 z "},"#":{"ha":733,"x_min":47,"x_max":692,"o":"m 119 0 l 150 260 l 47 260 l 47 390 l 165 390 l 185 543 l 75 543 l 75 674 l 201 674 l 231 903 l 347 903 l 319 674 l 464 674 l 493 903 l 610 903 l 582 674 l 692 674 l 692 543 l 565 543 l 547 390 l 664 390 l 664 260 l 532 260 l 500 0 l 382 0 l 413 260 l 269 260 l 238 0 l 119 0 m 285 390 l 428 390 l 447 543 l 303 543 l 285 390 z "},"⁰":{"ha":522,"x_min":36,"x_max":488,"o":"m 261 504 q 171 524 213 504 q 99 581 129 543 q 53 672 69 618 q 36 793 36 725 q 53 914 36 861 q 99 1003 69 967 q 171 1060 129 1040 q 261 1079 213 1079 q 351 1060 310 1079 q 423 1003 393 1040 q 470 914 453 967 q 488 793 488 861 q 470 672 488 725 q 423 581 453 618 q 351 524 393 543 q 261 504 310 504 m 261 618 q 320 657 296 618 q 344 793 344 696 q 320 928 344 890 q 261 965 296 965 q 202 928 226 965 q 178 793 178 890 q 202 657 178 696 q 261 618 226 618 z "},"¹":{"ha":522,"x_min":106,"x_max":381,"o":"m 229 521 l 229 911 l 106 911 l 106 1003 q 155 1013 133 1007 q 194 1025 176 1018 q 228 1041 213 1032 q 261 1063 244 1050 l 381 1063 l 381 521 l 229 521 z "},"²":{"ha":522,"x_min":38,"x_max":464,"o":"m 63 521 l 63 601 q 233 753 167 688 q 300 871 300 819 q 279 933 300 911 q 221 956 258 956 q 169 938 193 956 q 122 890 146 921 l 38 968 q 244 1079 121 1079 q 390 1031 335 1079 q 444 896 444 983 q 433 831 444 863 q 401 769 421 800 q 355 708 381 739 q 300 646 329 678 l 464 646 l 464 521 l 63 521 z "},"³":{"ha":522,"x_min":38,"x_max":468,"o":"m 258 504 q 131 533 188 504 q 38 614 74 561 l 128 685 q 243 618 176 618 q 298 635 275 618 q 321 683 321 651 q 192 754 321 754 l 192 840 q 272 856 242 840 q 301 907 301 872 q 283 950 301 935 q 233 965 265 965 q 185 950 207 965 q 144 911 164 935 l 60 986 q 150 1057 104 1035 q 260 1079 196 1079 q 331 1069 297 1079 q 392 1039 365 1058 q 433 991 418 1019 q 449 928 449 963 q 428 855 449 885 q 369 803 407 825 q 440 753 411 786 q 468 672 468 721 q 451 603 468 635 q 405 551 433 572 q 338 517 376 529 q 258 504 300 504 z "},"⁴":{"ha":522,"x_min":49,"x_max":511,"o":"m 297 521 l 297 642 l 49 642 l 49 717 l 244 1063 l 431 1063 l 431 739 l 511 739 l 511 642 l 431 642 l 431 521 l 297 521 m 186 739 l 297 739 l 297 796 l 306 958 l 300 958 l 244 851 l 186 739 z "},"⁵":{"ha":522,"x_min":38,"x_max":469,"o":"m 260 504 q 130 533 186 504 q 38 614 74 561 l 128 685 q 181 634 154 650 q 243 618 207 618 q 300 642 278 618 q 322 700 322 667 q 298 760 322 740 q 240 781 274 781 q 198 773 217 781 q 160 749 179 765 l 96 793 l 119 1063 l 447 1063 l 447 936 l 238 936 l 229 861 q 265 867 247 865 q 293 869 282 869 q 361 858 329 869 q 417 823 393 846 q 456 767 442 800 q 469 693 469 735 q 454 618 469 653 q 410 558 439 583 q 344 519 382 533 q 260 504 306 504 z "},"⁶":{"ha":522,"x_min":50,"x_max":472,"o":"m 281 504 q 110 582 169 504 q 50 789 50 660 q 67 906 50 853 q 116 999 83 960 q 195 1058 149 1038 q 303 1079 242 1079 q 400 1061 361 1079 q 463 1022 439 1043 l 404 929 q 363 955 385 944 q 313 965 340 965 q 224 926 253 965 q 188 819 194 888 q 303 867 238 867 q 427 821 382 867 q 472 696 472 775 q 458 619 472 654 q 417 559 443 585 q 356 519 392 533 q 281 504 321 504 m 274 618 q 319 635 300 618 q 339 692 339 653 q 268 765 339 765 q 188 726 226 765 q 219 643 194 668 q 274 618 244 618 z "},"⁷":{"ha":522,"x_min":69,"x_max":478,"o":"m 163 521 q 177 636 167 583 q 206 738 188 689 q 249 835 224 788 q 311 938 275 883 l 69 938 l 69 1063 l 478 1063 l 478 982 q 403 869 432 924 q 357 761 374 815 q 333 648 340 707 q 321 521 325 589 l 163 521 z "},"⁸":{"ha":522,"x_min":53,"x_max":468,"o":"m 261 504 q 177 517 215 504 q 111 550 139 529 q 68 599 83 571 q 53 658 53 626 q 84 742 53 706 q 153 799 115 778 l 153 804 q 94 859 117 829 q 72 931 72 889 q 87 993 72 965 q 127 1040 101 1021 q 188 1069 153 1058 q 261 1079 222 1079 q 336 1069 301 1079 q 397 1040 371 1058 q 437 993 422 1021 q 451 931 451 965 q 427 861 451 892 q 371 811 403 831 l 371 806 q 440 747 411 783 q 468 660 468 711 q 453 599 468 628 q 410 550 438 571 q 344 517 382 529 q 261 504 307 504 m 283 851 q 318 921 318 885 q 301 962 318 947 q 260 976 285 976 q 220 963 236 976 q 204 926 204 949 q 227 881 204 897 q 283 851 250 865 m 261 604 q 313 624 292 604 q 333 671 333 643 q 305 718 333 703 q 236 753 276 733 q 189 674 189 721 q 209 624 189 644 q 261 604 229 604 z "},"⁹":{"ha":522,"x_min":49,"x_max":472,"o":"m 253 818 q 335 858 301 818 q 303 941 328 917 q 247 965 278 965 q 201 948 221 965 q 182 892 182 931 q 201 837 182 856 q 253 818 219 818 m 219 504 q 122 522 160 504 q 60 561 83 540 l 118 654 q 160 628 138 639 q 210 618 182 618 q 299 657 269 618 q 335 764 328 696 q 218 717 285 717 q 94 763 139 717 q 49 888 49 808 q 63 964 49 929 q 104 1024 78 999 q 166 1065 131 1050 q 242 1079 201 1079 q 340 1059 297 1079 q 413 1001 383 1039 q 457 911 442 964 q 472 794 472 858 q 455 676 472 729 q 406 585 438 624 q 326 525 374 546 q 219 504 279 504 z "},"⁽":{"ha":372,"x_min":88,"x_max":324,"o":"m 214 396 q 160 486 183 442 q 120 578 136 531 q 96 678 104 625 q 88 793 88 731 q 96 908 88 856 q 120 1007 104 960 q 160 1099 136 1054 q 214 1189 183 1143 l 324 1144 q 229 793 229 975 q 253 613 229 699 q 324 440 276 526 l 214 396 z "},"⁾":{"ha":372,"x_min":49,"x_max":285,"o":"m 160 396 l 49 440 q 119 613 96 526 q 143 793 143 699 q 49 1144 143 975 l 160 1189 q 213 1099 189 1143 q 252 1007 236 1054 q 276 908 268 960 q 285 793 285 856 q 276 678 285 731 q 252 578 268 625 q 213 486 236 531 q 160 396 189 442 z "},"₀":{"ha":522,"x_min":36,"x_max":488,"o":"m 261 -274 q 171 -254 213 -274 q 99 -197 129 -235 q 53 -106 69 -160 q 36 15 36 -53 q 53 136 36 83 q 99 226 69 189 q 171 282 129 263 q 261 301 213 301 q 351 282 310 301 q 423 226 393 263 q 470 136 453 189 q 488 15 488 83 q 470 -106 488 -53 q 423 -197 453 -160 q 351 -254 393 -235 q 261 -274 310 -274 m 261 -160 q 320 -121 296 -160 q 344 15 344 -82 q 320 150 344 113 q 261 188 296 188 q 202 150 226 188 q 178 15 178 113 q 202 -121 178 -82 q 261 -160 226 -160 z "},"₁":{"ha":522,"x_min":106,"x_max":381,"o":"m 229 -257 l 229 133 l 106 133 l 106 225 q 155 235 133 229 q 194 247 176 240 q 228 263 213 254 q 261 285 244 272 l 381 285 l 381 -257 l 229 -257 z "},"₂":{"ha":522,"x_min":38,"x_max":464,"o":"m 63 -257 l 63 -176 q 233 -24 167 -90 q 300 93 300 42 q 279 156 300 133 q 221 178 258 178 q 169 160 193 178 q 122 113 146 143 l 38 190 q 244 301 121 301 q 390 253 335 301 q 444 118 444 206 q 433 53 444 85 q 401 -8 421 22 q 355 -69 381 -39 q 300 -132 329 -100 l 464 -132 l 464 -257 l 63 -257 z "},"₃":{"ha":522,"x_min":38,"x_max":468,"o":"m 258 -274 q 131 -245 188 -274 q 38 -164 74 -217 l 128 -93 q 243 -160 176 -160 q 298 -143 275 -160 q 321 -94 321 -126 q 192 -24 321 -24 l 192 63 q 272 78 242 63 q 301 129 301 94 q 283 172 301 157 q 233 188 265 188 q 185 172 207 188 q 144 133 164 157 l 60 208 q 150 279 104 257 q 260 301 196 301 q 331 291 297 301 q 392 261 365 281 q 433 213 418 242 q 449 150 449 185 q 428 77 449 107 q 369 25 407 47 q 440 -24 411 8 q 468 -106 468 -57 q 451 -174 468 -143 q 405 -227 433 -206 q 338 -261 376 -249 q 258 -274 300 -274 z "},"₄":{"ha":522,"x_min":49,"x_max":511,"o":"m 297 -257 l 297 -136 l 49 -136 l 49 -61 l 244 285 l 431 285 l 431 -39 l 511 -39 l 511 -136 l 431 -136 l 431 -257 l 297 -257 m 186 -39 l 297 -39 l 297 18 l 306 181 l 300 181 l 244 74 l 186 -39 z "},"₅":{"ha":522,"x_min":38,"x_max":469,"o":"m 260 -274 q 130 -245 186 -274 q 38 -164 74 -217 l 128 -93 q 181 -144 154 -128 q 243 -160 207 -160 q 300 -135 278 -160 q 322 -78 322 -111 q 298 -17 322 -37 q 240 3 274 3 q 198 -5 217 3 q 160 -29 179 -12 l 96 15 l 119 285 l 447 285 l 447 158 l 238 158 l 229 83 q 265 90 247 88 q 293 92 282 92 q 361 80 329 92 q 417 45 393 68 q 456 -10 442 22 q 469 -85 469 -43 q 454 -160 469 -125 q 410 -219 439 -194 q 344 -259 382 -244 q 260 -274 306 -274 z "},"₆":{"ha":522,"x_min":50,"x_max":472,"o":"m 281 -274 q 110 -196 169 -274 q 50 11 50 -118 q 67 128 50 75 q 116 221 83 182 q 195 281 149 260 q 303 301 242 301 q 400 283 361 301 q 463 244 439 265 l 404 151 q 363 177 385 167 q 313 188 340 188 q 224 149 253 188 q 188 42 194 110 q 303 89 238 89 q 427 43 382 89 q 472 -82 472 -3 q 458 -158 472 -124 q 417 -219 443 -193 q 356 -259 392 -244 q 281 -274 321 -274 m 274 -160 q 319 -142 300 -160 q 339 -86 339 -125 q 268 -12 339 -12 q 188 -51 226 -12 q 219 -135 194 -110 q 274 -160 244 -160 z "},"₇":{"ha":522,"x_min":69,"x_max":478,"o":"m 163 -257 q 177 -142 167 -194 q 206 -40 188 -89 q 249 58 224 10 q 311 160 275 106 l 69 160 l 69 285 l 478 285 l 478 204 q 403 92 432 146 q 357 -17 374 38 q 333 -130 340 -71 q 321 -257 325 -189 l 163 -257 z "},"₈":{"ha":522,"x_min":53,"x_max":468,"o":"m 261 -274 q 177 -261 215 -274 q 111 -228 139 -249 q 68 -179 83 -207 q 53 -119 53 -151 q 84 -36 53 -72 q 153 21 115 0 l 153 26 q 94 81 117 51 q 72 153 72 111 q 87 215 72 188 q 127 262 101 243 q 188 291 153 281 q 261 301 222 301 q 336 291 301 301 q 397 262 371 281 q 437 215 422 243 q 451 153 451 188 q 427 83 451 114 q 371 33 403 53 l 371 28 q 440 -31 411 6 q 468 -118 468 -67 q 453 -178 468 -150 q 410 -228 438 -207 q 344 -261 382 -249 q 261 -274 307 -274 m 283 74 q 318 143 318 107 q 301 184 318 169 q 260 199 285 199 q 220 185 236 199 q 204 149 204 171 q 227 103 204 119 q 283 74 250 88 m 261 -174 q 313 -154 292 -174 q 333 -107 333 -135 q 305 -60 333 -75 q 236 -25 276 -44 q 189 -104 189 -57 q 209 -153 189 -133 q 261 -174 229 -174 z "},"₉":{"ha":522,"x_min":49,"x_max":472,"o":"m 253 40 q 335 81 301 40 q 303 163 328 139 q 247 188 278 188 q 201 170 221 188 q 182 114 182 153 q 201 59 182 78 q 253 40 219 40 m 219 -274 q 122 -256 160 -274 q 60 -217 83 -237 l 118 -124 q 160 -149 138 -139 q 210 -160 182 -160 q 299 -121 269 -160 q 335 -14 328 -82 q 218 -61 285 -61 q 94 -15 139 -61 q 49 110 49 31 q 63 186 49 151 q 104 247 78 221 q 166 287 131 272 q 242 301 201 301 q 340 281 297 301 q 413 224 383 261 q 457 133 442 186 q 472 17 472 81 q 455 -101 472 -49 q 406 -193 438 -154 q 326 -253 374 -232 q 219 -274 279 -274 z "},"₍":{"ha":372,"x_min":88,"x_max":324,"o":"m 214 -382 q 160 -292 183 -336 q 120 -200 136 -247 q 96 -100 104 -153 q 88 15 88 -47 q 96 130 88 78 q 120 229 104 182 q 160 321 136 276 q 214 411 183 365 l 324 367 q 229 15 229 197 q 253 -165 229 -79 q 324 -337 276 -251 l 214 -382 z "},"₎":{"ha":372,"x_min":49,"x_max":285,"o":"m 160 -382 l 49 -337 q 119 -165 96 -251 q 143 15 143 -79 q 49 367 143 197 l 160 411 q 213 321 189 365 q 252 229 236 276 q 276 130 268 182 q 285 15 285 78 q 276 -100 285 -47 q 252 -200 268 -153 q 213 -292 236 -247 q 160 -382 189 -336 z "},"ª":{"ha":499,"x_min":40,"x_max":444,"o":"m 181 510 q 78 551 115 510 q 40 649 40 592 q 101 763 40 722 q 300 815 163 803 q 281 860 297 844 q 232 876 265 876 q 172 865 204 876 q 107 835 140 853 l 56 929 q 152 974 101 957 q 257 990 203 990 q 395 939 346 990 q 444 783 444 888 l 444 521 l 329 521 l 315 568 l 310 568 q 253 526 285 543 q 181 510 221 510 m 229 619 q 266 629 250 619 q 300 656 282 639 l 300 732 q 204 705 231 725 q 178 661 178 685 q 229 619 178 619 z "},"º":{"ha":518,"x_min":33,"x_max":483,"o":"m 258 510 q 174 526 214 510 q 102 573 133 542 q 52 648 71 604 q 33 749 33 692 q 52 850 33 806 q 102 926 71 894 q 174 974 133 957 q 258 990 214 990 q 343 974 303 990 q 415 926 383 957 q 465 850 446 894 q 483 749 483 806 q 465 648 483 692 q 415 573 446 604 q 343 526 383 542 q 258 510 303 510 m 258 624 q 318 658 299 624 q 338 749 338 692 q 318 842 338 807 q 258 876 299 876 q 199 842 218 876 q 181 749 181 807 q 199 658 181 692 q 258 624 218 624 z "},"ᵃ":{"ha":499,"x_min":40,"x_max":444,"o":"m 181 510 q 78 551 115 510 q 40 649 40 592 q 101 763 40 722 q 300 815 163 803 q 281 860 297 844 q 232 876 265 876 q 172 865 204 876 q 107 835 140 853 l 56 929 q 152 974 101 957 q 257 990 203 990 q 395 939 346 990 q 444 783 444 888 l 444 521 l 329 521 l 315 568 l 310 568 q 253 526 285 543 q 181 510 221 510 m 229 619 q 266 629 250 619 q 300 656 282 639 l 300 732 q 204 705 231 725 q 178 661 178 685 q 229 619 178 619 z "},"ᵇ":{"ha":535,"x_min":58,"x_max":499,"o":"m 307 510 q 243 524 275 510 q 186 569 211 539 l 181 569 l 169 521 l 58 521 l 58 1164 l 203 1164 l 203 1007 l 197 938 q 255 976 224 961 q 318 990 286 990 q 450 926 401 990 q 499 758 499 863 q 483 652 499 699 q 440 574 467 606 q 378 526 413 543 q 307 510 344 510 m 272 624 q 328 655 304 624 q 351 756 351 686 q 333 846 351 818 q 276 874 314 874 q 203 835 240 874 l 203 650 q 272 624 238 624 z "},"ᶜ":{"ha":435,"x_min":33,"x_max":417,"o":"m 260 510 q 169 526 211 510 q 97 573 128 542 q 50 649 67 604 q 33 750 33 693 q 52 851 33 806 q 103 926 71 896 q 177 974 135 957 q 267 990 219 990 q 356 975 319 990 q 411 942 393 960 l 344 850 q 314 869 329 863 q 279 876 299 876 q 208 842 236 876 q 181 750 181 807 q 207 658 181 693 q 278 624 233 624 q 325 633 307 624 q 358 656 343 643 l 417 563 q 354 526 393 543 q 260 510 315 510 z "},"ᵈ":{"ha":535,"x_min":36,"x_max":478,"o":"m 226 510 q 88 575 139 510 q 36 758 36 640 q 53 855 36 813 q 97 928 69 897 q 158 974 124 958 q 228 990 193 990 q 292 977 264 990 q 340 942 319 964 l 333 1015 l 333 1164 l 478 1164 l 478 521 l 360 521 l 349 565 l 346 565 q 292 526 322 542 q 226 510 261 510 m 265 624 q 333 664 303 624 l 333 847 q 264 876 299 876 q 208 847 232 876 q 183 758 183 817 q 204 656 183 688 q 265 624 225 624 z "},"ᵉ":{"ha":481,"x_min":33,"x_max":450,"o":"m 268 510 q 176 526 218 510 q 101 574 133 543 q 51 649 69 604 q 33 750 33 693 q 51 849 33 804 q 99 924 69 893 q 169 973 129 956 q 253 990 208 990 q 342 972 304 990 q 403 924 379 954 q 438 853 426 893 q 450 769 450 813 q 449 739 450 750 q 443 713 447 728 l 171 713 q 211 640 179 661 q 288 619 243 619 q 388 647 340 619 l 436 563 q 354 523 399 536 q 268 510 310 510 m 168 794 l 329 794 q 313 854 329 828 q 254 881 296 881 q 199 860 222 881 q 168 794 175 839 z "},"ᶠ":{"ha":322,"x_min":21,"x_max":351,"o":"m 83 521 l 83 868 l 21 868 l 21 974 l 83 979 l 83 994 q 92 1066 83 1032 q 122 1126 101 1100 q 176 1168 143 1153 q 258 1183 210 1183 q 310 1179 286 1183 q 351 1168 335 1175 l 325 1065 q 278 1072 304 1072 q 241 1055 254 1072 q 228 1000 228 1038 l 228 979 l 308 979 l 308 868 l 228 868 l 228 521 l 83 521 z "},"ᵍ":{"ha":501,"x_min":32,"x_max":485,"o":"m 224 329 q 149 335 183 329 q 88 356 114 342 q 47 392 61 369 q 32 444 32 414 q 96 533 32 501 l 96 539 q 65 569 76 550 q 54 615 54 588 q 68 662 54 639 q 106 700 82 685 l 106 706 q 62 751 81 721 q 43 822 43 782 q 59 895 43 864 q 101 948 75 926 q 163 980 128 969 q 236 990 199 990 q 310 978 278 990 l 478 978 l 478 874 l 407 874 q 416 849 413 864 q 419 818 419 833 q 405 749 419 778 q 365 701 390 721 q 307 673 340 682 q 236 664 274 664 q 212 665 225 664 q 182 672 199 667 q 171 659 175 665 q 167 642 167 653 q 182 618 167 625 q 235 611 197 611 l 308 611 q 440 584 396 611 q 485 494 485 557 q 415 376 485 422 q 224 329 346 329 m 236 751 q 279 769 263 751 q 296 822 296 786 q 279 876 296 858 q 236 894 263 894 q 193 876 210 894 q 176 822 176 858 q 193 769 176 786 q 236 751 210 751 m 247 417 q 319 432 292 417 q 347 469 347 447 q 331 496 347 489 q 281 503 314 503 l 235 503 q 203 503 219 503 q 172 508 188 504 q 149 468 149 489 q 176 430 149 443 q 247 417 203 417 z "},"ʰ":{"ha":533,"x_min":58,"x_max":481,"o":"m 58 521 l 58 1164 l 203 1164 l 203 1007 l 193 922 q 253 969 217 947 q 336 990 290 990 q 447 939 414 990 q 481 803 481 888 l 481 521 l 336 521 l 336 785 q 326 848 336 826 q 281 869 317 869 q 242 858 260 869 q 203 825 224 846 l 203 521 l 58 521 z "},"ⁱ":{"ha":261,"x_min":49,"x_max":213,"o":"m 131 1040 q 72 1061 94 1040 q 49 1114 49 1082 q 72 1167 49 1146 q 131 1188 94 1188 q 190 1167 167 1188 q 213 1114 213 1146 q 190 1061 213 1082 q 131 1040 167 1040 m 58 521 l 58 979 l 203 979 l 203 521 l 58 521 z "},"ʲ":{"ha":264,"x_min":-46,"x_max":215,"o":"m 38 333 q -12 337 6 333 q -46 344 -31 340 l -21 451 q -5 447 -14 449 q 15 446 4 446 q 52 462 43 446 q 61 517 61 478 l 61 979 l 206 979 l 206 522 q 197 449 206 483 q 169 390 189 415 q 117 349 150 364 q 38 333 85 333 m 133 1040 q 74 1061 97 1040 q 51 1114 51 1082 q 74 1167 51 1146 q 133 1188 97 1188 q 192 1167 169 1188 q 215 1114 215 1146 q 192 1061 215 1082 q 133 1040 169 1040 z "},"ᵏ":{"ha":515,"x_min":58,"x_max":510,"o":"m 58 521 l 58 1164 l 203 1164 l 203 803 l 208 803 l 343 979 l 499 979 l 332 785 l 510 521 l 354 521 l 251 693 l 203 633 l 203 521 l 58 521 z "},"ˡ":{"ha":269,"x_min":58,"x_max":261,"o":"m 190 510 q 87 553 115 510 q 58 669 58 597 l 58 1164 l 203 1164 l 203 664 q 226 624 203 624 q 234 624 231 624 q 244 626 238 624 l 261 522 q 232 513 249 517 q 190 510 215 510 z "},"ᵐ":{"ha":801,"x_min":58,"x_max":749,"o":"m 58 521 l 58 979 l 175 979 l 186 919 l 189 919 q 249 969 217 947 q 328 990 281 990 q 457 913 418 990 q 519 967 485 943 q 601 990 554 990 q 713 939 678 990 q 749 803 749 888 l 749 521 l 604 521 l 604 785 q 592 848 604 826 q 547 869 581 869 q 475 826 518 869 l 475 521 l 332 521 l 332 785 q 319 848 332 826 q 275 869 307 869 q 203 826 244 869 l 203 521 l 58 521 z "},"ⁿ":{"ha":533,"x_min":58,"x_max":481,"o":"m 58 521 l 58 979 l 174 979 l 186 919 l 189 919 q 253 969 217 947 q 336 990 290 990 q 447 939 414 990 q 481 803 481 888 l 481 521 l 336 521 l 336 785 q 327 848 336 826 q 282 869 318 869 q 242 858 260 869 q 203 825 224 846 l 203 521 l 58 521 z "},"ᵒ":{"ha":518,"x_min":33,"x_max":483,"o":"m 258 510 q 174 526 214 510 q 102 573 133 542 q 52 648 71 604 q 33 749 33 692 q 52 850 33 806 q 102 926 71 894 q 174 974 133 957 q 258 990 214 990 q 343 974 303 990 q 415 926 383 957 q 465 850 446 894 q 483 749 483 806 q 465 648 483 692 q 415 573 446 604 q 343 526 383 542 q 258 510 303 510 m 258 624 q 318 658 299 624 q 338 749 338 692 q 318 842 338 807 q 258 876 299 876 q 199 842 218 876 q 181 749 181 807 q 199 658 181 692 q 258 624 218 624 z "},"ᵖ":{"ha":535,"x_min":58,"x_max":499,"o":"m 58 336 l 58 979 l 174 979 l 183 932 l 188 932 q 247 973 211 956 q 318 990 282 990 q 450 926 401 990 q 499 758 499 863 q 483 652 499 699 q 440 574 467 606 q 378 526 413 543 q 307 510 344 510 q 248 522 276 510 q 194 558 219 535 l 203 467 l 203 336 l 58 336 m 272 624 q 328 655 304 624 q 351 756 351 686 q 333 846 351 818 q 276 874 314 874 q 203 835 240 874 l 203 650 q 272 624 238 624 z "},"ʳ":{"ha":378,"x_min":58,"x_max":378,"o":"m 58 521 l 58 979 l 175 979 l 186 899 l 189 899 q 251 968 217 946 q 319 990 285 990 q 354 987 340 990 q 378 979 368 983 l 353 856 q 330 861 343 858 q 303 864 317 864 q 249 846 276 864 q 203 782 222 828 l 203 521 l 58 521 z "},"ˢ":{"ha":413,"x_min":21,"x_max":390,"o":"m 199 510 q 105 527 153 510 q 21 571 57 544 l 83 661 q 203 615 147 615 q 257 651 257 615 q 229 682 257 671 q 165 708 201 693 q 122 728 143 717 q 83 756 100 740 q 54 794 65 772 q 43 844 43 815 q 92 949 43 908 q 221 990 140 990 q 316 972 276 990 q 386 932 356 954 l 322 846 q 273 874 297 863 q 225 885 249 885 q 189 876 201 885 q 176 851 176 867 q 205 820 176 831 q 268 796 233 810 q 311 777 289 788 q 351 751 333 767 q 379 713 368 735 q 390 660 390 690 q 341 553 390 596 q 199 510 292 510 z "},"ᵗ":{"ha":360,"x_min":17,"x_max":347,"o":"m 240 510 q 117 560 154 510 q 79 692 79 611 l 79 867 l 17 867 l 17 974 l 86 979 l 103 1097 l 224 1097 l 224 979 l 331 979 l 331 867 l 224 867 l 224 694 q 240 639 224 656 q 281 622 256 622 q 301 623 292 622 q 322 629 311 624 l 347 526 q 302 515 328 519 q 240 510 276 510 z "},"ᵘ":{"ha":532,"x_min":54,"x_max":476,"o":"m 200 510 q 88 560 122 510 q 54 694 54 611 l 54 979 l 197 979 l 197 713 q 208 651 197 671 q 256 631 218 631 q 332 674 293 631 l 332 979 l 476 979 l 476 521 l 361 521 l 346 579 l 343 579 q 283 532 319 554 q 200 510 247 510 z "},"ᵛ":{"ha":493,"x_min":11,"x_max":482,"o":"m 164 521 l 11 979 l 154 979 l 210 768 l 249 626 l 251 626 l 288 768 l 344 979 l 482 979 l 331 521 l 164 521 z "},"ʷ":{"ha":726,"x_min":22,"x_max":704,"o":"m 136 521 l 22 979 l 165 979 l 206 774 l 226 635 l 231 635 l 256 774 l 308 979 l 424 979 l 479 774 l 506 635 l 510 635 l 532 774 l 572 979 l 704 979 l 596 521 l 428 521 l 388 697 l 365 822 l 363 822 l 340 697 l 301 521 l 136 521 z "},"ˣ":{"ha":483,"x_min":11,"x_max":472,"o":"m 11 521 l 156 758 l 21 979 l 175 979 l 213 907 l 251 838 l 257 838 l 285 907 l 315 979 l 465 979 l 331 742 l 472 521 l 319 521 l 279 592 l 235 664 l 229 664 l 194 592 l 161 521 l 11 521 z "},"ʸ":{"ha":490,"x_min":11,"x_max":479,"o":"m 115 350 q 78 352 94 350 q 47 358 63 354 l 72 465 q 90 460 83 461 q 104 460 97 460 q 156 476 136 460 q 183 517 175 492 l 190 536 l 11 979 l 156 979 l 218 789 q 236 724 229 754 q 253 658 243 694 l 258 658 q 274 724 265 692 q 290 789 282 756 l 342 979 l 479 979 l 324 522 q 288 446 307 478 q 244 392 268 414 q 189 360 221 371 q 115 350 157 350 z "},"ᶻ":{"ha":433,"x_min":35,"x_max":410,"o":"m 35 521 l 35 599 l 225 867 l 58 867 l 58 979 l 404 979 l 404 901 l 214 633 l 410 633 l 410 521 l 35 521 z "},"ˁ":{"ha":476,"x_min":39,"x_max":450,"o":"m 183 521 l 183 760 q 79 858 119 807 q 39 983 39 908 q 56 1067 39 1031 q 104 1126 74 1103 q 174 1162 135 1150 q 258 1174 214 1174 q 372 1150 325 1174 q 450 1092 418 1126 l 379 1001 q 333 1043 360 1026 q 275 1060 307 1060 q 208 1039 233 1060 q 183 978 183 1018 q 191 938 183 957 q 215 899 199 918 q 259 858 232 879 q 326 811 286 836 l 326 521 l 183 521 z "},"ː":{"ha":417,"x_min":60,"x_max":357,"o":"m 60 0 l 199 264 l 218 264 l 357 0 l 60 0 m 199 417 l 60 681 l 357 681 l 218 417 l 199 417 z "},"ˑ":{"ha":417,"x_min":60,"x_max":357,"o":"m 199 394 l 60 658 l 357 658 l 218 394 l 199 394 z "},"˞":{"ha":263,"x_min":-160,"x_max":290,"o":"m 179 314 q 88 342 131 314 q 18 449 44 371 l -160 372 l -160 518 l 101 631 q 122 532 111 571 q 143 470 132 493 q 167 438 154 447 q 193 429 179 429 q 224 433 211 429 q 249 444 238 438 l 290 349 q 242 324 269 335 q 179 314 215 314 z "},"ˠ":{"ha":490,"x_min":11,"x_max":481,"o":"m 250 329 q 142 366 182 329 q 101 465 101 403 q 115 530 101 500 q 156 604 129 560 l 11 978 l 154 978 l 213 792 q 229 739 221 763 q 247 683 238 715 l 251 683 q 269 739 260 715 q 286 792 278 763 l 343 978 l 481 978 l 342 607 q 382 531 368 563 q 396 465 396 500 q 356 366 396 403 q 250 329 317 329 m 250 417 q 272 427 263 417 q 281 454 281 438 q 274 494 281 474 q 250 546 267 515 l 246 546 q 218 454 218 489 q 226 427 218 438 q 250 417 235 417 z "},"ₔ":{"ha":481,"x_min":29,"x_max":447,"o":"m 228 510 q 139 528 176 510 q 77 577 101 546 q 41 648 53 608 q 29 732 29 688 q 31 763 29 751 q 38 789 33 774 l 310 789 q 207 881 293 881 q 108 853 156 881 l 58 938 q 140 977 96 964 q 225 990 183 990 q 316 973 275 990 q 386 924 357 956 q 431 849 415 893 q 447 750 447 804 q 430 651 447 696 q 382 576 413 607 q 312 527 351 544 q 228 510 272 510 m 226 619 q 283 640 260 619 q 311 707 306 661 l 151 707 q 169 645 151 671 q 226 619 186 619 z "},"°":{"ha":507,"x_min":54,"x_max":456,"o":"m 254 553 q 176 567 213 553 q 112 609 139 582 q 69 672 85 636 q 54 753 54 708 q 69 833 54 796 q 112 897 85 869 q 176 938 139 924 q 254 953 213 953 q 333 938 296 953 q 397 897 369 924 q 440 833 424 869 q 456 753 456 796 q 440 672 456 708 q 397 609 424 636 q 333 567 369 582 q 254 553 296 553 m 254 650 q 322 678 296 650 q 347 753 347 707 q 322 826 347 797 q 254 854 296 854 q 188 826 214 854 q 161 753 161 797 q 188 678 161 707 q 254 650 214 650 z "},"¤":{"ha":733,"x_min":28,"x_max":706,"o":"m 129 115 l 28 218 l 113 304 q 65 458 65 368 q 77 541 65 503 q 111 610 89 579 l 28 696 l 129 799 l 225 701 q 367 736 292 736 q 508 701 439 736 l 604 799 l 706 696 l 621 610 q 668 458 668 547 q 656 374 668 413 q 621 304 643 336 l 706 218 l 604 115 l 507 214 q 439 189 475 197 q 367 181 403 181 q 226 214 290 181 l 129 115 m 367 322 q 451 359 417 322 q 486 458 486 396 q 451 558 486 521 q 367 594 417 594 q 282 558 317 594 q 247 458 247 521 q 282 359 247 396 q 367 322 317 322 z "},"$":{"ha":733,"x_min":54,"x_max":650,"o":"m 299 -153 l 299 -14 q 170 20 238 -7 q 54 92 103 47 l 143 229 q 244 169 196 189 q 342 149 292 149 q 427 172 400 149 q 454 244 454 196 q 427 306 454 281 q 359 353 400 331 q 271 399 318 376 q 183 454 224 422 q 115 529 142 486 q 88 635 88 572 q 144 805 88 738 q 299 892 200 872 l 299 1035 l 433 1035 l 433 894 q 550 854 500 885 q 640 781 600 824 l 538 664 q 465 716 500 699 q 386 733 431 733 q 310 713 336 733 q 283 644 283 692 q 310 588 283 611 q 378 544 338 565 q 467 501 419 524 q 555 447 514 479 q 623 370 596 415 q 650 258 650 325 q 596 87 650 158 q 433 -8 542 15 l 433 -153 l 299 -153 z "},"£":{"ha":733,"x_min":67,"x_max":690,"o":"m 67 0 l 67 126 q 172 209 129 154 q 214 339 214 264 q 213 358 214 349 q 211 376 213 367 l 72 376 l 72 496 l 167 503 l 175 503 q 159 558 165 531 q 153 614 153 586 q 175 732 153 679 q 237 822 197 785 q 331 878 276 858 q 450 899 385 899 q 585 869 528 899 q 690 786 643 840 l 579 675 q 529 719 556 704 q 469 733 503 733 q 381 701 414 733 q 349 603 349 669 q 353 553 349 578 q 364 503 357 528 l 569 503 l 569 376 l 390 376 q 392 358 392 367 q 393 338 393 349 q 378 251 393 288 q 331 178 364 215 l 331 172 l 690 172 l 690 0 l 67 0 z "},"¥":{"ha":733,"x_min":17,"x_max":717,"o":"m 264 0 l 264 204 l 51 204 l 51 301 l 264 301 l 264 378 l 51 378 l 51 475 l 221 475 l 17 882 l 226 882 l 297 697 q 331 606 314 651 q 367 515 347 560 l 372 515 q 407 607 390 561 q 442 697 424 653 l 511 882 l 717 882 l 513 475 l 682 475 l 682 378 l 468 378 l 468 301 l 682 301 l 682 204 l 468 204 l 468 0 l 264 0 z "},"€":{"ha":733,"x_min":29,"x_max":721,"o":"m 468 -17 q 242 63 338 -17 q 115 299 147 143 l 29 299 l 29 394 l 104 400 q 103 418 103 410 q 103 436 103 426 q 103 455 103 446 q 104 472 103 464 l 29 472 l 29 567 l 115 574 q 165 712 132 651 q 247 814 199 772 q 354 877 294 856 q 483 899 414 899 q 606 871 546 899 q 710 790 665 843 l 596 681 q 541 724 569 707 q 476 740 513 740 q 377 697 417 740 q 321 575 338 654 l 618 575 l 618 472 l 308 472 l 308 443 q 308 422 308 432 q 310 403 308 413 l 563 403 l 563 299 l 324 299 q 383 182 343 222 q 481 142 422 142 q 551 161 521 142 q 608 217 581 181 l 721 111 q 607 16 671 49 q 468 -17 543 -17 z "},"¢":{"ha":733,"x_min":83,"x_max":676,"o":"m 282 426 q 308 319 282 364 q 382 253 333 274 l 382 600 q 307 533 332 578 q 282 426 282 489 m 382 -57 l 382 75 q 259 111 314 83 q 165 184 204 139 q 105 290 126 229 q 83 426 83 351 q 106 560 83 500 q 168 663 128 619 q 263 735 208 707 q 382 775 317 764 l 382 910 l 494 910 l 494 781 q 592 755 549 775 q 667 703 636 735 l 574 578 q 494 615 532 611 l 494 238 q 549 256 524 243 q 594 286 574 269 l 676 157 q 589 102 636 122 q 494 75 542 82 l 494 -57 l 382 -57 z "},"ƒ":{"ha":733,"x_min":42,"x_max":686,"o":"m 161 -133 q 89 -128 121 -133 q 42 -112 57 -122 l 69 39 q 100 30 85 32 q 131 26 115 28 q 173 36 156 28 q 203 67 190 44 q 223 126 215 89 q 238 224 231 164 l 261 426 l 157 426 l 157 567 l 260 575 l 278 575 l 285 635 q 313 766 293 711 q 365 856 332 821 q 448 906 399 890 q 567 922 497 922 q 629 915 593 922 q 686 897 665 907 l 647 744 q 619 754 635 749 q 583 760 604 760 q 512 730 536 760 q 482 651 488 700 l 472 575 l 615 575 l 615 426 l 456 426 l 424 164 q 401 47 417 101 q 356 -47 386 -7 q 279 -110 326 -87 q 161 -133 232 -133 z "},"₡":{"ha":733,"x_min":75,"x_max":717,"o":"m 472 740 q 458 740 465 740 q 444 739 451 740 l 376 168 q 429 146 397 153 l 499 738 q 485 740 492 739 q 472 740 479 740 m 281 443 q 315 244 281 322 l 371 708 q 303 606 326 674 q 281 443 281 539 m 393 -153 l 410 -15 q 381 -10 394 -12 q 356 -6 368 -8 l 338 -153 l 268 -153 l 289 18 q 133 169 192 65 q 75 436 75 274 q 98 610 75 532 q 163 745 121 688 q 263 840 204 803 q 393 890 322 876 l 410 1035 l 479 1035 l 463 899 l 478 899 q 498 898 489 899 q 518 896 507 897 l 535 1035 l 604 1035 l 585 878 q 654 838 621 863 q 715 779 688 813 l 603 668 q 565 706 583 689 l 499 146 q 603 217 557 158 l 717 111 q 609 22 668 54 q 479 -15 550 -10 l 463 -153 l 393 -153 z "},"₤":{"ha":733,"x_min":67,"x_max":690,"o":"m 67 0 l 67 126 q 160 195 121 150 q 211 301 200 240 l 72 301 l 72 397 l 175 404 l 206 404 q 197 438 201 421 q 186 471 192 454 l 72 471 l 72 567 l 153 575 l 157 575 q 153 614 153 593 q 175 732 153 679 q 237 822 197 785 q 331 878 276 858 q 450 899 385 899 q 585 869 528 899 q 690 786 643 840 l 579 675 q 529 719 556 704 q 469 733 503 733 q 381 701 414 733 q 349 603 349 669 q 349 589 349 596 q 350 575 349 582 l 569 575 l 569 471 l 372 471 q 380 438 376 454 q 386 404 383 421 l 569 404 l 569 301 l 390 301 q 372 237 386 265 q 331 178 358 208 l 331 172 l 690 172 l 690 0 l 67 0 z "},"₦":{"ha":733,"x_min":4,"x_max":728,"o":"m 211 731 l 229 556 l 267 556 l 217 731 l 211 731 m 517 151 l 522 151 l 504 328 l 467 328 l 517 151 m 101 0 l 101 328 l 4 328 l 4 400 l 101 408 l 101 475 l 4 475 l 4 547 l 101 556 l 101 882 l 290 882 l 401 556 l 485 556 l 485 882 l 632 882 l 632 556 l 728 556 l 728 475 l 632 475 l 632 408 l 728 408 l 728 328 l 632 328 l 632 0 l 443 0 l 332 328 l 249 328 l 249 0 l 101 0 m 496 408 l 490 475 l 425 475 l 444 408 l 496 408 m 308 408 l 289 475 l 238 475 l 243 408 l 308 408 z "},"₧":{"ha":733,"x_min":4,"x_max":721,"o":"m 90 0 l 90 528 l 4 528 l 4 646 l 90 653 l 90 882 l 329 882 q 440 870 388 882 q 533 831 492 858 q 601 760 574 804 q 639 654 629 717 l 721 654 l 721 528 l 640 528 q 602 424 631 468 q 532 351 574 381 q 438 308 490 322 q 329 294 386 294 l 283 294 l 283 0 l 90 0 m 283 754 l 283 654 l 449 654 q 403 731 436 707 q 318 754 371 754 l 283 754 m 283 424 l 318 424 q 404 451 371 424 q 449 528 438 479 l 283 528 l 283 424 z "},"₩":{"ha":733,"x_min":-26,"x_max":758,"o":"m 364 683 l 351 486 l 382 486 l 369 683 l 364 683 m 517 143 l 522 143 l 531 347 l 533 406 l 494 406 l 500 347 l 517 143 m 114 0 l 67 406 l -26 406 l -26 479 l 57 485 l 10 882 l 190 882 l 213 486 l 263 486 l 296 826 l 450 826 l 486 486 l 538 486 l 560 882 l 725 882 l 682 486 l 758 486 l 758 406 l 674 406 l 631 0 l 425 0 l 388 406 l 347 406 l 313 0 l 114 0 m 228 143 l 233 143 l 249 347 l 254 406 l 217 406 l 219 347 l 228 143 z "},"₫":{"ha":733,"x_min":90,"x_max":718,"o":"m 314 161 q 151 229 211 161 q 90 425 90 297 q 110 529 90 483 q 163 608 131 575 q 236 657 194 640 q 319 674 278 674 q 395 660 365 674 q 454 619 425 647 l 449 713 l 449 733 l 249 733 l 249 836 l 449 836 l 449 904 l 617 904 l 617 836 l 718 836 l 718 742 l 617 733 l 617 175 l 478 175 l 465 225 l 461 225 q 396 178 433 196 q 314 161 358 161 m 356 296 q 404 307 383 296 q 449 346 425 318 l 449 500 q 406 528 426 519 q 361 536 386 536 q 293 506 324 536 q 263 424 263 476 q 288 326 263 357 q 356 296 313 296 m 108 0 l 108 103 l 663 103 l 663 0 l 108 0 z "},"₱":{"ha":733,"x_min":4,"x_max":721,"o":"m 90 0 l 90 481 l 4 481 l 4 553 l 90 560 l 90 624 l 4 624 l 4 696 l 90 703 l 90 882 l 329 882 q 428 872 381 882 q 514 842 475 863 q 582 787 553 821 q 628 704 611 753 l 721 704 l 721 624 l 643 624 q 644 605 644 614 q 644 586 644 596 q 644 574 644 579 q 643 561 644 568 l 721 561 l 721 481 l 628 481 q 514 340 596 385 q 329 294 432 294 l 283 294 l 283 0 l 90 0 m 283 754 l 283 704 l 428 704 q 318 754 394 754 l 283 754 m 456 586 q 456 606 456 597 q 454 624 456 615 l 283 624 l 283 561 l 454 561 q 456 574 456 568 q 456 586 456 579 m 283 424 l 318 424 q 429 481 394 424 l 283 481 l 283 424 z "},"₲":{"ha":733,"x_min":53,"x_max":688,"o":"m 358 -153 l 358 -11 q 235 35 292 0 q 138 126 179 69 q 75 260 97 182 q 53 436 53 338 q 75 609 53 532 q 137 744 97 686 q 233 840 176 803 q 358 890 289 876 l 358 1035 l 494 1035 l 494 894 q 598 857 549 885 q 688 786 647 829 l 575 675 q 512 723 543 706 q 436 740 481 740 q 303 662 349 740 q 257 443 257 583 q 305 224 257 299 q 440 149 353 149 q 506 167 481 149 l 506 336 l 410 336 l 410 503 l 688 503 l 688 86 q 494 -11 603 10 l 494 -153 l 358 -153 z "},"₴":{"ha":733,"x_min":29,"x_max":696,"o":"m 404 -17 q 181 53 257 -17 q 106 242 106 124 q 111 299 106 275 l 29 299 l 29 394 l 132 403 l 158 403 q 192 440 174 422 q 229 472 210 457 l 29 472 l 29 567 l 132 575 l 374 575 q 407 613 394 593 q 419 657 419 633 q 397 718 419 696 q 331 740 374 740 q 257 723 290 740 q 188 671 224 706 l 90 781 q 197 866 138 833 q 342 899 257 899 q 542 835 468 899 q 615 651 615 771 q 604 575 615 611 l 696 575 l 696 472 l 540 472 q 499 435 521 453 q 456 403 478 418 l 696 403 l 696 299 l 326 299 q 301 232 301 267 q 326 167 301 192 q 404 142 351 142 q 590 224 492 142 l 675 92 q 613 45 647 65 q 542 11 578 25 q 470 -10 506 -3 q 404 -17 435 -17 z "},"₵":{"ha":733,"x_min":75,"x_max":717,"o":"m 281 443 q 310 255 281 328 q 399 156 340 182 l 399 725 q 310 625 340 697 q 281 443 281 553 m 399 -153 l 399 -14 q 268 29 328 -4 q 166 119 208 63 q 99 255 124 175 q 75 436 75 335 q 99 612 75 533 q 165 748 122 690 q 267 842 207 806 q 399 892 326 879 l 399 1022 l 511 1022 l 511 896 q 615 862 565 889 q 704 790 665 835 l 592 681 q 554 714 574 700 q 511 735 535 728 l 511 149 q 603 217 561 165 l 717 111 q 511 -11 631 10 l 511 -153 l 399 -153 z "},"₹":{"ha":733,"x_min":96,"x_max":646,"o":"m 96 279 l 96 442 l 186 442 q 346 540 318 442 l 96 540 l 96 635 l 199 643 l 344 643 q 290 703 329 686 q 186 719 250 719 l 96 719 l 96 882 l 646 882 l 646 779 l 463 779 q 547 643 529 732 l 646 643 l 646 540 l 549 540 q 494 399 538 454 q 385 314 451 343 l 622 0 l 393 0 l 194 279 l 96 279 z "},"₺":{"ha":733,"x_min":19,"x_max":693,"o":"m 125 -17 l 125 306 l 19 249 l 19 361 l 125 418 l 125 494 l 19 438 l 19 550 l 125 607 l 125 882 l 329 882 l 329 707 l 532 814 l 532 701 l 329 594 l 329 518 l 532 625 l 532 513 l 329 406 l 329 174 q 402 192 368 178 q 462 231 436 207 q 503 285 488 254 q 518 353 518 315 q 518 369 518 360 q 515 394 518 379 l 683 433 q 691 393 689 413 q 693 363 693 374 q 655 195 693 268 q 544 74 617 122 q 365 3 471 26 q 125 -17 260 -21 z "},"₮":{"ha":733,"x_min":44,"x_max":688,"o":"m 264 0 l 264 181 l 110 96 l 110 210 l 264 293 l 264 368 l 110 285 l 110 397 l 264 482 l 264 733 l 44 733 l 44 882 l 688 882 l 688 733 l 468 733 l 468 579 l 622 663 l 622 550 l 468 465 l 468 390 l 622 474 l 622 361 l 468 278 l 468 0 l 264 0 z "},"₸":{"ha":733,"x_min":44,"x_max":688,"o":"m 264 0 l 264 606 l 44 606 l 44 701 l 149 710 l 688 710 l 688 606 l 468 606 l 468 0 l 264 0 m 44 779 l 44 882 l 688 882 l 688 779 l 44 779 z "},"₽":{"ha":733,"x_min":4,"x_max":644,"o":"m 90 0 l 90 199 l 4 199 l 4 293 l 90 300 l 90 369 l 4 369 l 4 464 l 90 471 l 90 882 l 325 882 q 449 867 390 882 q 551 822 507 853 q 619 742 594 790 q 644 625 644 693 q 618 508 644 557 q 548 429 592 460 q 446 384 504 399 q 325 369 388 369 l 283 369 l 283 301 l 554 301 l 554 199 l 283 199 l 283 0 l 90 0 m 283 472 l 318 472 q 419 510 382 472 q 456 614 456 549 q 419 722 456 689 q 318 754 382 754 l 283 754 l 283 472 z "},"⁄":{"ha":133,"x_min":-237,"x_max":369,"o":"m -237 -17 l 251 922 l 369 922 l -119 -17 l -237 -17 z "},"∕":{"ha":133,"x_min":-237,"x_max":369,"o":"m -237 -17 l 251 922 l 369 922 l -119 -17 l -237 -17 z "},"%":{"ha":1190,"x_min":36,"x_max":1156,"o":"m 261 347 q 171 367 213 347 q 99 424 129 386 q 53 515 69 461 q 36 636 36 568 q 53 757 36 704 q 99 847 69 810 q 171 903 129 883 q 261 922 213 922 q 351 903 310 922 q 423 847 393 883 q 470 757 453 810 q 488 636 488 704 q 470 515 488 568 q 423 424 453 461 q 351 367 393 386 q 261 347 310 347 m 261 461 q 320 500 296 461 q 344 636 344 539 q 320 771 344 733 q 261 808 296 808 q 202 771 226 808 q 178 636 178 733 q 202 500 178 539 q 261 461 226 461 m 292 -17 l 781 922 l 899 922 l 410 -17 l 292 -17 m 929 -17 q 839 3 881 -17 q 767 60 797 22 q 721 151 738 97 q 704 272 704 204 q 721 393 704 340 q 767 483 738 446 q 839 539 797 519 q 929 558 881 558 q 1019 539 978 558 q 1091 483 1061 519 q 1138 393 1121 446 q 1156 272 1156 340 q 1138 151 1156 204 q 1091 60 1121 97 q 1019 3 1061 22 q 929 -17 978 -17 m 929 97 q 988 136 964 97 q 1013 272 1013 175 q 988 407 1013 369 q 929 444 964 444 q 870 407 894 444 q 846 272 846 369 q 870 136 846 175 q 929 97 894 97 z "},"‰":{"ha":1735,"x_min":36,"x_max":1699,"o":"m 292 -17 l 781 922 l 899 922 l 410 -17 l 292 -17 m 261 347 q 171 367 213 347 q 99 424 129 386 q 53 515 69 461 q 36 636 36 568 q 53 757 36 704 q 99 847 69 810 q 171 903 129 883 q 261 922 213 922 q 351 903 310 922 q 423 847 393 883 q 470 757 453 810 q 488 636 488 704 q 470 515 488 568 q 423 424 453 461 q 351 367 393 386 q 261 347 310 347 m 261 461 q 320 500 296 461 q 344 636 344 539 q 320 771 344 733 q 261 808 296 808 q 202 771 226 808 q 178 636 178 733 q 202 500 178 539 q 261 461 226 461 m 928 -17 q 838 3 879 -17 q 766 60 796 22 q 719 151 736 97 q 703 272 703 204 q 719 393 703 340 q 766 483 736 446 q 838 539 796 519 q 928 558 879 558 q 1018 539 976 558 q 1090 483 1060 519 q 1137 393 1119 446 q 1154 272 1154 340 q 1137 151 1154 204 q 1090 60 1119 97 q 1018 3 1060 22 q 928 -17 976 -17 m 928 97 q 987 136 963 97 q 1011 272 1011 175 q 987 407 1011 369 q 928 444 963 444 q 869 407 893 444 q 844 272 844 369 q 869 136 844 175 q 928 97 893 97 m 1472 -17 q 1382 3 1424 -17 q 1310 60 1340 22 q 1264 151 1281 97 q 1247 272 1247 204 q 1264 393 1247 340 q 1310 483 1281 446 q 1382 539 1340 519 q 1472 558 1424 558 q 1563 539 1521 558 q 1634 483 1604 519 q 1681 393 1664 446 q 1699 272 1699 340 q 1681 151 1699 204 q 1634 60 1664 97 q 1563 3 1604 22 q 1472 -17 1521 -17 m 1472 97 q 1531 136 1507 97 q 1556 272 1556 175 q 1531 407 1556 369 q 1472 444 1507 444 q 1413 407 1438 444 q 1389 272 1389 369 q 1413 136 1389 175 q 1472 97 1438 97 z "},"¼":{"ha":1124,"x_min":65,"x_max":1113,"o":"m 189 364 l 189 754 l 65 754 l 65 846 q 115 856 93 850 q 154 868 136 861 q 188 884 172 875 q 221 906 204 893 l 340 906 l 340 364 l 189 364 m 257 -17 l 746 922 l 864 922 l 375 -17 l 257 -17 m 899 0 l 899 121 l 650 121 l 650 196 l 846 542 l 1032 542 l 1032 218 l 1113 218 l 1113 121 l 1032 121 l 1032 0 l 899 0 m 788 218 l 899 218 l 899 275 l 907 438 l 901 438 l 846 331 l 788 218 z "},"½":{"ha":1175,"x_min":65,"x_max":1115,"o":"m 189 364 l 189 754 l 65 754 l 65 846 q 115 856 93 850 q 154 868 136 861 q 188 884 172 875 q 221 906 204 893 l 340 906 l 340 364 l 189 364 m 236 -17 l 725 922 l 843 922 l 354 -17 l 236 -17 m 714 0 l 714 81 q 885 233 818 167 q 951 350 951 299 q 931 413 951 390 q 872 435 910 435 q 821 417 844 435 q 774 369 797 400 l 689 447 q 896 558 772 558 q 1041 510 986 558 q 1096 375 1096 463 q 1084 310 1096 342 q 1052 249 1072 279 q 1006 188 1032 218 q 951 125 981 157 l 1115 125 l 1115 0 l 714 0 z "},"¾":{"ha":1136,"x_min":35,"x_max":1124,"o":"m 256 347 q 128 376 185 347 q 35 457 71 404 l 125 528 q 240 461 174 461 q 295 478 272 461 q 318 526 318 494 q 189 597 318 597 l 189 683 q 269 699 239 683 q 299 750 299 715 q 281 793 299 778 q 231 808 263 808 q 183 793 204 808 q 142 754 161 778 l 57 829 q 147 900 101 878 q 257 922 193 922 q 328 912 294 922 q 389 882 363 901 q 431 834 415 863 q 446 771 446 806 q 425 698 446 728 q 367 646 404 668 q 437 597 408 629 q 465 515 465 564 q 448 447 465 478 q 402 394 431 415 q 335 360 374 372 q 256 347 297 347 m 288 -17 l 776 922 l 894 922 l 406 -17 l 288 -17 m 910 0 l 910 121 l 661 121 l 661 196 l 857 542 l 1043 542 l 1043 218 l 1124 218 l 1124 121 l 1043 121 l 1043 0 l 910 0 m 799 218 l 910 218 l 910 275 l 918 438 l 913 438 l 857 331 l 799 218 z "},"⅓":{"ha":1163,"x_min":65,"x_max":1108,"o":"m 189 364 l 189 754 l 65 754 l 65 846 q 115 856 93 850 q 154 868 136 861 q 188 884 172 875 q 221 906 204 893 l 340 906 l 340 364 l 189 364 m 228 -17 l 717 922 l 835 922 l 346 -17 l 228 -17 m 899 -17 q 771 12 828 -17 q 678 93 714 40 l 768 164 q 883 97 817 97 q 938 114 915 97 q 961 163 961 131 q 832 233 961 233 l 832 319 q 912 335 882 319 q 942 386 942 351 q 924 429 942 414 q 874 444 906 444 q 826 429 847 444 q 785 390 804 414 l 700 465 q 790 536 744 514 q 900 558 836 558 q 972 548 938 558 q 1032 518 1006 538 q 1074 470 1058 499 q 1089 407 1089 442 q 1068 334 1089 364 q 1010 282 1047 304 q 1080 233 1051 265 q 1108 151 1108 200 q 1091 83 1108 114 q 1045 30 1074 51 q 978 -4 1017 8 q 899 -17 940 -17 z "},"⅔":{"ha":1179,"x_min":40,"x_max":1125,"o":"m 65 364 l 65 444 q 236 597 169 531 q 303 714 303 663 q 282 776 303 754 q 224 799 261 799 q 172 781 196 799 q 125 733 149 764 l 40 811 q 247 922 124 922 q 392 874 338 922 q 447 739 447 826 q 435 674 447 706 q 403 613 424 643 q 358 551 383 582 q 303 489 332 521 l 467 489 l 467 364 l 65 364 m 297 -17 l 786 922 l 904 922 l 415 -17 l 297 -17 m 915 -17 q 788 12 844 -17 q 694 93 731 40 l 785 164 q 900 97 833 97 q 955 114 932 97 q 978 163 978 131 q 849 233 978 233 l 849 319 q 928 335 899 319 q 958 386 958 351 q 940 429 958 414 q 890 444 922 444 q 842 429 864 444 q 801 390 821 414 l 717 465 q 807 536 761 514 q 917 558 853 558 q 988 548 954 558 q 1049 518 1022 538 q 1090 470 1075 499 q 1106 407 1106 442 q 1085 334 1106 364 q 1026 282 1064 304 q 1097 233 1068 265 q 1125 151 1125 200 q 1108 83 1125 114 q 1062 30 1090 51 q 995 -4 1033 8 q 915 -17 957 -17 z "},"⅕":{"ha":1163,"x_min":65,"x_max":1110,"o":"m 189 364 l 189 754 l 65 754 l 65 846 q 115 856 93 850 q 154 868 136 861 q 188 884 172 875 q 221 906 204 893 l 340 906 l 340 364 l 189 364 m 228 -17 l 717 922 l 835 922 l 346 -17 l 228 -17 m 900 -17 q 770 12 826 -17 q 678 93 714 40 l 768 164 q 821 113 794 129 q 883 97 847 97 q 940 122 918 97 q 963 179 963 146 q 938 240 963 219 q 881 260 914 260 q 838 252 857 260 q 800 228 819 244 l 736 272 l 760 542 l 1088 542 l 1088 415 l 878 415 l 869 340 q 905 347 888 344 q 933 349 922 349 q 1001 337 969 349 q 1058 302 1033 325 q 1096 247 1082 279 q 1110 172 1110 214 q 1094 97 1110 132 q 1051 38 1079 63 q 984 -2 1022 13 q 900 -17 946 -17 z "},"⅖":{"ha":1179,"x_min":40,"x_max":1126,"o":"m 65 364 l 65 444 q 236 597 169 531 q 303 714 303 663 q 282 776 303 754 q 224 799 261 799 q 172 781 196 799 q 125 733 149 764 l 40 811 q 247 922 124 922 q 392 874 338 922 q 447 739 447 826 q 435 674 447 706 q 403 613 424 643 q 358 551 383 582 q 303 489 332 521 l 467 489 l 467 364 l 65 364 m 297 -17 l 786 922 l 904 922 l 415 -17 l 297 -17 m 917 -17 q 787 12 843 -17 q 694 93 731 40 l 785 164 q 838 113 811 129 q 900 97 864 97 q 957 122 935 97 q 979 179 979 146 q 955 240 979 219 q 897 260 931 260 q 855 252 874 260 q 817 228 836 244 l 753 272 l 776 542 l 1104 542 l 1104 415 l 894 415 l 886 340 q 922 347 904 344 q 950 349 939 349 q 1018 337 986 349 q 1074 302 1050 325 q 1113 247 1099 279 q 1126 172 1126 214 q 1111 97 1126 132 q 1067 38 1096 63 q 1001 -2 1039 13 q 917 -17 963 -17 z "},"⅗":{"ha":1179,"x_min":38,"x_max":1126,"o":"m 258 347 q 131 376 188 347 q 38 457 74 404 l 128 528 q 243 461 176 461 q 298 478 275 461 q 321 526 321 494 q 192 597 321 597 l 192 683 q 272 699 242 683 q 301 750 301 715 q 283 793 301 778 q 233 808 265 808 q 185 793 207 808 q 144 754 164 778 l 60 829 q 150 900 104 878 q 260 922 196 922 q 331 912 297 922 q 392 882 365 901 q 433 834 418 863 q 449 771 449 806 q 428 698 449 728 q 369 646 407 668 q 440 597 411 629 q 468 515 468 564 q 451 447 468 478 q 405 394 433 415 q 338 360 376 372 q 258 347 300 347 m 285 -17 l 774 922 l 892 922 l 403 -17 l 285 -17 m 917 -17 q 787 12 843 -17 q 694 93 731 40 l 785 164 q 838 113 811 129 q 900 97 864 97 q 957 122 935 97 q 979 179 979 146 q 955 240 979 219 q 897 260 931 260 q 855 252 874 260 q 817 228 836 244 l 753 272 l 776 542 l 1104 542 l 1104 415 l 894 415 l 886 340 q 922 347 904 344 q 950 349 939 349 q 1018 337 986 349 q 1074 302 1050 325 q 1113 247 1099 279 q 1126 172 1126 214 q 1111 97 1126 132 q 1067 38 1096 63 q 1001 -2 1039 13 q 917 -17 963 -17 z "},"⅘":{"ha":1239,"x_min":49,"x_max":1186,"o":"m 297 364 l 297 485 l 49 485 l 49 560 l 244 906 l 431 906 l 431 582 l 511 582 l 511 485 l 431 485 l 431 364 l 297 364 m 186 582 l 297 582 l 297 639 l 306 801 l 300 801 l 244 694 l 186 582 m 344 -17 l 833 922 l 951 922 l 463 -17 l 344 -17 m 976 -17 q 847 12 903 -17 q 754 93 790 40 l 844 164 q 897 113 871 129 q 960 97 924 97 q 1017 122 994 97 q 1039 179 1039 146 q 1015 240 1039 219 q 957 260 990 260 q 915 252 933 260 q 876 228 896 244 l 813 272 l 836 542 l 1164 542 l 1164 415 l 954 415 l 946 340 q 981 347 964 344 q 1010 349 999 349 q 1078 337 1046 349 q 1134 302 1110 325 q 1172 247 1158 279 q 1186 172 1186 214 q 1171 97 1186 132 q 1127 38 1156 63 q 1060 -2 1099 13 q 976 -17 1022 -17 z "},"⅙":{"ha":1163,"x_min":65,"x_max":1099,"o":"m 189 364 l 189 754 l 65 754 l 65 846 q 115 856 93 850 q 154 868 136 861 q 188 884 172 875 q 221 906 204 893 l 340 906 l 340 364 l 189 364 m 242 -17 l 731 922 l 849 922 l 360 -17 l 242 -17 m 907 -17 q 736 61 796 -17 q 676 268 676 139 q 693 385 676 332 q 742 478 710 439 q 822 538 775 517 q 929 558 868 558 q 1026 540 988 558 q 1089 501 1065 522 l 1031 408 q 989 434 1011 424 q 939 444 967 444 q 850 406 879 444 q 814 299 821 367 q 929 346 864 346 q 1053 300 1008 346 q 1099 175 1099 254 q 1084 99 1099 133 q 1044 38 1069 64 q 983 -2 1018 13 q 907 -17 947 -17 m 900 97 q 946 115 926 97 q 965 171 965 132 q 894 244 965 244 q 814 206 853 244 q 846 122 821 147 q 900 97 871 97 z "},"⅚":{"ha":1179,"x_min":38,"x_max":1115,"o":"m 260 347 q 130 376 186 347 q 38 457 74 404 l 128 528 q 181 477 154 493 q 243 461 207 461 q 300 485 278 461 q 322 543 322 510 q 298 603 322 583 q 240 624 274 624 q 198 616 217 624 q 160 592 179 608 l 96 636 l 119 906 l 447 906 l 447 779 l 238 779 l 229 704 q 265 710 247 708 q 293 713 282 713 q 361 701 329 713 q 417 666 393 689 q 456 610 442 643 q 469 536 469 578 q 454 461 469 496 q 410 401 439 426 q 344 362 382 376 q 260 347 306 347 m 285 -17 l 774 922 l 892 922 l 403 -17 l 285 -17 m 924 -17 q 753 61 813 -17 q 693 268 693 139 q 710 385 693 332 q 759 478 726 439 q 838 538 792 517 q 946 558 885 558 q 1043 540 1004 558 q 1106 501 1082 522 l 1047 408 q 1006 434 1028 424 q 956 444 983 444 q 867 406 896 444 q 831 299 838 367 q 946 346 881 346 q 1070 300 1025 346 q 1115 175 1115 254 q 1101 99 1115 133 q 1060 38 1086 64 q 999 -2 1035 13 q 924 -17 964 -17 m 917 97 q 963 115 943 97 q 982 171 982 132 q 911 244 982 244 q 831 206 869 244 q 863 122 838 147 q 917 97 888 97 z "},"⅐":{"ha":1163,"x_min":65,"x_max":1118,"o":"m 189 364 l 189 754 l 65 754 l 65 846 q 115 856 93 850 q 154 868 136 861 q 188 884 172 875 q 221 906 204 893 l 340 906 l 340 364 l 189 364 m 228 -17 l 717 922 l 835 922 l 346 -17 l 228 -17 m 803 0 q 817 115 807 63 q 846 217 828 168 q 890 315 864 267 q 951 417 915 363 l 710 417 l 710 542 l 1118 542 l 1118 461 q 1043 349 1072 403 q 997 240 1014 294 q 973 127 981 186 q 961 0 965 68 l 803 0 z "},"⅛":{"ha":1163,"x_min":65,"x_max":1108,"o":"m 189 364 l 189 754 l 65 754 l 65 846 q 115 856 93 850 q 154 868 136 861 q 188 884 172 875 q 221 906 204 893 l 340 906 l 340 364 l 189 364 m 242 -17 l 731 922 l 849 922 l 360 -17 l 242 -17 m 901 -17 q 817 -4 856 -17 q 751 29 779 8 q 708 78 724 50 q 693 138 693 106 q 724 221 693 185 q 793 278 756 257 l 793 283 q 735 338 757 308 q 713 410 713 368 q 727 472 713 444 q 767 519 742 500 q 828 548 793 538 q 901 558 863 558 q 976 548 942 558 q 1037 519 1011 538 q 1077 472 1063 500 q 1092 410 1092 444 q 1067 340 1092 371 q 1011 290 1043 310 l 1011 285 q 1080 226 1051 263 q 1108 139 1108 190 q 1093 78 1108 107 q 1050 29 1078 50 q 985 -4 1022 8 q 901 -17 947 -17 m 924 331 q 958 400 958 364 q 942 441 958 426 q 900 456 925 456 q 860 442 876 456 q 844 406 844 428 q 867 360 844 376 q 924 331 890 344 m 901 83 q 953 103 932 83 q 974 150 974 122 q 945 197 974 182 q 876 232 917 213 q 829 153 829 200 q 849 103 829 124 q 901 83 869 83 z "},"⅜":{"ha":1179,"x_min":38,"x_max":1125,"o":"m 258 347 q 131 376 188 347 q 38 457 74 404 l 128 528 q 243 461 176 461 q 298 478 275 461 q 321 526 321 494 q 192 597 321 597 l 192 683 q 272 699 242 683 q 301 750 301 715 q 283 793 301 778 q 233 808 265 808 q 185 793 207 808 q 144 754 164 778 l 60 829 q 150 900 104 878 q 260 922 196 922 q 331 912 297 922 q 392 882 365 901 q 433 834 418 863 q 449 771 449 806 q 428 698 449 728 q 369 646 407 668 q 440 597 411 629 q 468 515 468 564 q 451 447 468 478 q 405 394 433 415 q 338 360 376 372 q 258 347 300 347 m 285 -17 l 774 922 l 892 922 l 403 -17 l 285 -17 m 918 -17 q 834 -4 872 -17 q 768 29 796 8 q 725 78 740 50 q 710 138 710 106 q 741 221 710 185 q 810 278 772 257 l 810 283 q 751 338 774 308 q 729 410 729 368 q 744 472 729 444 q 784 519 758 500 q 844 548 810 538 q 918 558 879 558 q 993 548 958 558 q 1053 519 1028 538 q 1094 472 1079 500 q 1108 410 1108 444 q 1084 340 1108 371 q 1028 290 1060 310 l 1028 285 q 1097 226 1068 263 q 1125 139 1125 190 q 1110 78 1125 107 q 1067 29 1094 50 q 1001 -4 1039 8 q 918 -17 964 -17 m 940 331 q 975 400 975 364 q 958 441 975 426 q 917 456 942 456 q 877 442 893 456 q 861 406 861 428 q 884 360 861 376 q 940 331 907 344 m 918 83 q 969 103 949 83 q 990 150 990 122 q 962 197 990 182 q 893 232 933 213 q 846 153 846 200 q 866 103 846 124 q 918 83 886 83 z "},"⅝":{"ha":1179,"x_min":38,"x_max":1125,"o":"m 260 347 q 130 376 186 347 q 38 457 74 404 l 128 528 q 181 477 154 493 q 243 461 207 461 q 300 485 278 461 q 322 543 322 510 q 298 603 322 583 q 240 624 274 624 q 198 616 217 624 q 160 592 179 608 l 96 636 l 119 906 l 447 906 l 447 779 l 238 779 l 229 704 q 265 710 247 708 q 293 713 282 713 q 361 701 329 713 q 417 666 393 689 q 456 610 442 643 q 469 536 469 578 q 454 461 469 496 q 410 401 439 426 q 344 362 382 376 q 260 347 306 347 m 285 -17 l 774 922 l 892 922 l 403 -17 l 285 -17 m 918 -17 q 834 -4 872 -17 q 768 29 796 8 q 725 78 740 50 q 710 138 710 106 q 741 221 710 185 q 810 278 772 257 l 810 283 q 751 338 774 308 q 729 410 729 368 q 744 472 729 444 q 784 519 758 500 q 844 548 810 538 q 918 558 879 558 q 993 548 958 558 q 1053 519 1028 538 q 1094 472 1079 500 q 1108 410 1108 444 q 1084 340 1108 371 q 1028 290 1060 310 l 1028 285 q 1097 226 1068 263 q 1125 139 1125 190 q 1110 78 1125 107 q 1067 29 1094 50 q 1001 -4 1039 8 q 918 -17 964 -17 m 940 331 q 975 400 975 364 q 958 441 975 426 q 917 456 942 456 q 877 442 893 456 q 861 406 861 428 q 884 360 861 376 q 940 331 907 344 m 918 83 q 969 103 949 83 q 990 150 990 122 q 962 197 990 182 q 893 232 933 213 q 846 153 846 200 q 866 103 846 124 q 918 83 886 83 z "},"⅞":{"ha":1151,"x_min":43,"x_max":1097,"o":"m 136 364 q 151 479 140 426 q 179 581 161 532 q 223 678 197 631 q 285 781 249 726 l 43 781 l 43 906 l 451 906 l 451 825 q 376 713 406 767 q 331 604 347 658 q 306 491 314 550 q 294 364 299 432 l 136 364 m 215 -17 l 704 922 l 822 922 l 333 -17 l 215 -17 m 890 -17 q 806 -4 844 -17 q 740 29 768 8 q 697 78 713 50 q 682 138 682 106 q 713 221 682 185 q 782 278 744 257 l 782 283 q 724 338 746 308 q 701 410 701 368 q 716 472 701 444 q 756 519 731 500 q 817 548 782 538 q 890 558 851 558 q 965 548 931 558 q 1026 519 1000 538 q 1066 472 1051 500 q 1081 410 1081 444 q 1056 340 1081 371 q 1000 290 1032 310 l 1000 285 q 1069 226 1040 263 q 1097 139 1097 190 q 1082 78 1097 107 q 1039 29 1067 50 q 974 -4 1011 8 q 890 -17 936 -17 m 913 331 q 947 400 947 364 q 931 441 947 426 q 889 456 914 456 q 849 442 865 456 q 833 406 833 428 q 856 360 833 376 q 913 331 879 344 m 890 83 q 942 103 921 83 q 963 150 963 122 q 934 197 963 182 q 865 232 906 213 q 818 153 818 200 q 838 103 818 124 q 890 83 858 83 z "},"⅑":{"ha":1163,"x_min":65,"x_max":1115,"o":"m 189 364 l 189 754 l 65 754 l 65 846 q 115 856 93 850 q 154 868 136 861 q 188 884 172 875 q 221 906 204 893 l 340 906 l 340 364 l 189 364 m 242 -17 l 731 922 l 849 922 l 360 -17 l 242 -17 m 896 297 q 978 338 944 297 q 946 420 971 396 q 890 444 921 444 q 844 427 864 444 q 825 371 825 410 q 844 316 825 335 q 896 297 863 297 m 863 -17 q 765 1 803 -17 q 703 40 726 19 l 761 133 q 803 108 781 118 q 853 97 825 97 q 942 136 913 97 q 978 243 971 175 q 861 196 928 196 q 737 242 782 196 q 692 367 692 288 q 706 443 692 408 q 747 503 721 478 q 809 544 774 529 q 885 558 844 558 q 983 538 940 558 q 1056 481 1026 518 q 1100 390 1085 443 q 1115 274 1115 338 q 1098 156 1115 208 q 1049 64 1081 103 q 969 4 1017 25 q 863 -17 922 -17 z "},"⅒":{"ha":1604,"x_min":64,"x_max":1569,"o":"m 242 -17 l 731 922 l 849 922 l 360 -17 l 242 -17 m 188 364 l 188 754 l 64 754 l 64 846 q 113 856 92 850 q 153 868 135 861 q 187 884 171 875 q 219 906 203 893 l 339 906 l 339 364 l 188 364 m 853 0 l 853 390 l 729 390 l 729 482 q 778 492 757 486 q 818 504 800 497 q 852 520 836 511 q 885 542 868 529 l 1004 542 l 1004 0 l 853 0 m 1343 -17 q 1253 3 1294 -17 q 1181 60 1211 22 q 1135 151 1151 97 q 1118 272 1118 204 q 1135 393 1118 340 q 1181 483 1151 446 q 1253 539 1211 519 q 1343 558 1294 558 q 1433 539 1392 558 q 1505 483 1475 519 q 1552 393 1535 446 q 1569 272 1569 340 q 1552 151 1569 204 q 1505 60 1535 97 q 1433 3 1475 22 q 1343 -17 1392 -17 m 1343 97 q 1402 136 1378 97 q 1426 272 1426 175 q 1402 407 1426 369 q 1343 444 1378 444 q 1284 407 1308 444 q 1260 272 1260 369 q 1284 136 1260 175 q 1343 97 1308 97 z "},"↉":{"ha":1179,"x_min":36,"x_max":1125,"o":"m 261 347 q 171 367 213 347 q 99 424 129 386 q 53 515 69 461 q 36 636 36 568 q 53 757 36 704 q 99 847 69 810 q 171 903 129 883 q 261 922 213 922 q 351 903 310 922 q 423 847 393 883 q 470 757 453 810 q 488 636 488 704 q 470 515 488 568 q 423 424 453 461 q 351 367 393 386 q 261 347 310 347 m 261 461 q 320 500 296 461 q 344 636 344 539 q 320 771 344 733 q 261 808 296 808 q 202 771 226 808 q 178 636 178 733 q 202 500 178 539 q 261 461 226 461 m 285 -17 l 774 922 l 892 922 l 403 -17 l 285 -17 m 915 -17 q 788 12 844 -17 q 694 93 731 40 l 785 164 q 900 97 833 97 q 955 114 932 97 q 978 163 978 131 q 849 233 978 233 l 849 319 q 928 335 899 319 q 958 386 958 351 q 940 429 958 414 q 890 444 922 444 q 842 429 864 444 q 801 390 821 414 l 717 465 q 807 536 761 514 q 917 558 853 558 q 988 548 954 558 q 1049 518 1022 538 q 1090 470 1075 499 q 1106 407 1106 442 q 1085 334 1106 364 q 1026 282 1064 304 q 1097 233 1068 265 q 1125 151 1125 200 q 1108 83 1125 114 q 1062 30 1090 51 q 995 -4 1033 8 q 915 -17 957 -17 z "},"+":{"ha":733,"x_min":47,"x_max":686,"o":"m 292 131 l 292 386 l 47 386 l 47 531 l 292 531 l 292 786 l 442 786 l 442 531 l 686 531 l 686 386 l 442 386 l 442 131 l 292 131 z "},"−":{"ha":733,"x_min":47,"x_max":686,"o":"m 47 386 l 47 531 l 686 531 l 686 386 l 47 386 z "},"×":{"ha":733,"x_min":67,"x_max":667,"o":"m 168 156 l 67 258 l 264 457 l 67 657 l 168 760 l 367 560 l 565 760 l 667 657 l 469 457 l 667 258 l 565 156 l 367 356 l 168 156 z "},"÷":{"ha":733,"x_min":47,"x_max":686,"o":"m 47 386 l 47 531 l 686 531 l 686 386 l 47 386 m 367 101 q 286 131 318 101 q 254 208 254 161 q 286 285 254 256 q 367 315 318 315 q 447 285 415 315 q 479 208 479 256 q 447 131 479 161 q 367 101 415 101 m 367 601 q 286 631 318 601 q 254 708 254 661 q 286 785 254 756 q 367 815 318 815 q 447 785 415 815 q 479 708 479 756 q 447 631 479 661 q 367 601 415 601 z "},"∙":{"ha":735,"x_min":243,"x_max":490,"o":"m 367 328 q 278 365 314 328 q 243 456 243 401 q 278 548 243 511 q 367 585 314 585 q 455 548 419 585 q 490 456 490 511 q 455 365 490 401 q 367 328 419 328 z "},"=":{"ha":733,"x_min":47,"x_max":686,"o":"m 47 547 l 47 692 l 686 692 l 686 547 l 47 547 m 47 226 l 47 371 l 686 371 l 686 226 l 47 226 z "},"<":{"ha":733,"x_min":47,"x_max":686,"o":"m 686 144 l 47 390 l 47 532 l 686 778 l 686 610 l 442 529 l 254 464 l 254 458 l 442 393 l 686 313 l 686 144 z "},">":{"ha":733,"x_min":47,"x_max":686,"o":"m 47 144 l 47 313 l 292 393 l 479 458 l 479 464 l 292 529 l 47 610 l 47 778 l 686 532 l 686 390 l 47 144 z "},"≤":{"ha":733,"x_min":47,"x_max":686,"o":"m 686 214 l 47 411 l 47 581 l 686 778 l 686 610 l 447 546 l 254 499 l 254 493 l 447 446 l 686 382 l 686 214 m 47 0 l 47 144 l 686 144 l 686 0 l 47 0 z "},"≥":{"ha":733,"x_min":47,"x_max":686,"o":"m 47 214 l 47 382 l 286 446 l 479 493 l 479 499 l 286 546 l 47 610 l 47 778 l 686 581 l 686 411 l 47 214 m 47 0 l 47 144 l 686 144 l 686 0 l 47 0 z "},"±":{"ha":733,"x_min":47,"x_max":686,"o":"m 292 219 l 292 408 l 47 408 l 47 553 l 292 553 l 292 786 l 442 786 l 442 553 l 686 553 l 686 408 l 442 408 l 442 219 l 292 219 m 47 0 l 47 144 l 686 144 l 686 0 l 47 0 z "},"^":{"ha":733,"x_min":69,"x_max":664,"o":"m 69 381 l 285 931 l 449 931 l 664 381 l 496 381 l 432 558 l 369 746 l 364 746 l 301 558 l 238 381 l 69 381 z "},"≠":{"ha":733,"x_min":47,"x_max":686,"o":"m 72 56 l 171 225 l 47 225 l 47 368 l 251 368 l 353 549 l 47 549 l 47 692 l 432 692 l 532 861 l 663 861 l 563 692 l 686 692 l 686 549 l 482 549 l 381 368 l 686 368 l 686 225 l 301 225 l 201 56 l 72 56 z "},"~":{"ha":733,"x_min":40,"x_max":693,"o":"m 485 333 q 410 350 442 333 q 351 386 378 367 q 299 422 324 406 q 246 439 275 439 q 193 418 218 439 q 146 358 168 397 l 40 440 q 144 551 92 519 q 249 583 196 583 q 324 567 292 583 q 383 531 356 550 q 434 494 410 511 q 488 478 458 478 q 541 499 517 478 q 588 558 565 519 l 693 476 q 590 365 642 397 q 485 333 538 333 z "},"≈":{"ha":733,"x_min":40,"x_max":693,"o":"m 485 494 q 410 511 442 494 q 351 547 378 528 q 299 583 324 567 q 246 600 275 600 q 193 579 218 600 q 146 519 168 558 l 40 601 q 144 713 92 681 q 249 744 196 744 q 324 728 292 744 q 383 692 356 711 q 434 656 410 672 q 488 639 458 639 q 541 660 517 639 q 588 719 565 681 l 693 638 q 590 526 642 558 q 485 494 538 494 m 485 174 q 410 190 442 174 q 351 226 378 207 q 299 263 324 246 q 246 279 275 279 q 193 258 218 279 q 146 199 168 238 l 40 281 q 144 392 92 360 q 249 424 196 424 q 324 407 292 424 q 383 371 356 390 q 434 335 410 351 q 488 318 458 318 q 541 339 517 318 q 588 399 565 360 l 693 317 q 590 206 642 238 q 485 174 538 174 z "},"¬":{"ha":733,"x_min":47,"x_max":686,"o":"m 536 131 l 536 386 l 47 386 l 47 531 l 686 531 l 686 131 l 536 131 z "},"∞":{"ha":1131,"x_min":51,"x_max":1079,"o":"m 804 157 q 651 196 717 157 q 521 321 586 235 l 515 321 q 474 274 497 297 q 422 233 450 251 q 360 204 393 215 q 288 193 326 193 q 194 213 238 193 q 119 267 151 233 q 69 346 88 301 q 51 440 51 390 q 124 651 51 576 q 315 726 197 726 q 450 688 394 726 q 543 599 506 650 l 549 599 q 667 708 601 668 q 815 749 732 749 q 919 728 871 749 q 1002 670 967 707 q 1058 583 1038 633 q 1079 472 1079 532 q 1058 338 1079 397 q 999 239 1036 279 q 911 178 961 199 q 804 157 861 157 m 306 342 q 384 367 349 342 q 447 433 419 392 q 378 508 417 479 q 299 538 340 538 q 226 511 250 538 q 201 444 201 485 q 229 373 201 404 q 306 342 257 342 m 804 346 q 896 383 863 346 q 929 468 929 419 q 893 565 929 531 q 794 600 857 600 q 703 572 749 600 q 617 486 657 544 q 703 387 660 428 q 804 346 746 346 z "},"µ":{"ha":825,"x_min":90,"x_max":818,"o":"m 90 -246 l 90 689 l 294 689 l 294 288 q 315 185 294 214 q 379 157 335 157 q 442 177 414 157 q 497 247 469 197 l 497 689 l 703 689 q 699 562 701 628 q 694 431 696 496 q 690 308 692 367 q 689 207 689 250 q 706 161 689 174 q 750 149 722 149 q 794 157 771 149 l 818 6 q 769 -10 796 -4 q 697 -17 742 -17 q 519 99 553 -17 l 514 99 q 368 -10 463 -10 q 321 -3 343 -10 q 282 22 299 3 q 283 -50 282 -17 q 286 -115 285 -83 q 290 -178 288 -146 q 296 -246 292 -210 l 90 -246 z "},"∂":{"ha":801,"x_min":67,"x_max":735,"o":"m 339 -17 q 234 3 283 -17 q 147 58 185 22 q 88 144 110 93 q 67 257 67 194 q 89 387 67 328 q 151 488 111 446 q 245 552 190 529 q 365 575 300 575 q 460 553 414 575 q 542 490 506 531 l 542 518 q 508 697 542 636 q 390 757 474 757 q 315 741 350 757 q 247 693 279 725 l 160 819 q 277 895 215 868 q 413 922 339 922 q 553 894 493 922 q 654 815 614 867 q 715 690 694 764 q 735 524 735 617 q 706 301 735 401 q 624 131 676 201 q 499 22 572 60 q 339 -17 426 -17 m 361 149 q 459 191 414 149 q 526 339 504 233 q 461 401 496 383 q 389 419 426 419 q 292 384 331 419 q 254 269 254 349 q 287 178 254 208 q 361 149 319 149 z "},"∫":{"ha":542,"x_min":58,"x_max":504,"o":"m 138 -219 q 91 -216 113 -219 q 58 -208 69 -212 l 78 -61 q 101 -65 89 -64 q 128 -67 113 -67 q 199 -24 182 -67 q 215 118 215 19 q 207 275 215 197 q 189 431 199 353 q 171 589 179 508 q 163 756 163 669 q 173 892 163 829 q 212 1000 183 954 q 292 1072 240 1046 q 425 1099 343 1099 q 471 1095 449 1099 q 504 1089 493 1092 l 483 940 q 435 946 467 946 q 364 903 381 946 q 347 761 347 860 q 356 604 347 682 q 373 449 364 526 q 390 290 382 371 q 399 124 399 210 q 388 -12 399 50 q 349 -121 378 -75 q 270 -193 321 -167 q 138 -219 219 -219 z "},"√":{"ha":817,"x_min":38,"x_max":826,"o":"m 385 -111 l 176 460 l 74 417 l 38 513 l 279 611 l 417 203 q 432 146 425 175 q 446 89 439 117 l 451 89 q 472 203 460 149 l 690 1139 l 826 1139 l 526 -111 l 385 -111 z "},"∆":{"ha":889,"x_min":47,"x_max":842,"o":"m 47 0 l 47 124 l 322 906 l 567 906 l 842 124 l 842 0 l 47 0 m 267 172 l 617 172 l 521 478 l 443 749 l 438 749 l 361 478 l 267 172 z "},"Ω":{"ha":988,"x_min":61,"x_max":926,"o":"m 61 0 l 61 165 l 214 165 l 214 171 q 168 226 192 193 q 126 301 144 260 q 95 391 107 342 q 83 497 83 440 q 113 669 83 592 q 196 803 142 747 q 326 891 250 860 q 494 922 401 922 q 662 891 586 922 q 792 803 738 860 q 876 669 846 747 q 906 497 906 592 q 893 391 906 440 q 862 301 881 342 q 819 226 843 260 q 774 171 796 193 l 774 165 l 926 165 l 926 0 l 556 0 l 556 147 q 661 292 626 214 q 696 476 696 369 q 682 585 696 535 q 642 670 668 635 q 578 726 615 706 q 494 746 542 746 q 410 726 447 746 q 347 670 372 706 q 307 585 321 635 q 293 476 293 535 q 327 292 293 369 q 432 147 361 214 l 432 0 l 61 0 z "},"∑":{"ha":742,"x_min":36,"x_max":729,"o":"m 36 -167 l 36 -46 l 324 357 l 51 761 l 51 882 l 696 882 l 696 710 l 299 710 l 299 704 l 532 357 l 289 11 l 289 6 l 729 6 l 729 -167 l 36 -167 z "},"∏":{"ha":986,"x_min":111,"x_max":875,"o":"m 111 -167 l 111 882 l 875 882 l 875 -167 l 671 -167 l 671 704 l 315 704 l 315 -167 l 111 -167 z "},"ℓ":{"ha":653,"x_min":14,"x_max":660,"o":"m 424 -17 q 333 -4 376 -17 q 253 34 289 8 q 193 98 218 60 q 157 188 168 136 q 125 168 142 178 q 90 147 108 158 l 14 272 q 85 315 51 294 q 150 356 118 336 l 150 653 q 169 804 150 740 q 224 909 189 868 q 306 970 258 950 q 410 990 353 990 q 574 928 513 990 q 635 756 635 867 q 618 635 635 692 q 567 525 601 578 q 478 420 532 472 q 349 314 424 368 l 349 281 q 380 182 349 211 q 456 153 411 153 q 528 172 496 153 q 586 214 561 192 l 660 90 q 556 17 614 50 q 424 -17 497 -17 m 349 679 l 349 504 q 440 622 410 563 q 469 756 469 682 q 455 819 469 799 q 417 840 440 840 q 369 804 390 840 q 349 679 349 768 z "},"℮":{"ha":1111,"x_min":64,"x_max":1049,"o":"m 557 -15 q 365 22 454 -15 q 208 122 275 58 q 103 269 142 185 q 64 451 64 354 q 103 633 64 549 q 208 781 142 718 q 365 881 275 844 q 557 918 454 918 q 748 881 658 918 q 904 781 838 844 q 1010 633 971 718 q 1049 451 1049 549 l 1049 439 l 250 439 q 244 433 244 439 l 244 179 q 248 164 244 171 q 256 150 251 157 q 390 49 313 86 q 558 13 468 13 q 735 54 654 13 q 875 167 817 96 l 947 167 q 778 34 879 83 q 557 -15 676 -15 m 250 465 l 863 465 q 869 472 869 465 l 869 728 q 857 758 869 743 q 722 855 799 819 q 558 890 646 890 q 392 853 468 890 q 257 754 315 817 q 244 722 244 739 l 244 472 q 250 465 244 465 z "},"←":{"ha":857,"x_min":31,"x_max":801,"o":"m 417 -24 l 31 347 l 31 353 l 417 724 l 513 614 l 304 431 l 801 431 l 801 269 l 304 269 l 513 86 l 417 -24 z "},"↑":{"ha":857,"x_min":54,"x_max":803,"o":"m 347 -36 l 347 461 l 164 253 l 54 349 l 425 735 l 431 735 l 803 349 l 692 253 l 510 461 l 510 -36 l 347 -36 z "},"→":{"ha":857,"x_min":56,"x_max":826,"o":"m 440 -24 l 343 86 l 551 269 l 56 269 l 56 431 l 551 431 l 343 614 l 440 724 l 826 353 l 826 347 l 440 -24 z "},"↓":{"ha":857,"x_min":54,"x_max":803,"o":"m 425 -36 l 54 350 l 164 447 l 347 239 l 347 735 l 510 735 l 510 239 l 692 447 l 803 350 l 431 -36 l 425 -36 z "},"■":{"ha":1218,"x_min":63,"x_max":1156,"o":"m 63 -83 l 63 1010 l 1156 1010 l 1156 -83 l 63 -83 z "},"◆":{"ha":1218,"x_min":35,"x_max":1183,"o":"m 610 -111 l 35 464 l 610 1038 l 1183 464 l 610 -111 z "},"◉":{"ha":1218,"x_min":43,"x_max":1175,"o":"m 610 -104 q 387 -62 490 -104 q 207 54 283 -21 q 87 233 131 129 q 43 464 43 338 q 87 693 43 589 q 207 872 131 797 q 387 989 283 947 q 610 1031 490 1031 q 833 989 729 1031 q 1012 872 936 947 q 1131 693 1088 797 q 1175 464 1175 589 q 1131 233 1175 338 q 1012 54 1088 129 q 833 -62 936 -21 q 610 -104 729 -104 m 610 18 q 778 50 700 18 q 915 141 857 82 q 1007 282 974 200 q 1040 464 1040 364 q 1007 646 1040 564 q 915 786 974 728 q 778 876 857 844 q 610 908 700 908 q 440 876 519 908 q 303 786 361 844 q 211 646 244 728 q 178 464 178 564 q 211 282 178 364 q 303 141 244 200 q 440 50 361 82 q 610 18 519 18 m 610 140 q 488 165 544 140 q 389 232 431 189 q 323 335 347 275 q 299 464 299 394 q 323 591 299 532 q 389 694 347 650 q 488 762 431 738 q 610 786 544 786 q 731 762 674 786 q 829 694 788 738 q 895 591 871 650 q 919 464 919 532 q 895 334 919 393 q 829 232 871 275 q 731 165 788 189 q 610 140 674 140 z "},"❒":{"ha":1218,"x_min":63,"x_max":1156,"o":"m 63 -83 l 63 908 l 178 1010 l 1156 1010 l 1156 32 l 1054 -83 l 63 -83 m 154 8 l 1021 8 l 1021 875 l 154 875 l 154 8 z "},"▲":{"ha":1218,"x_min":65,"x_max":1153,"o":"m 65 -83 l 65 -81 l 607 1038 l 613 1038 l 1153 -81 l 1153 -83 l 65 -83 z "},"△":{"ha":1218,"x_min":65,"x_max":1153,"o":"m 65 -83 l 65 -81 l 607 1038 l 613 1038 l 1153 -81 l 1153 -83 l 65 -83 m 288 50 l 931 50 l 610 743 l 288 50 z "},"▶":{"ha":1218,"x_min":63,"x_max":1183,"o":"m 63 -81 l 63 1007 l 65 1007 l 1183 467 l 1183 461 l 65 -81 l 63 -81 z "},"▷":{"ha":1218,"x_min":63,"x_max":1183,"o":"m 63 -81 l 63 1007 l 65 1007 l 1183 467 l 1183 461 l 65 -81 l 63 -81 m 196 142 l 894 464 l 196 785 l 196 142 z "},"▼":{"ha":1218,"x_min":65,"x_max":1153,"o":"m 1153 1010 l 1153 1007 l 613 -111 l 607 -111 l 65 1007 l 65 1010 l 1153 1010 z "},"▽":{"ha":1218,"x_min":65,"x_max":1153,"o":"m 1153 1010 l 1153 1007 l 613 -111 l 607 -111 l 65 1007 l 65 1010 l 1153 1010 m 931 876 l 288 876 l 610 183 l 931 876 z "},"◀":{"ha":1218,"x_min":35,"x_max":1156,"o":"m 1156 1007 l 1156 -81 l 1153 -81 l 35 461 l 35 467 l 1153 1007 l 1156 1007 z "},"◁":{"ha":1218,"x_min":35,"x_max":1156,"o":"m 1156 1007 l 1156 -81 l 1153 -81 l 35 461 l 35 467 l 1153 1007 l 1156 1007 m 1022 785 l 324 464 l 1022 142 l 1022 785 z "},"☐":{"ha":1121,"x_min":103,"x_max":1018,"o":"m 103 -14 l 103 847 l 207 938 l 1018 938 l 1018 90 l 928 -14 l 103 -14 m 183 67 l 894 67 l 894 814 l 183 814 l 183 67 z "},"☑":{"ha":1121,"x_min":103,"x_max":1124,"o":"m 456 150 q 371 344 417 256 q 261 528 325 433 l 392 613 q 473 459 439 536 q 535 303 507 382 l 540 303 q 638 570 581 442 q 764 814 694 699 l 183 814 l 183 67 l 894 67 l 894 739 q 758 485 821 625 q 647 172 694 344 l 456 150 m 103 -14 l 103 847 l 207 938 l 843 938 q 919 1040 881 992 q 999 1129 958 1088 l 1124 1019 q 1071 967 1097 994 q 1018 907 1044 939 l 1018 90 l 928 -14 l 103 -14 z "},"✓":{"ha":899,"x_min":10,"x_max":900,"o":"m 229 -28 q 184 84 207 31 q 135 188 161 138 q 78 287 108 238 q 10 388 47 336 l 140 472 q 237 299 194 386 q 314 125 279 213 l 319 125 q 406 368 357 250 q 514 593 456 486 q 638 792 572 700 q 775 956 704 883 l 900 847 q 761 696 829 781 q 631 505 693 611 q 516 272 569 399 q 421 -6 463 144 l 229 -28 z "},"♪":{"ha":756,"x_min":35,"x_max":735,"o":"m 190 -39 q 133 -32 161 -39 q 84 -10 106 -25 q 49 26 63 4 q 35 81 35 49 q 53 151 35 118 q 103 210 71 185 q 178 249 135 235 q 271 264 221 264 q 321 259 299 264 q 353 247 343 254 l 353 964 l 461 964 q 474 942 467 951 q 491 924 481 933 q 518 902 501 914 q 561 872 535 890 q 643 806 610 839 q 697 740 676 774 q 726 670 717 707 q 735 592 735 633 q 714 478 735 533 q 667 386 693 422 l 599 414 q 614 475 610 446 q 618 542 618 504 q 608 603 618 572 q 578 659 597 633 q 530 706 558 685 q 465 739 501 726 l 465 238 q 391 31 465 101 q 190 -39 317 -39 z "},"◊":{"ha":761,"x_min":72,"x_max":689,"o":"m 297 -14 l 72 458 l 297 931 l 464 931 l 689 458 l 464 -14 l 297 -14 m 378 157 l 383 157 l 458 325 l 521 458 l 458 592 l 383 760 l 378 760 l 303 592 l 240 458 l 303 325 l 378 157 z "},"′":{"ha":417,"x_min":114,"x_max":344,"o":"m 114 539 l 140 953 l 344 951 l 313 776 l 247 539 l 114 539 z "},"″":{"ha":746,"x_min":114,"x_max":674,"o":"m 114 539 l 140 953 l 344 951 l 313 776 l 247 539 l 114 539 m 443 539 l 469 953 l 674 951 l 642 776 l 576 539 l 443 539 z "},"‵":{"ha":417,"x_min":74,"x_max":303,"o":"m 303 539 l 169 539 l 104 776 l 74 951 l 276 953 l 303 539 z "},"ʹ":{"ha":417,"x_min":114,"x_max":344,"o":"m 114 539 l 140 953 l 344 951 l 313 776 l 247 539 l 114 539 z "},"ʻ":{"ha":417,"x_min":76,"x_max":318,"o":"m 207 469 q 109 517 142 469 q 76 651 76 565 q 125 825 76 750 q 274 949 174 900 l 318 860 q 224 787 256 828 q 193 683 193 746 q 207 685 197 685 q 283 658 251 685 q 314 583 314 631 q 283 500 314 531 q 207 469 253 469 z "},"ʼ":{"ha":417,"x_min":99,"x_max":342,"o":"m 143 489 l 99 578 q 192 651 161 610 q 224 754 224 692 q 211 753 219 753 q 135 780 167 753 q 104 854 104 807 q 134 938 104 907 q 211 968 164 968 q 308 921 275 968 q 342 786 342 874 q 292 613 342 688 q 143 489 243 538 z "},"ʾ":{"ha":244,"x_min":36,"x_max":229,"o":"m 36 764 l 36 840 q 108 858 88 838 q 129 908 129 878 q 108 958 129 939 q 36 976 88 978 l 36 1051 q 183 1015 138 1056 q 229 908 229 975 q 183 801 229 842 q 36 764 138 760 z "},"ʿ":{"ha":244,"x_min":17,"x_max":210,"o":"m 210 764 q 63 801 108 760 q 17 908 17 842 q 63 1015 17 975 q 210 1051 108 1056 l 210 976 q 138 958 158 978 q 117 908 117 939 q 138 858 117 878 q 210 840 158 838 l 210 764 z "},"`":{"ha":771,"x_min":121,"x_max":472,"o":"m 372 794 l 121 1013 l 258 1147 l 472 894 l 372 794 z "},"´":{"ha":771,"x_min":300,"x_max":651,"o":"m 400 794 l 300 894 l 514 1147 l 651 1013 l 400 794 z "},"ˆ":{"ha":771,"x_min":132,"x_max":640,"o":"m 132 851 l 282 1033 l 490 1033 l 640 851 l 563 779 l 389 907 l 383 907 l 210 779 l 132 851 z "},"ˇ":{"ha":771,"x_min":132,"x_max":640,"o":"m 282 801 l 132 983 l 210 1056 l 383 928 l 389 928 l 563 1056 l 640 983 l 490 801 l 282 801 z "},"ˈ":{"ha":204,"x_min":21,"x_max":185,"o":"m 29 750 l 21 1033 l 185 1033 l 176 750 l 29 750 z "},"ˉ":{"ha":428,"x_min":8,"x_max":419,"o":"m 8 822 l 8 951 l 419 951 l 419 822 l 8 822 z "},"ˊ":{"ha":328,"x_min":78,"x_max":429,"o":"m 178 794 l 78 894 l 292 1147 l 429 1013 l 178 794 z "},"ˋ":{"ha":328,"x_min":-101,"x_max":250,"o":"m 150 794 l -101 1013 l 36 1147 l 250 894 l 150 794 z "},"ˌ":{"ha":204,"x_min":21,"x_max":185,"o":"m 21 -374 l 29 -89 l 176 -89 l 185 -374 l 21 -374 z "},"˜":{"ha":771,"x_min":122,"x_max":650,"o":"m 478 796 q 419 810 444 796 q 372 840 393 824 q 333 871 350 857 q 299 885 315 885 q 266 867 278 885 q 250 808 254 849 l 122 815 q 169 975 125 924 q 294 1026 214 1026 q 353 1013 328 1026 q 401 982 379 999 q 440 951 422 965 q 474 938 457 938 q 522 1014 514 938 l 650 1007 q 603 847 647 899 q 478 796 558 796 z "},"¨":{"ha":771,"x_min":135,"x_max":638,"o":"m 235 790 q 163 819 190 790 q 135 890 135 847 q 163 960 135 932 q 235 989 190 989 q 306 960 279 989 q 333 890 333 932 q 306 819 333 847 q 235 790 279 790 m 538 790 q 466 819 493 790 q 439 890 439 847 q 466 960 439 932 q 538 989 493 989 q 610 960 582 989 q 638 890 638 932 q 610 819 638 847 q 538 790 582 790 z "},"¯":{"ha":771,"x_min":181,"x_max":592,"o":"m 181 822 l 181 951 l 592 951 l 592 822 l 181 822 z "},"˘":{"ha":771,"x_min":151,"x_max":621,"o":"m 386 794 q 283 811 326 794 q 211 858 240 828 q 167 927 182 888 q 151 1013 153 967 l 268 1032 q 303 955 275 988 q 386 922 331 922 q 469 955 442 922 q 504 1032 497 988 l 621 1013 q 605 927 619 967 q 562 858 590 888 q 490 811 533 828 q 386 794 446 794 z "},"˚":{"ha":771,"x_min":203,"x_max":569,"o":"m 386 783 q 249 825 294 783 q 203 928 203 867 q 249 1031 203 989 q 386 1072 294 1072 q 524 1031 478 1072 q 569 928 569 989 q 524 825 569 867 q 386 783 478 783 m 386 860 q 428 878 411 860 q 446 928 446 897 q 428 977 446 958 q 386 996 411 996 q 344 977 361 996 q 326 928 326 958 q 344 878 326 897 q 386 860 361 860 z "},"˝":{"ha":771,"x_min":207,"x_max":714,"o":"m 314 785 l 207 833 l 328 1085 l 465 1024 l 314 785 m 563 785 l 456 833 l 576 1085 l 714 1024 l 563 785 z "},"˙":{"ha":771,"x_min":274,"x_max":499,"o":"m 386 790 q 305 820 336 790 q 274 897 274 850 q 305 974 274 944 q 386 1004 336 1004 q 467 974 436 1004 q 499 897 499 944 q 467 820 499 850 q 386 790 436 790 z "},"¸":{"ha":771,"x_min":231,"x_max":519,"o":"m 246 -332 l 231 -250 q 343 -232 313 -246 q 374 -189 374 -218 q 352 -153 374 -168 q 267 -131 331 -139 l 333 6 l 453 6 l 414 -85 q 493 -121 467 -97 q 519 -189 519 -144 q 448 -294 519 -260 q 246 -332 376 -328 z "},"˛":{"ha":771,"x_min":267,"x_max":554,"o":"m 414 -292 q 309 -260 351 -292 q 267 -165 267 -228 q 277 -108 267 -135 q 302 -60 288 -82 q 333 -23 317 -39 q 364 3 350 -7 l 479 3 q 404 -118 404 -56 q 422 -158 404 -146 q 463 -171 440 -171 q 489 -166 476 -171 q 511 -154 501 -161 l 554 -246 q 486 -279 526 -267 q 414 -292 446 -292 z "},"◌":{"ha":801,"x_min":50,"x_max":753,"o":"m 146 133 q 107 149 124 133 q 90 193 90 165 q 107 237 90 221 q 146 253 124 253 q 189 237 172 253 q 206 193 206 221 q 190 149 206 165 q 146 133 174 133 m 107 285 q 67 301 83 285 q 50 346 50 317 q 67 389 50 374 q 107 404 83 404 q 151 389 133 404 q 168 346 168 374 q 151 301 168 317 q 107 285 135 285 m 146 436 q 107 453 124 436 q 90 497 90 469 q 107 542 90 528 q 146 557 124 557 q 189 542 172 557 q 206 497 206 528 q 190 453 206 469 q 146 436 174 436 m 254 19 q 213 35 231 19 q 196 82 196 51 q 213 124 196 110 q 254 139 231 139 q 296 124 278 139 q 314 82 314 110 q 297 35 314 51 q 254 19 281 19 m 254 550 q 213 565 231 550 q 196 608 196 581 q 213 654 196 639 q 254 669 231 669 q 296 654 278 669 q 314 608 314 639 q 297 565 314 581 q 254 550 281 550 m 400 -18 q 361 -2 378 -18 q 344 44 344 14 q 361 87 344 72 q 400 101 378 101 q 443 87 426 101 q 460 44 460 72 q 444 -2 460 14 q 400 -18 428 -18 m 400 586 q 361 603 378 586 q 344 647 344 619 q 361 690 344 675 q 400 706 378 706 q 443 690 426 706 q 460 647 460 675 q 444 603 460 619 q 400 586 428 586 m 547 19 q 506 35 524 19 q 489 82 489 51 q 506 124 489 110 q 547 139 524 139 q 589 124 571 139 q 607 82 607 110 q 591 35 607 51 q 547 19 575 19 m 547 549 q 506 565 524 549 q 489 608 489 581 q 506 653 489 638 q 547 669 524 669 q 589 653 571 669 q 607 608 607 638 q 591 565 607 581 q 547 549 575 549 m 657 133 q 615 149 633 133 q 597 193 597 165 q 615 237 597 221 q 657 253 633 253 q 698 237 681 253 q 715 193 715 221 q 699 149 715 165 q 657 133 683 133 m 694 285 q 652 301 669 285 q 635 346 635 317 q 652 389 635 374 q 694 404 669 404 q 735 389 718 404 q 753 346 753 374 q 736 301 753 317 q 694 285 719 285 m 657 436 q 615 452 633 436 q 597 496 597 468 q 615 540 597 525 q 657 556 633 556 q 698 540 681 556 q 715 496 715 525 q 699 452 715 468 q 657 436 683 436 z "},"̀":{"ha":0,"x_min":-265,"x_max":86,"o":"m -14 794 l -265 1013 l -128 1147 l 86 894 l -14 794 z "},"́":{"ha":0,"x_min":-86,"x_max":265,"o":"m 14 794 l -86 894 l 128 1147 l 265 1013 l 14 794 z "},"̂":{"ha":0,"x_min":-254,"x_max":254,"o":"m -254 851 l -104 1033 l 104 1033 l 254 851 l 176 779 l 3 907 l -3 907 l -176 779 l -254 851 z "},"̃":{"ha":0,"x_min":-264,"x_max":264,"o":"m 92 796 q 33 810 58 796 q -15 840 7 824 q -53 871 -36 857 q -87 885 -71 885 q -120 867 -108 885 q -136 808 -132 849 l -264 815 q -217 975 -261 924 q -92 1026 -172 1026 q -33 1013 -58 1026 q 15 982 -7 999 q 53 951 36 965 q 88 938 71 938 q 136 1014 128 938 l 264 1007 q 217 847 261 899 q 92 796 172 796 z "},"̄":{"ha":0,"x_min":-206,"x_max":206,"o":"m -206 822 l -206 951 l 206 951 l 206 822 l -206 822 z "},"̅":{"ha":0,"x_min":-206,"x_max":206,"o":"m -206 822 l -206 951 l 206 951 l 206 822 l -206 822 z "},"̆":{"ha":0,"x_min":-235,"x_max":235,"o":"m 0 794 q -103 811 -60 794 q -175 858 -146 828 q -219 927 -204 888 q -235 1013 -233 967 l -118 1032 q -83 955 -111 988 q 0 922 -56 922 q 83 955 56 922 q 118 1032 111 988 l 235 1013 q 219 927 233 967 q 176 858 204 888 q 103 811 147 828 q 0 794 60 794 z "},"̇":{"ha":0,"x_min":-112,"x_max":113,"o":"m 0 790 q -81 820 -50 790 q -112 897 -112 850 q -81 974 -112 944 q 0 1004 -50 1004 q 81 974 50 1004 q 113 897 113 944 q 81 820 113 850 q 0 790 50 790 z "},"̈":{"ha":0,"x_min":-251,"x_max":251,"o":"m -151 790 q -224 819 -196 790 q -251 890 -251 847 q -224 960 -251 932 q -151 989 -196 989 q -80 960 -107 989 q -53 890 -53 932 q -80 819 -53 847 q -151 790 -107 790 m 151 790 q 80 819 107 790 q 53 890 53 847 q 80 960 53 932 q 151 989 107 989 q 224 960 196 989 q 251 890 251 932 q 224 819 251 847 q 151 790 196 790 z "},"̉":{"ha":0,"x_min":-125,"x_max":135,"o":"m -60 789 l -76 869 q -32 885 -50 875 q -14 918 -14 896 q -39 958 -14 943 q -125 976 -64 972 l -112 1101 q 3 1087 -44 1100 q 79 1052 50 1074 q 122 1000 108 1031 q 135 933 135 969 q 119 872 135 897 q 76 828 103 846 q 15 801 50 811 q -60 789 -21 792 z "},"̊":{"ha":0,"x_min":-183,"x_max":183,"o":"m 0 783 q -137 825 -92 783 q -183 928 -183 867 q -137 1031 -183 989 q 0 1072 -92 1072 q 138 1031 92 1072 q 183 928 183 989 q 138 825 183 867 q 0 783 92 783 m 0 860 q 42 878 25 860 q 60 928 60 897 q 42 977 60 958 q 0 996 25 996 q -42 977 -25 996 q -60 928 -60 958 q -42 878 -60 897 q 0 860 -25 860 z "},"̋":{"ha":0,"x_min":-179,"x_max":328,"o":"m -72 785 l -179 833 l -58 1085 l 79 1024 l -72 785 m 176 785 l 69 833 l 190 1085 l 328 1024 l 176 785 z "},"̌":{"ha":0,"x_min":-254,"x_max":254,"o":"m -104 801 l -254 983 l -176 1056 l -3 928 l 3 928 l 176 1056 l 254 983 l 104 801 l -104 801 z "},"̏":{"ha":0,"x_min":-328,"x_max":179,"o":"m -176 785 l -328 1024 l -190 1085 l -69 833 l -176 785 m 72 785 l -79 1024 l 58 1085 l 179 833 l 72 785 z "},"̑":{"ha":0,"x_min":-235,"x_max":235,"o":"m -118 785 l -235 804 q -219 890 -233 850 q -176 959 -204 929 q -103 1006 -147 989 q 0 1022 -60 1022 q 103 1006 60 1022 q 175 959 146 989 q 219 890 204 929 q 235 804 233 850 l 118 785 q 83 863 111 829 q 0 896 56 896 q -83 863 -56 896 q -118 785 -111 829 z "},"̒":{"ha":0,"x_min":-94,"x_max":74,"o":"m -3 814 q -94 928 -94 814 q -61 1033 -94 986 q 43 1108 -28 1081 l 74 1046 q -12 963 -4 1017 q -3 964 -10 964 q 49 945 26 964 q 71 893 71 926 q 49 835 71 856 q -3 814 28 814 z "},"̓":{"ha":0,"x_min":-78,"x_max":90,"o":"m -47 808 l -78 871 q 8 954 0 900 q -3 953 6 953 q -53 972 -32 953 q -75 1024 -75 990 q -53 1082 -75 1061 q -1 1103 -32 1103 q 90 989 90 1103 q 57 883 90 931 q -47 808 24 836 z "},"̘":{"ha":0,"x_min":-121,"x_max":138,"o":"m 138 -357 l 29 -357 l 29 -265 l -121 -265 l -121 -167 l 29 -167 l 29 -75 l 138 -75 l 138 -357 z "},"̙":{"ha":0,"x_min":-137,"x_max":121,"o":"m 121 -265 l -29 -265 l -29 -357 l -137 -357 l -137 -75 l -29 -75 l -29 -167 l 121 -167 l 121 -265 z "},"̚":{"ha":0,"x_min":-121,"x_max":138,"o":"m 138 797 l 29 797 l 29 907 l -121 907 l -121 1006 l 138 1006 l 138 797 z "},"̛":{"ha":0,"x_min":-14,"x_max":250,"o":"m 1 593 l -14 675 q 53 706 28 683 q 79 776 79 728 q 72 821 79 800 q 57 857 65 842 l 208 922 q 237 865 224 900 q 250 792 250 831 q 230 706 250 742 q 176 647 210 671 q 97 610 142 622 q 1 593 51 597 z "},"̜":{"ha":0,"x_min":-106,"x_max":88,"o":"m 88 -362 q -60 -326 -14 -367 q -106 -218 -106 -285 q -60 -111 -106 -151 q 88 -75 -14 -71 l 88 -150 q 15 -168 36 -149 q -6 -218 -6 -187 q 15 -269 -6 -249 q 88 -286 36 -289 l 88 -362 z "},"̝":{"ha":0,"x_min":-149,"x_max":149,"o":"m 149 -318 l -149 -318 l -149 -219 l -54 -219 l -54 -75 l 54 -75 l 54 -219 l 149 -219 l 149 -318 z "},"̞":{"ha":0,"x_min":-149,"x_max":149,"o":"m 149 -211 l 54 -211 l 54 -357 l -54 -357 l -54 -211 l -149 -211 l -149 -114 l 149 -114 l 149 -211 z "},"̟":{"ha":0,"x_min":-149,"x_max":149,"o":"m 149 -265 l 54 -265 l 54 -357 l -54 -357 l -54 -265 l -149 -265 l -149 -167 l -54 -167 l -54 -75 l 54 -75 l 54 -167 l 149 -167 l 149 -265 z "},"̠":{"ha":0,"x_min":-149,"x_max":149,"o":"m -149 -265 l -149 -167 l 149 -167 l 149 -265 l -149 -265 z "},"̣":{"ha":0,"x_min":-112,"x_max":113,"o":"m 0 -312 q -81 -283 -50 -312 q -112 -206 -112 -253 q -81 -128 -112 -158 q 0 -99 -50 -99 q 81 -128 50 -99 q 113 -206 113 -158 q 81 -283 113 -253 q 0 -312 50 -312 z "},"̤":{"ha":0,"x_min":-251,"x_max":251,"o":"m -151 -301 q -224 -273 -196 -301 q -251 -201 -251 -244 q -224 -131 -251 -160 q -151 -103 -196 -103 q -80 -131 -107 -103 q -53 -201 -53 -160 q -80 -273 -53 -244 q -151 -301 -107 -301 m 151 -301 q 80 -273 107 -301 q 53 -201 53 -244 q 80 -131 53 -160 q 151 -103 107 -103 q 224 -131 196 -103 q 251 -201 251 -160 q 224 -273 251 -244 q 151 -301 196 -301 z "},"̥":{"ha":0,"x_min":-183,"x_max":183,"o":"m 0 -342 q -137 -300 -92 -342 q -183 -197 -183 -258 q -137 -94 -183 -136 q 0 -53 -92 -53 q 138 -94 92 -53 q 183 -197 183 -136 q 138 -300 183 -258 q 0 -342 92 -342 m 0 -265 q 42 -247 25 -265 q 60 -197 60 -228 q 42 -148 60 -167 q 0 -129 25 -129 q -42 -148 -25 -129 q -60 -197 -60 -167 q -42 -247 -60 -228 q 0 -265 -25 -265 z "},"̦":{"ha":0,"x_min":-157,"x_max":132,"o":"m -142 -332 l -157 -250 q -44 -233 -75 -246 q -14 -196 -14 -219 q -35 -164 -14 -176 q -103 -147 -56 -151 l -64 -72 q 90 -110 47 -82 q 132 -189 132 -137 q 60 -294 132 -260 q -142 -332 -11 -328 z "},"̧":{"ha":0,"x_min":-157,"x_max":132,"o":"m -142 -332 l -157 -250 q -44 -232 -75 -246 q -14 -189 -14 -218 q -35 -153 -14 -168 q -121 -131 -57 -139 l -54 6 l 65 6 l 26 -85 q 106 -121 79 -97 q 132 -189 132 -144 q 60 -294 132 -260 q -142 -332 -11 -328 z "},"̨":{"ha":0,"x_min":-119,"x_max":168,"o":"m 28 -292 q -77 -260 -35 -292 q -119 -165 -119 -228 q -109 -108 -119 -135 q -84 -60 -99 -82 q -53 -23 -69 -39 q -22 3 -36 -7 l 93 3 q 18 -118 18 -56 q 36 -158 18 -146 q 76 -171 54 -171 q 103 -166 90 -171 q 125 -154 115 -161 l 168 -246 q 100 -279 140 -267 q 28 -292 60 -292 z "},"̩":{"ha":0,"x_min":-82,"x_max":82,"o":"m -82 -374 l -74 -89 l 74 -89 l 82 -374 l -82 -374 z "},"̪":{"ha":0,"x_min":-178,"x_max":178,"o":"m 76 -306 l 76 -207 l -76 -207 l -76 -306 l -178 -306 l -178 -108 l 178 -108 l 178 -306 l 76 -306 z "},"̬":{"ha":0,"x_min":-254,"x_max":254,"o":"m -104 -311 l -254 -129 l -176 -57 l -3 -185 l 3 -185 l 176 -57 l 254 -129 l 104 -311 l -104 -311 z "},"̮":{"ha":0,"x_min":-235,"x_max":235,"o":"m 0 -322 q -103 -306 -60 -322 q -175 -259 -146 -289 q -219 -190 -204 -229 q -235 -104 -233 -150 l -118 -85 q -83 -162 -111 -129 q 0 -194 -56 -194 q 83 -162 56 -194 q 118 -85 111 -129 l 235 -104 q 219 -190 233 -150 q 176 -259 204 -229 q 103 -306 147 -289 q 0 -322 60 -322 z "},"̯":{"ha":0,"x_min":-235,"x_max":235,"o":"m -118 -342 l -235 -322 q -219 -237 -233 -276 q -176 -167 -204 -197 q -103 -121 -147 -137 q 0 -104 -60 -104 q 103 -121 60 -104 q 175 -167 146 -137 q 219 -237 204 -197 q 235 -322 233 -276 l 118 -342 q 83 -264 111 -297 q 0 -231 56 -231 q -83 -264 -56 -231 q -118 -342 -111 -297 z "},"̰":{"ha":0,"x_min":-264,"x_max":264,"o":"m 92 -314 q 33 -300 58 -314 q -15 -269 7 -286 q -53 -239 -36 -253 q -87 -225 -71 -225 q -120 -243 -108 -225 q -136 -301 -132 -261 l -264 -294 q -217 -135 -261 -186 q -92 -83 -172 -83 q -33 -97 -58 -83 q 15 -128 -7 -111 q 53 -158 36 -144 q 88 -172 71 -172 q 136 -96 128 -172 l 264 -103 q 217 -262 261 -211 q 92 -314 172 -314 z "},"̱":{"ha":0,"x_min":-206,"x_max":206,"o":"m -206 -260 l -206 -131 l 206 -131 l 206 -260 l -206 -260 z "},"̴":{"ha":0,"x_min":-264,"x_max":264,"o":"m 92 247 q 33 261 58 247 q -15 292 7 275 q -53 322 -36 308 q -87 336 -71 336 q -120 318 -108 336 q -136 260 -132 300 l -264 267 q -217 426 -261 375 q -92 478 -172 478 q -33 464 -58 478 q 15 433 -7 450 q 53 403 36 417 q 88 389 71 389 q 136 465 128 389 l 264 458 q 217 299 261 350 q 92 247 172 247 z "},"̹":{"ha":0,"x_min":-87,"x_max":106,"o":"m -87 -362 l -87 -286 q -15 -269 -36 -289 q 6 -218 6 -249 q -15 -168 6 -187 q -87 -150 -36 -149 l -87 -75 q 60 -111 14 -71 q 106 -218 106 -151 q 60 -326 106 -285 q -87 -362 14 -367 z "},"̺":{"ha":0,"x_min":-178,"x_max":178,"o":"m -178 -297 l -178 -100 l -76 -100 l -76 -199 l 76 -199 l 76 -100 l 178 -100 l 178 -297 l -178 -297 z "},"̻":{"ha":0,"x_min":-178,"x_max":178,"o":"m -178 -343 l -178 -92 l 178 -92 l 178 -343 l -178 -343 m -76 -268 l 76 -268 l 76 -165 l -76 -165 l -76 -268 z "},"̼":{"ha":0,"x_min":-261,"x_max":261,"o":"m -260 -326 q -108 -106 -261 -106 q -43 -124 -71 -106 q -3 -179 -15 -142 l 3 -179 q 44 -124 15 -142 q 108 -106 72 -106 q 224 -160 188 -106 q 260 -326 261 -214 l 156 -340 q 142 -253 156 -275 q 101 -232 128 -232 q 60 -253 72 -232 q 49 -308 49 -275 l 49 -339 l -49 -339 l -49 -308 q -60 -253 -49 -275 q -103 -232 -72 -232 q -142 -253 -129 -232 q -156 -340 -156 -275 l -260 -326 z "},"̽":{"ha":0,"x_min":-140,"x_max":140,"o":"m -71 751 l -140 819 l -69 890 l -140 961 l -71 1031 l 0 960 l 71 1031 l 140 961 l 69 890 l 140 819 l 71 751 l 0 822 l -71 751 z "},"͂":{"ha":0,"x_min":-264,"x_max":264,"o":"m 92 796 q 33 810 58 796 q -15 840 7 824 q -53 871 -36 857 q -87 885 -71 885 q -120 867 -108 885 q -136 808 -132 849 l -264 815 q -217 975 -261 924 q -92 1026 -172 1026 q -33 1013 -58 1026 q 15 982 -7 999 q 53 951 36 965 q 88 938 71 938 q 136 1014 128 938 l 264 1007 q 217 847 261 899 q 92 796 172 796 z "},"ͅ":{"ha":0,"x_min":-79,"x_max":160,"o":"m 75 -300 q -45 -252 -11 -300 q -79 -124 -79 -204 l -79 -76 l 68 -76 q 65 -107 65 -92 q 65 -132 65 -122 q 80 -169 65 -160 q 117 -178 94 -178 q 126 -178 122 -178 q 140 -175 131 -178 l 160 -285 q 124 -296 144 -292 q 75 -300 104 -300 z "},"͡":{"ha":0,"x_min":-635,"x_max":635,"o":"m -582 744 l -635 838 q -330 967 -492 925 q 0 1010 -168 1010 q 330 967 168 1010 q 635 838 492 925 l 582 744 q 439 808 514 782 q 288 850 364 835 q 139 872 213 865 q 0 879 65 879 q -139 872 -65 879 q -288 850 -212 865 q -439 808 -364 835 q -582 744 -514 782 z "}," ":{"ha":289,"x_min":0,"x_max":0,"o":""}," ":{"ha":733,"x_min":0,"x_max":0,"o":""}," ":{"ha":174,"x_min":0,"x_max":0,"o":""},"":{"ha":0,"x_min":0,"x_max":0,"o":""},"fi":{"ha":882,"x_min":33,"x_max":808,"o":"m 125 0 l 125 529 l 33 529 l 33 681 l 125 688 l 125 725 q 138 828 125 779 q 182 913 151 876 q 261 969 213 949 q 379 990 310 990 q 458 982 422 990 q 517 965 493 974 l 479 815 q 408 829 440 829 q 350 806 371 829 q 329 731 329 783 l 329 689 l 453 689 l 453 529 l 329 529 l 329 0 l 125 0 m 589 0 l 589 689 l 793 689 l 793 0 l 589 0 m 690 790 q 606 820 639 790 q 572 897 572 850 q 606 974 572 944 q 690 1003 639 1003 q 776 974 743 1003 q 808 897 808 944 q 776 820 808 850 q 690 790 743 790 z "},"fl":{"ha":871,"x_min":33,"x_max":854,"o":"m 125 0 l 125 529 l 33 529 l 33 681 l 125 688 l 125 725 q 138 828 125 779 q 182 913 151 876 q 261 969 213 949 q 379 990 310 990 q 458 982 422 990 q 517 965 493 974 l 479 815 q 408 829 440 829 q 350 806 371 829 q 329 731 329 783 l 329 689 l 453 689 l 453 529 l 329 529 l 329 0 l 125 0 m 751 -17 q 663 0 699 -17 q 605 47 626 17 q 574 119 583 76 q 564 214 564 161 l 564 974 l 768 974 l 768 206 q 780 161 768 174 q 804 149 792 149 q 816 149 811 149 q 829 151 821 149 l 854 0 q 812 -12 838 -7 q 751 -17 786 -17 z "}},"familyName":"Source Sans Pro","ascender":1367,"descender":-379,"underlinePosition":-75,"underlineThickness":50,"boundingBox":{"yMin":-315,"xMin":-457,"yMax":1009,"xMax":2157},"resolution":1000,"original_font_information":{"format":0,"copyright":"Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ‘Source’.","fontFamily":"Source Sans Pro","fontSubfamily":"Bold","uniqueID":"2.020;ADBO;SourceSansPro-Bold;ADOBE","fullName":"Source Sans Pro Bold","version":"Version 2.020;PS 2.000;hotconv 1.0.86;makeotf.lib2.5.63406","postScriptName":"SourceSansPro-Bold","trademark":"Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.","manufacturer":"Adobe Systems Incorporated","designer":"Paul D. Hunt","manufacturerURL":"http://www.adobe.com/type","licence":"This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFL. This Font Software is distributed on an ‘AS IS’ BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.","licenceURL":"http://scripts.sil.org/OFL","unknown1":"Slashed zero","unknown2":"Straight l","unknown3":"Alternate a","unknown4":"Alternate g","unknown5":"Serifed I"},"cssFontWeight":"bold","cssFontStyle":"normal"} ================================================ FILE: browser/data/fonts/Source Sans Pro_Regular.json ================================================ {"glyphs":{"0":{"ha":690,"x_min":61,"x_max":629,"o":"m 346 -17 q 136 103 211 -17 q 61 446 61 222 q 136 786 61 669 q 346 903 211 903 q 554 786 479 903 q 629 446 629 669 q 554 103 629 222 q 346 -17 479 -17 m 346 75 q 416 97 385 75 q 470 163 447 118 q 506 278 493 208 q 518 446 518 349 q 506 613 518 543 q 470 726 493 682 q 416 790 447 769 q 346 811 385 811 q 275 790 307 811 q 220 726 243 769 q 185 613 197 682 q 172 446 172 543 q 220 163 172 251 q 346 75 268 75 z "},"1":{"ha":690,"x_min":110,"x_max":610,"o":"m 110 0 l 110 94 l 313 94 l 313 747 l 151 747 l 151 821 q 258 848 213 832 q 339 886 303 864 l 426 886 l 426 94 l 610 94 l 610 0 l 110 0 z "},"2":{"ha":690,"x_min":50,"x_max":628,"o":"m 56 0 l 56 68 q 233 249 156 168 q 364 398 311 329 q 444 524 417 467 q 472 636 472 582 q 431 761 472 713 q 304 810 389 810 q 201 778 249 810 q 115 703 154 747 l 50 768 q 168 866 106 829 q 318 903 231 903 q 513 831 442 903 q 583 642 583 760 q 556 516 583 579 q 481 385 529 453 q 367 245 433 318 q 222 90 301 172 q 297 96 258 93 q 371 99 336 99 l 628 99 l 628 0 l 56 0 z "},"3":{"ha":690,"x_min":36,"x_max":619,"o":"m 328 -17 q 231 -6 275 -17 q 151 22 188 4 q 87 61 115 39 q 36 108 58 83 l 94 183 q 188 110 135 142 q 321 78 242 78 q 453 122 401 78 q 504 240 504 165 q 490 312 504 279 q 442 368 475 344 q 354 404 408 392 q 221 417 300 417 l 221 504 q 340 517 292 504 q 417 551 388 529 q 460 604 447 574 q 472 669 472 635 q 431 772 472 735 q 319 810 390 810 q 217 785 264 810 q 131 719 171 760 l 69 792 q 183 872 121 840 q 324 903 244 903 q 431 888 382 903 q 515 844 479 872 q 569 774 550 815 q 589 678 589 732 q 544 546 589 597 q 428 467 500 494 l 428 461 q 503 433 468 451 q 564 385 538 414 q 605 319 590 357 q 619 236 619 282 q 597 131 619 178 q 534 51 574 83 q 442 1 494 18 q 328 -17 389 -17 z "},"4":{"ha":690,"x_min":24,"x_max":651,"o":"m 422 0 l 422 244 l 24 244 l 24 319 l 403 886 l 531 886 l 531 336 l 651 336 l 651 244 l 531 244 l 531 0 l 422 0 m 144 336 l 422 336 l 422 593 q 424 678 422 629 q 429 764 426 728 l 424 764 q 389 701 407 732 q 351 639 371 671 l 144 336 z "},"5":{"ha":690,"x_min":35,"x_max":624,"o":"m 325 -17 q 228 -6 272 -17 q 149 21 185 4 q 85 59 114 38 q 35 104 57 81 l 90 179 q 183 108 129 139 q 314 78 236 78 q 390 92 354 78 q 451 133 425 107 q 493 197 478 160 q 508 281 508 235 q 457 424 508 372 q 319 475 406 475 q 241 461 274 475 q 168 421 208 447 l 107 460 l 136 886 l 579 886 l 579 788 l 236 788 l 213 525 q 276 551 244 542 q 349 561 308 561 q 456 544 406 561 q 543 494 506 528 q 602 408 581 460 q 624 283 624 356 q 599 156 624 211 q 532 62 574 100 q 437 3 490 24 q 325 -17 383 -17 z "},"6":{"ha":690,"x_min":67,"x_max":635,"o":"m 372 -17 q 251 10 307 -17 q 155 90 196 36 q 90 223 114 143 q 67 410 67 303 q 94 637 67 543 q 169 790 122 731 q 277 876 217 849 q 404 903 338 903 q 528 876 476 903 q 618 808 581 849 l 554 738 q 488 788 526 769 q 408 807 450 807 q 321 788 363 807 q 247 724 279 768 q 196 608 215 679 q 175 431 176 536 q 272 512 217 482 q 382 542 328 542 q 566 474 497 542 q 635 268 635 406 q 614 152 635 204 q 557 63 593 100 q 474 4 521 25 q 372 -17 426 -17 m 372 74 q 433 88 406 74 q 482 127 461 101 q 515 188 503 153 q 526 268 526 224 q 486 406 526 356 q 363 456 446 456 q 269 428 319 456 q 178 339 219 401 q 238 141 189 208 q 372 74 288 74 z "},"7":{"ha":690,"x_min":61,"x_max":632,"o":"m 246 0 q 268 229 251 125 q 315 427 285 333 q 391 608 344 521 q 503 788 438 696 l 61 788 l 61 886 l 632 886 l 632 815 q 503 624 553 715 q 425 437 454 532 q 383 235 396 342 q 364 0 369 129 l 246 0 z "},"8":{"ha":690,"x_min":57,"x_max":633,"o":"m 347 -17 q 231 1 285 -17 q 140 52 178 19 q 79 129 101 85 q 57 226 57 174 q 72 306 57 269 q 109 373 86 343 q 162 426 132 403 q 224 465 192 449 l 224 471 q 138 555 175 506 q 100 675 100 604 q 119 768 100 726 q 172 840 139 810 q 251 886 206 869 q 351 903 297 903 q 456 885 410 903 q 534 837 501 868 q 584 762 567 806 q 601 667 601 718 q 590 600 601 632 q 560 540 578 568 q 522 490 543 513 q 479 453 500 468 l 479 447 q 536 409 508 431 q 585 360 564 388 q 620 299 607 333 q 633 219 633 264 q 613 126 633 169 q 554 51 592 83 q 464 1 517 19 q 347 -17 411 -17 m 410 483 q 478 568 454 524 q 503 661 503 613 q 463 773 503 728 q 349 818 422 818 q 246 779 286 818 q 206 675 206 740 q 222 606 206 635 q 267 556 239 578 q 333 516 296 533 q 410 483 369 499 m 350 68 q 476 111 428 68 q 524 224 524 154 q 504 297 524 267 q 451 351 485 328 q 374 392 418 374 q 283 431 331 411 q 195 347 231 394 q 160 238 160 299 q 174 169 160 200 q 215 116 189 139 q 275 81 240 93 q 350 68 310 68 z "},"9":{"ha":690,"x_min":56,"x_max":622,"o":"m 326 431 q 420 458 371 431 q 513 549 469 486 q 451 746 501 679 q 317 813 401 813 q 256 799 285 813 q 207 759 228 785 q 174 697 186 733 q 163 618 163 661 q 203 481 163 531 q 326 431 243 431 m 285 -17 q 160 10 214 -17 q 71 76 107 36 l 135 149 q 201 97 163 117 q 281 78 239 78 q 369 97 328 78 q 443 162 411 117 q 494 279 475 207 q 515 458 514 351 q 418 375 474 406 q 307 344 363 344 q 124 413 192 344 q 56 618 56 481 q 76 734 56 682 q 133 824 97 786 q 216 882 168 861 q 317 903 264 903 q 438 876 382 903 q 535 797 494 850 q 599 663 576 743 q 622 476 622 583 q 594 249 622 343 q 519 97 567 156 q 412 10 472 38 q 285 -17 351 -17 z "}," ":{"ha":278,"x_min":0,"x_max":0,"o":""},"A":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 z "},"B":{"ha":817,"x_min":125,"x_max":761,"o":"m 125 0 l 125 911 l 396 911 q 523 899 465 911 q 622 860 581 886 q 685 791 663 833 q 708 689 708 749 q 674 566 708 621 q 575 490 640 511 l 575 485 q 710 415 658 469 q 761 267 761 361 q 736 150 761 200 q 665 67 711 100 q 556 17 619 33 q 415 0 492 0 l 125 0 m 240 524 l 375 524 q 543 564 492 524 q 594 674 594 604 q 541 786 594 753 q 381 819 488 819 l 240 819 l 240 524 m 240 92 l 399 92 q 582 135 517 92 q 647 271 647 179 q 583 395 647 356 q 399 435 519 435 l 240 435 l 240 92 z "},"C":{"ha":793,"x_min":72,"x_max":749,"o":"m 469 -17 q 311 15 383 -17 q 185 108 239 47 q 102 256 132 168 q 72 456 72 344 q 103 653 72 565 q 188 801 133 740 q 315 895 242 863 q 476 928 389 928 q 623 894 560 928 q 726 815 686 860 l 664 740 q 582 803 628 779 q 478 826 536 826 q 360 801 413 826 q 269 727 307 775 q 212 611 232 679 q 192 458 192 543 q 212 303 192 372 q 268 186 232 235 q 356 111 304 138 q 474 85 408 85 q 590 112 540 85 q 685 188 640 139 l 749 115 q 626 18 694 53 q 469 -17 558 -17 z "},"D":{"ha":854,"x_min":125,"x_max":783,"o":"m 125 0 l 125 911 l 353 911 q 674 794 564 911 q 783 460 783 678 q 756 266 783 351 q 674 122 728 181 q 540 31 619 63 q 358 0 461 0 l 125 0 m 240 94 l 344 94 q 584 190 504 94 q 664 460 664 286 q 584 725 664 633 q 344 817 504 817 l 240 817 l 240 94 z "},"E":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 z "},"F":{"ha":686,"x_min":125,"x_max":650,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 506 l 588 506 l 588 408 l 240 408 l 240 0 l 125 0 z "},"G":{"ha":857,"x_min":72,"x_max":764,"o":"m 483 -17 q 317 15 393 -17 q 188 108 242 47 q 103 256 133 168 q 72 456 72 344 q 103 653 72 565 q 190 801 135 740 q 323 895 246 863 q 490 928 400 928 q 577 918 538 928 q 649 892 617 908 q 708 856 682 876 q 753 815 733 836 l 689 740 q 608 801 654 776 q 493 826 563 826 q 368 801 424 826 q 274 727 313 775 q 213 611 235 679 q 192 458 192 543 q 212 303 192 372 q 270 186 232 235 q 365 111 308 138 q 494 85 421 85 q 587 99 543 85 q 658 139 631 114 l 658 376 l 465 376 l 465 472 l 764 472 l 764 89 q 647 13 719 43 q 483 -17 575 -17 z "},"H":{"ha":906,"x_min":125,"x_max":781,"o":"m 125 0 l 125 911 l 240 911 l 240 529 l 664 529 l 664 911 l 781 911 l 781 0 l 664 0 l 664 429 l 240 429 l 240 0 l 125 0 z "},"I":{"ha":365,"x_min":125,"x_max":240,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 z "},"J":{"ha":667,"x_min":43,"x_max":546,"o":"m 294 -17 q 43 129 124 -17 l 126 188 q 196 109 157 133 q 283 85 235 85 q 393 130 357 85 q 429 279 429 175 l 429 911 l 546 911 l 546 268 q 531 158 546 210 q 487 67 517 106 q 409 6 457 28 q 294 -17 361 -17 z "},"K":{"ha":804,"x_min":125,"x_max":799,"o":"m 125 0 l 125 911 l 240 911 l 240 454 l 244 454 l 624 911 l 754 911 l 469 564 l 799 0 l 669 0 l 397 474 l 240 289 l 240 0 l 125 0 z "},"L":{"ha":675,"x_min":125,"x_max":639,"o":"m 125 0 l 125 911 l 240 911 l 240 99 l 639 99 l 639 0 l 125 0 z "},"M":{"ha":1010,"x_min":125,"x_max":885,"o":"m 125 0 l 125 911 l 264 911 l 439 425 q 472 330 456 378 q 504 235 488 282 l 510 235 q 541 330 526 282 q 572 425 556 378 l 744 911 l 885 911 l 885 0 l 776 0 l 776 501 q 782 636 776 563 q 792 771 788 710 l 786 771 l 714 564 l 542 92 l 465 92 l 293 564 l 221 771 l 215 771 q 224 636 219 710 q 229 501 229 563 l 229 0 l 125 0 z "},"N":{"ha":899,"x_min":125,"x_max":774,"o":"m 125 0 l 125 911 l 244 911 l 574 339 l 672 150 l 678 150 q 669 294 674 219 q 664 440 664 368 l 664 911 l 774 911 l 774 0 l 654 0 l 324 574 l 225 761 l 219 761 q 230 620 225 692 q 235 476 235 549 l 235 0 l 125 0 z "},"O":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 z "},"P":{"ha":786,"x_min":125,"x_max":726,"o":"m 125 0 l 125 911 l 385 911 q 524 897 461 911 q 632 852 588 883 q 701 769 676 821 q 726 643 726 718 q 702 518 726 571 q 633 431 678 465 q 527 378 589 396 q 390 361 465 361 l 240 361 l 240 0 l 125 0 m 240 456 l 376 456 q 553 501 496 456 q 611 643 611 546 q 551 780 611 742 q 371 818 490 818 l 240 818 l 240 456 z "},"Q":{"ha":922,"x_min":72,"x_max":871,"o":"m 461 79 q 572 106 522 79 q 656 182 621 132 q 711 302 692 232 q 731 460 731 372 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 302 192 372 q 266 182 231 232 q 351 106 301 132 q 461 79 400 79 m 740 -229 q 624 -213 678 -229 q 528 -168 571 -197 q 455 -99 486 -139 q 404 -12 424 -60 q 268 35 329 -3 q 163 133 207 72 q 96 277 119 194 q 72 460 72 360 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 828 280 851 361 q 763 138 806 199 q 661 40 721 78 q 529 -11 601 1 q 619 -102 561 -72 q 753 -132 678 -132 q 806 -128 783 -132 q 849 -119 829 -125 l 871 -208 q 815 -223 850 -217 q 740 -229 781 -229 z "},"R":{"ha":790,"x_min":125,"x_max":756,"o":"m 125 0 l 125 911 l 410 911 q 538 898 479 911 q 640 854 597 885 q 706 775 682 824 q 729 656 729 726 q 674 485 729 549 q 524 397 618 421 l 756 0 l 625 0 l 406 385 l 240 385 l 240 0 l 125 0 m 240 479 l 393 479 q 557 523 500 479 q 614 656 614 567 q 557 782 614 746 q 393 818 500 818 l 240 818 l 240 479 z "},"S":{"ha":742,"x_min":58,"x_max":688,"o":"m 378 -17 q 200 19 282 -17 q 58 118 118 56 l 128 199 q 242 116 176 147 q 379 85 308 85 q 519 126 469 85 q 569 233 569 167 q 558 292 569 268 q 526 334 546 317 q 478 365 506 351 q 418 394 450 379 l 288 451 q 222 485 256 465 q 163 532 189 504 q 119 598 136 560 q 103 686 103 636 q 124 782 103 738 q 184 859 146 826 q 274 910 222 892 q 389 928 326 928 q 540 897 471 928 q 658 815 610 865 l 596 740 q 503 803 554 781 q 389 826 453 826 q 266 791 313 826 q 219 693 219 756 q 233 637 219 660 q 268 597 246 614 q 317 566 290 579 q 371 542 343 553 l 500 486 q 574 448 539 469 q 633 398 608 426 q 673 331 658 369 q 688 243 688 293 q 666 142 688 189 q 604 59 644 94 q 507 3 564 24 q 378 -17 450 -17 z "},"T":{"ha":744,"x_min":39,"x_max":706,"o":"m 314 0 l 314 814 l 39 814 l 39 911 l 706 911 l 706 814 l 431 814 l 431 0 l 314 0 z "},"U":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 z "},"V":{"ha":715,"x_min":0,"x_max":715,"o":"m 292 0 l 0 911 l 124 911 l 269 419 q 313 268 294 338 q 358 118 332 199 l 364 118 q 408 268 389 199 q 451 419 428 338 l 597 911 l 715 911 l 426 0 l 292 0 z "},"W":{"ha":1092,"x_min":32,"x_max":1058,"o":"m 225 0 l 32 911 l 151 911 l 247 415 q 274 268 260 340 q 300 121 288 196 l 306 121 q 338 269 321 196 q 369 415 354 342 l 496 911 l 601 911 l 728 415 q 761 269 744 343 q 794 121 778 196 l 800 121 q 825 269 813 196 q 851 415 838 342 l 947 911 l 1058 911 l 869 0 l 731 0 l 593 549 q 570 652 581 601 q 549 756 560 703 l 543 756 q 520 652 532 703 q 497 549 508 601 l 363 0 l 225 0 z "},"X":{"ha":713,"x_min":21,"x_max":692,"o":"m 21 0 l 286 471 l 39 911 l 167 911 l 290 678 q 324 616 308 646 q 361 546 340 586 l 367 546 q 401 616 386 586 q 432 678 415 646 l 553 911 l 675 911 l 426 465 l 692 0 l 564 0 l 431 246 q 394 315 413 279 q 353 392 375 350 l 347 392 q 310 315 328 350 q 275 246 292 279 l 143 0 l 21 0 z "},"Y":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 z "},"Z":{"ha":749,"x_min":63,"x_max":690,"o":"m 63 0 l 63 69 l 542 814 l 106 814 l 106 911 l 686 911 l 686 843 l 206 99 l 690 99 l 690 0 l 63 0 z "},"a":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 z "},"b":{"ha":768,"x_min":114,"x_max":704,"o":"m 413 -17 q 315 6 365 -17 q 219 69 264 29 l 215 69 l 206 0 l 114 0 l 114 989 l 228 989 l 228 719 l 225 597 q 325 665 271 638 q 436 692 379 692 q 551 667 501 692 q 635 598 601 643 q 687 490 669 553 q 704 349 704 426 q 681 194 704 263 q 617 79 657 126 q 524 8 576 32 q 413 -17 471 -17 m 393 79 q 470 98 435 79 q 531 151 506 117 q 572 235 557 185 q 586 347 586 285 q 576 449 586 403 q 545 527 567 494 q 490 578 524 560 q 408 596 456 596 q 228 504 326 596 l 228 150 q 316 95 272 111 q 393 79 360 79 z "},"c":{"ha":633,"x_min":64,"x_max":599,"o":"m 381 -17 q 256 7 314 -17 q 155 76 197 31 q 88 187 113 121 q 64 336 64 253 q 90 487 64 421 q 161 599 117 553 q 265 668 206 644 q 389 692 324 692 q 503 668 456 692 q 586 613 550 644 l 528 538 q 466 581 499 564 q 393 597 433 597 q 308 578 347 597 q 242 525 269 560 q 198 442 214 490 q 182 336 182 394 q 197 231 182 278 q 240 149 213 183 q 306 97 267 115 q 390 78 344 78 q 477 98 438 78 q 549 146 517 118 l 599 69 q 497 6 553 29 q 381 -17 442 -17 z "},"d":{"ha":771,"x_min":65,"x_max":657,"o":"m 344 -17 q 141 75 217 -17 q 65 336 65 167 q 90 484 65 418 q 154 596 114 550 q 247 667 194 642 q 358 692 300 692 q 460 671 417 692 q 547 614 503 650 l 542 729 l 542 989 l 657 989 l 657 0 l 563 0 l 553 79 l 549 79 q 456 12 508 40 q 344 -17 404 -17 m 369 79 q 458 102 417 79 q 542 172 500 125 l 542 525 q 459 580 499 564 q 378 596 419 596 q 302 577 338 596 q 240 524 267 558 q 199 443 214 490 q 183 338 183 396 q 232 147 183 215 q 369 79 281 79 z "},"e":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 z "},"f":{"ha":406,"x_min":42,"x_max":443,"o":"m 133 0 l 133 582 l 42 582 l 42 668 l 133 675 l 133 782 q 181 946 133 886 q 331 1006 229 1006 q 391 999 363 1006 q 443 983 419 993 l 418 896 q 342 913 381 913 q 247 782 247 913 l 247 675 l 390 675 l 390 582 l 247 582 l 247 0 l 133 0 z "},"g":{"ha":700,"x_min":63,"x_max":683,"o":"m 342 -311 q 228 -299 279 -311 q 140 -264 176 -287 q 83 -207 103 -240 q 63 -129 63 -174 q 89 -47 63 -86 q 161 24 115 -8 l 161 29 q 119 72 136 44 q 101 139 101 99 q 125 214 101 182 q 175 264 149 246 l 175 269 q 115 344 142 297 q 88 451 88 390 q 108 551 88 507 q 163 627 128 596 q 244 675 197 658 q 342 692 290 692 q 394 687 369 692 q 438 675 418 682 l 672 675 l 672 588 l 533 588 q 573 528 557 564 q 589 449 589 492 q 569 351 589 394 q 517 277 550 307 q 438 231 483 247 q 342 214 393 214 q 290 220 317 214 q 240 238 264 226 q 210 203 222 222 q 197 157 197 185 q 222 104 197 125 q 317 83 247 83 l 447 83 q 624 45 565 83 q 683 -78 683 7 q 660 -167 683 -125 q 592 -242 636 -210 q 484 -292 547 -274 q 342 -311 421 -311 m 342 290 q 397 301 371 290 q 442 333 422 313 q 474 384 463 354 q 485 451 485 414 q 443 567 485 526 q 342 608 401 608 q 240 567 282 608 q 199 451 199 526 q 210 384 199 414 q 241 333 221 354 q 287 301 261 313 q 342 290 313 290 m 358 -232 q 447 -220 407 -232 q 514 -190 486 -208 q 557 -146 542 -171 q 572 -94 572 -121 q 538 -29 572 -47 q 436 -11 503 -11 l 319 -11 q 277 -9 300 -11 q 232 0 254 -7 q 179 -56 196 -26 q 163 -114 163 -85 q 215 -200 163 -168 q 358 -232 267 -232 z "},"h":{"ha":756,"x_min":114,"x_max":654,"o":"m 114 0 l 114 989 l 228 989 l 228 719 l 224 581 q 325 659 272 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 z "},"i":{"ha":342,"x_min":93,"x_max":251,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m 172 814 q 116 835 139 814 q 93 888 93 856 q 116 941 93 921 q 172 961 139 961 q 228 941 206 961 q 251 888 251 921 q 228 835 251 856 q 172 814 206 814 z "},"j":{"ha":343,"x_min":-56,"x_max":251,"o":"m 44 -301 q -12 -296 13 -301 q -56 -283 -37 -290 l -32 -197 q -3 -205 -19 -201 q 32 -208 14 -208 q 99 -174 82 -208 q 115 -76 115 -139 l 115 675 l 229 675 l 229 -76 q 188 -240 229 -179 q 44 -301 146 -301 m 174 814 q 117 835 140 814 q 94 888 94 856 q 117 941 94 921 q 174 961 140 961 q 228 941 206 961 q 251 888 251 921 q 228 835 251 856 q 174 814 206 814 z "},"k":{"ha":688,"x_min":114,"x_max":675,"o":"m 114 0 l 114 989 l 226 989 l 226 319 l 231 319 l 518 675 l 644 675 l 418 404 l 675 0 l 550 0 l 353 325 l 226 178 l 226 0 l 114 0 z "},"l":{"ha":354,"x_min":114,"x_max":300,"o":"m 235 -17 q 142 22 169 -17 q 114 136 114 61 l 114 989 l 228 989 l 228 128 q 238 89 228 100 q 260 78 247 78 q 270 78 265 78 q 285 81 275 78 l 300 -6 q 274 -14 289 -11 q 235 -17 258 -17 z "},"m":{"ha":1151,"x_min":114,"x_max":1046,"o":"m 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 319 659 267 626 q 432 692 371 692 q 553 658 510 692 q 618 563 597 624 q 724 656 671 621 q 840 692 778 692 q 995 625 944 692 q 1046 428 1046 558 l 1046 0 l 932 0 l 932 413 q 901 551 932 508 q 807 593 871 593 q 638 489 731 593 l 638 0 l 524 0 l 524 413 q 493 551 524 508 q 397 593 463 593 q 228 489 321 593 l 228 0 l 114 0 z "},"n":{"ha":760,"x_min":114,"x_max":654,"o":"m 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 324 659 271 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 z "},"o":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 z "},"p":{"ha":771,"x_min":114,"x_max":704,"o":"m 114 -285 l 114 675 l 208 675 l 218 597 l 222 597 q 323 664 268 636 q 438 692 378 692 q 553 667 503 692 q 636 598 603 643 q 687 490 669 553 q 704 347 704 426 q 681 194 704 261 q 617 79 657 126 q 524 8 576 32 q 413 -17 471 -17 q 319 4 365 -17 q 225 61 272 25 l 228 -57 l 228 -285 l 114 -285 m 393 79 q 470 98 435 79 q 531 151 506 117 q 572 235 557 185 q 586 347 586 285 q 576 449 586 403 q 545 527 567 494 q 490 578 524 560 q 408 596 456 596 q 322 572 365 596 q 228 504 278 549 l 228 150 q 317 95 274 111 q 393 79 360 79 z "},"q":{"ha":771,"x_min":65,"x_max":657,"o":"m 542 -285 l 542 -44 l 547 78 q 455 10 507 38 q 344 -17 403 -17 q 141 75 217 -17 q 65 336 65 167 q 90 484 65 418 q 154 596 114 550 q 247 667 194 642 q 358 692 300 692 q 461 672 417 692 q 551 611 506 651 l 554 611 l 565 675 l 657 675 l 657 -285 l 542 -285 m 369 79 q 458 102 417 79 q 542 172 500 125 l 542 525 q 459 580 499 564 q 378 596 419 596 q 302 577 338 596 q 240 524 267 558 q 199 443 214 490 q 183 338 183 396 q 232 147 183 215 q 369 79 281 79 z "},"r":{"ha":482,"x_min":114,"x_max":486,"o":"m 114 0 l 114 675 l 208 675 l 218 553 l 222 553 q 306 654 257 617 q 414 692 356 692 q 486 678 454 692 l 464 578 q 433 586 447 583 q 399 589 419 589 q 309 554 356 589 q 228 433 263 519 l 228 0 l 114 0 z "},"s":{"ha":582,"x_min":39,"x_max":538,"o":"m 290 -17 q 153 10 218 -17 q 39 76 88 36 l 96 153 q 187 94 140 117 q 294 72 233 72 q 394 103 361 72 q 428 178 428 133 q 414 224 428 204 q 378 258 400 243 q 329 283 357 272 q 274 306 301 294 q 201 334 238 318 q 137 373 165 350 q 90 426 108 396 q 72 500 72 457 q 88 576 72 540 q 134 637 104 611 q 207 677 164 663 q 304 692 250 692 q 422 669 368 692 q 514 615 475 647 l 460 543 q 388 586 425 569 q 306 603 350 603 q 212 574 242 603 q 182 506 182 544 q 194 465 182 482 q 228 434 207 447 q 276 410 249 421 q 332 389 303 400 q 405 360 368 375 q 471 322 442 344 q 519 265 500 299 q 538 185 538 232 q 522 107 538 143 q 474 43 506 71 q 397 -1 443 15 q 290 -17 350 -17 z "},"t":{"ha":469,"x_min":33,"x_max":451,"o":"m 326 -17 q 235 0 272 -17 q 176 46 199 17 q 143 117 153 75 q 133 208 133 158 l 133 582 l 33 582 l 33 668 l 139 675 l 153 864 l 249 864 l 249 675 l 431 675 l 431 582 l 249 582 l 249 207 q 272 110 249 144 q 353 76 294 76 q 392 82 371 76 q 429 94 413 88 l 451 8 q 391 -9 424 -1 q 326 -17 358 -17 z "},"u":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 z "},"v":{"ha":649,"x_min":17,"x_max":632,"o":"m 260 0 l 17 675 l 135 675 l 263 292 q 294 192 278 242 q 325 93 310 142 l 331 93 q 361 192 346 142 q 392 292 376 242 l 519 675 l 632 675 l 393 0 l 260 0 z "},"w":{"ha":997,"x_min":33,"x_max":964,"o":"m 221 0 l 33 675 l 150 675 l 250 285 q 271 190 261 236 q 290 97 281 144 l 296 97 q 318 191 307 144 q 342 285 329 238 l 446 675 l 557 675 l 663 285 q 687 190 675 236 q 710 97 699 144 l 715 97 q 736 190 726 144 q 757 285 746 236 l 856 675 l 964 675 l 783 0 l 644 0 l 547 363 q 524 458 535 411 q 501 557 514 506 l 496 557 q 474 458 485 506 q 449 361 463 410 l 354 0 l 221 0 z "},"x":{"ha":619,"x_min":19,"x_max":600,"o":"m 19 0 l 240 353 l 36 675 l 160 675 l 250 526 q 282 470 265 499 q 317 414 299 442 l 322 414 q 353 470 338 442 q 383 526 368 499 l 465 675 l 585 675 l 381 340 l 600 0 l 476 0 l 378 157 q 342 218 360 188 q 304 278 324 249 l 299 278 q 264 219 281 249 q 231 157 247 189 l 139 0 l 19 0 z "},"y":{"ha":649,"x_min":17,"x_max":632,"o":"m 125 -290 q 82 -287 101 -290 q 46 -276 63 -283 l 68 -186 q 93 -192 79 -189 q 119 -196 107 -196 q 215 -155 178 -196 q 272 -51 251 -114 l 288 -1 l 17 675 l 135 675 l 272 301 q 305 208 288 257 q 338 111 322 158 l 343 111 q 372 207 358 157 q 400 301 386 257 l 521 675 l 632 675 l 378 -56 q 338 -149 360 -106 q 285 -223 315 -192 q 215 -272 254 -254 q 125 -290 176 -290 z "},"z":{"ha":590,"x_min":43,"x_max":554,"o":"m 43 0 l 43 61 l 399 582 l 82 582 l 82 675 l 543 675 l 543 614 l 188 93 l 554 93 l 554 0 l 43 0 z "},"À":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 400 968 l 189 1128 l 254 1204 l 451 1026 l 400 968 z "},"Á":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 353 968 l 301 1026 l 499 1204 l 564 1128 l 353 968 z "},"Â":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 171 1007 l 317 1164 l 436 1164 l 582 1007 l 532 971 l 379 1100 l 374 1100 l 221 971 l 171 1007 z "},"Ã":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 481 985 q 414 1000 442 985 q 363 1034 386 1015 q 320 1068 340 1053 q 275 1083 300 1083 q 231 1060 249 1083 q 208 992 213 1036 l 131 997 q 172 1122 135 1076 q 272 1168 210 1168 q 339 1153 311 1168 q 390 1119 367 1138 q 433 1085 413 1100 q 478 1069 453 1069 q 544 1161 533 1069 l 622 1156 q 581 1030 618 1075 q 481 985 543 985 z "},"Ä":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 233 993 q 185 1013 204 993 q 165 1061 165 1032 q 185 1110 165 1092 q 233 1129 204 1129 q 283 1110 264 1129 q 301 1061 301 1092 q 283 1013 301 1032 q 233 993 264 993 m 519 993 q 470 1013 489 993 q 451 1061 451 1032 q 470 1110 451 1092 q 519 1129 489 1129 q 568 1110 549 1129 q 588 1061 588 1092 q 568 1013 588 1032 q 519 993 549 993 z "},"Ā":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 190 1021 l 190 1100 l 563 1100 l 563 1021 l 190 1021 z "},"Ă":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 376 979 q 292 994 328 979 q 231 1033 256 1008 q 192 1090 206 1057 q 174 1158 178 1122 l 243 1169 q 284 1087 251 1121 q 376 1053 317 1053 q 469 1087 436 1053 q 510 1169 501 1121 l 579 1158 q 561 1090 575 1122 q 522 1033 547 1057 q 461 994 497 1008 q 376 979 425 979 z "},"Å":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 376 971 q 280 1005 318 971 q 242 1096 242 1039 q 280 1188 242 1154 q 376 1222 318 1222 q 473 1188 435 1222 q 511 1096 511 1154 q 473 1005 511 1039 q 376 971 435 971 m 376 1021 q 426 1040 404 1021 q 447 1096 447 1060 q 426 1151 447 1132 q 376 1171 404 1171 q 325 1151 346 1171 q 304 1096 304 1132 q 325 1040 304 1060 q 376 1021 346 1021 z "},"Ǎ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 317 981 l 171 1138 l 221 1174 l 374 1046 l 379 1046 l 532 1174 l 582 1138 l 436 981 l 317 981 z "},"Ạ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 376 -285 q 323 -264 344 -285 q 301 -210 301 -243 q 323 -156 301 -178 q 376 -135 344 -135 q 430 -156 408 -135 q 451 -210 451 -178 q 430 -264 451 -243 q 376 -285 408 -285 z "},"Ả":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 332 969 l 319 1022 q 375 1046 353 1032 q 397 1086 397 1060 q 282 1144 397 1140 l 294 1211 q 436 1180 386 1208 q 486 1099 486 1151 q 474 1047 486 1068 q 440 1009 461 1025 q 390 984 418 993 q 332 969 363 975 z "},"Ấ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 244 971 l 197 1007 l 326 1132 l 426 1132 l 556 1007 l 508 971 l 379 1067 l 374 1067 l 244 971 m 544 1060 l 503 1104 l 638 1233 l 686 1179 l 544 1060 z "},"Ầ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 244 971 l 197 1007 l 326 1132 l 426 1132 l 556 1007 l 508 971 l 379 1067 l 374 1067 l 244 971 m 250 1101 l 208 1060 l 83 1182 l 132 1233 l 250 1101 z "},"Ẩ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 244 971 l 197 1007 l 326 1132 l 426 1132 l 556 1007 l 508 971 l 379 1067 l 374 1067 l 244 971 m 536 1047 l 521 1096 q 565 1113 547 1103 q 583 1146 583 1124 q 560 1185 583 1174 q 485 1200 538 1197 l 497 1258 q 622 1231 579 1256 q 664 1157 664 1206 q 625 1080 664 1104 q 536 1047 586 1056 z "},"Ẫ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 244 971 l 197 1007 l 326 1128 l 426 1128 l 556 1007 l 508 971 l 379 1063 l 374 1063 l 244 971 m 175 1178 q 203 1267 178 1231 q 285 1304 228 1304 q 342 1294 318 1304 q 385 1270 365 1283 q 424 1247 406 1257 q 463 1236 442 1236 q 499 1253 488 1236 q 515 1300 511 1269 l 578 1293 q 550 1202 575 1239 q 468 1165 525 1165 q 411 1176 435 1165 q 367 1200 388 1188 q 329 1224 347 1213 q 290 1235 311 1235 q 253 1218 265 1235 q 238 1171 242 1201 l 175 1178 z "},"Ậ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 171 1007 l 317 1164 l 436 1164 l 582 1007 l 532 971 l 379 1100 l 374 1100 l 221 971 l 171 1007 m 376 -285 q 323 -264 344 -285 q 301 -210 301 -243 q 323 -156 301 -178 q 376 -135 344 -135 q 430 -156 408 -135 q 451 -210 451 -178 q 430 -264 451 -243 q 376 -285 408 -285 z "},"Ắ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 324 1156 l 456 1317 l 529 1267 l 381 1115 l 324 1156 m 376 979 q 292 994 328 979 q 231 1033 256 1008 q 192 1090 206 1057 q 174 1158 178 1122 l 239 1169 q 281 1083 247 1118 q 376 1047 314 1047 q 472 1083 439 1047 q 514 1169 506 1118 l 579 1158 q 561 1090 575 1122 q 522 1033 547 1057 q 461 994 497 1008 q 376 979 425 979 z "},"Ằ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 429 1156 l 372 1115 l 224 1267 l 297 1317 l 429 1156 m 376 979 q 292 994 328 979 q 231 1033 256 1008 q 192 1090 206 1057 q 174 1158 178 1122 l 239 1169 q 281 1083 247 1118 q 376 1047 314 1047 q 472 1083 439 1047 q 514 1169 506 1118 l 579 1158 q 561 1090 575 1122 q 522 1033 547 1057 q 461 994 497 1008 q 376 979 425 979 z "},"Ẳ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 344 1111 l 331 1160 q 374 1177 356 1167 q 392 1210 392 1188 q 369 1249 392 1238 q 294 1264 346 1261 l 306 1322 q 431 1294 388 1319 q 474 1221 474 1269 q 463 1176 474 1194 q 434 1144 451 1157 q 393 1123 417 1131 q 344 1111 369 1115 m 376 979 q 292 994 328 979 q 231 1033 256 1008 q 192 1090 206 1057 q 174 1158 178 1122 l 239 1169 q 281 1083 247 1118 q 376 1047 314 1047 q 472 1083 439 1047 q 514 1169 506 1118 l 579 1158 q 561 1090 575 1122 q 522 1033 547 1057 q 461 994 497 1008 q 376 979 425 979 z "},"Ẵ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 376 983 q 292 995 328 983 q 233 1028 257 1007 q 195 1075 208 1049 q 178 1131 182 1101 l 242 1142 q 281 1075 249 1104 q 376 1046 313 1046 q 472 1075 440 1046 q 511 1142 504 1104 l 575 1131 q 558 1075 571 1101 q 520 1028 544 1049 q 460 995 496 1007 q 376 983 425 983 m 175 1182 q 203 1273 178 1236 q 285 1310 228 1310 q 342 1299 318 1310 q 385 1275 365 1288 q 424 1251 406 1263 q 463 1240 442 1240 q 499 1257 488 1240 q 515 1304 511 1274 l 578 1297 q 550 1208 575 1244 q 468 1171 525 1171 q 411 1182 435 1171 q 367 1206 388 1193 q 329 1229 347 1218 q 290 1240 311 1240 q 253 1224 265 1240 q 238 1175 242 1207 l 175 1182 z "},"Ặ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 376 979 q 292 994 328 979 q 231 1033 256 1008 q 192 1090 206 1057 q 174 1158 178 1122 l 243 1169 q 284 1087 251 1121 q 376 1053 317 1053 q 469 1087 436 1053 q 510 1169 501 1121 l 579 1158 q 561 1090 575 1122 q 522 1033 547 1057 q 461 994 497 1008 q 376 979 425 979 m 376 -285 q 323 -264 344 -285 q 301 -210 301 -243 q 323 -156 301 -178 q 376 -135 344 -135 q 430 -156 408 -135 q 451 -210 451 -178 q 430 -264 451 -243 q 376 -285 408 -285 z "},"Ą":{"ha":756,"x_min":4,"x_max":794,"o":"m 683 -294 q 589 -264 628 -294 q 550 -174 550 -233 q 560 -119 550 -146 q 585 -71 569 -93 q 618 -31 600 -49 q 654 0 636 -12 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 l 313 911 l 443 911 l 751 0 q 672 -62 703 -19 q 640 -149 640 -106 q 660 -197 640 -181 q 704 -212 679 -212 q 763 -193 736 -212 l 794 -256 q 742 -283 774 -271 q 683 -294 711 -294 m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 z "},"Æ":{"ha":1142,"x_min":11,"x_max":1074,"o":"m 403 522 l 318 358 l 557 358 l 557 819 l 551 819 q 403 522 478 671 m 11 0 l 489 911 l 1060 911 l 1060 814 l 674 814 l 674 528 l 996 528 l 996 429 l 674 429 l 674 99 l 1074 99 l 1074 0 l 557 0 l 557 265 l 271 265 l 133 0 l 11 0 z "},"Ǽ":{"ha":1142,"x_min":11,"x_max":1074,"o":"m 403 522 l 318 358 l 557 358 l 557 819 l 551 819 q 403 522 478 671 m 11 0 l 489 911 l 1060 911 l 1060 814 l 674 814 l 674 528 l 996 528 l 996 429 l 674 429 l 674 99 l 1074 99 l 1074 0 l 557 0 l 557 265 l 271 265 l 133 0 l 11 0 m 760 979 l 708 1038 l 906 1215 l 971 1139 l 760 979 z "},"Ǣ":{"ha":1142,"x_min":11,"x_max":1074,"o":"m 403 522 l 318 358 l 557 358 l 557 819 l 551 819 q 403 522 478 671 m 11 0 l 489 911 l 1060 911 l 1060 814 l 674 814 l 674 528 l 996 528 l 996 429 l 674 429 l 674 99 l 1074 99 l 1074 0 l 557 0 l 557 265 l 271 265 l 133 0 l 11 0 m 597 1032 l 597 1111 l 969 1111 l 969 1032 l 597 1032 z "},"Ƀ":{"ha":838,"x_min":42,"x_max":785,"o":"m 149 0 l 149 246 l 42 246 l 42 306 l 149 311 l 149 911 l 419 911 q 547 899 489 911 q 645 860 604 886 q 709 792 686 833 q 732 692 732 750 q 693 573 732 625 q 574 500 654 521 l 574 494 q 729 424 674 479 q 785 272 785 368 q 760 152 785 203 q 689 67 735 101 q 580 17 643 33 q 440 0 517 0 l 149 0 m 264 528 l 400 528 q 569 567 517 528 q 621 683 621 607 q 566 792 621 758 q 404 825 511 825 l 264 825 l 264 528 m 264 88 l 424 88 q 607 134 542 88 q 672 278 672 181 q 608 410 672 368 q 424 451 543 451 l 264 451 l 264 311 l 475 311 l 475 246 l 264 246 l 264 88 z "},"Ḇ":{"ha":817,"x_min":125,"x_max":761,"o":"m 125 0 l 125 911 l 396 911 q 523 899 465 911 q 622 860 581 886 q 685 791 663 833 q 708 689 708 749 q 674 566 708 621 q 575 490 640 511 l 575 485 q 710 415 658 469 q 761 267 761 361 q 736 150 761 200 q 665 67 711 100 q 556 17 619 33 q 415 0 492 0 l 125 0 m 240 524 l 375 524 q 543 564 492 524 q 594 674 594 604 q 541 786 594 753 q 381 819 488 819 l 240 819 l 240 524 m 240 92 l 399 92 q 582 135 517 92 q 647 271 647 179 q 583 395 647 356 q 399 435 519 435 l 240 435 l 240 92 m 232 -235 l 232 -156 l 601 -156 l 601 -235 l 232 -235 z "},"Ç":{"ha":793,"x_min":72,"x_max":749,"o":"m 469 -17 q 311 15 383 -17 q 185 108 239 47 q 102 256 132 168 q 72 456 72 344 q 103 653 72 565 q 188 801 133 740 q 315 895 242 863 q 476 928 389 928 q 623 894 560 928 q 726 815 686 860 l 664 740 q 582 803 628 779 q 478 826 536 826 q 360 801 413 826 q 269 727 307 775 q 212 611 232 679 q 192 458 192 543 q 212 303 192 372 q 268 186 232 235 q 356 111 304 138 q 474 85 408 85 q 590 112 540 85 q 685 188 640 139 l 749 115 q 626 18 694 53 q 469 -17 558 -17 m 356 -314 l 344 -258 q 464 -235 432 -251 q 496 -189 496 -219 q 472 -146 496 -161 q 389 -122 449 -131 l 450 4 l 524 4 l 483 -89 q 558 -122 532 -100 q 585 -187 585 -144 q 526 -278 585 -249 q 356 -314 467 -308 z "},"Ć":{"ha":793,"x_min":72,"x_max":749,"o":"m 469 -17 q 311 15 383 -17 q 185 108 239 47 q 102 256 132 168 q 72 456 72 344 q 103 653 72 565 q 188 801 133 740 q 315 895 242 863 q 476 928 389 928 q 623 894 560 928 q 726 815 686 860 l 664 740 q 582 803 628 779 q 478 826 536 826 q 360 801 413 826 q 269 727 307 775 q 212 611 232 679 q 192 458 192 543 q 212 303 192 372 q 268 186 232 235 q 356 111 304 138 q 474 85 408 85 q 590 112 540 85 q 685 188 640 139 l 749 115 q 626 18 694 53 q 469 -17 558 -17 m 435 968 l 383 1026 l 581 1204 l 646 1128 l 435 968 z "},"Ĉ":{"ha":793,"x_min":72,"x_max":749,"o":"m 469 -17 q 311 15 383 -17 q 185 108 239 47 q 102 256 132 168 q 72 456 72 344 q 103 653 72 565 q 188 801 133 740 q 315 895 242 863 q 476 928 389 928 q 623 894 560 928 q 726 815 686 860 l 664 740 q 582 803 628 779 q 478 826 536 826 q 360 801 413 826 q 269 727 307 775 q 212 611 232 679 q 192 458 192 543 q 212 303 192 372 q 268 186 232 235 q 356 111 304 138 q 474 85 408 85 q 590 112 540 85 q 685 188 640 139 l 749 115 q 626 18 694 53 q 469 -17 558 -17 m 253 1007 l 399 1164 l 518 1164 l 664 1007 l 614 971 l 461 1100 l 456 1100 l 303 971 l 253 1007 z "},"Č":{"ha":793,"x_min":72,"x_max":749,"o":"m 469 -17 q 311 15 383 -17 q 185 108 239 47 q 102 256 132 168 q 72 456 72 344 q 103 653 72 565 q 188 801 133 740 q 315 895 242 863 q 476 928 389 928 q 623 894 560 928 q 726 815 686 860 l 664 740 q 582 803 628 779 q 478 826 536 826 q 360 801 413 826 q 269 727 307 775 q 212 611 232 679 q 192 458 192 543 q 212 303 192 372 q 268 186 232 235 q 356 111 304 138 q 474 85 408 85 q 590 112 540 85 q 685 188 640 139 l 749 115 q 626 18 694 53 q 469 -17 558 -17 m 399 981 l 253 1138 l 303 1174 l 456 1046 l 461 1046 l 614 1174 l 664 1138 l 518 981 l 399 981 z "},"Ċ":{"ha":793,"x_min":72,"x_max":749,"o":"m 469 -17 q 311 15 383 -17 q 185 108 239 47 q 102 256 132 168 q 72 456 72 344 q 103 653 72 565 q 188 801 133 740 q 315 895 242 863 q 476 928 389 928 q 623 894 560 928 q 726 815 686 860 l 664 740 q 582 803 628 779 q 478 826 536 826 q 360 801 413 826 q 269 727 307 775 q 212 611 232 679 q 192 458 192 543 q 212 303 192 372 q 268 186 232 235 q 356 111 304 138 q 474 85 408 85 q 590 112 540 85 q 685 188 640 139 l 749 115 q 626 18 694 53 q 469 -17 558 -17 m 458 992 q 402 1013 425 992 q 379 1067 379 1033 q 402 1119 379 1099 q 458 1140 425 1140 q 515 1119 492 1140 q 538 1067 538 1099 q 515 1013 538 1033 q 458 992 492 992 z "},"Ď":{"ha":854,"x_min":125,"x_max":783,"o":"m 125 0 l 125 911 l 353 911 q 674 794 564 911 q 783 460 783 678 q 756 266 783 351 q 674 122 728 181 q 540 31 619 63 q 358 0 461 0 l 125 0 m 240 94 l 344 94 q 584 190 504 94 q 664 460 664 286 q 584 725 664 633 q 344 817 504 817 l 240 817 l 240 94 m 367 981 l 221 1138 l 271 1174 l 424 1046 l 429 1046 l 582 1174 l 632 1138 l 486 981 l 367 981 z "},"Ḍ":{"ha":854,"x_min":125,"x_max":783,"o":"m 125 0 l 125 911 l 353 911 q 674 794 564 911 q 783 460 783 678 q 756 266 783 351 q 674 122 728 181 q 540 31 619 63 q 358 0 461 0 l 125 0 m 240 94 l 344 94 q 584 190 504 94 q 664 460 664 286 q 584 725 664 633 q 344 817 504 817 l 240 817 l 240 94 m 422 -285 q 369 -264 390 -285 q 347 -210 347 -243 q 369 -156 347 -178 q 422 -135 390 -135 q 476 -156 454 -135 q 497 -210 497 -178 q 476 -264 497 -243 q 422 -285 454 -285 z "},"Ḏ":{"ha":854,"x_min":125,"x_max":783,"o":"m 125 0 l 125 911 l 353 911 q 674 794 564 911 q 783 460 783 678 q 756 266 783 351 q 674 122 728 181 q 540 31 619 63 q 358 0 461 0 l 125 0 m 240 94 l 344 94 q 584 190 504 94 q 664 460 664 286 q 584 725 664 633 q 344 817 504 817 l 240 817 l 240 94 m 238 -235 l 238 -156 l 607 -156 l 607 -235 l 238 -235 z "},"Đ":{"ha":886,"x_min":46,"x_max":814,"o":"m 46 446 l 46 506 l 156 511 l 156 911 l 383 911 q 704 794 594 911 q 814 460 814 678 q 786 266 814 351 q 704 122 758 181 q 571 31 650 63 q 389 0 492 0 l 156 0 l 156 446 l 46 446 m 271 94 l 375 94 q 615 190 535 94 q 694 460 694 286 q 615 725 694 633 q 375 817 535 817 l 271 817 l 271 511 l 478 511 l 478 446 l 271 446 l 271 94 z "},"È":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 418 968 l 207 1128 l 272 1204 l 469 1026 l 418 968 z "},"É":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 371 968 l 319 1026 l 517 1204 l 582 1128 l 371 968 z "},"Ê":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 189 1007 l 335 1164 l 454 1164 l 600 1007 l 550 971 l 397 1100 l 392 1100 l 239 971 l 189 1007 z "},"Ě":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 335 981 l 189 1138 l 239 1174 l 392 1046 l 397 1046 l 550 1174 l 600 1138 l 454 981 l 335 981 z "},"Ë":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 251 993 q 203 1013 222 993 q 183 1061 183 1032 q 203 1110 183 1092 q 251 1129 222 1129 q 301 1110 282 1129 q 319 1061 319 1092 q 301 1013 319 1032 q 251 993 282 993 m 538 993 q 488 1013 507 993 q 469 1061 469 1032 q 488 1110 469 1092 q 538 1129 507 1129 q 586 1110 567 1129 q 606 1061 606 1092 q 586 1013 606 1032 q 538 993 567 993 z "},"Ē":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 208 1021 l 208 1100 l 581 1100 l 581 1021 l 208 1021 z "},"Ĕ":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 394 979 q 310 994 346 979 q 249 1033 274 1008 q 210 1090 224 1057 q 192 1158 196 1122 l 261 1169 q 302 1087 269 1121 q 394 1053 335 1053 q 487 1087 454 1053 q 528 1169 519 1121 l 597 1158 q 579 1090 593 1122 q 540 1033 565 1057 q 479 994 515 1008 q 394 979 443 979 z "},"Ė":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 394 992 q 338 1013 361 992 q 315 1067 315 1033 q 338 1119 315 1099 q 394 1140 361 1140 q 451 1119 428 1140 q 474 1067 474 1099 q 451 1013 474 1033 q 394 992 428 992 z "},"Ẹ":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 410 -285 q 356 -264 378 -285 q 335 -210 335 -243 q 356 -156 335 -178 q 410 -135 378 -135 q 463 -156 442 -135 q 485 -210 485 -178 q 463 -264 485 -243 q 410 -285 442 -285 z "},"Ẻ":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 350 969 l 338 1022 q 393 1046 371 1032 q 415 1086 415 1060 q 300 1144 415 1140 l 313 1211 q 454 1180 404 1208 q 504 1099 504 1151 q 492 1047 504 1068 q 458 1009 479 1025 q 408 984 436 993 q 350 969 381 975 z "},"Ẽ":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 499 985 q 432 1000 460 985 q 381 1034 404 1015 q 338 1068 358 1053 q 293 1083 318 1083 q 249 1060 267 1083 q 226 992 231 1036 l 149 997 q 190 1122 153 1076 q 290 1168 228 1168 q 357 1153 329 1168 q 408 1119 385 1138 q 451 1085 431 1100 q 496 1069 471 1069 q 563 1161 551 1069 l 640 1156 q 599 1030 636 1075 q 499 985 561 985 z "},"Ế":{"ha":732,"x_min":125,"x_max":704,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 263 971 l 215 1007 l 344 1132 l 444 1132 l 574 1007 l 526 971 l 397 1067 l 392 1067 l 263 971 m 563 1060 l 521 1104 l 656 1233 l 704 1179 l 563 1060 z "},"Ề":{"ha":732,"x_min":101,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 263 971 l 215 1007 l 344 1132 l 444 1132 l 574 1007 l 526 971 l 397 1067 l 392 1067 l 263 971 m 268 1101 l 226 1060 l 101 1182 l 150 1233 l 268 1101 z "},"Ể":{"ha":732,"x_min":125,"x_max":682,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 263 971 l 215 1007 l 344 1132 l 444 1132 l 574 1007 l 526 971 l 397 1067 l 392 1067 l 263 971 m 554 1047 l 539 1096 q 583 1113 565 1103 q 601 1146 601 1124 q 578 1185 601 1174 q 503 1200 556 1197 l 515 1258 q 640 1231 597 1256 q 682 1157 682 1206 q 643 1080 682 1104 q 554 1047 604 1056 z "},"Ễ":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 263 971 l 215 1007 l 344 1128 l 444 1128 l 574 1007 l 526 971 l 397 1063 l 392 1063 l 263 971 m 193 1178 q 221 1267 196 1231 q 303 1304 246 1304 q 360 1294 336 1304 q 403 1270 383 1283 q 442 1247 424 1257 q 481 1236 460 1236 q 517 1253 506 1236 q 533 1300 529 1269 l 596 1293 q 568 1202 593 1239 q 486 1165 543 1165 q 429 1176 453 1165 q 385 1200 406 1188 q 347 1224 365 1213 q 308 1235 329 1235 q 272 1218 283 1235 q 256 1171 260 1201 l 193 1178 z "},"Ệ":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 189 1007 l 335 1164 l 454 1164 l 600 1007 l 550 971 l 397 1100 l 392 1100 l 239 971 l 189 1007 m 410 -285 q 356 -264 378 -285 q 335 -210 335 -243 q 356 -156 335 -178 q 410 -135 378 -135 q 463 -156 442 -135 q 485 -210 485 -178 q 463 -264 485 -243 q 410 -285 442 -285 z "},"Ę":{"ha":732,"x_min":125,"x_max":686,"o":"m 575 -294 q 481 -264 519 -294 q 442 -174 442 -233 q 474 -70 442 -115 q 546 0 507 -25 l 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 660 0 q 613 -16 636 -3 q 572 -49 590 -29 q 543 -95 554 -69 q 532 -149 532 -121 q 553 -197 532 -181 q 599 -212 574 -212 q 654 -193 628 -212 l 686 -256 q 635 -283 667 -271 q 575 -294 603 -294 z "},"Ḗ":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 367 1149 l 324 1201 l 492 1344 l 546 1278 l 367 1149 m 206 1021 l 206 1100 l 578 1100 l 578 1021 l 206 1021 z "},"Ǵ":{"ha":857,"x_min":72,"x_max":764,"o":"m 483 -17 q 317 15 393 -17 q 188 108 242 47 q 103 256 133 168 q 72 456 72 344 q 103 653 72 565 q 190 801 135 740 q 323 895 246 863 q 490 928 400 928 q 577 918 538 928 q 649 892 617 908 q 708 856 682 876 q 753 815 733 836 l 689 740 q 608 801 654 776 q 493 826 563 826 q 368 801 424 826 q 274 727 313 775 q 213 611 235 679 q 192 458 192 543 q 212 303 192 372 q 270 186 232 235 q 365 111 308 138 q 494 85 421 85 q 587 99 543 85 q 658 139 631 114 l 658 376 l 465 376 l 465 472 l 764 472 l 764 89 q 647 13 719 43 q 483 -17 575 -17 m 467 968 l 415 1026 l 613 1204 l 678 1128 l 467 968 z "},"Ĝ":{"ha":857,"x_min":72,"x_max":764,"o":"m 483 -17 q 317 15 393 -17 q 188 108 242 47 q 103 256 133 168 q 72 456 72 344 q 103 653 72 565 q 190 801 135 740 q 323 895 246 863 q 490 928 400 928 q 577 918 538 928 q 649 892 617 908 q 708 856 682 876 q 753 815 733 836 l 689 740 q 608 801 654 776 q 493 826 563 826 q 368 801 424 826 q 274 727 313 775 q 213 611 235 679 q 192 458 192 543 q 212 303 192 372 q 270 186 232 235 q 365 111 308 138 q 494 85 421 85 q 587 99 543 85 q 658 139 631 114 l 658 376 l 465 376 l 465 472 l 764 472 l 764 89 q 647 13 719 43 q 483 -17 575 -17 m 285 1007 l 431 1164 l 550 1164 l 696 1007 l 646 971 l 493 1100 l 488 1100 l 335 971 l 285 1007 z "},"Ğ":{"ha":857,"x_min":72,"x_max":764,"o":"m 483 -17 q 317 15 393 -17 q 188 108 242 47 q 103 256 133 168 q 72 456 72 344 q 103 653 72 565 q 190 801 135 740 q 323 895 246 863 q 490 928 400 928 q 577 918 538 928 q 649 892 617 908 q 708 856 682 876 q 753 815 733 836 l 689 740 q 608 801 654 776 q 493 826 563 826 q 368 801 424 826 q 274 727 313 775 q 213 611 235 679 q 192 458 192 543 q 212 303 192 372 q 270 186 232 235 q 365 111 308 138 q 494 85 421 85 q 587 99 543 85 q 658 139 631 114 l 658 376 l 465 376 l 465 472 l 764 472 l 764 89 q 647 13 719 43 q 483 -17 575 -17 m 490 979 q 406 994 442 979 q 344 1033 369 1008 q 306 1090 319 1057 q 288 1158 292 1122 l 357 1169 q 398 1087 365 1121 q 490 1053 431 1053 q 583 1087 550 1053 q 624 1169 615 1121 l 693 1158 q 675 1090 689 1122 q 636 1033 661 1057 q 575 994 611 1008 q 490 979 539 979 z "},"Ġ":{"ha":857,"x_min":72,"x_max":764,"o":"m 483 -17 q 317 15 393 -17 q 188 108 242 47 q 103 256 133 168 q 72 456 72 344 q 103 653 72 565 q 190 801 135 740 q 323 895 246 863 q 490 928 400 928 q 577 918 538 928 q 649 892 617 908 q 708 856 682 876 q 753 815 733 836 l 689 740 q 608 801 654 776 q 493 826 563 826 q 368 801 424 826 q 274 727 313 775 q 213 611 235 679 q 192 458 192 543 q 212 303 192 372 q 270 186 232 235 q 365 111 308 138 q 494 85 421 85 q 587 99 543 85 q 658 139 631 114 l 658 376 l 465 376 l 465 472 l 764 472 l 764 89 q 647 13 719 43 q 483 -17 575 -17 m 490 992 q 434 1013 457 992 q 411 1067 411 1033 q 434 1119 411 1099 q 490 1140 457 1140 q 547 1119 524 1140 q 569 1067 569 1099 q 547 1013 569 1033 q 490 992 524 992 z "},"Ģ":{"ha":857,"x_min":72,"x_max":764,"o":"m 483 -17 q 317 15 393 -17 q 188 108 242 47 q 103 256 133 168 q 72 456 72 344 q 103 653 72 565 q 190 801 135 740 q 323 895 246 863 q 490 928 400 928 q 577 918 538 928 q 649 892 617 908 q 708 856 682 876 q 753 815 733 836 l 689 740 q 608 801 654 776 q 493 826 563 826 q 368 801 424 826 q 274 727 313 775 q 213 611 235 679 q 192 458 192 543 q 212 303 192 372 q 270 186 232 235 q 365 111 308 138 q 494 85 421 85 q 587 99 543 85 q 658 139 631 114 l 658 376 l 465 376 l 465 472 l 764 472 l 764 89 q 647 13 719 43 q 483 -17 575 -17 m 363 -314 l 351 -258 q 471 -235 439 -251 q 503 -192 503 -219 q 478 -151 503 -164 q 404 -133 453 -137 l 429 -81 q 556 -116 519 -92 q 592 -187 592 -140 q 533 -278 592 -249 q 363 -314 474 -308 z "},"Ǧ":{"ha":857,"x_min":72,"x_max":764,"o":"m 483 -17 q 317 15 393 -17 q 188 108 242 47 q 103 256 133 168 q 72 456 72 344 q 103 653 72 565 q 190 801 135 740 q 323 895 246 863 q 490 928 400 928 q 577 918 538 928 q 649 892 617 908 q 708 856 682 876 q 753 815 733 836 l 689 740 q 608 801 654 776 q 493 826 563 826 q 368 801 424 826 q 274 727 313 775 q 213 611 235 679 q 192 458 192 543 q 212 303 192 372 q 270 186 232 235 q 365 111 308 138 q 494 85 421 85 q 587 99 543 85 q 658 139 631 114 l 658 376 l 465 376 l 465 472 l 764 472 l 764 89 q 647 13 719 43 q 483 -17 575 -17 m 431 981 l 285 1138 l 335 1174 l 488 1046 l 493 1046 l 646 1174 l 696 1138 l 550 981 l 431 981 z "},"Ḡ":{"ha":857,"x_min":72,"x_max":764,"o":"m 483 -17 q 317 15 393 -17 q 188 108 242 47 q 103 256 133 168 q 72 456 72 344 q 103 653 72 565 q 190 801 135 740 q 323 895 246 863 q 490 928 400 928 q 577 918 538 928 q 649 892 617 908 q 708 856 682 876 q 753 815 733 836 l 689 740 q 608 801 654 776 q 493 826 563 826 q 368 801 424 826 q 274 727 313 775 q 213 611 235 679 q 192 458 192 543 q 212 303 192 372 q 270 186 232 235 q 365 111 308 138 q 494 85 421 85 q 587 99 543 85 q 658 139 631 114 l 658 376 l 465 376 l 465 472 l 764 472 l 764 89 q 647 13 719 43 q 483 -17 575 -17 m 304 1021 l 304 1100 l 676 1100 l 676 1021 l 304 1021 z "},"Ɠ":{"ha":857,"x_min":72,"x_max":851,"o":"m 483 -17 q 317 15 393 -17 q 188 108 242 47 q 103 256 133 168 q 72 456 72 344 q 103 653 72 565 q 190 801 135 740 q 323 895 246 863 q 490 928 400 928 q 558 923 526 928 q 617 910 589 918 q 608 965 608 936 q 651 1074 608 1032 q 765 1117 694 1117 q 814 1111 793 1117 q 851 1099 835 1106 l 829 1011 q 808 1019 818 1015 q 782 1024 797 1024 q 727 1002 746 1024 q 708 949 708 981 q 719 894 708 917 q 753 839 729 871 l 689 763 q 608 808 654 789 q 493 826 563 826 q 368 801 424 826 q 274 727 313 775 q 213 611 235 679 q 192 458 192 543 q 212 303 192 372 q 270 186 232 235 q 365 111 308 138 q 494 85 421 85 q 587 99 543 85 q 658 139 631 114 l 658 376 l 465 376 l 465 472 l 764 472 l 764 89 q 647 13 719 43 q 483 -17 575 -17 z "},"Ĥ":{"ha":906,"x_min":125,"x_max":781,"o":"m 125 0 l 125 911 l 240 911 l 240 529 l 664 529 l 664 911 l 781 911 l 781 0 l 664 0 l 664 429 l 240 429 l 240 0 l 125 0 m 247 1007 l 393 1164 l 513 1164 l 658 1007 l 608 971 l 456 1100 l 450 1100 l 297 971 l 247 1007 z "},"Ḥ":{"ha":906,"x_min":125,"x_max":781,"o":"m 125 0 l 125 911 l 240 911 l 240 529 l 664 529 l 664 911 l 781 911 l 781 0 l 664 0 l 664 429 l 240 429 l 240 0 l 125 0 m 453 -285 q 399 -264 421 -285 q 378 -210 378 -243 q 399 -156 378 -178 q 453 -135 421 -135 q 506 -156 485 -135 q 528 -210 528 -178 q 506 -264 528 -243 q 453 -285 485 -285 z "},"Ḫ":{"ha":906,"x_min":125,"x_max":781,"o":"m 125 0 l 125 911 l 240 911 l 240 529 l 664 529 l 664 911 l 781 911 l 781 0 l 664 0 l 664 429 l 240 429 l 240 0 l 125 0 m 453 -319 q 357 -301 397 -319 q 291 -253 317 -283 q 252 -186 265 -224 q 236 -110 239 -149 l 307 -99 q 322 -151 311 -125 q 350 -197 332 -176 q 394 -231 368 -218 q 453 -243 419 -243 q 512 -231 486 -243 q 556 -197 538 -218 q 584 -151 574 -176 q 599 -99 594 -125 l 669 -110 q 653 -186 667 -149 q 614 -253 640 -224 q 548 -301 588 -283 q 453 -319 508 -319 z "},"Ħ":{"ha":954,"x_min":44,"x_max":908,"o":"m 44 683 l 44 742 l 153 749 l 153 911 l 268 911 l 268 749 l 692 749 l 692 911 l 808 911 l 808 749 l 908 749 l 908 683 l 808 683 l 808 0 l 692 0 l 692 429 l 268 429 l 268 0 l 153 0 l 153 683 l 44 683 m 268 529 l 692 529 l 692 683 l 268 683 l 268 529 z "},"Ì":{"ha":365,"x_min":-6,"x_max":257,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m 206 968 l -6 1128 l 60 1204 l 257 1026 l 206 968 z "},"Í":{"ha":365,"x_min":107,"x_max":369,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m 158 968 l 107 1026 l 304 1204 l 369 1128 l 158 968 z "},"Î":{"ha":365,"x_min":-24,"x_max":388,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m -24 1007 l 122 1164 l 242 1164 l 388 1007 l 338 971 l 185 1100 l 179 1100 l 26 971 l -24 1007 z "},"Ĩ":{"ha":365,"x_min":-64,"x_max":428,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m 286 985 q 219 1000 247 985 q 169 1034 192 1015 q 126 1068 146 1053 q 81 1083 106 1083 q 36 1060 54 1083 q 14 992 18 1036 l -64 997 q -22 1122 -60 1076 q 78 1168 15 1168 q 144 1153 117 1168 q 195 1119 172 1138 q 238 1085 218 1100 q 283 1069 258 1069 q 350 1161 339 1069 l 428 1156 q 386 1030 424 1075 q 286 985 349 985 z "},"Ï":{"ha":365,"x_min":-29,"x_max":393,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m 39 993 q -10 1013 10 993 q -29 1061 -29 1032 q -10 1110 -29 1092 q 39 1129 10 1129 q 88 1110 69 1129 q 107 1061 107 1092 q 88 1013 107 1032 q 39 993 69 993 m 325 993 q 276 1013 294 993 q 257 1061 257 1032 q 276 1110 257 1092 q 325 1129 294 1129 q 374 1110 354 1129 q 393 1061 393 1092 q 374 1013 393 1032 q 325 993 354 993 z "},"Ī":{"ha":365,"x_min":-4,"x_max":368,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m -4 1021 l -4 1100 l 368 1100 l 368 1021 l -4 1021 z "},"İ":{"ha":365,"x_min":103,"x_max":261,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m 182 992 q 126 1013 149 992 q 103 1067 103 1033 q 126 1119 103 1099 q 182 1140 149 1140 q 238 1119 215 1140 q 261 1067 261 1099 q 238 1013 261 1033 q 182 992 215 992 z "},"Ǐ":{"ha":365,"x_min":-24,"x_max":388,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m 122 981 l -24 1138 l 26 1174 l 179 1046 l 185 1046 l 338 1174 l 388 1138 l 242 981 l 122 981 z "},"Ỉ":{"ha":365,"x_min":88,"x_max":292,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m 138 969 l 125 1022 q 181 1046 158 1032 q 203 1086 203 1060 q 88 1144 203 1140 l 100 1211 q 242 1180 192 1208 q 292 1099 292 1151 q 279 1047 292 1068 q 245 1009 267 1025 q 196 984 224 993 q 138 969 168 975 z "},"Ị":{"ha":365,"x_min":108,"x_max":258,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m 183 -285 q 130 -264 151 -285 q 108 -210 108 -243 q 130 -156 108 -178 q 183 -135 151 -135 q 237 -156 215 -135 q 258 -210 258 -178 q 237 -264 258 -243 q 183 -285 215 -285 z "},"Į":{"ha":365,"x_min":60,"x_max":304,"o":"m 193 -294 q 99 -264 138 -294 q 60 -174 60 -233 q 90 -72 60 -114 q 153 0 119 -31 l 125 0 l 125 911 l 240 911 l 240 0 q 174 -69 197 -33 q 150 -149 150 -106 q 171 -197 150 -181 q 215 -212 192 -212 q 272 -193 246 -212 l 304 -256 q 252 -283 283 -271 q 193 -294 221 -294 z "},"Ĭ":{"ha":365,"x_min":-21,"x_max":385,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m 182 979 q 97 994 133 979 q 36 1033 61 1008 q -3 1090 11 1057 q -21 1158 -17 1122 l 49 1169 q 90 1087 57 1121 q 182 1053 122 1053 q 274 1087 242 1053 q 315 1169 307 1121 l 385 1158 q 367 1090 381 1122 q 328 1033 353 1057 q 267 994 303 1008 q 182 979 231 979 z "},"Ĵ":{"ha":667,"x_min":43,"x_max":689,"o":"m 294 -17 q 43 129 124 -17 l 126 188 q 196 109 157 133 q 283 85 235 85 q 393 130 357 85 q 429 279 429 175 l 429 911 l 546 911 l 546 268 q 531 158 546 210 q 487 67 517 106 q 409 6 457 28 q 294 -17 361 -17 m 278 1007 l 424 1164 l 543 1164 l 689 1007 l 639 971 l 486 1100 l 481 1100 l 328 971 l 278 1007 z "},"Ķ":{"ha":804,"x_min":125,"x_max":799,"o":"m 125 0 l 125 911 l 240 911 l 240 454 l 244 454 l 624 911 l 754 911 l 469 564 l 799 0 l 669 0 l 397 474 l 240 289 l 240 0 l 125 0 m 331 -314 l 319 -258 q 439 -235 407 -251 q 471 -192 471 -219 q 446 -151 471 -164 q 372 -133 421 -137 l 397 -81 q 524 -116 488 -92 q 560 -187 560 -140 q 501 -278 560 -249 q 331 -314 442 -308 z "},"Ḳ":{"ha":804,"x_min":125,"x_max":799,"o":"m 125 0 l 125 911 l 240 911 l 240 454 l 244 454 l 624 911 l 754 911 l 469 564 l 799 0 l 669 0 l 397 474 l 240 289 l 240 0 l 125 0 m 454 -285 q 401 -264 422 -285 q 379 -210 379 -243 q 401 -156 379 -178 q 454 -135 422 -135 q 508 -156 486 -135 q 529 -210 529 -178 q 508 -264 529 -243 q 454 -285 486 -285 z "},"Ḵ":{"ha":804,"x_min":125,"x_max":799,"o":"m 125 0 l 125 911 l 240 911 l 240 454 l 244 454 l 624 911 l 754 911 l 469 564 l 799 0 l 669 0 l 397 474 l 240 289 l 240 0 l 125 0 m 267 -235 l 267 -156 l 636 -156 l 636 -235 l 267 -235 z "},"Ĺ":{"ha":675,"x_min":111,"x_max":639,"o":"m 125 0 l 125 911 l 240 911 l 240 99 l 639 99 l 639 0 l 125 0 m 163 968 l 111 1026 l 308 1204 l 374 1128 l 163 968 z "},"Ľ":{"ha":675,"x_min":125,"x_max":639,"o":"m 125 0 l 125 911 l 240 911 l 240 99 l 639 99 l 639 0 l 125 0 m 464 715 l 458 1010 l 540 1010 l 539 931 l 519 715 l 464 715 z "},"Ļ":{"ha":675,"x_min":125,"x_max":639,"o":"m 125 0 l 125 911 l 240 911 l 240 99 l 639 99 l 639 0 l 125 0 m 279 -314 l 268 -258 q 388 -235 356 -251 q 419 -192 419 -219 q 394 -151 419 -164 q 321 -133 369 -137 l 346 -81 q 472 -116 436 -92 q 508 -187 508 -140 q 449 -278 508 -249 q 279 -314 390 -308 z "},"Ŀ":{"ha":675,"x_min":125,"x_max":639,"o":"m 125 0 l 125 911 l 240 911 l 240 99 l 639 99 l 639 0 l 125 0 m 524 365 q 465 390 489 365 q 440 451 440 414 q 465 516 440 492 q 524 540 489 540 q 581 516 557 540 q 606 451 606 492 q 581 390 606 414 q 524 365 557 365 z "},"Ḷ":{"ha":675,"x_min":125,"x_max":639,"o":"m 125 0 l 125 911 l 240 911 l 240 99 l 639 99 l 639 0 l 125 0 m 400 -285 q 347 -264 368 -285 q 325 -210 325 -243 q 347 -156 325 -178 q 400 -135 368 -135 q 453 -156 432 -135 q 475 -210 475 -178 q 453 -264 475 -243 q 400 -285 432 -285 z "},"Ḹ":{"ha":675,"x_min":0,"x_max":639,"o":"m 125 0 l 125 911 l 240 911 l 240 99 l 639 99 l 639 0 l 125 0 m 0 1021 l 0 1100 l 372 1100 l 372 1021 l 0 1021 m 400 -285 q 347 -264 368 -285 q 325 -210 325 -243 q 347 -156 325 -178 q 400 -135 368 -135 q 453 -156 432 -135 q 475 -210 475 -178 q 453 -264 475 -243 q 400 -285 432 -285 z "},"Ḻ":{"ha":675,"x_min":125,"x_max":639,"o":"m 125 0 l 125 911 l 240 911 l 240 99 l 639 99 l 639 0 l 125 0 m 215 -235 l 215 -156 l 585 -156 l 585 -235 l 215 -235 z "},"Ł":{"ha":679,"x_min":-8,"x_max":646,"o":"m 33 278 l -8 351 l 132 428 l 132 911 l 247 911 l 247 479 l 492 611 l 533 538 l 247 385 l 247 99 l 646 99 l 646 0 l 132 0 l 132 333 l 33 278 z "},"Ḿ":{"ha":1010,"x_min":125,"x_max":885,"o":"m 125 0 l 125 911 l 264 911 l 439 425 q 472 330 456 378 q 504 235 488 282 l 510 235 q 541 330 526 282 q 572 425 556 378 l 744 911 l 885 911 l 885 0 l 776 0 l 776 501 q 782 636 776 563 q 792 771 788 710 l 786 771 l 714 564 l 542 92 l 465 92 l 293 564 l 221 771 l 215 771 q 224 636 219 710 q 229 501 229 563 l 229 0 l 125 0 m 479 968 l 428 1026 l 625 1204 l 690 1128 l 479 968 z "},"Ṁ":{"ha":1010,"x_min":125,"x_max":885,"o":"m 125 0 l 125 911 l 264 911 l 439 425 q 472 330 456 378 q 504 235 488 282 l 510 235 q 541 330 526 282 q 572 425 556 378 l 744 911 l 885 911 l 885 0 l 776 0 l 776 501 q 782 636 776 563 q 792 771 788 710 l 786 771 l 714 564 l 542 92 l 465 92 l 293 564 l 221 771 l 215 771 q 224 636 219 710 q 229 501 229 563 l 229 0 l 125 0 m 503 992 q 447 1013 469 992 q 424 1067 424 1033 q 447 1119 424 1099 q 503 1140 469 1140 q 559 1119 536 1140 q 582 1067 582 1099 q 559 1013 582 1033 q 503 992 536 992 z "},"Ṃ":{"ha":1010,"x_min":125,"x_max":885,"o":"m 125 0 l 125 911 l 264 911 l 439 425 q 472 330 456 378 q 504 235 488 282 l 510 235 q 541 330 526 282 q 572 425 556 378 l 744 911 l 885 911 l 885 0 l 776 0 l 776 501 q 782 636 776 563 q 792 771 788 710 l 786 771 l 714 564 l 542 92 l 465 92 l 293 564 l 221 771 l 215 771 q 224 636 219 710 q 229 501 229 563 l 229 0 l 125 0 m 506 -285 q 452 -264 474 -285 q 431 -210 431 -243 q 452 -156 431 -178 q 506 -135 474 -135 q 559 -156 538 -135 q 581 -210 581 -178 q 559 -264 581 -243 q 506 -285 538 -285 z "},"Ń":{"ha":899,"x_min":125,"x_max":774,"o":"m 125 0 l 125 911 l 244 911 l 574 339 l 672 150 l 678 150 q 669 294 674 219 q 664 440 664 368 l 664 911 l 774 911 l 774 0 l 654 0 l 324 574 l 225 761 l 219 761 q 230 620 225 692 q 235 476 235 549 l 235 0 l 125 0 m 431 968 l 379 1026 l 576 1204 l 642 1128 l 431 968 z "},"Ǹ":{"ha":899,"x_min":125,"x_max":774,"o":"m 125 0 l 125 911 l 244 911 l 574 339 l 672 150 l 678 150 q 669 294 674 219 q 664 440 664 368 l 664 911 l 774 911 l 774 0 l 654 0 l 324 574 l 225 761 l 219 761 q 230 620 225 692 q 235 476 235 549 l 235 0 l 125 0 m 478 968 l 267 1128 l 332 1204 l 529 1026 l 478 968 z "},"Ň":{"ha":899,"x_min":125,"x_max":774,"o":"m 125 0 l 125 911 l 244 911 l 574 339 l 672 150 l 678 150 q 669 294 674 219 q 664 440 664 368 l 664 911 l 774 911 l 774 0 l 654 0 l 324 574 l 225 761 l 219 761 q 230 620 225 692 q 235 476 235 549 l 235 0 l 125 0 m 393 981 l 247 1138 l 297 1174 l 450 1046 l 456 1046 l 608 1174 l 658 1138 l 513 981 l 393 981 z "},"Ñ":{"ha":899,"x_min":125,"x_max":774,"o":"m 125 0 l 125 911 l 244 911 l 574 339 l 672 150 l 678 150 q 669 294 674 219 q 664 440 664 368 l 664 911 l 774 911 l 774 0 l 654 0 l 324 574 l 225 761 l 219 761 q 230 620 225 692 q 235 476 235 549 l 235 0 l 125 0 m 557 985 q 490 1000 518 985 q 440 1034 463 1015 q 397 1068 417 1053 q 351 1083 376 1083 q 307 1060 325 1083 q 285 992 289 1036 l 207 997 q 249 1122 211 1076 q 349 1168 286 1168 q 415 1153 388 1168 q 466 1119 443 1138 q 509 1085 489 1100 q 554 1069 529 1069 q 621 1161 610 1069 l 699 1156 q 657 1030 694 1075 q 557 985 619 985 z "},"Ņ":{"ha":899,"x_min":125,"x_max":774,"o":"m 125 0 l 125 911 l 244 911 l 574 339 l 672 150 l 678 150 q 669 294 674 219 q 664 440 664 368 l 664 911 l 774 911 l 774 0 l 654 0 l 324 574 l 225 761 l 219 761 q 230 620 225 692 q 235 476 235 549 l 235 0 l 125 0 m 335 -314 l 324 -258 q 443 -235 411 -251 q 475 -192 475 -219 q 450 -151 475 -164 q 376 -133 425 -137 l 401 -81 q 528 -116 492 -92 q 564 -187 564 -140 q 505 -278 564 -249 q 335 -314 446 -308 z "},"Ṅ":{"ha":899,"x_min":125,"x_max":774,"o":"m 125 0 l 125 911 l 244 911 l 574 339 l 672 150 l 678 150 q 669 294 674 219 q 664 440 664 368 l 664 911 l 774 911 l 774 0 l 654 0 l 324 574 l 225 761 l 219 761 q 230 620 225 692 q 235 476 235 549 l 235 0 l 125 0 m 453 992 q 397 1013 419 992 q 374 1067 374 1033 q 397 1119 374 1099 q 453 1140 419 1140 q 509 1119 486 1140 q 532 1067 532 1099 q 509 1013 532 1033 q 453 992 486 992 z "},"Ṇ":{"ha":899,"x_min":125,"x_max":774,"o":"m 125 0 l 125 911 l 244 911 l 574 339 l 672 150 l 678 150 q 669 294 674 219 q 664 440 664 368 l 664 911 l 774 911 l 774 0 l 654 0 l 324 574 l 225 761 l 219 761 q 230 620 225 692 q 235 476 235 549 l 235 0 l 125 0 m 456 -285 q 402 -264 424 -285 q 381 -210 381 -243 q 402 -156 381 -178 q 456 -135 424 -135 q 509 -156 488 -135 q 531 -210 531 -178 q 509 -264 531 -243 q 456 -285 488 -285 z "},"Ṉ":{"ha":899,"x_min":125,"x_max":774,"o":"m 125 0 l 125 911 l 244 911 l 574 339 l 672 150 l 678 150 q 669 294 674 219 q 664 440 664 368 l 664 911 l 774 911 l 774 0 l 654 0 l 324 574 l 225 761 l 219 761 q 230 620 225 692 q 235 476 235 549 l 235 0 l 125 0 m 271 -235 l 271 -156 l 640 -156 l 640 -235 l 271 -235 z "},"Ò":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 485 968 l 274 1128 l 339 1204 l 536 1026 l 485 968 z "},"Ó":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 438 968 l 386 1026 l 583 1204 l 649 1128 l 438 968 z "},"Ô":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 256 1007 l 401 1164 l 521 1164 l 667 1007 l 617 971 l 464 1100 l 458 1100 l 306 971 l 256 1007 z "},"Õ":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 565 985 q 499 1000 526 985 q 448 1034 471 1015 q 405 1068 425 1053 q 360 1083 385 1083 q 315 1060 333 1083 q 293 992 297 1036 l 215 997 q 257 1122 219 1076 q 357 1168 294 1168 q 424 1153 396 1168 q 474 1119 451 1138 q 517 1085 497 1100 q 563 1069 538 1069 q 629 1161 618 1069 l 707 1156 q 665 1030 703 1075 q 565 985 628 985 z "},"Ö":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 318 993 q 269 1013 289 993 q 250 1061 250 1032 q 269 1110 250 1092 q 318 1129 289 1129 q 367 1110 349 1129 q 386 1061 386 1092 q 367 1013 386 1032 q 318 993 349 993 m 604 993 q 555 1013 574 993 q 536 1061 536 1032 q 555 1110 536 1092 q 604 1129 574 1129 q 653 1110 633 1129 q 672 1061 672 1092 q 653 1013 672 1032 q 604 993 633 993 z "},"Ō":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 275 1021 l 275 1100 l 647 1100 l 647 1021 l 275 1021 z "},"Ő":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 319 1006 l 447 1217 l 525 1172 l 379 976 l 319 1006 m 542 1006 l 669 1217 l 747 1172 l 601 976 l 542 1006 z "},"Ǒ":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 401 981 l 256 1138 l 306 1174 l 458 1046 l 464 1046 l 617 1174 l 667 1138 l 521 981 l 401 981 z "},"Ọ":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 461 -285 q 408 -264 429 -285 q 386 -210 386 -243 q 408 -156 386 -178 q 461 -135 429 -135 q 515 -156 493 -135 q 536 -210 536 -178 q 515 -264 536 -243 q 461 -285 493 -285 z "},"Ỏ":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 417 969 l 404 1022 q 460 1046 438 1032 q 482 1086 482 1060 q 367 1144 482 1140 l 379 1211 q 521 1180 471 1208 q 571 1099 571 1151 q 558 1047 571 1068 q 524 1009 546 1025 q 475 984 503 993 q 417 969 447 975 z "},"Ố":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 329 971 l 282 1007 l 411 1132 l 511 1132 l 640 1007 l 593 971 l 464 1067 l 458 1067 l 329 971 m 629 1060 l 588 1104 l 722 1233 l 771 1179 l 629 1060 z "},"Ồ":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 329 971 l 282 1007 l 411 1132 l 511 1132 l 640 1007 l 593 971 l 464 1067 l 458 1067 l 329 971 m 335 1101 l 293 1060 l 168 1182 l 217 1233 l 335 1101 z "},"Ổ":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 329 971 l 282 1007 l 411 1132 l 511 1132 l 640 1007 l 593 971 l 464 1067 l 458 1067 l 329 971 m 621 1047 l 606 1096 q 650 1113 632 1103 q 668 1146 668 1124 q 645 1185 668 1174 q 569 1200 622 1197 l 582 1258 q 706 1231 664 1256 q 749 1157 749 1206 q 710 1080 749 1104 q 621 1047 671 1056 z "},"Ỗ":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 329 971 l 282 1007 l 411 1128 l 511 1128 l 640 1007 l 593 971 l 464 1063 l 458 1063 l 329 971 m 260 1178 q 288 1267 263 1231 q 369 1304 313 1304 q 426 1294 403 1304 q 470 1270 450 1283 q 508 1247 490 1257 q 547 1236 526 1236 q 584 1253 572 1236 q 600 1300 596 1269 l 663 1293 q 635 1202 660 1239 q 553 1165 610 1165 q 496 1176 519 1165 q 452 1200 472 1188 q 414 1224 432 1213 q 375 1235 396 1235 q 338 1218 350 1235 q 322 1171 326 1201 l 260 1178 z "},"Ộ":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 256 1007 l 401 1164 l 521 1164 l 667 1007 l 617 971 l 464 1100 l 458 1100 l 306 971 l 256 1007 m 461 -285 q 408 -264 429 -285 q 386 -210 386 -243 q 408 -156 386 -178 q 461 -135 429 -135 q 515 -156 493 -135 q 536 -210 536 -178 q 515 -264 536 -243 q 461 -285 493 -285 z "},"Ŏ":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 461 979 q 376 994 413 979 q 315 1033 340 1008 q 276 1090 290 1057 q 258 1158 263 1122 l 328 1169 q 369 1087 336 1121 q 461 1053 401 1053 q 553 1087 521 1053 q 594 1169 586 1121 l 664 1158 q 646 1090 660 1122 q 607 1033 632 1057 q 546 994 582 1008 q 461 979 510 979 z "},"Ṓ":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 436 1149 l 393 1201 l 561 1344 l 615 1278 l 436 1149 m 275 1021 l 275 1100 l 647 1100 l 647 1021 l 275 1021 z "},"Ø":{"ha":922,"x_min":69,"x_max":860,"o":"m 465 -17 q 222 74 321 -17 l 133 -42 l 69 8 l 167 135 q 100 278 124 197 q 76 460 76 360 q 105 656 76 569 q 185 803 133 743 q 308 896 236 864 q 465 928 379 928 q 710 840 610 928 l 796 953 l 860 904 l 764 781 q 832 640 808 719 q 856 460 856 560 q 827 262 856 350 q 747 112 799 174 q 623 17 694 50 q 465 -17 551 -17 m 196 460 q 208 335 196 393 q 242 233 219 278 l 642 751 q 465 826 571 826 q 355 801 404 826 q 270 728 306 775 q 215 613 235 681 q 196 460 196 544 m 465 85 q 576 111 526 85 q 660 187 625 138 q 715 305 696 236 q 735 460 735 374 q 723 582 735 526 q 689 682 711 638 l 290 163 q 465 85 360 85 z "},"Œ":{"ha":1176,"x_min":72,"x_max":1108,"o":"m 513 0 q 327 31 408 0 q 189 122 246 63 q 102 266 132 181 q 72 460 72 351 q 189 794 72 678 q 518 911 306 911 l 1094 911 l 1094 814 l 708 814 l 708 528 l 1031 528 l 1031 429 l 708 429 l 708 99 l 1108 99 l 1108 0 l 513 0 m 526 94 l 593 94 l 593 817 l 526 817 q 276 725 361 817 q 192 460 192 633 q 276 190 192 285 q 526 94 361 94 z "},"Ơ":{"ha":922,"x_min":76,"x_max":861,"o":"m 465 -17 q 308 17 379 -17 q 185 112 236 50 q 105 262 133 174 q 76 460 76 350 q 105 656 76 569 q 185 803 133 743 q 308 896 236 864 q 465 928 379 928 q 646 885 564 928 q 731 923 704 896 q 758 999 758 950 q 753 1041 758 1019 q 739 1079 747 1063 l 829 1118 q 852 1067 843 1094 q 861 1007 861 1039 q 822 896 861 936 q 713 838 782 856 q 817 681 779 776 q 856 460 856 586 q 827 262 856 350 q 747 112 799 174 q 623 17 694 50 q 465 -17 551 -17 m 465 85 q 576 111 526 85 q 660 187 625 138 q 715 305 696 236 q 735 460 735 374 q 715 613 735 544 q 660 728 696 681 q 576 801 625 775 q 465 826 526 826 q 355 801 404 826 q 270 728 306 775 q 215 613 235 681 q 196 460 196 544 q 215 305 196 374 q 270 187 235 236 q 355 111 306 138 q 465 85 404 85 z "},"Ớ":{"ha":922,"x_min":76,"x_max":861,"o":"m 465 -17 q 308 17 379 -17 q 185 112 236 50 q 105 262 133 174 q 76 460 76 350 q 105 656 76 569 q 185 803 133 743 q 308 896 236 864 q 465 928 379 928 q 646 885 564 928 q 731 923 704 896 q 758 999 758 950 q 753 1041 758 1019 q 739 1079 747 1063 l 829 1118 q 852 1067 843 1094 q 861 1007 861 1039 q 822 896 861 936 q 713 838 782 856 q 817 681 779 776 q 856 460 856 586 q 827 262 856 350 q 747 112 799 174 q 623 17 694 50 q 465 -17 551 -17 m 465 85 q 576 111 526 85 q 660 187 625 138 q 715 305 696 236 q 735 460 735 374 q 715 613 735 544 q 660 728 696 681 q 576 801 625 775 q 465 826 526 826 q 355 801 404 826 q 270 728 306 775 q 215 613 235 681 q 196 460 196 544 q 215 305 196 374 q 270 187 235 236 q 355 111 306 138 q 465 85 404 85 m 438 968 l 386 1026 l 583 1204 l 649 1128 l 438 968 z "},"Ờ":{"ha":922,"x_min":76,"x_max":861,"o":"m 465 -17 q 308 17 379 -17 q 185 112 236 50 q 105 262 133 174 q 76 460 76 350 q 105 656 76 569 q 185 803 133 743 q 308 896 236 864 q 465 928 379 928 q 646 885 564 928 q 731 923 704 896 q 758 999 758 950 q 753 1041 758 1019 q 739 1079 747 1063 l 829 1118 q 852 1067 843 1094 q 861 1007 861 1039 q 822 896 861 936 q 713 838 782 856 q 817 681 779 776 q 856 460 856 586 q 827 262 856 350 q 747 112 799 174 q 623 17 694 50 q 465 -17 551 -17 m 465 85 q 576 111 526 85 q 660 187 625 138 q 715 305 696 236 q 735 460 735 374 q 715 613 735 544 q 660 728 696 681 q 576 801 625 775 q 465 826 526 826 q 355 801 404 826 q 270 728 306 775 q 215 613 235 681 q 196 460 196 544 q 215 305 196 374 q 270 187 235 236 q 355 111 306 138 q 465 85 404 85 m 485 968 l 274 1128 l 339 1204 l 536 1026 l 485 968 z "},"Ở":{"ha":922,"x_min":76,"x_max":861,"o":"m 465 -17 q 308 17 379 -17 q 185 112 236 50 q 105 262 133 174 q 76 460 76 350 q 105 656 76 569 q 185 803 133 743 q 308 896 236 864 q 465 928 379 928 q 646 885 564 928 q 731 923 704 896 q 758 999 758 950 q 753 1041 758 1019 q 739 1079 747 1063 l 829 1118 q 852 1067 843 1094 q 861 1007 861 1039 q 822 896 861 936 q 713 838 782 856 q 817 681 779 776 q 856 460 856 586 q 827 262 856 350 q 747 112 799 174 q 623 17 694 50 q 465 -17 551 -17 m 465 85 q 576 111 526 85 q 660 187 625 138 q 715 305 696 236 q 735 460 735 374 q 715 613 735 544 q 660 728 696 681 q 576 801 625 775 q 465 826 526 826 q 355 801 404 826 q 270 728 306 775 q 215 613 235 681 q 196 460 196 544 q 215 305 196 374 q 270 187 235 236 q 355 111 306 138 q 465 85 404 85 m 417 969 l 404 1022 q 460 1046 438 1032 q 482 1086 482 1060 q 367 1144 482 1140 l 379 1211 q 521 1180 471 1208 q 571 1099 571 1151 q 558 1047 571 1068 q 524 1009 546 1025 q 475 984 503 993 q 417 969 447 975 z "},"Ỡ":{"ha":922,"x_min":76,"x_max":861,"o":"m 465 -17 q 308 17 379 -17 q 185 112 236 50 q 105 262 133 174 q 76 460 76 350 q 105 656 76 569 q 185 803 133 743 q 308 896 236 864 q 465 928 379 928 q 646 885 564 928 q 731 923 704 896 q 758 999 758 950 q 753 1041 758 1019 q 739 1079 747 1063 l 829 1118 q 852 1067 843 1094 q 861 1007 861 1039 q 822 896 861 936 q 713 838 782 856 q 817 681 779 776 q 856 460 856 586 q 827 262 856 350 q 747 112 799 174 q 623 17 694 50 q 465 -17 551 -17 m 465 85 q 576 111 526 85 q 660 187 625 138 q 715 305 696 236 q 735 460 735 374 q 715 613 735 544 q 660 728 696 681 q 576 801 625 775 q 465 826 526 826 q 355 801 404 826 q 270 728 306 775 q 215 613 235 681 q 196 460 196 544 q 215 305 196 374 q 270 187 235 236 q 355 111 306 138 q 465 85 404 85 m 556 985 q 489 1000 517 985 q 438 1034 461 1015 q 395 1068 415 1053 q 350 1083 375 1083 q 306 1060 324 1083 q 283 992 288 1036 l 206 997 q 247 1122 210 1076 q 347 1168 285 1168 q 414 1153 386 1168 q 465 1119 442 1138 q 508 1085 488 1100 q 553 1069 528 1069 q 619 1161 608 1069 l 697 1156 q 656 1030 693 1075 q 556 985 618 985 z "},"Ợ":{"ha":922,"x_min":76,"x_max":861,"o":"m 465 -17 q 308 17 379 -17 q 185 112 236 50 q 105 262 133 174 q 76 460 76 350 q 105 656 76 569 q 185 803 133 743 q 308 896 236 864 q 465 928 379 928 q 646 885 564 928 q 731 923 704 896 q 758 999 758 950 q 753 1041 758 1019 q 739 1079 747 1063 l 829 1118 q 852 1067 843 1094 q 861 1007 861 1039 q 822 896 861 936 q 713 838 782 856 q 817 681 779 776 q 856 460 856 586 q 827 262 856 350 q 747 112 799 174 q 623 17 694 50 q 465 -17 551 -17 m 465 85 q 576 111 526 85 q 660 187 625 138 q 715 305 696 236 q 735 460 735 374 q 715 613 735 544 q 660 728 696 681 q 576 801 625 775 q 465 826 526 826 q 355 801 404 826 q 270 728 306 775 q 215 613 235 681 q 196 460 196 544 q 215 305 196 374 q 270 187 235 236 q 355 111 306 138 q 465 85 404 85 m 461 -285 q 408 -264 429 -285 q 386 -210 386 -243 q 408 -156 386 -178 q 461 -135 429 -135 q 515 -156 493 -135 q 536 -210 536 -178 q 515 -264 536 -243 q 461 -285 493 -285 z "},"Ǫ":{"ha":922,"x_min":72,"x_max":851,"o":"m 501 -294 q 408 -264 446 -294 q 369 -174 369 -233 q 394 -87 369 -128 q 454 -15 418 -46 q 296 21 367 -14 q 175 117 225 56 q 99 266 125 179 q 72 460 72 353 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 833 293 851 367 q 777 163 814 219 q 688 63 740 106 q 567 -10 635 21 q 484 -74 510 -35 q 458 -149 458 -112 q 479 -197 458 -181 q 525 -212 500 -212 q 555 -208 542 -212 q 581 -193 568 -203 l 613 -256 q 561 -283 593 -271 q 501 -294 529 -294 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 z "},"Ŕ":{"ha":790,"x_min":125,"x_max":756,"o":"m 125 0 l 125 911 l 410 911 q 538 898 479 911 q 640 854 597 885 q 706 775 682 824 q 729 656 729 726 q 674 485 729 549 q 524 397 618 421 l 756 0 l 625 0 l 406 385 l 240 385 l 240 0 l 125 0 m 240 479 l 393 479 q 557 523 500 479 q 614 656 614 567 q 557 782 614 746 q 393 818 500 818 l 240 818 l 240 479 m 376 968 l 325 1026 l 522 1204 l 588 1128 l 376 968 z "},"Ř":{"ha":790,"x_min":125,"x_max":756,"o":"m 125 0 l 125 911 l 410 911 q 538 898 479 911 q 640 854 597 885 q 706 775 682 824 q 729 656 729 726 q 674 485 729 549 q 524 397 618 421 l 756 0 l 625 0 l 406 385 l 240 385 l 240 0 l 125 0 m 240 479 l 393 479 q 557 523 500 479 q 614 656 614 567 q 557 782 614 746 q 393 818 500 818 l 240 818 l 240 479 m 340 981 l 194 1138 l 244 1174 l 397 1046 l 403 1046 l 556 1174 l 606 1138 l 460 981 l 340 981 z "},"Ṙ":{"ha":790,"x_min":125,"x_max":756,"o":"m 125 0 l 125 911 l 410 911 q 538 898 479 911 q 640 854 597 885 q 706 775 682 824 q 729 656 729 726 q 674 485 729 549 q 524 397 618 421 l 756 0 l 625 0 l 406 385 l 240 385 l 240 0 l 125 0 m 240 479 l 393 479 q 557 523 500 479 q 614 656 614 567 q 557 782 614 746 q 393 818 500 818 l 240 818 l 240 479 m 400 992 q 344 1013 367 992 q 321 1067 321 1033 q 344 1119 321 1099 q 400 1140 367 1140 q 456 1119 433 1140 q 479 1067 479 1099 q 456 1013 479 1033 q 400 992 433 992 z "},"Ŗ":{"ha":790,"x_min":125,"x_max":756,"o":"m 125 0 l 125 911 l 410 911 q 538 898 479 911 q 640 854 597 885 q 706 775 682 824 q 729 656 729 726 q 674 485 729 549 q 524 397 618 421 l 756 0 l 625 0 l 406 385 l 240 385 l 240 0 l 125 0 m 240 479 l 393 479 q 557 523 500 479 q 614 656 614 567 q 557 782 614 746 q 393 818 500 818 l 240 818 l 240 479 m 300 -314 l 289 -258 q 408 -235 376 -251 q 440 -192 440 -219 q 415 -151 440 -164 q 342 -133 390 -137 l 367 -81 q 493 -116 457 -92 q 529 -187 529 -140 q 470 -278 529 -249 q 300 -314 411 -308 z "},"Ṛ":{"ha":790,"x_min":125,"x_max":756,"o":"m 125 0 l 125 911 l 410 911 q 538 898 479 911 q 640 854 597 885 q 706 775 682 824 q 729 656 729 726 q 674 485 729 549 q 524 397 618 421 l 756 0 l 625 0 l 406 385 l 240 385 l 240 0 l 125 0 m 240 479 l 393 479 q 557 523 500 479 q 614 656 614 567 q 557 782 614 746 q 393 818 500 818 l 240 818 l 240 479 m 421 -285 q 367 -264 389 -285 q 346 -210 346 -243 q 367 -156 346 -178 q 421 -135 389 -135 q 474 -156 453 -135 q 496 -210 496 -178 q 474 -264 496 -243 q 421 -285 453 -285 z "},"Ṝ":{"ha":790,"x_min":125,"x_max":756,"o":"m 125 0 l 125 911 l 410 911 q 538 898 479 911 q 640 854 597 885 q 706 775 682 824 q 729 656 729 726 q 674 485 729 549 q 524 397 618 421 l 756 0 l 625 0 l 406 385 l 240 385 l 240 0 l 125 0 m 240 479 l 393 479 q 557 523 500 479 q 614 656 614 567 q 557 782 614 746 q 393 818 500 818 l 240 818 l 240 479 m 214 1021 l 214 1100 l 586 1100 l 586 1021 l 214 1021 m 421 -285 q 367 -264 389 -285 q 346 -210 346 -243 q 367 -156 346 -178 q 421 -135 389 -135 q 474 -156 453 -135 q 496 -210 496 -178 q 474 -264 496 -243 q 421 -285 453 -285 z "},"Ṟ":{"ha":790,"x_min":125,"x_max":756,"o":"m 125 0 l 125 911 l 410 911 q 538 898 479 911 q 640 854 597 885 q 706 775 682 824 q 729 656 729 726 q 674 485 729 549 q 524 397 618 421 l 756 0 l 625 0 l 406 385 l 240 385 l 240 0 l 125 0 m 240 479 l 393 479 q 557 523 500 479 q 614 656 614 567 q 557 782 614 746 q 393 818 500 818 l 240 818 l 240 479 m 236 -235 l 236 -156 l 606 -156 l 606 -235 l 236 -235 z "},"Ś":{"ha":742,"x_min":58,"x_max":688,"o":"m 378 -17 q 200 19 282 -17 q 58 118 118 56 l 128 199 q 242 116 176 147 q 379 85 308 85 q 519 126 469 85 q 569 233 569 167 q 558 292 569 268 q 526 334 546 317 q 478 365 506 351 q 418 394 450 379 l 288 451 q 222 485 256 465 q 163 532 189 504 q 119 598 136 560 q 103 686 103 636 q 124 782 103 738 q 184 859 146 826 q 274 910 222 892 q 389 928 326 928 q 540 897 471 928 q 658 815 610 865 l 596 740 q 503 803 554 781 q 389 826 453 826 q 266 791 313 826 q 219 693 219 756 q 233 637 219 660 q 268 597 246 614 q 317 566 290 579 q 371 542 343 553 l 500 486 q 574 448 539 469 q 633 398 608 426 q 673 331 658 369 q 688 243 688 293 q 666 142 688 189 q 604 59 644 94 q 507 3 564 24 q 378 -17 450 -17 m 364 968 l 313 1026 l 510 1204 l 575 1128 l 364 968 z "},"Ŝ":{"ha":742,"x_min":58,"x_max":688,"o":"m 378 -17 q 200 19 282 -17 q 58 118 118 56 l 128 199 q 242 116 176 147 q 379 85 308 85 q 519 126 469 85 q 569 233 569 167 q 558 292 569 268 q 526 334 546 317 q 478 365 506 351 q 418 394 450 379 l 288 451 q 222 485 256 465 q 163 532 189 504 q 119 598 136 560 q 103 686 103 636 q 124 782 103 738 q 184 859 146 826 q 274 910 222 892 q 389 928 326 928 q 540 897 471 928 q 658 815 610 865 l 596 740 q 503 803 554 781 q 389 826 453 826 q 266 791 313 826 q 219 693 219 756 q 233 637 219 660 q 268 597 246 614 q 317 566 290 579 q 371 542 343 553 l 500 486 q 574 448 539 469 q 633 398 608 426 q 673 331 658 369 q 688 243 688 293 q 666 142 688 189 q 604 59 644 94 q 507 3 564 24 q 378 -17 450 -17 m 182 1007 l 328 1164 l 447 1164 l 593 1007 l 543 971 l 390 1100 l 385 1100 l 232 971 l 182 1007 z "},"Š":{"ha":742,"x_min":58,"x_max":688,"o":"m 378 -17 q 200 19 282 -17 q 58 118 118 56 l 128 199 q 242 116 176 147 q 379 85 308 85 q 519 126 469 85 q 569 233 569 167 q 558 292 569 268 q 526 334 546 317 q 478 365 506 351 q 418 394 450 379 l 288 451 q 222 485 256 465 q 163 532 189 504 q 119 598 136 560 q 103 686 103 636 q 124 782 103 738 q 184 859 146 826 q 274 910 222 892 q 389 928 326 928 q 540 897 471 928 q 658 815 610 865 l 596 740 q 503 803 554 781 q 389 826 453 826 q 266 791 313 826 q 219 693 219 756 q 233 637 219 660 q 268 597 246 614 q 317 566 290 579 q 371 542 343 553 l 500 486 q 574 448 539 469 q 633 398 608 426 q 673 331 658 369 q 688 243 688 293 q 666 142 688 189 q 604 59 644 94 q 507 3 564 24 q 378 -17 450 -17 m 328 981 l 182 1138 l 232 1174 l 385 1046 l 390 1046 l 543 1174 l 593 1138 l 447 981 l 328 981 z "},"Ş":{"ha":742,"x_min":58,"x_max":688,"o":"m 378 -17 q 200 19 282 -17 q 58 118 118 56 l 128 199 q 242 116 176 147 q 379 85 308 85 q 519 126 469 85 q 569 233 569 167 q 558 292 569 268 q 526 334 546 317 q 478 365 506 351 q 418 394 450 379 l 288 451 q 222 485 256 465 q 163 532 189 504 q 119 598 136 560 q 103 686 103 636 q 124 782 103 738 q 184 859 146 826 q 274 910 222 892 q 389 928 326 928 q 540 897 471 928 q 658 815 610 865 l 596 740 q 503 803 554 781 q 389 826 453 826 q 266 791 313 826 q 219 693 219 756 q 233 637 219 660 q 268 597 246 614 q 317 566 290 579 q 371 542 343 553 l 500 486 q 574 448 539 469 q 633 398 608 426 q 673 331 658 369 q 688 243 688 293 q 666 142 688 189 q 604 59 644 94 q 507 3 564 24 q 378 -17 450 -17 m 258 -314 l 247 -258 q 367 -235 335 -251 q 399 -189 399 -219 q 375 -146 399 -161 q 292 -122 351 -131 l 353 4 l 426 4 l 386 -89 q 461 -122 435 -100 q 488 -187 488 -144 q 428 -278 488 -249 q 258 -314 369 -308 z "},"Ș":{"ha":742,"x_min":58,"x_max":688,"o":"m 378 -17 q 200 19 282 -17 q 58 118 118 56 l 128 199 q 242 116 176 147 q 379 85 308 85 q 519 126 469 85 q 569 233 569 167 q 558 292 569 268 q 526 334 546 317 q 478 365 506 351 q 418 394 450 379 l 288 451 q 222 485 256 465 q 163 532 189 504 q 119 598 136 560 q 103 686 103 636 q 124 782 103 738 q 184 859 146 826 q 274 910 222 892 q 389 928 326 928 q 540 897 471 928 q 658 815 610 865 l 596 740 q 503 803 554 781 q 389 826 453 826 q 266 791 313 826 q 219 693 219 756 q 233 637 219 660 q 268 597 246 614 q 317 566 290 579 q 371 542 343 553 l 500 486 q 574 448 539 469 q 633 398 608 426 q 673 331 658 369 q 688 243 688 293 q 666 142 688 189 q 604 59 644 94 q 507 3 564 24 q 378 -17 450 -17 m 258 -314 l 247 -258 q 367 -235 335 -251 q 399 -192 399 -219 q 374 -151 399 -164 q 300 -133 349 -137 l 325 -81 q 451 -116 415 -92 q 488 -187 488 -140 q 428 -278 488 -249 q 258 -314 369 -308 z "},"Ṡ":{"ha":742,"x_min":58,"x_max":688,"o":"m 378 -17 q 200 19 282 -17 q 58 118 118 56 l 128 199 q 242 116 176 147 q 379 85 308 85 q 519 126 469 85 q 569 233 569 167 q 558 292 569 268 q 526 334 546 317 q 478 365 506 351 q 418 394 450 379 l 288 451 q 222 485 256 465 q 163 532 189 504 q 119 598 136 560 q 103 686 103 636 q 124 782 103 738 q 184 859 146 826 q 274 910 222 892 q 389 928 326 928 q 540 897 471 928 q 658 815 610 865 l 596 740 q 503 803 554 781 q 389 826 453 826 q 266 791 313 826 q 219 693 219 756 q 233 637 219 660 q 268 597 246 614 q 317 566 290 579 q 371 542 343 553 l 500 486 q 574 448 539 469 q 633 398 608 426 q 673 331 658 369 q 688 243 688 293 q 666 142 688 189 q 604 59 644 94 q 507 3 564 24 q 378 -17 450 -17 m 388 992 q 331 1013 354 992 q 308 1067 308 1033 q 331 1119 308 1099 q 388 1140 354 1140 q 444 1119 421 1140 q 467 1067 467 1099 q 444 1013 467 1033 q 388 992 421 992 z "},"Ṣ":{"ha":742,"x_min":58,"x_max":688,"o":"m 378 -17 q 200 19 282 -17 q 58 118 118 56 l 128 199 q 242 116 176 147 q 379 85 308 85 q 519 126 469 85 q 569 233 569 167 q 558 292 569 268 q 526 334 546 317 q 478 365 506 351 q 418 394 450 379 l 288 451 q 222 485 256 465 q 163 532 189 504 q 119 598 136 560 q 103 686 103 636 q 124 782 103 738 q 184 859 146 826 q 274 910 222 892 q 389 928 326 928 q 540 897 471 928 q 658 815 610 865 l 596 740 q 503 803 554 781 q 389 826 453 826 q 266 791 313 826 q 219 693 219 756 q 233 637 219 660 q 268 597 246 614 q 317 566 290 579 q 371 542 343 553 l 500 486 q 574 448 539 469 q 633 398 608 426 q 673 331 658 369 q 688 243 688 293 q 666 142 688 189 q 604 59 644 94 q 507 3 564 24 q 378 -17 450 -17 m 379 -285 q 326 -264 347 -285 q 304 -210 304 -243 q 326 -156 304 -178 q 379 -135 347 -135 q 433 -156 411 -135 q 454 -210 454 -178 q 433 -264 454 -243 q 379 -285 411 -285 z "},"ẞ":{"ha":926,"x_min":126,"x_max":867,"o":"m 603 -17 q 458 13 522 -17 q 351 89 394 42 l 418 164 q 500 100 458 119 q 593 81 542 81 q 707 124 667 81 q 747 238 747 168 q 735 299 747 269 q 693 353 724 328 q 610 397 663 378 q 479 431 558 417 l 472 506 l 663 718 q 594 799 639 765 q 478 832 549 832 q 305 766 367 832 q 243 558 243 700 l 243 0 l 126 0 l 126 579 q 219 835 126 743 q 482 928 313 928 q 672 869 599 928 q 783 714 746 811 l 592 503 q 802 406 738 474 q 867 238 867 338 q 848 137 867 183 q 794 56 829 90 q 711 3 760 22 q 603 -17 663 -17 z "},"Ť":{"ha":744,"x_min":39,"x_max":706,"o":"m 314 0 l 314 814 l 39 814 l 39 911 l 706 911 l 706 814 l 431 814 l 431 0 l 314 0 m 311 981 l 165 1138 l 215 1174 l 368 1046 l 374 1046 l 526 1174 l 576 1138 l 431 981 l 311 981 z "},"Ţ":{"ha":744,"x_min":39,"x_max":706,"o":"m 314 0 l 314 814 l 39 814 l 39 911 l 706 911 l 706 814 l 431 814 l 431 0 l 314 0 m 246 -314 l 235 -258 q 354 -235 322 -251 q 386 -189 386 -219 q 363 -146 386 -161 q 279 -122 339 -131 l 340 4 l 414 4 l 374 -89 q 449 -122 422 -100 q 475 -187 475 -144 q 416 -278 475 -249 q 246 -314 357 -308 z "},"Ț":{"ha":744,"x_min":39,"x_max":706,"o":"m 314 0 l 314 814 l 39 814 l 39 911 l 706 911 l 706 814 l 431 814 l 431 0 l 314 0 m 253 -314 l 242 -258 q 361 -235 329 -251 q 393 -192 393 -219 q 368 -151 393 -164 q 294 -133 343 -137 l 319 -81 q 446 -116 410 -92 q 482 -187 482 -140 q 423 -278 482 -249 q 253 -314 364 -308 z "},"Ṭ":{"ha":744,"x_min":39,"x_max":706,"o":"m 314 0 l 314 814 l 39 814 l 39 911 l 706 911 l 706 814 l 431 814 l 431 0 l 314 0 m 374 -285 q 320 -264 342 -285 q 299 -210 299 -243 q 320 -156 299 -178 q 374 -135 342 -135 q 427 -156 406 -135 q 449 -210 449 -178 q 427 -264 449 -243 q 374 -285 406 -285 z "},"Ṯ":{"ha":744,"x_min":39,"x_max":706,"o":"m 314 0 l 314 814 l 39 814 l 39 911 l 706 911 l 706 814 l 431 814 l 431 0 l 314 0 m 189 -235 l 189 -156 l 558 -156 l 558 -235 l 189 -235 z "},"Ŧ":{"ha":744,"x_min":39,"x_max":706,"o":"m 314 0 l 314 435 l 143 435 l 143 496 l 265 500 l 314 500 l 314 814 l 39 814 l 39 911 l 706 911 l 706 814 l 431 814 l 431 500 l 601 500 l 601 435 l 431 435 l 431 0 l 314 0 z "},"Ù":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 471 968 l 260 1128 l 325 1204 l 522 1026 l 471 968 z "},"Ú":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 424 968 l 372 1026 l 569 1204 l 635 1128 l 424 968 z "},"Û":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 242 1007 l 388 1164 l 507 1164 l 653 1007 l 603 971 l 450 1100 l 444 1100 l 292 971 l 242 1007 z "},"Ũ":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 551 985 q 485 1000 513 985 q 434 1034 457 1015 q 391 1068 411 1053 q 346 1083 371 1083 q 301 1060 319 1083 q 279 992 283 1036 l 201 997 q 243 1122 206 1076 q 343 1168 281 1168 q 410 1153 382 1168 q 460 1119 438 1138 q 503 1085 483 1100 q 549 1069 524 1069 q 615 1161 604 1069 l 693 1156 q 651 1030 689 1075 q 551 985 614 985 z "},"Ü":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 304 993 q 256 1013 275 993 q 236 1061 236 1032 q 256 1110 236 1092 q 304 1129 275 1129 q 353 1110 335 1129 q 372 1061 372 1092 q 353 1013 372 1032 q 304 993 335 993 m 590 993 q 541 1013 560 993 q 522 1061 522 1032 q 541 1110 522 1092 q 590 1129 560 1129 q 639 1110 619 1129 q 658 1061 658 1092 q 639 1013 658 1032 q 590 993 619 993 z "},"Ū":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 261 1021 l 261 1100 l 633 1100 l 633 1021 l 261 1021 z "},"Ŭ":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 447 979 q 363 994 399 979 q 301 1033 326 1008 q 263 1090 276 1057 q 244 1158 249 1122 l 314 1169 q 355 1087 322 1121 q 447 1053 388 1053 q 540 1087 507 1053 q 581 1169 572 1121 l 650 1158 q 632 1090 646 1122 q 593 1033 618 1057 q 532 994 568 1008 q 447 979 496 979 z "},"Ů":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 447 971 q 351 1005 389 971 q 313 1096 313 1039 q 351 1188 313 1154 q 447 1222 389 1222 q 544 1188 506 1222 q 582 1096 582 1154 q 544 1005 582 1039 q 447 971 506 971 m 447 1021 q 497 1040 475 1021 q 518 1096 518 1060 q 497 1151 518 1132 q 447 1171 475 1171 q 396 1151 417 1171 q 375 1096 375 1132 q 396 1040 375 1060 q 447 1021 417 1021 z "},"Ű":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 306 1006 l 433 1217 l 511 1172 l 365 976 l 306 1006 m 528 1006 l 656 1217 l 733 1172 l 588 976 l 528 1006 z "},"Ǔ":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 388 981 l 242 1138 l 292 1174 l 444 1046 l 450 1046 l 603 1174 l 653 1138 l 507 981 l 388 981 z "},"Ǖ":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 304 993 q 259 1011 276 993 q 242 1057 242 1029 q 259 1102 242 1085 q 304 1119 276 1119 q 350 1102 332 1119 q 368 1057 368 1085 q 350 1011 368 1029 q 304 993 332 993 m 261 1196 l 261 1260 l 633 1260 l 633 1196 l 261 1196 m 590 993 q 544 1011 563 993 q 526 1057 526 1029 q 544 1102 526 1085 q 590 1119 563 1119 q 635 1102 618 1119 q 653 1057 653 1085 q 635 1011 653 1029 q 590 993 618 993 z "},"Ǘ":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 304 993 q 259 1011 276 993 q 242 1057 242 1029 q 259 1102 242 1085 q 304 1119 276 1119 q 350 1102 332 1119 q 368 1057 368 1085 q 350 1011 368 1029 q 304 993 332 993 m 394 1179 l 526 1344 l 600 1294 l 446 1143 l 394 1179 m 590 993 q 544 1011 563 993 q 526 1057 526 1029 q 544 1102 526 1085 q 590 1119 563 1119 q 635 1102 618 1119 q 653 1057 653 1085 q 635 1011 653 1029 q 590 993 618 993 z "},"Ǚ":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 397 1165 l 260 1299 l 306 1336 l 444 1232 l 450 1232 l 589 1336 l 635 1299 l 497 1165 l 397 1165 m 304 993 q 259 1011 276 993 q 242 1057 242 1029 q 259 1102 242 1085 q 304 1119 276 1119 q 350 1102 332 1119 q 368 1057 368 1085 q 350 1011 368 1029 q 304 993 332 993 m 590 993 q 544 1011 563 993 q 526 1057 526 1029 q 544 1102 526 1085 q 590 1119 563 1119 q 635 1102 618 1119 q 653 1057 653 1085 q 635 1011 653 1029 q 590 993 618 993 z "},"Ǜ":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 500 1179 l 449 1143 l 294 1294 l 368 1344 l 500 1179 m 304 993 q 259 1011 276 993 q 242 1057 242 1029 q 259 1102 242 1085 q 304 1119 276 1119 q 350 1102 332 1119 q 368 1057 368 1085 q 350 1011 368 1029 q 304 993 332 993 m 590 993 q 544 1011 563 993 q 526 1057 526 1029 q 544 1102 526 1085 q 590 1119 563 1119 q 635 1102 618 1119 q 653 1057 653 1085 q 635 1011 653 1029 q 590 993 618 993 z "},"Ụ":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 447 -285 q 394 -264 415 -285 q 372 -210 372 -243 q 394 -156 372 -178 q 447 -135 415 -135 q 501 -156 479 -135 q 522 -210 522 -178 q 501 -264 522 -243 q 447 -285 479 -285 z "},"Ủ":{"ha":896,"x_min":121,"x_max":775,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 403 969 l 390 1022 q 446 1046 424 1032 q 468 1086 468 1060 q 353 1144 468 1140 l 365 1211 q 507 1180 457 1208 q 557 1099 557 1151 q 544 1047 557 1068 q 510 1009 532 1025 q 461 984 489 993 q 403 969 433 975 z "},"Ų":{"ha":896,"x_min":121,"x_max":775,"o":"m 486 -294 q 392 -264 431 -294 q 353 -174 353 -233 q 362 -122 353 -144 q 384 -79 371 -99 q 413 -44 397 -60 q 442 -15 429 -28 q 312 8 371 -14 q 210 77 253 31 q 144 197 168 124 q 121 376 121 271 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 775 911 l 775 376 q 759 222 775 285 q 714 115 743 158 q 644 42 685 71 q 553 -10 603 14 q 471 -75 499 -36 q 443 -149 443 -114 q 464 -197 443 -181 q 510 -212 485 -212 q 565 -193 539 -212 l 597 -256 q 546 -283 578 -271 q 486 -294 514 -294 z "},"Ư":{"ha":915,"x_min":121,"x_max":936,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 710 911 q 801 943 768 918 q 835 1026 835 968 q 829 1069 835 1047 q 814 1107 824 1090 l 904 1146 q 928 1094 919 1122 q 936 1035 936 1067 q 924 965 936 994 q 890 915 911 936 q 838 882 868 894 q 775 861 808 869 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 z "},"Ứ":{"ha":915,"x_min":121,"x_max":936,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 710 911 q 801 943 768 918 q 835 1026 835 968 q 829 1069 835 1047 q 814 1107 824 1090 l 904 1146 q 928 1094 919 1122 q 936 1035 936 1067 q 924 965 936 994 q 890 915 911 936 q 838 882 868 894 q 775 861 808 869 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 424 968 l 372 1026 l 569 1204 l 635 1128 l 424 968 z "},"Ừ":{"ha":915,"x_min":121,"x_max":936,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 710 911 q 801 943 768 918 q 835 1026 835 968 q 829 1069 835 1047 q 814 1107 824 1090 l 904 1146 q 928 1094 919 1122 q 936 1035 936 1067 q 924 965 936 994 q 890 915 911 936 q 838 882 868 894 q 775 861 808 869 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 471 968 l 260 1128 l 325 1204 l 522 1026 l 471 968 z "},"Ử":{"ha":915,"x_min":121,"x_max":936,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 710 911 q 801 943 768 918 q 835 1026 835 968 q 829 1069 835 1047 q 814 1107 824 1090 l 904 1146 q 928 1094 919 1122 q 936 1035 936 1067 q 924 965 936 994 q 890 915 911 936 q 838 882 868 894 q 775 861 808 869 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 403 969 l 390 1022 q 446 1046 424 1032 q 468 1086 468 1060 q 353 1144 468 1140 l 365 1211 q 507 1180 457 1208 q 557 1099 557 1151 q 544 1047 557 1068 q 510 1009 532 1025 q 461 984 489 993 q 403 969 433 975 z "},"Ữ":{"ha":915,"x_min":121,"x_max":936,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 710 911 q 801 943 768 918 q 835 1026 835 968 q 829 1069 835 1047 q 814 1107 824 1090 l 904 1146 q 928 1094 919 1122 q 936 1035 936 1067 q 924 965 936 994 q 890 915 911 936 q 838 882 868 894 q 775 861 808 869 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 551 985 q 485 1000 513 985 q 434 1034 457 1015 q 391 1068 411 1053 q 346 1083 371 1083 q 301 1060 319 1083 q 279 992 283 1036 l 201 997 q 243 1122 206 1076 q 343 1168 281 1168 q 410 1153 382 1168 q 460 1119 438 1138 q 503 1085 483 1100 q 549 1069 524 1069 q 615 1161 604 1069 l 693 1156 q 651 1030 689 1075 q 551 985 614 985 z "},"Ự":{"ha":915,"x_min":121,"x_max":936,"o":"m 449 -17 q 319 3 379 -17 q 215 70 258 24 q 146 192 171 117 q 121 376 121 267 l 121 911 l 236 911 l 236 374 q 253 236 236 292 q 298 147 269 181 q 365 99 326 114 q 449 85 404 85 q 533 99 494 85 q 601 147 572 114 q 647 236 631 181 q 664 374 664 292 l 664 911 l 710 911 q 801 943 768 918 q 835 1026 835 968 q 829 1069 835 1047 q 814 1107 824 1090 l 904 1146 q 928 1094 919 1122 q 936 1035 936 1067 q 924 965 936 994 q 890 915 911 936 q 838 882 868 894 q 775 861 808 869 l 775 376 q 750 192 775 267 q 681 70 725 117 q 578 3 638 24 q 449 -17 518 -17 m 447 -285 q 394 -264 415 -285 q 372 -210 372 -243 q 394 -156 372 -178 q 447 -135 415 -135 q 501 -156 479 -135 q 522 -210 522 -178 q 501 -264 522 -243 q 447 -285 479 -285 z "},"Ẁ":{"ha":1092,"x_min":32,"x_max":1058,"o":"m 225 0 l 32 911 l 151 911 l 247 415 q 274 268 260 340 q 300 121 288 196 l 306 121 q 338 269 321 196 q 369 415 354 342 l 496 911 l 601 911 l 728 415 q 761 269 744 343 q 794 121 778 196 l 800 121 q 825 269 813 196 q 851 415 838 342 l 947 911 l 1058 911 l 869 0 l 731 0 l 593 549 q 570 652 581 601 q 549 756 560 703 l 543 756 q 520 652 532 703 q 497 549 508 601 l 363 0 l 225 0 m 569 968 l 358 1128 l 424 1204 l 621 1026 l 569 968 z "},"Ẃ":{"ha":1092,"x_min":32,"x_max":1058,"o":"m 225 0 l 32 911 l 151 911 l 247 415 q 274 268 260 340 q 300 121 288 196 l 306 121 q 338 269 321 196 q 369 415 354 342 l 496 911 l 601 911 l 728 415 q 761 269 744 343 q 794 121 778 196 l 800 121 q 825 269 813 196 q 851 415 838 342 l 947 911 l 1058 911 l 869 0 l 731 0 l 593 549 q 570 652 581 601 q 549 756 560 703 l 543 756 q 520 652 532 703 q 497 549 508 601 l 363 0 l 225 0 m 522 968 l 471 1026 l 668 1204 l 733 1128 l 522 968 z "},"Ŵ":{"ha":1092,"x_min":32,"x_max":1058,"o":"m 225 0 l 32 911 l 151 911 l 247 415 q 274 268 260 340 q 300 121 288 196 l 306 121 q 338 269 321 196 q 369 415 354 342 l 496 911 l 601 911 l 728 415 q 761 269 744 343 q 794 121 778 196 l 800 121 q 825 269 813 196 q 851 415 838 342 l 947 911 l 1058 911 l 869 0 l 731 0 l 593 549 q 570 652 581 601 q 549 756 560 703 l 543 756 q 520 652 532 703 q 497 549 508 601 l 363 0 l 225 0 m 340 1007 l 486 1164 l 606 1164 l 751 1007 l 701 971 l 549 1100 l 543 1100 l 390 971 l 340 1007 z "},"Ẅ":{"ha":1092,"x_min":32,"x_max":1058,"o":"m 225 0 l 32 911 l 151 911 l 247 415 q 274 268 260 340 q 300 121 288 196 l 306 121 q 338 269 321 196 q 369 415 354 342 l 496 911 l 601 911 l 728 415 q 761 269 744 343 q 794 121 778 196 l 800 121 q 825 269 813 196 q 851 415 838 342 l 947 911 l 1058 911 l 869 0 l 731 0 l 593 549 q 570 652 581 601 q 549 756 560 703 l 543 756 q 520 652 532 703 q 497 549 508 601 l 363 0 l 225 0 m 403 993 q 354 1013 374 993 q 335 1061 335 1032 q 354 1110 335 1092 q 403 1129 374 1129 q 452 1110 433 1129 q 471 1061 471 1092 q 452 1013 471 1032 q 403 993 433 993 m 689 993 q 640 1013 658 993 q 621 1061 621 1032 q 640 1110 621 1092 q 689 1129 658 1129 q 738 1110 718 1129 q 757 1061 757 1092 q 738 1013 757 1032 q 689 993 718 993 z "},"Ỳ":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 m 354 968 l 143 1128 l 208 1204 l 406 1026 l 354 968 z "},"Ý":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 m 307 968 l 256 1026 l 453 1204 l 518 1128 l 307 968 z "},"Ŷ":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 m 125 1007 l 271 1164 l 390 1164 l 536 1007 l 486 971 l 333 1100 l 328 1100 l 175 971 l 125 1007 z "},"Ÿ":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 m 188 993 q 139 1013 158 993 q 119 1061 119 1032 q 139 1110 119 1092 q 188 1129 158 1129 q 237 1110 218 1129 q 256 1061 256 1092 q 237 1013 256 1032 q 188 993 218 993 m 474 993 q 424 1013 443 993 q 406 1061 406 1032 q 424 1110 406 1092 q 474 1129 443 1129 q 522 1110 503 1129 q 542 1061 542 1092 q 522 1013 542 1032 q 474 993 503 993 z "},"Ẏ":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 m 331 992 q 274 1013 297 992 q 251 1067 251 1033 q 274 1119 251 1099 q 331 1140 297 1140 q 387 1119 364 1140 q 410 1067 410 1099 q 387 1013 410 1033 q 331 992 364 992 z "},"Ỵ":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 m 333 -285 q 280 -264 301 -285 q 258 -210 258 -243 q 280 -156 258 -178 q 333 -135 301 -135 q 387 -156 365 -135 q 408 -210 408 -178 q 387 -264 408 -243 q 333 -285 365 -285 z "},"Ỷ":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 m 286 969 l 274 1022 q 329 1046 307 1032 q 351 1086 351 1060 q 236 1144 351 1140 l 249 1211 q 390 1180 340 1208 q 440 1099 440 1151 q 428 1047 440 1068 q 394 1009 415 1025 q 344 984 372 993 q 286 969 317 975 z "},"Ỹ":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 m 435 985 q 368 1000 396 985 q 317 1034 340 1015 q 274 1068 294 1053 q 229 1083 254 1083 q 185 1060 203 1083 q 163 992 167 1036 l 85 997 q 126 1122 89 1076 q 226 1168 164 1168 q 293 1153 265 1168 q 344 1119 321 1138 q 387 1085 367 1100 q 432 1069 407 1069 q 499 1161 488 1069 l 576 1156 q 535 1030 572 1075 q 435 985 497 985 z "},"Ź":{"ha":749,"x_min":63,"x_max":690,"o":"m 63 0 l 63 69 l 542 814 l 106 814 l 106 911 l 686 911 l 686 843 l 206 99 l 690 99 l 690 0 l 63 0 m 365 968 l 314 1026 l 511 1204 l 576 1128 l 365 968 z "},"Ž":{"ha":749,"x_min":63,"x_max":690,"o":"m 63 0 l 63 69 l 542 814 l 106 814 l 106 911 l 686 911 l 686 843 l 206 99 l 690 99 l 690 0 l 63 0 m 329 981 l 183 1138 l 233 1174 l 386 1046 l 392 1046 l 544 1174 l 594 1138 l 449 981 l 329 981 z "},"Ż":{"ha":749,"x_min":63,"x_max":690,"o":"m 63 0 l 63 69 l 542 814 l 106 814 l 106 911 l 686 911 l 686 843 l 206 99 l 690 99 l 690 0 l 63 0 m 389 992 q 333 1013 356 992 q 310 1067 310 1033 q 333 1119 310 1099 q 389 1140 356 1140 q 445 1119 422 1140 q 468 1067 468 1099 q 445 1013 468 1033 q 389 992 422 992 z "},"Ẓ":{"ha":749,"x_min":63,"x_max":690,"o":"m 63 0 l 63 69 l 542 814 l 106 814 l 106 911 l 686 911 l 686 843 l 206 99 l 690 99 l 690 0 l 63 0 m 390 -285 q 337 -264 358 -285 q 315 -210 315 -243 q 337 -156 315 -178 q 390 -135 358 -135 q 444 -156 422 -135 q 465 -210 465 -178 q 444 -264 465 -243 q 390 -285 422 -285 z "},"Ẕ":{"ha":749,"x_min":63,"x_max":690,"o":"m 63 0 l 63 69 l 542 814 l 106 814 l 106 911 l 686 911 l 686 843 l 206 99 l 690 99 l 690 0 l 63 0 m 206 -235 l 206 -156 l 575 -156 l 575 -235 l 206 -235 z "},"Ð":{"ha":886,"x_min":46,"x_max":814,"o":"m 46 446 l 46 506 l 156 511 l 156 911 l 383 911 q 704 794 594 911 q 814 460 814 678 q 786 266 814 351 q 704 122 758 181 q 571 31 650 63 q 389 0 492 0 l 156 0 l 156 446 l 46 446 m 271 94 l 375 94 q 615 190 535 94 q 694 460 694 286 q 615 725 694 633 q 375 817 535 817 l 271 817 l 271 511 l 478 511 l 478 446 l 271 446 l 271 94 z "},"Þ":{"ha":810,"x_min":125,"x_max":740,"o":"m 125 0 l 125 911 l 240 911 l 240 758 l 404 758 q 542 744 479 758 q 648 699 604 731 q 716 616 692 667 q 740 490 740 565 q 716 365 740 418 q 647 276 692 311 q 541 225 603 242 q 404 208 479 208 l 240 208 l 240 0 l 125 0 m 240 303 l 390 303 q 567 347 510 303 q 625 490 625 392 q 567 626 625 589 q 390 664 508 664 l 240 664 l 240 303 z "},"Ə":{"ha":914,"x_min":81,"x_max":842,"o":"m 454 -17 q 297 16 367 -17 q 180 110 228 49 q 106 258 132 171 q 81 451 81 344 q 81 467 81 458 q 83 486 82 476 l 728 486 q 651 743 721 654 q 451 832 582 832 q 326 807 382 832 q 229 742 269 782 l 172 821 q 294 898 221 868 q 460 928 367 928 q 740 808 639 928 q 842 458 842 688 q 815 256 842 344 q 737 108 788 168 q 615 15 686 47 q 454 -17 543 -17 m 454 79 q 642 160 571 79 q 725 397 714 242 l 199 397 q 274 163 206 246 q 454 79 343 79 z "},"Ŋ":{"ha":882,"x_min":125,"x_max":810,"o":"m 564 -17 q 506 -12 536 -17 q 456 4 475 -7 l 483 108 q 515 97 499 101 q 553 93 531 93 q 606 110 581 93 q 649 171 631 128 q 679 285 668 214 q 690 465 690 357 q 674 638 690 568 q 628 749 658 707 q 557 808 599 790 q 465 826 515 826 q 407 816 438 826 q 347 788 376 806 q 289 744 317 769 q 240 690 261 719 l 240 0 l 125 0 l 125 911 l 238 911 l 238 799 q 354 891 286 854 q 494 928 422 928 q 620 903 563 928 q 720 824 678 879 q 786 681 763 769 q 810 465 810 593 q 792 242 810 333 q 742 93 775 150 q 665 10 710 36 q 564 -17 619 -17 z "},"IJ":{"ha":731,"x_min":125,"x_max":606,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m 419 -229 q 363 -224 388 -229 q 319 -212 338 -219 l 342 -121 q 372 -129 356 -125 q 406 -133 388 -133 q 474 -98 457 -133 q 490 0 490 -62 l 490 911 l 606 911 l 606 -4 q 563 -169 606 -108 q 419 -229 519 -229 z "},"à":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 383 796 l 165 1008 l 246 1085 l 442 853 l 383 796 z "},"á":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 344 796 l 286 853 l 482 1085 l 563 1008 l 344 796 z "},"â":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 149 833 l 307 1028 l 421 1028 l 579 833 l 531 789 l 367 946 l 361 946 l 197 789 l 149 833 z "},"ã":{"ha":700,"x_min":72,"x_max":604,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 464 801 q 400 819 426 801 q 351 860 374 838 q 309 900 329 882 q 265 918 289 918 q 218 888 233 918 q 200 808 203 857 l 124 813 q 134 888 125 853 q 160 947 143 922 q 202 987 176 972 q 264 1001 228 1001 q 328 983 301 1001 q 376 943 354 965 q 419 903 399 921 q 464 885 439 885 q 510 915 494 885 q 528 994 525 946 l 604 989 q 594 915 603 949 q 568 856 585 881 q 526 816 551 831 q 464 801 500 801 z "},"ä":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 231 815 q 181 835 200 815 q 161 885 161 856 q 181 934 161 914 q 231 954 200 954 q 279 934 260 954 q 299 885 299 914 q 279 835 299 856 q 231 815 260 815 m 497 815 q 449 835 468 815 q 429 885 429 856 q 449 934 429 914 q 497 954 468 954 q 547 934 528 954 q 567 885 567 914 q 547 835 567 856 q 497 815 528 815 z "},"ā":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 179 835 l 179 914 l 549 914 l 549 835 l 179 835 z "},"ă":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 364 793 q 268 811 308 793 q 202 859 228 829 q 163 926 176 889 q 147 1003 150 964 l 218 1014 q 233 962 222 988 q 261 915 243 936 q 305 882 279 894 q 364 869 331 869 q 423 882 397 869 q 467 915 449 894 q 495 962 485 936 q 510 1014 506 988 l 581 1003 q 565 926 578 964 q 525 859 551 889 q 459 811 499 829 q 364 793 419 793 z "},"å":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 364 769 q 252 808 293 769 q 211 907 211 847 q 252 1004 211 965 q 364 1043 293 1043 q 476 1004 435 1043 q 517 907 517 965 q 476 808 517 847 q 364 769 435 769 m 364 821 q 420 844 397 821 q 443 907 443 867 q 420 969 443 946 q 364 992 397 992 q 308 969 331 992 q 285 907 285 946 q 308 844 285 867 q 364 821 331 821 z "},"ǎ":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 307 797 l 149 992 l 197 1036 l 361 879 l 367 879 l 531 1036 l 579 992 l 421 797 l 307 797 z "},"ạ":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 342 -285 q 288 -264 310 -285 q 267 -210 267 -243 q 288 -156 267 -178 q 342 -135 310 -135 q 395 -156 374 -135 q 417 -210 417 -178 q 395 -264 417 -243 q 342 -285 374 -285 z "},"ả":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 319 794 l 307 850 q 363 873 340 858 q 385 915 385 888 q 269 981 385 975 l 276 1056 q 424 1020 372 1053 q 475 925 475 988 q 462 873 475 894 q 427 835 449 851 q 378 810 406 819 q 319 794 350 800 z "},"ấ":{"ha":700,"x_min":72,"x_max":690,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 218 792 l 178 839 l 317 967 l 411 967 l 550 839 l 510 792 l 367 892 l 361 892 l 218 792 m 501 924 l 622 1090 l 690 1043 l 550 885 l 501 924 z "},"ầ":{"ha":700,"x_min":21,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 218 792 l 178 839 l 317 967 l 411 967 l 550 839 l 510 792 l 367 892 l 361 892 l 218 792 m 226 928 l 178 885 l 21 1040 l 88 1090 l 226 928 z "},"ẩ":{"ha":700,"x_min":72,"x_max":654,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 218 792 l 178 839 l 317 967 l 411 967 l 550 839 l 510 792 l 367 892 l 361 892 l 218 792 m 525 882 l 513 931 q 555 950 539 938 q 571 985 571 963 q 549 1026 571 1013 q 475 1042 526 1039 l 485 1099 q 610 1071 567 1096 q 654 997 654 1046 q 643 950 654 969 q 614 917 632 931 q 573 896 596 904 q 525 882 550 888 z "},"ẫ":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 218 792 l 178 839 l 317 961 l 411 961 l 550 839 l 510 792 l 367 888 l 361 888 l 218 792 m 174 992 q 202 1081 179 1046 q 274 1115 225 1115 q 328 1106 304 1115 q 372 1086 351 1097 q 410 1066 392 1075 q 449 1057 429 1057 q 479 1071 469 1057 q 494 1115 489 1085 l 554 1110 q 526 1022 549 1057 q 454 986 503 986 q 400 995 424 986 q 356 1015 376 1004 q 317 1035 336 1026 q 279 1044 299 1044 q 249 1031 258 1044 q 233 986 239 1017 l 174 992 z "},"ậ":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 149 833 l 307 1028 l 421 1028 l 579 833 l 531 789 l 367 946 l 361 946 l 197 789 l 149 833 m 342 -285 q 288 -264 310 -285 q 267 -210 267 -243 q 288 -156 267 -178 q 342 -135 310 -135 q 395 -156 374 -135 q 417 -210 417 -178 q 395 -264 417 -243 q 342 -285 374 -285 z "},"ắ":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 357 943 l 303 983 l 425 1156 l 497 1100 l 357 943 m 364 793 q 268 811 308 793 q 202 859 228 829 q 163 926 176 889 q 147 1003 150 964 l 214 1014 q 228 959 218 986 q 258 911 239 932 q 303 877 276 890 q 364 864 329 864 q 425 877 399 864 q 470 911 451 890 q 499 959 489 932 q 514 1014 510 986 l 581 1003 q 565 926 578 964 q 525 859 551 889 q 459 811 499 829 q 364 793 419 793 z "},"ằ":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 371 943 l 231 1100 l 303 1156 l 425 983 l 371 943 m 364 793 q 268 811 308 793 q 202 859 228 829 q 163 926 176 889 q 147 1003 150 964 l 214 1014 q 228 959 218 986 q 258 911 239 932 q 303 877 276 890 q 364 864 329 864 q 425 877 399 864 q 470 911 451 890 q 499 959 489 932 q 514 1014 510 986 l 581 1003 q 565 926 578 964 q 525 859 551 889 q 459 811 499 829 q 364 793 419 793 z "},"ẳ":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 326 947 l 315 997 q 363 1017 344 1004 q 382 1051 382 1029 q 358 1092 382 1079 q 276 1108 333 1106 l 286 1178 q 418 1147 371 1175 q 465 1064 465 1119 q 453 1016 465 1036 q 422 982 442 996 q 378 960 403 968 q 326 947 353 951 m 364 793 q 268 811 308 793 q 202 859 228 829 q 163 926 176 889 q 147 1003 150 964 l 214 1014 q 228 959 218 986 q 258 911 239 932 q 303 877 276 890 q 364 864 329 864 q 425 877 399 864 q 470 911 451 890 q 499 959 489 932 q 514 1014 510 986 l 581 1003 q 565 926 578 964 q 525 859 551 889 q 459 811 499 829 q 364 793 419 793 z "},"ẵ":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 364 793 q 276 806 313 793 q 216 841 240 819 q 179 889 192 863 q 164 942 167 915 l 229 953 q 267 888 235 918 q 364 858 299 858 q 461 888 429 858 q 499 953 493 918 l 564 942 q 549 889 561 915 q 512 841 536 863 q 451 806 488 819 q 364 793 415 793 m 168 992 q 198 1079 174 1044 q 274 1114 222 1114 q 328 1105 304 1114 q 372 1085 351 1096 q 410 1065 392 1074 q 449 1056 429 1056 q 479 1070 469 1056 q 494 1114 489 1085 l 560 1108 q 530 1021 554 1056 q 454 986 506 986 q 400 995 424 986 q 356 1015 376 1004 q 317 1035 336 1026 q 279 1044 299 1044 q 249 1030 258 1044 q 233 985 239 1015 l 168 992 z "},"ặ":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 364 793 q 268 811 308 793 q 202 859 228 829 q 163 926 176 889 q 147 1003 150 964 l 218 1014 q 233 962 222 988 q 261 915 243 936 q 305 882 279 894 q 364 869 331 869 q 423 882 397 869 q 467 915 449 894 q 495 962 485 936 q 510 1014 506 988 l 581 1003 q 565 926 578 964 q 525 859 551 889 q 459 811 499 829 q 364 793 419 793 m 342 -285 q 288 -264 310 -285 q 267 -210 267 -243 q 288 -156 267 -178 q 342 -135 310 -135 q 395 -156 374 -135 q 417 -210 417 -178 q 395 -264 417 -243 q 342 -285 374 -285 z "},"ą":{"ha":700,"x_min":72,"x_max":631,"o":"m 522 -286 q 433 -256 469 -286 q 396 -168 396 -226 q 406 -115 396 -140 q 431 -67 415 -89 q 467 -26 447 -44 q 507 6 488 -7 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 q 512 -65 543 -24 q 481 -146 481 -106 q 500 -194 481 -178 q 544 -210 519 -210 q 575 -205 561 -210 q 601 -192 589 -200 l 631 -249 q 580 -275 611 -264 q 522 -286 549 -286 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 z "},"æ":{"ha":1090,"x_min":81,"x_max":1038,"o":"m 279 -17 q 137 33 193 -17 q 81 175 81 83 q 179 345 81 286 q 489 428 278 404 q 483 490 489 460 q 462 544 478 521 q 419 583 446 568 q 351 597 393 597 q 246 575 296 597 q 156 525 196 553 l 110 604 q 224 663 157 635 q 365 692 290 692 q 489 653 440 692 q 558 549 538 615 q 655 653 599 615 q 781 692 711 692 q 891 669 843 692 q 972 606 939 647 q 1021 505 1004 564 q 1038 374 1038 446 q 1033 310 1038 335 l 596 310 q 615 214 597 257 q 660 140 632 171 q 725 93 688 110 q 806 76 763 76 q 893 92 854 76 q 969 132 932 108 l 1011 53 q 914 4 967 25 q 792 -17 861 -17 q 650 22 707 -17 q 554 110 593 60 q 415 15 485 47 q 279 -17 344 -17 m 311 75 q 414 102 358 75 q 515 179 469 129 q 497 242 504 206 q 489 318 490 279 l 489 353 q 352 326 408 342 q 260 290 296 311 q 209 242 225 269 q 193 183 193 215 q 227 100 193 125 q 311 75 261 75 m 596 386 l 938 386 q 897 546 938 490 q 778 601 856 601 q 656 544 707 601 q 596 386 606 486 z "},"ǽ":{"ha":1090,"x_min":81,"x_max":1038,"o":"m 279 -17 q 137 33 193 -17 q 81 175 81 83 q 179 345 81 286 q 489 428 278 404 q 483 490 489 460 q 462 544 478 521 q 419 583 446 568 q 351 597 393 597 q 246 575 296 597 q 156 525 196 553 l 110 604 q 224 663 157 635 q 365 692 290 692 q 489 653 440 692 q 558 549 538 615 q 655 653 599 615 q 781 692 711 692 q 891 669 843 692 q 972 606 939 647 q 1021 505 1004 564 q 1038 374 1038 446 q 1033 310 1038 335 l 596 310 q 615 214 597 257 q 660 140 632 171 q 725 93 688 110 q 806 76 763 76 q 893 92 854 76 q 969 132 932 108 l 1011 53 q 914 4 967 25 q 792 -17 861 -17 q 650 22 707 -17 q 554 110 593 60 q 415 15 485 47 q 279 -17 344 -17 m 311 75 q 414 102 358 75 q 515 179 469 129 q 497 242 504 206 q 489 318 490 279 l 489 353 q 352 326 408 342 q 260 290 296 311 q 209 242 225 269 q 193 183 193 215 q 227 100 193 125 q 311 75 261 75 m 596 386 l 938 386 q 897 546 938 490 q 778 601 856 601 q 656 544 707 601 q 596 386 606 486 m 553 796 l 494 853 l 690 1085 l 771 1008 l 553 796 z "},"ǣ":{"ha":1090,"x_min":81,"x_max":1038,"o":"m 279 -17 q 137 33 193 -17 q 81 175 81 83 q 179 345 81 286 q 489 428 278 404 q 483 490 489 460 q 462 544 478 521 q 419 583 446 568 q 351 597 393 597 q 246 575 296 597 q 156 525 196 553 l 110 604 q 224 663 157 635 q 365 692 290 692 q 489 653 440 692 q 558 549 538 615 q 655 653 599 615 q 781 692 711 692 q 891 669 843 692 q 972 606 939 647 q 1021 505 1004 564 q 1038 374 1038 446 q 1033 310 1038 335 l 596 310 q 615 214 597 257 q 660 140 632 171 q 725 93 688 110 q 806 76 763 76 q 893 92 854 76 q 969 132 932 108 l 1011 53 q 914 4 967 25 q 792 -17 861 -17 q 650 22 707 -17 q 554 110 593 60 q 415 15 485 47 q 279 -17 344 -17 m 311 75 q 414 102 358 75 q 515 179 469 129 q 497 242 504 206 q 489 318 490 279 l 489 353 q 352 326 408 342 q 260 290 296 311 q 209 242 225 269 q 193 183 193 215 q 227 100 193 125 q 311 75 261 75 m 596 386 l 938 386 q 897 546 938 490 q 778 601 856 601 q 656 544 707 601 q 596 386 606 486 m 388 835 l 388 914 l 757 914 l 757 835 l 388 835 z "},"ƀ":{"ha":756,"x_min":11,"x_max":704,"o":"m 413 -17 q 315 6 365 -17 q 219 69 264 29 l 215 69 l 206 0 l 114 0 l 114 793 l 11 793 l 11 853 l 114 860 l 114 989 l 228 989 l 228 860 l 481 860 l 481 793 l 228 793 l 228 664 l 225 543 q 325 610 271 583 q 436 638 379 638 q 551 615 501 638 q 635 551 601 592 q 687 451 669 510 q 704 322 704 393 q 681 180 704 243 q 617 73 657 117 q 524 6 576 29 q 413 -17 471 -17 m 393 79 q 470 97 435 79 q 531 145 506 114 q 572 222 557 176 q 586 321 586 267 q 576 409 586 368 q 545 479 567 450 q 490 525 524 508 q 408 542 456 542 q 228 449 325 542 l 228 150 q 316 95 272 111 q 393 79 360 79 z "},"ḇ":{"ha":768,"x_min":114,"x_max":704,"o":"m 413 -17 q 315 6 365 -17 q 219 69 264 29 l 215 69 l 206 0 l 114 0 l 114 989 l 228 989 l 228 719 l 225 597 q 325 665 271 638 q 436 692 379 692 q 551 667 501 692 q 635 598 601 643 q 687 490 669 553 q 704 349 704 426 q 681 194 704 263 q 617 79 657 126 q 524 8 576 32 q 413 -17 471 -17 m 393 79 q 470 98 435 79 q 531 151 506 117 q 572 235 557 185 q 586 347 586 285 q 576 449 586 403 q 545 527 567 494 q 490 578 524 560 q 408 596 456 596 q 228 504 326 596 l 228 150 q 316 95 272 111 q 393 79 360 79 m 208 -235 l 208 -156 l 578 -156 l 578 -235 l 208 -235 z "},"ç":{"ha":633,"x_min":64,"x_max":599,"o":"m 381 -17 q 256 7 314 -17 q 155 76 197 31 q 88 187 113 121 q 64 336 64 253 q 90 487 64 421 q 161 599 117 553 q 265 668 206 644 q 389 692 324 692 q 503 668 456 692 q 586 613 550 644 l 528 538 q 466 581 499 564 q 393 597 433 597 q 308 578 347 597 q 242 525 269 560 q 198 442 214 490 q 182 336 182 394 q 197 231 182 278 q 240 149 213 183 q 306 97 267 115 q 390 78 344 78 q 477 98 438 78 q 549 146 517 118 l 599 69 q 497 6 553 29 q 381 -17 442 -17 m 257 -314 l 246 -258 q 365 -235 333 -251 q 397 -189 397 -219 q 374 -146 397 -161 q 290 -122 350 -131 l 351 4 l 425 4 l 385 -89 q 460 -122 433 -100 q 486 -187 486 -144 q 427 -278 486 -249 q 257 -314 368 -308 z "},"ć":{"ha":633,"x_min":64,"x_max":599,"o":"m 381 -17 q 256 7 314 -17 q 155 76 197 31 q 88 187 113 121 q 64 336 64 253 q 90 487 64 421 q 161 599 117 553 q 265 668 206 644 q 389 692 324 692 q 503 668 456 692 q 586 613 550 644 l 528 538 q 466 581 499 564 q 393 597 433 597 q 308 578 347 597 q 242 525 269 560 q 198 442 214 490 q 182 336 182 394 q 197 231 182 278 q 240 149 213 183 q 306 97 267 115 q 390 78 344 78 q 477 98 438 78 q 549 146 517 118 l 599 69 q 497 6 553 29 q 381 -17 442 -17 m 368 796 l 310 853 l 506 1085 l 586 1008 l 368 796 z "},"ĉ":{"ha":633,"x_min":64,"x_max":603,"o":"m 381 -17 q 256 7 314 -17 q 155 76 197 31 q 88 187 113 121 q 64 336 64 253 q 90 487 64 421 q 161 599 117 553 q 265 668 206 644 q 389 692 324 692 q 503 668 456 692 q 586 613 550 644 l 528 538 q 466 581 499 564 q 393 597 433 597 q 308 578 347 597 q 242 525 269 560 q 198 442 214 490 q 182 336 182 394 q 197 231 182 278 q 240 149 213 183 q 306 97 267 115 q 390 78 344 78 q 477 98 438 78 q 549 146 517 118 l 599 69 q 497 6 553 29 q 381 -17 442 -17 m 172 833 l 331 1028 l 444 1028 l 603 833 l 554 789 l 390 946 l 385 946 l 221 789 l 172 833 z "},"č":{"ha":633,"x_min":64,"x_max":603,"o":"m 381 -17 q 256 7 314 -17 q 155 76 197 31 q 88 187 113 121 q 64 336 64 253 q 90 487 64 421 q 161 599 117 553 q 265 668 206 644 q 389 692 324 692 q 503 668 456 692 q 586 613 550 644 l 528 538 q 466 581 499 564 q 393 597 433 597 q 308 578 347 597 q 242 525 269 560 q 198 442 214 490 q 182 336 182 394 q 197 231 182 278 q 240 149 213 183 q 306 97 267 115 q 390 78 344 78 q 477 98 438 78 q 549 146 517 118 l 599 69 q 497 6 553 29 q 381 -17 442 -17 m 331 797 l 172 992 l 221 1036 l 385 879 l 390 879 l 554 1036 l 603 992 l 444 797 l 331 797 z "},"ċ":{"ha":633,"x_min":64,"x_max":599,"o":"m 381 -17 q 256 7 314 -17 q 155 76 197 31 q 88 187 113 121 q 64 336 64 253 q 90 487 64 421 q 161 599 117 553 q 265 668 206 644 q 389 692 324 692 q 503 668 456 692 q 586 613 550 644 l 528 538 q 466 581 499 564 q 393 597 433 597 q 308 578 347 597 q 242 525 269 560 q 198 442 214 490 q 182 336 182 394 q 197 231 182 278 q 240 149 213 183 q 306 97 267 115 q 390 78 344 78 q 477 98 438 78 q 549 146 517 118 l 599 69 q 497 6 553 29 q 381 -17 442 -17 m 388 814 q 334 835 356 814 q 313 889 313 856 q 334 942 313 921 q 388 964 356 964 q 441 942 419 964 q 463 889 463 921 q 441 835 463 856 q 388 814 419 814 z "},"ď":{"ha":796,"x_min":65,"x_max":813,"o":"m 344 -17 q 141 75 217 -17 q 65 336 65 167 q 90 484 65 418 q 154 596 114 550 q 247 667 194 642 q 358 692 300 692 q 460 671 417 692 q 547 614 503 650 l 542 729 l 542 989 l 657 989 l 657 0 l 563 0 l 553 79 l 549 79 q 456 12 508 40 q 344 -17 404 -17 m 369 79 q 458 102 417 79 q 542 172 500 125 l 542 525 q 459 580 499 564 q 378 596 419 596 q 302 577 338 596 q 240 524 267 558 q 199 443 214 490 q 183 338 183 396 q 232 147 183 215 q 369 79 281 79 m 736 761 l 731 1056 l 813 1056 l 811 976 l 792 761 l 736 761 z "},"ḍ":{"ha":771,"x_min":65,"x_max":657,"o":"m 344 -17 q 141 75 217 -17 q 65 336 65 167 q 90 484 65 418 q 154 596 114 550 q 247 667 194 642 q 358 692 300 692 q 460 671 417 692 q 547 614 503 650 l 542 729 l 542 989 l 657 989 l 657 0 l 563 0 l 553 79 l 549 79 q 456 12 508 40 q 344 -17 404 -17 m 369 79 q 458 102 417 79 q 542 172 500 125 l 542 525 q 459 580 499 564 q 378 596 419 596 q 302 577 338 596 q 240 524 267 558 q 199 443 214 490 q 183 338 183 396 q 232 147 183 215 q 369 79 281 79 m 419 -285 q 366 -264 388 -285 q 344 -210 344 -243 q 366 -156 344 -178 q 419 -135 388 -135 q 473 -156 451 -135 q 494 -210 494 -178 q 473 -264 494 -243 q 419 -285 451 -285 z "},"ḏ":{"ha":771,"x_min":65,"x_max":657,"o":"m 344 -17 q 141 75 217 -17 q 65 336 65 167 q 90 484 65 418 q 154 596 114 550 q 247 667 194 642 q 358 692 300 692 q 460 671 417 692 q 547 614 503 650 l 542 729 l 542 989 l 657 989 l 657 0 l 563 0 l 553 79 l 549 79 q 456 12 508 40 q 344 -17 404 -17 m 369 79 q 458 102 417 79 q 542 172 500 125 l 542 525 q 459 580 499 564 q 378 596 419 596 q 302 577 338 596 q 240 524 267 558 q 199 443 214 490 q 183 338 183 396 q 232 147 183 215 q 369 79 281 79 m 233 -235 l 233 -156 l 603 -156 l 603 -235 l 233 -235 z "},"đ":{"ha":771,"x_min":65,"x_max":757,"o":"m 344 -17 q 141 69 217 -17 q 65 310 65 154 q 90 445 65 385 q 154 548 114 506 q 247 614 194 590 q 358 638 300 638 q 460 616 417 638 q 547 558 503 594 l 542 675 l 542 793 l 318 793 l 318 860 l 542 860 l 542 989 l 657 989 l 657 860 l 757 860 l 757 800 l 657 793 l 657 0 l 560 0 l 551 76 l 547 76 q 457 10 508 38 q 344 -17 406 -17 m 369 79 q 458 102 417 79 q 542 172 500 125 l 542 471 q 459 526 499 510 q 378 542 419 542 q 302 524 338 542 q 240 476 267 507 q 199 403 214 446 q 183 311 183 361 q 232 142 183 204 q 369 79 281 79 z "},"è":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 388 796 l 169 1008 l 250 1085 l 446 853 l 388 796 z "},"é":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 349 796 l 290 853 l 486 1085 l 567 1008 l 349 796 z "},"ê":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 153 833 l 311 1028 l 425 1028 l 583 833 l 535 789 l 371 946 l 365 946 l 201 789 l 153 833 z "},"ě":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 311 797 l 153 992 l 201 1036 l 365 879 l 371 879 l 535 1036 l 583 992 l 425 797 l 311 797 z "},"ë":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 235 815 q 185 835 204 815 q 165 885 165 856 q 185 934 165 914 q 235 954 204 954 q 283 934 264 954 q 303 885 303 914 q 283 835 303 856 q 235 815 264 815 m 501 815 q 453 835 472 815 q 433 885 433 856 q 453 934 433 914 q 501 954 472 954 q 551 934 532 954 q 571 885 571 914 q 551 835 571 856 q 501 815 532 815 z "},"ē":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 183 835 l 183 914 l 553 914 l 553 835 l 183 835 z "},"ĕ":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 368 793 q 272 811 313 793 q 206 859 232 829 q 167 926 181 889 q 151 1003 154 964 l 222 1014 q 237 962 226 988 q 265 915 247 936 q 309 882 283 894 q 368 869 335 869 q 427 882 401 869 q 471 915 453 894 q 499 962 489 936 q 514 1014 510 988 l 585 1003 q 569 926 582 964 q 529 859 556 889 q 463 811 503 829 q 368 793 424 793 z "},"ė":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 368 814 q 315 835 336 814 q 293 889 293 856 q 315 942 293 921 q 368 964 336 964 q 422 942 400 964 q 443 889 443 921 q 422 835 443 856 q 368 814 400 814 z "},"ẹ":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 365 -285 q 312 -264 333 -285 q 290 -210 290 -243 q 312 -156 290 -178 q 365 -135 333 -135 q 419 -156 397 -135 q 440 -210 440 -178 q 419 -264 440 -243 q 365 -285 397 -285 z "},"ẻ":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 324 794 l 311 850 q 367 873 344 858 q 389 915 389 888 q 274 981 389 975 l 281 1056 q 428 1020 376 1053 q 479 925 479 988 q 466 873 479 894 q 431 835 453 851 q 382 810 410 819 q 324 794 354 800 z "},"ẽ":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 468 801 q 404 819 431 801 q 356 860 378 838 q 313 900 333 882 q 269 918 293 918 q 222 888 238 918 q 204 808 207 857 l 128 813 q 138 888 129 853 q 164 947 147 922 q 206 987 181 972 q 268 1001 232 1001 q 332 983 306 1001 q 381 943 358 965 q 423 903 403 921 q 468 885 443 885 q 514 915 499 885 q 532 994 529 946 l 608 989 q 598 915 607 949 q 572 856 589 881 q 530 816 556 831 q 468 801 504 801 z "},"ế":{"ha":689,"x_min":64,"x_max":694,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 222 792 l 182 839 l 321 967 l 415 967 l 554 839 l 514 792 l 371 892 l 365 892 l 222 792 m 506 924 l 626 1090 l 694 1043 l 554 885 l 506 924 z "},"ề":{"ha":689,"x_min":25,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 222 792 l 182 839 l 321 967 l 415 967 l 554 839 l 514 792 l 371 892 l 365 892 l 222 792 m 231 928 l 182 885 l 25 1040 l 92 1090 l 231 928 z "},"ể":{"ha":689,"x_min":64,"x_max":658,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 222 792 l 182 839 l 321 967 l 415 967 l 554 839 l 514 792 l 371 892 l 365 892 l 222 792 m 529 882 l 517 931 q 559 950 543 938 q 575 985 575 963 q 553 1026 575 1013 q 479 1042 531 1039 l 489 1099 q 615 1071 571 1096 q 658 997 658 1046 q 647 950 658 969 q 618 917 636 931 q 577 896 600 904 q 529 882 554 888 z "},"ễ":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 222 792 l 182 839 l 321 961 l 415 961 l 554 839 l 514 792 l 371 888 l 365 888 l 222 792 m 178 992 q 206 1081 183 1046 q 278 1115 229 1115 q 332 1106 308 1115 q 376 1086 356 1097 q 415 1066 396 1075 q 453 1057 433 1057 q 483 1071 474 1057 q 499 1115 493 1085 l 558 1110 q 530 1022 553 1057 q 458 986 507 986 q 404 995 428 986 q 360 1015 381 1004 q 322 1035 340 1026 q 283 1044 303 1044 q 253 1031 263 1044 q 238 986 243 1017 l 178 992 z "},"ệ":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 153 833 l 311 1028 l 425 1028 l 583 833 l 535 789 l 371 946 l 365 946 l 201 789 l 153 833 m 364 -285 q 310 -264 332 -285 q 289 -210 289 -243 q 310 -156 289 -178 q 364 -135 332 -135 q 417 -156 396 -135 q 439 -210 439 -178 q 417 -264 439 -243 q 364 -285 396 -285 z "},"ę":{"ha":689,"x_min":64,"x_max":636,"o":"m 497 -286 q 408 -256 444 -286 q 372 -168 372 -226 q 380 -118 372 -142 q 400 -74 388 -94 q 427 -36 413 -53 q 456 -7 442 -19 q 421 -15 438 -14 q 388 -17 404 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 535 -6 564 21 q 488 -57 506 -33 q 463 -102 469 -81 q 456 -146 456 -124 q 475 -194 456 -178 q 521 -210 494 -210 q 551 -205 538 -210 q 576 -192 564 -200 l 606 -249 q 555 -275 586 -264 q 497 -286 524 -286 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 z "},"ḗ":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 321 979 l 276 1033 l 464 1171 l 517 1103 l 321 979 m 183 835 l 183 914 l 553 914 l 553 835 l 183 835 z "},"ǵ":{"ha":700,"x_min":63,"x_max":683,"o":"m 342 -311 q 228 -299 279 -311 q 140 -264 176 -287 q 83 -207 103 -240 q 63 -129 63 -174 q 89 -47 63 -86 q 161 24 115 -8 l 161 29 q 119 72 136 44 q 101 139 101 99 q 125 214 101 182 q 175 264 149 246 l 175 269 q 115 344 142 297 q 88 451 88 390 q 108 551 88 507 q 163 627 128 596 q 244 675 197 658 q 342 692 290 692 q 394 687 369 692 q 438 675 418 682 l 672 675 l 672 588 l 533 588 q 573 528 557 564 q 589 449 589 492 q 569 351 589 394 q 517 277 550 307 q 438 231 483 247 q 342 214 393 214 q 290 220 317 214 q 240 238 264 226 q 210 203 222 222 q 197 157 197 185 q 222 104 197 125 q 317 83 247 83 l 447 83 q 624 45 565 83 q 683 -78 683 7 q 660 -167 683 -125 q 592 -242 636 -210 q 484 -292 547 -274 q 342 -311 421 -311 m 342 290 q 397 301 371 290 q 442 333 422 313 q 474 384 463 354 q 485 451 485 414 q 443 567 485 526 q 342 608 401 608 q 240 567 282 608 q 199 451 199 526 q 210 384 199 414 q 241 333 221 354 q 287 301 261 313 q 342 290 313 290 m 358 -232 q 447 -220 407 -232 q 514 -190 486 -208 q 557 -146 542 -171 q 572 -94 572 -121 q 538 -29 572 -47 q 436 -11 503 -11 l 319 -11 q 277 -9 300 -11 q 232 0 254 -7 q 179 -56 196 -26 q 163 -114 163 -85 q 215 -200 163 -168 q 358 -232 267 -232 m 351 796 l 293 853 l 489 1085 l 569 1008 l 351 796 z "},"ĝ":{"ha":700,"x_min":63,"x_max":683,"o":"m 342 -311 q 228 -299 279 -311 q 140 -264 176 -287 q 83 -207 103 -240 q 63 -129 63 -174 q 89 -47 63 -86 q 161 24 115 -8 l 161 29 q 119 72 136 44 q 101 139 101 99 q 125 214 101 182 q 175 264 149 246 l 175 269 q 115 344 142 297 q 88 451 88 390 q 108 551 88 507 q 163 627 128 596 q 244 675 197 658 q 342 692 290 692 q 394 687 369 692 q 438 675 418 682 l 672 675 l 672 588 l 533 588 q 573 528 557 564 q 589 449 589 492 q 569 351 589 394 q 517 277 550 307 q 438 231 483 247 q 342 214 393 214 q 290 220 317 214 q 240 238 264 226 q 210 203 222 222 q 197 157 197 185 q 222 104 197 125 q 317 83 247 83 l 447 83 q 624 45 565 83 q 683 -78 683 7 q 660 -167 683 -125 q 592 -242 636 -210 q 484 -292 547 -274 q 342 -311 421 -311 m 342 290 q 397 301 371 290 q 442 333 422 313 q 474 384 463 354 q 485 451 485 414 q 443 567 485 526 q 342 608 401 608 q 240 567 282 608 q 199 451 199 526 q 210 384 199 414 q 241 333 221 354 q 287 301 261 313 q 342 290 313 290 m 358 -232 q 447 -220 407 -232 q 514 -190 486 -208 q 557 -146 542 -171 q 572 -94 572 -121 q 538 -29 572 -47 q 436 -11 503 -11 l 319 -11 q 277 -9 300 -11 q 232 0 254 -7 q 179 -56 196 -26 q 163 -114 163 -85 q 215 -200 163 -168 q 358 -232 267 -232 m 156 833 l 314 1028 l 428 1028 l 586 833 l 538 789 l 374 946 l 368 946 l 204 789 l 156 833 z "},"ğ":{"ha":700,"x_min":63,"x_max":683,"o":"m 342 -311 q 228 -299 279 -311 q 140 -264 176 -287 q 83 -207 103 -240 q 63 -129 63 -174 q 89 -47 63 -86 q 161 24 115 -8 l 161 29 q 119 72 136 44 q 101 139 101 99 q 125 214 101 182 q 175 264 149 246 l 175 269 q 115 344 142 297 q 88 451 88 390 q 108 551 88 507 q 163 627 128 596 q 244 675 197 658 q 342 692 290 692 q 394 687 369 692 q 438 675 418 682 l 672 675 l 672 588 l 533 588 q 573 528 557 564 q 589 449 589 492 q 569 351 589 394 q 517 277 550 307 q 438 231 483 247 q 342 214 393 214 q 290 220 317 214 q 240 238 264 226 q 210 203 222 222 q 197 157 197 185 q 222 104 197 125 q 317 83 247 83 l 447 83 q 624 45 565 83 q 683 -78 683 7 q 660 -167 683 -125 q 592 -242 636 -210 q 484 -292 547 -274 q 342 -311 421 -311 m 342 290 q 397 301 371 290 q 442 333 422 313 q 474 384 463 354 q 485 451 485 414 q 443 567 485 526 q 342 608 401 608 q 240 567 282 608 q 199 451 199 526 q 210 384 199 414 q 241 333 221 354 q 287 301 261 313 q 342 290 313 290 m 358 -232 q 447 -220 407 -232 q 514 -190 486 -208 q 557 -146 542 -171 q 572 -94 572 -121 q 538 -29 572 -47 q 436 -11 503 -11 l 319 -11 q 277 -9 300 -11 q 232 0 254 -7 q 179 -56 196 -26 q 163 -114 163 -85 q 215 -200 163 -168 q 358 -232 267 -232 m 371 793 q 275 811 315 793 q 209 859 235 829 q 170 926 183 889 q 154 1003 157 964 l 225 1014 q 240 962 229 988 q 268 915 250 936 q 312 882 286 894 q 371 869 338 869 q 430 882 404 869 q 474 915 456 894 q 502 962 492 936 q 517 1014 513 988 l 588 1003 q 572 926 585 964 q 532 859 558 889 q 466 811 506 829 q 371 793 426 793 z "},"ġ":{"ha":700,"x_min":63,"x_max":683,"o":"m 342 -311 q 228 -299 279 -311 q 140 -264 176 -287 q 83 -207 103 -240 q 63 -129 63 -174 q 89 -47 63 -86 q 161 24 115 -8 l 161 29 q 119 72 136 44 q 101 139 101 99 q 125 214 101 182 q 175 264 149 246 l 175 269 q 115 344 142 297 q 88 451 88 390 q 108 551 88 507 q 163 627 128 596 q 244 675 197 658 q 342 692 290 692 q 394 687 369 692 q 438 675 418 682 l 672 675 l 672 588 l 533 588 q 573 528 557 564 q 589 449 589 492 q 569 351 589 394 q 517 277 550 307 q 438 231 483 247 q 342 214 393 214 q 290 220 317 214 q 240 238 264 226 q 210 203 222 222 q 197 157 197 185 q 222 104 197 125 q 317 83 247 83 l 447 83 q 624 45 565 83 q 683 -78 683 7 q 660 -167 683 -125 q 592 -242 636 -210 q 484 -292 547 -274 q 342 -311 421 -311 m 342 290 q 397 301 371 290 q 442 333 422 313 q 474 384 463 354 q 485 451 485 414 q 443 567 485 526 q 342 608 401 608 q 240 567 282 608 q 199 451 199 526 q 210 384 199 414 q 241 333 221 354 q 287 301 261 313 q 342 290 313 290 m 358 -232 q 447 -220 407 -232 q 514 -190 486 -208 q 557 -146 542 -171 q 572 -94 572 -121 q 538 -29 572 -47 q 436 -11 503 -11 l 319 -11 q 277 -9 300 -11 q 232 0 254 -7 q 179 -56 196 -26 q 163 -114 163 -85 q 215 -200 163 -168 q 358 -232 267 -232 m 371 814 q 317 835 339 814 q 296 889 296 856 q 317 942 296 921 q 371 964 339 964 q 424 942 403 964 q 446 889 446 921 q 424 835 446 856 q 371 814 403 814 z "},"ģ":{"ha":700,"x_min":63,"x_max":683,"o":"m 342 -311 q 228 -299 279 -311 q 140 -264 176 -287 q 83 -207 103 -240 q 63 -129 63 -174 q 89 -47 63 -86 q 161 24 115 -8 l 161 29 q 119 72 136 44 q 101 139 101 99 q 125 214 101 182 q 175 264 149 246 l 175 269 q 115 344 142 297 q 88 451 88 390 q 108 551 88 507 q 163 627 128 596 q 244 675 197 658 q 342 692 290 692 q 394 687 369 692 q 438 675 418 682 l 672 675 l 672 588 l 533 588 q 573 528 557 564 q 589 449 589 492 q 569 351 589 394 q 517 277 550 307 q 438 231 483 247 q 342 214 393 214 q 290 220 317 214 q 240 238 264 226 q 210 203 222 222 q 197 157 197 185 q 222 104 197 125 q 317 83 247 83 l 447 83 q 624 45 565 83 q 683 -78 683 7 q 660 -167 683 -125 q 592 -242 636 -210 q 484 -292 547 -274 q 342 -311 421 -311 m 342 290 q 397 301 371 290 q 442 333 422 313 q 474 384 463 354 q 485 451 485 414 q 443 567 485 526 q 342 608 401 608 q 240 567 282 608 q 199 451 199 526 q 210 384 199 414 q 241 333 221 354 q 287 301 261 313 q 342 290 313 290 m 358 -232 q 447 -220 407 -232 q 514 -190 486 -208 q 557 -146 542 -171 q 572 -94 572 -121 q 538 -29 572 -47 q 436 -11 503 -11 l 319 -11 q 277 -9 300 -11 q 232 0 254 -7 q 179 -56 196 -26 q 163 -114 163 -85 q 215 -200 163 -168 q 358 -232 267 -232 m 425 799 q 299 833 335 808 q 263 906 263 858 q 322 997 263 967 q 492 1033 381 1026 l 503 976 q 383 955 415 971 q 351 910 351 939 q 376 869 351 882 q 450 851 401 856 l 425 799 z "},"ǧ":{"ha":700,"x_min":63,"x_max":683,"o":"m 342 -311 q 228 -299 279 -311 q 140 -264 176 -287 q 83 -207 103 -240 q 63 -129 63 -174 q 89 -47 63 -86 q 161 24 115 -8 l 161 29 q 119 72 136 44 q 101 139 101 99 q 125 214 101 182 q 175 264 149 246 l 175 269 q 115 344 142 297 q 88 451 88 390 q 108 551 88 507 q 163 627 128 596 q 244 675 197 658 q 342 692 290 692 q 394 687 369 692 q 438 675 418 682 l 672 675 l 672 588 l 533 588 q 573 528 557 564 q 589 449 589 492 q 569 351 589 394 q 517 277 550 307 q 438 231 483 247 q 342 214 393 214 q 290 220 317 214 q 240 238 264 226 q 210 203 222 222 q 197 157 197 185 q 222 104 197 125 q 317 83 247 83 l 447 83 q 624 45 565 83 q 683 -78 683 7 q 660 -167 683 -125 q 592 -242 636 -210 q 484 -292 547 -274 q 342 -311 421 -311 m 342 290 q 397 301 371 290 q 442 333 422 313 q 474 384 463 354 q 485 451 485 414 q 443 567 485 526 q 342 608 401 608 q 240 567 282 608 q 199 451 199 526 q 210 384 199 414 q 241 333 221 354 q 287 301 261 313 q 342 290 313 290 m 358 -232 q 447 -220 407 -232 q 514 -190 486 -208 q 557 -146 542 -171 q 572 -94 572 -121 q 538 -29 572 -47 q 436 -11 503 -11 l 319 -11 q 277 -9 300 -11 q 232 0 254 -7 q 179 -56 196 -26 q 163 -114 163 -85 q 215 -200 163 -168 q 358 -232 267 -232 m 314 797 l 156 992 l 204 1036 l 368 879 l 374 879 l 538 1036 l 586 992 l 428 797 l 314 797 z "},"ḡ":{"ha":700,"x_min":63,"x_max":683,"o":"m 342 -311 q 228 -299 279 -311 q 140 -264 176 -287 q 83 -207 103 -240 q 63 -129 63 -174 q 89 -47 63 -86 q 161 24 115 -8 l 161 29 q 119 72 136 44 q 101 139 101 99 q 125 214 101 182 q 175 264 149 246 l 175 269 q 115 344 142 297 q 88 451 88 390 q 108 551 88 507 q 163 627 128 596 q 244 675 197 658 q 342 692 290 692 q 394 687 369 692 q 438 675 418 682 l 672 675 l 672 588 l 533 588 q 573 528 557 564 q 589 449 589 492 q 569 351 589 394 q 517 277 550 307 q 438 231 483 247 q 342 214 393 214 q 290 220 317 214 q 240 238 264 226 q 210 203 222 222 q 197 157 197 185 q 222 104 197 125 q 317 83 247 83 l 447 83 q 624 45 565 83 q 683 -78 683 7 q 660 -167 683 -125 q 592 -242 636 -210 q 484 -292 547 -274 q 342 -311 421 -311 m 342 290 q 397 301 371 290 q 442 333 422 313 q 474 384 463 354 q 485 451 485 414 q 443 567 485 526 q 342 608 401 608 q 240 567 282 608 q 199 451 199 526 q 210 384 199 414 q 241 333 221 354 q 287 301 261 313 q 342 290 313 290 m 358 -232 q 447 -220 407 -232 q 514 -190 486 -208 q 557 -146 542 -171 q 572 -94 572 -121 q 538 -29 572 -47 q 436 -11 503 -11 l 319 -11 q 277 -9 300 -11 q 232 0 254 -7 q 179 -56 196 -26 q 163 -114 163 -85 q 215 -200 163 -168 q 358 -232 267 -232 m 186 835 l 186 914 l 556 914 l 556 835 l 186 835 z "},"ĥ":{"ha":756,"x_min":-33,"x_max":654,"o":"m 114 0 l 114 989 l 228 989 l 228 719 l 224 581 q 325 659 272 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 m -33 1065 l 113 1222 l 232 1222 l 378 1065 l 328 1029 l 175 1158 l 169 1158 l 17 1029 l -33 1065 z "},"ḥ":{"ha":756,"x_min":114,"x_max":654,"o":"m 114 0 l 114 989 l 228 989 l 228 719 l 224 581 q 325 659 272 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 m 397 -285 q 344 -264 365 -285 q 322 -210 322 -243 q 344 -156 322 -178 q 397 -135 365 -135 q 451 -156 429 -135 q 472 -210 472 -178 q 451 -264 472 -243 q 397 -285 429 -285 z "},"ẖ":{"ha":756,"x_min":114,"x_max":654,"o":"m 114 0 l 114 989 l 228 989 l 228 719 l 224 581 q 325 659 272 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 m 213 -235 l 213 -156 l 582 -156 l 582 -235 l 213 -235 z "},"ḫ":{"ha":756,"x_min":114,"x_max":654,"o":"m 114 0 l 114 989 l 228 989 l 228 719 l 224 581 q 325 659 272 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 m 396 -319 q 300 -301 340 -319 q 234 -253 260 -283 q 195 -186 208 -224 q 179 -110 182 -149 l 250 -99 q 265 -151 254 -125 q 293 -197 275 -176 q 337 -231 311 -218 q 396 -243 363 -243 q 455 -231 429 -243 q 499 -197 481 -218 q 527 -151 517 -176 q 542 -99 538 -125 l 613 -110 q 597 -186 610 -149 q 557 -253 583 -224 q 491 -301 531 -283 q 396 -319 451 -319 z "},"ħ":{"ha":756,"x_min":11,"x_max":654,"o":"m 114 0 l 114 793 l 11 793 l 11 853 l 114 860 l 114 989 l 228 989 l 228 860 l 481 860 l 481 793 l 228 793 l 228 664 l 224 525 q 325 604 272 571 q 449 638 378 638 q 605 571 556 638 q 654 374 654 504 l 654 0 l 540 0 l 540 358 q 510 496 540 454 q 413 538 479 538 q 319 512 360 538 q 228 435 279 486 l 228 0 l 114 0 z "},"ì":{"ha":342,"x_min":-28,"x_max":249,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m 190 796 l -28 1008 l 53 1085 l 249 853 l 190 796 z "},"í":{"ha":342,"x_min":93,"x_max":369,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m 151 796 l 93 853 l 289 1085 l 369 1008 l 151 796 z "},"î":{"ha":342,"x_min":-44,"x_max":386,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m -44 833 l 114 1028 l 228 1028 l 386 833 l 338 789 l 174 946 l 168 946 l 4 789 l -44 833 z "},"ĩ":{"ha":342,"x_min":-69,"x_max":411,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m 271 801 q 207 819 233 801 q 158 860 181 838 q 116 900 136 882 q 72 918 96 918 q 25 888 40 918 q 7 808 10 857 l -69 813 q -59 888 -68 853 q -33 947 -50 922 q 9 987 -17 972 q 71 1001 35 1001 q 135 983 108 1001 q 183 943 161 965 q 226 903 206 921 q 271 885 246 885 q 317 915 301 885 q 335 994 332 946 l 411 989 q 401 915 410 949 q 375 856 392 881 q 333 816 358 831 q 271 801 307 801 z "},"ï":{"ha":342,"x_min":-32,"x_max":374,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m 38 815 q -12 835 7 815 q -32 885 -32 856 q -12 934 -32 914 q 38 954 7 954 q 86 934 67 954 q 106 885 106 914 q 86 835 106 856 q 38 815 67 815 m 304 815 q 256 835 275 815 q 236 885 236 856 q 256 934 236 914 q 304 954 275 954 q 354 934 335 954 q 374 885 374 914 q 354 835 374 856 q 304 815 335 815 z "},"ī":{"ha":342,"x_min":-14,"x_max":356,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m -14 835 l -14 914 l 356 914 l 356 835 l -14 835 z "},"ǐ":{"ha":342,"x_min":-44,"x_max":386,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m 114 797 l -44 992 l 4 1036 l 168 879 l 174 879 l 338 1036 l 386 992 l 228 797 l 114 797 z "},"ỉ":{"ha":342,"x_min":76,"x_max":282,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m 126 794 l 114 850 q 169 873 147 858 q 192 915 192 888 q 76 981 192 975 l 83 1056 q 231 1020 179 1053 q 282 925 282 988 q 269 873 282 894 q 234 835 256 851 q 185 810 213 819 q 126 794 157 800 z "},"ị":{"ha":342,"x_min":93,"x_max":251,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m 172 814 q 116 835 139 814 q 93 888 93 856 q 116 941 93 921 q 172 961 139 961 q 228 941 206 961 q 251 888 251 921 q 228 835 251 856 q 172 814 206 814 m 172 -285 q 119 -264 140 -285 q 97 -210 97 -243 q 119 -156 97 -178 q 172 -135 140 -135 q 226 -156 204 -135 q 247 -210 247 -178 q 226 -264 247 -243 q 172 -285 204 -285 z "},"į":{"ha":342,"x_min":53,"x_max":288,"o":"m 179 -286 q 90 -256 126 -286 q 53 -168 53 -226 q 83 -71 53 -112 q 142 0 113 -29 l 114 0 l 114 675 l 228 675 l 228 0 q 162 -68 186 -31 q 138 -146 138 -106 q 157 -194 138 -178 q 203 -210 176 -210 q 231 -205 218 -210 q 258 -192 244 -200 l 288 -249 q 237 -275 268 -264 q 179 -286 206 -286 m 171 814 q 115 835 138 814 q 92 888 92 856 q 115 941 92 921 q 171 961 138 961 q 226 941 203 961 q 249 888 249 921 q 226 835 249 856 q 171 814 203 814 z "},"ĭ":{"ha":342,"x_min":-44,"x_max":389,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m 172 793 q 76 811 117 793 q 10 859 36 829 q -28 926 -15 889 q -44 1003 -42 964 l 26 1014 q 41 962 31 988 q 69 915 51 936 q 113 882 88 894 q 172 869 139 869 q 231 882 206 869 q 275 915 257 894 q 303 962 293 936 q 318 1014 314 988 l 389 1003 q 373 926 386 964 q 333 859 360 889 q 267 811 307 829 q 172 793 228 793 z "},"ı":{"ha":342,"x_min":114,"x_max":228,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 z "},"ĵ":{"ha":343,"x_min":-56,"x_max":386,"o":"m 44 -301 q -12 -296 13 -301 q -56 -283 -37 -290 l -32 -197 q -3 -205 -19 -201 q 32 -208 14 -208 q 99 -174 82 -208 q 115 -76 115 -139 l 115 675 l 229 675 l 229 -76 q 188 -240 229 -179 q 44 -301 146 -301 m -44 833 l 114 1028 l 228 1028 l 386 833 l 338 789 l 174 946 l 168 946 l 4 789 l -44 833 z "},"ķ":{"ha":688,"x_min":114,"x_max":675,"o":"m 114 0 l 114 989 l 226 989 l 226 319 l 231 319 l 518 675 l 644 675 l 418 404 l 675 0 l 550 0 l 353 325 l 226 178 l 226 0 l 114 0 m 256 -314 l 244 -258 q 364 -235 332 -251 q 396 -192 396 -219 q 371 -151 396 -164 q 297 -133 346 -137 l 322 -81 q 449 -116 413 -92 q 485 -187 485 -140 q 426 -278 485 -249 q 256 -314 367 -308 z "},"ḳ":{"ha":688,"x_min":114,"x_max":675,"o":"m 114 0 l 114 989 l 226 989 l 226 319 l 231 319 l 518 675 l 644 675 l 418 404 l 675 0 l 550 0 l 353 325 l 226 178 l 226 0 l 114 0 m 376 -285 q 323 -264 344 -285 q 301 -210 301 -243 q 323 -156 301 -178 q 376 -135 344 -135 q 430 -156 408 -135 q 451 -210 451 -178 q 430 -264 451 -243 q 376 -285 408 -285 z "},"ḵ":{"ha":688,"x_min":114,"x_max":675,"o":"m 114 0 l 114 989 l 226 989 l 226 319 l 231 319 l 518 675 l 644 675 l 418 404 l 675 0 l 550 0 l 353 325 l 226 178 l 226 0 l 114 0 m 192 -235 l 192 -156 l 561 -156 l 561 -235 l 192 -235 z "},"ĸ":{"ha":688,"x_min":114,"x_max":675,"o":"m 114 0 l 114 675 l 228 675 l 228 317 l 232 317 l 518 675 l 644 675 l 421 404 l 675 0 l 550 0 l 353 321 l 228 174 l 228 0 l 114 0 z "},"ĺ":{"ha":354,"x_min":90,"x_max":353,"o":"m 235 -17 q 142 22 169 -17 q 114 136 114 61 l 114 989 l 228 989 l 228 128 q 238 89 228 100 q 260 78 247 78 q 270 78 265 78 q 285 81 275 78 l 300 -6 q 274 -14 289 -11 q 235 -17 258 -17 m 142 1040 l 90 1099 l 288 1276 l 353 1200 l 142 1040 z "},"ľ":{"ha":375,"x_min":114,"x_max":383,"o":"m 235 -17 q 142 22 169 -17 q 114 136 114 61 l 114 989 l 228 989 l 228 128 q 238 89 228 100 q 260 78 247 78 q 270 78 265 78 q 285 81 275 78 l 300 -6 q 274 -14 289 -11 q 235 -17 258 -17 m 307 761 l 301 1056 l 383 1056 l 382 976 l 363 761 l 307 761 z "},"ŀ":{"ha":503,"x_min":114,"x_max":504,"o":"m 235 -17 q 142 22 169 -17 q 114 136 114 61 l 114 989 l 228 989 l 228 128 q 238 89 228 100 q 260 78 247 78 q 270 78 265 78 q 285 81 275 78 l 300 -6 q 274 -14 289 -11 q 235 -17 258 -17 m 422 365 q 363 390 388 365 q 339 451 339 414 q 363 516 339 492 q 422 540 388 540 q 480 516 456 540 q 504 451 504 492 q 480 390 504 414 q 422 365 456 365 z "},"ļ":{"ha":354,"x_min":86,"x_max":326,"o":"m 235 -17 q 142 22 169 -17 q 114 136 114 61 l 114 989 l 228 989 l 228 128 q 238 89 228 100 q 260 78 247 78 q 270 78 265 78 q 285 81 275 78 l 300 -6 q 274 -14 289 -11 q 235 -17 258 -17 m 97 -314 l 86 -258 q 206 -235 174 -251 q 238 -192 238 -219 q 213 -151 238 -164 q 139 -133 188 -137 l 164 -81 q 290 -116 254 -92 q 326 -187 326 -140 q 267 -278 326 -249 q 97 -314 208 -308 z "},"ḷ":{"ha":354,"x_min":114,"x_max":300,"o":"m 235 -17 q 142 22 169 -17 q 114 136 114 61 l 114 989 l 228 989 l 228 128 q 238 89 228 100 q 260 78 247 78 q 270 78 265 78 q 285 81 275 78 l 300 -6 q 274 -14 289 -11 q 235 -17 258 -17 m 218 -285 q 165 -264 186 -285 q 143 -210 143 -243 q 165 -156 143 -178 q 218 -135 186 -135 q 272 -156 250 -135 q 293 -210 293 -178 q 272 -264 293 -243 q 218 -285 250 -285 z "},"ḹ":{"ha":354,"x_min":-15,"x_max":354,"o":"m 235 -17 q 142 22 169 -17 q 114 136 114 61 l 114 989 l 228 989 l 228 128 q 238 89 228 100 q 260 78 247 78 q 270 78 265 78 q 285 81 275 78 l 300 -6 q 274 -14 289 -11 q 235 -17 258 -17 m -15 1142 l -15 1221 l 354 1221 l 354 1142 l -15 1142 m 218 -285 q 165 -264 186 -285 q 143 -210 143 -243 q 165 -156 143 -178 q 218 -135 186 -135 q 272 -156 250 -135 q 293 -210 293 -178 q 272 -264 293 -243 q 218 -285 250 -285 z "},"ḻ":{"ha":354,"x_min":33,"x_max":403,"o":"m 235 -17 q 142 22 169 -17 q 114 136 114 61 l 114 989 l 228 989 l 228 128 q 238 89 228 100 q 260 78 247 78 q 270 78 265 78 q 285 81 275 78 l 300 -6 q 274 -14 289 -11 q 235 -17 258 -17 m 33 -235 l 33 -156 l 403 -156 l 403 -235 l 33 -235 z "},"ł":{"ha":364,"x_min":-1,"x_max":350,"o":"m 240 -17 q 147 22 175 -17 q 119 136 119 61 l 119 460 l 40 410 l -1 483 l 119 557 l 119 989 l 233 989 l 233 617 l 308 665 l 350 592 l 233 519 l 233 128 q 243 89 233 100 q 265 78 253 78 q 276 78 271 78 q 290 81 281 78 l 306 -6 q 279 -14 294 -11 q 240 -17 264 -17 z "},"ḿ":{"ha":1151,"x_min":114,"x_max":1046,"o":"m 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 319 659 267 626 q 432 692 371 692 q 553 658 510 692 q 618 563 597 624 q 724 656 671 621 q 840 692 778 692 q 995 625 944 692 q 1046 428 1046 558 l 1046 0 l 932 0 l 932 413 q 901 551 932 508 q 807 593 871 593 q 638 489 731 593 l 638 0 l 524 0 l 524 413 q 493 551 524 508 q 397 593 463 593 q 228 489 321 593 l 228 0 l 114 0 m 563 796 l 504 853 l 700 1085 l 781 1008 l 563 796 z "},"ṁ":{"ha":1151,"x_min":114,"x_max":1046,"o":"m 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 319 659 267 626 q 432 692 371 692 q 553 658 510 692 q 618 563 597 624 q 724 656 671 621 q 840 692 778 692 q 995 625 944 692 q 1046 428 1046 558 l 1046 0 l 932 0 l 932 413 q 901 551 932 508 q 807 593 871 593 q 638 489 731 593 l 638 0 l 524 0 l 524 413 q 493 551 524 508 q 397 593 463 593 q 228 489 321 593 l 228 0 l 114 0 m 582 814 q 528 835 550 814 q 507 889 507 856 q 528 942 507 921 q 582 964 550 964 q 635 942 614 964 q 657 889 657 921 q 635 835 657 856 q 582 814 614 814 z "},"ṃ":{"ha":1151,"x_min":114,"x_max":1046,"o":"m 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 319 659 267 626 q 432 692 371 692 q 553 658 510 692 q 618 563 597 624 q 724 656 671 621 q 840 692 778 692 q 995 625 944 692 q 1046 428 1046 558 l 1046 0 l 932 0 l 932 413 q 901 551 932 508 q 807 593 871 593 q 638 489 731 593 l 638 0 l 524 0 l 524 413 q 493 551 524 508 q 397 593 463 593 q 228 489 321 593 l 228 0 l 114 0 m 592 -285 q 538 -264 560 -285 q 517 -210 517 -243 q 538 -156 517 -178 q 592 -135 560 -135 q 645 -156 624 -135 q 667 -210 667 -178 q 645 -264 667 -243 q 592 -285 624 -285 z "},"ń":{"ha":760,"x_min":114,"x_max":654,"o":"m 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 324 659 271 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 m 386 796 l 328 853 l 524 1085 l 604 1008 l 386 796 z "},"ǹ":{"ha":760,"x_min":114,"x_max":654,"o":"m 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 324 659 271 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 m 424 796 l 206 1008 l 286 1085 l 482 853 l 424 796 z "},"ň":{"ha":760,"x_min":114,"x_max":654,"o":"m 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 324 659 271 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 m 349 797 l 190 992 l 239 1036 l 403 879 l 408 879 l 572 1036 l 621 992 l 463 797 l 349 797 z "},"ñ":{"ha":760,"x_min":114,"x_max":654,"o":"m 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 324 659 271 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 m 506 801 q 442 819 468 801 q 393 860 415 838 q 351 900 371 882 q 307 918 331 918 q 260 888 275 918 q 242 808 244 857 l 165 813 q 176 888 167 853 q 201 947 185 922 q 244 987 218 972 q 306 1001 269 1001 q 369 983 343 1001 q 418 943 396 965 q 460 903 440 921 q 506 885 481 885 q 551 915 536 885 q 569 994 567 946 l 646 989 q 635 915 644 949 q 610 856 626 881 q 567 816 593 831 q 506 801 542 801 z "},"ņ":{"ha":760,"x_min":114,"x_max":654,"o":"m 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 324 659 271 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 m 267 -314 l 256 -258 q 375 -235 343 -251 q 407 -192 407 -219 q 382 -151 407 -164 q 308 -133 357 -137 l 333 -81 q 460 -116 424 -92 q 496 -187 496 -140 q 437 -278 496 -249 q 267 -314 378 -308 z "},"ṅ":{"ha":760,"x_min":114,"x_max":654,"o":"m 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 324 659 271 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 m 406 814 q 352 835 374 814 q 331 889 331 856 q 352 942 331 921 q 406 964 374 964 q 459 942 438 964 q 481 889 481 921 q 459 835 481 856 q 406 814 438 814 z "},"ṇ":{"ha":760,"x_min":114,"x_max":654,"o":"m 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 324 659 271 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 m 388 -285 q 334 -264 356 -285 q 313 -210 313 -243 q 334 -156 313 -178 q 388 -135 356 -135 q 441 -156 419 -135 q 463 -210 463 -178 q 441 -264 463 -243 q 388 -285 419 -285 z "},"ṉ":{"ha":760,"x_min":114,"x_max":654,"o":"m 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 324 659 271 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 m 203 -235 l 203 -156 l 572 -156 l 572 -235 l 203 -235 z "},"ʼn":{"ha":1076,"x_min":88,"x_max":963,"o":"m 422 0 l 422 675 l 517 675 l 526 578 l 531 578 q 633 659 579 626 q 757 692 686 692 q 913 625 864 692 q 963 428 963 558 l 963 0 l 849 0 l 849 413 q 818 551 849 508 q 721 593 788 593 q 628 567 668 593 q 536 489 588 540 l 536 0 l 422 0 m 119 599 l 88 651 q 166 726 140 686 q 192 825 192 765 q 181 824 188 824 q 129 842 151 824 q 107 893 107 860 q 128 950 107 929 q 181 971 149 971 q 244 938 221 971 q 268 844 268 906 q 230 701 268 761 q 119 599 192 640 z "},"ò":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 396 796 l 178 1008 l 258 1085 l 454 853 l 396 796 z "},"ó":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 357 796 l 299 853 l 494 1085 l 575 1008 l 357 796 z "},"ô":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 161 833 l 319 1028 l 433 1028 l 592 833 l 543 789 l 379 946 l 374 946 l 210 789 l 161 833 z "},"õ":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 476 801 q 413 819 439 801 q 364 860 386 838 q 322 900 342 882 q 278 918 301 918 q 231 888 246 918 q 213 808 215 857 l 136 813 q 147 888 138 853 q 172 947 156 922 q 215 987 189 972 q 276 1001 240 1001 q 340 983 314 1001 q 389 943 367 965 q 431 903 411 921 q 476 885 451 885 q 522 915 507 885 q 540 994 538 946 l 617 989 q 606 915 615 949 q 581 856 597 881 q 538 816 564 831 q 476 801 513 801 z "},"ö":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 243 815 q 193 835 213 815 q 174 885 174 856 q 193 934 174 914 q 243 954 213 954 q 292 934 272 954 q 311 885 311 914 q 292 835 311 856 q 243 815 272 815 m 510 815 q 461 835 481 815 q 442 885 442 856 q 461 934 442 914 q 510 954 481 954 q 560 934 540 954 q 579 885 579 914 q 560 835 579 856 q 510 815 540 815 z "},"ō":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 192 835 l 192 914 l 561 914 l 561 835 l 192 835 z "},"ő":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 306 789 l 243 818 l 363 1057 l 444 1018 l 306 789 m 515 789 l 451 818 l 572 1057 l 653 1018 l 515 789 z "},"ǒ":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 319 797 l 161 992 l 210 1036 l 374 879 l 379 879 l 543 1036 l 592 992 l 433 797 l 319 797 z "},"ọ":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 378 -285 q 324 -264 346 -285 q 303 -210 303 -243 q 324 -156 303 -178 q 378 -135 346 -135 q 431 -156 410 -135 q 453 -210 453 -178 q 431 -264 453 -243 q 378 -285 410 -285 z "},"ỏ":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 332 794 l 319 850 q 375 873 353 858 q 397 915 397 888 q 282 981 397 975 l 289 1056 q 436 1020 385 1053 q 488 925 488 988 q 474 873 488 894 q 440 835 461 851 q 390 810 418 819 q 332 794 363 800 z "},"ố":{"ha":753,"x_min":64,"x_max":703,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 231 792 l 190 839 l 329 967 l 424 967 l 563 839 l 522 792 l 379 892 l 374 892 l 231 792 m 514 924 l 635 1090 l 703 1043 l 563 885 l 514 924 z "},"ồ":{"ha":753,"x_min":33,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 231 792 l 190 839 l 329 967 l 424 967 l 563 839 l 522 792 l 379 892 l 374 892 l 231 792 m 239 928 l 190 885 l 33 1040 l 100 1090 l 239 928 z "},"ổ":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 231 792 l 190 839 l 329 967 l 424 967 l 563 839 l 522 792 l 379 892 l 374 892 l 231 792 m 538 882 l 525 931 q 567 950 551 938 q 583 985 583 963 q 561 1026 583 1013 q 488 1042 539 1039 l 497 1099 q 623 1071 579 1096 q 667 997 667 1046 q 656 950 667 969 q 626 917 644 931 q 585 896 608 904 q 538 882 563 888 z "},"ỗ":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 231 792 l 190 839 l 329 961 l 424 961 l 563 839 l 522 792 l 379 888 l 374 888 l 231 792 m 186 992 q 215 1081 192 1046 q 286 1115 238 1115 q 340 1106 317 1115 q 384 1086 364 1097 q 423 1066 404 1075 q 461 1057 442 1057 q 492 1071 482 1057 q 507 1115 501 1085 l 567 1110 q 538 1022 561 1057 q 467 986 515 986 q 413 995 436 986 q 369 1015 389 1004 q 330 1035 349 1026 q 292 1044 311 1044 q 261 1031 271 1044 q 246 986 251 1017 l 186 992 z "},"ộ":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 161 833 l 319 1028 l 433 1028 l 592 833 l 543 789 l 379 946 l 374 946 l 210 789 l 161 833 m 378 -285 q 324 -264 346 -285 q 303 -210 303 -243 q 324 -156 303 -178 q 378 -135 346 -135 q 431 -156 410 -135 q 453 -210 453 -178 q 431 -264 453 -243 q 378 -285 410 -285 z "},"ŏ":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 376 793 q 281 811 321 793 q 215 859 240 829 q 176 926 189 889 q 160 1003 163 964 l 231 1014 q 245 962 235 988 q 274 915 256 936 q 317 882 292 894 q 376 869 343 869 q 435 882 410 869 q 479 915 461 894 q 508 962 497 936 q 522 1014 518 988 l 593 1003 q 577 926 590 964 q 538 859 564 889 q 472 811 511 829 q 376 793 432 793 z "},"ṓ":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 329 979 l 285 1033 l 472 1171 l 525 1103 l 329 979 m 192 835 l 192 914 l 561 914 l 561 835 l 192 835 z "},"ø":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 183 51 267 -17 l 115 -32 l 64 8 l 139 99 q 84 202 104 143 q 64 336 64 261 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 479 674 429 692 q 569 622 529 657 l 639 707 l 689 667 l 614 576 q 669 472 649 532 q 689 336 689 411 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 176 342 q 208 185 176 249 l 506 544 q 376 600 454 600 q 297 581 333 600 q 233 528 260 563 q 192 447 207 494 q 176 342 176 399 m 376 75 q 456 94 419 75 q 520 147 493 113 q 562 228 547 181 q 576 332 576 275 q 543 490 576 425 l 247 129 q 376 75 301 75 z "},"œ":{"ha":1165,"x_min":64,"x_max":1113,"o":"m 367 -17 q 251 7 306 -17 q 154 76 196 31 q 88 187 113 121 q 64 336 64 253 q 89 487 64 421 q 156 599 114 553 q 253 668 197 644 q 369 692 308 692 q 513 649 447 692 q 614 522 578 606 q 715 647 653 601 q 851 692 776 692 q 963 669 914 692 q 1044 606 1011 647 q 1095 505 1078 564 q 1113 374 1113 446 q 1108 310 1113 335 l 665 310 q 684 214 667 257 q 730 140 701 171 q 797 93 758 110 q 878 76 835 76 q 967 92 926 76 q 1044 132 1007 108 l 1086 53 q 988 4 1042 25 q 864 -17 933 -17 q 719 28 785 -17 q 615 151 654 72 q 367 -17 536 -17 m 369 78 q 446 97 411 78 q 506 149 481 115 q 544 231 531 183 q 558 336 558 278 q 544 442 558 394 q 506 525 531 490 q 446 578 481 560 q 369 597 411 597 q 293 578 328 597 q 233 525 258 560 q 194 442 208 490 q 181 336 181 394 q 194 231 181 278 q 233 149 208 183 q 293 97 258 115 q 369 78 328 78 m 665 386 l 1013 386 q 969 546 1013 490 q 849 601 926 601 q 726 544 778 601 q 665 386 675 486 z "},"ơ":{"ha":753,"x_min":64,"x_max":728,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 508 663 446 692 q 597 705 567 674 q 628 794 628 736 q 622 834 628 814 q 607 871 617 854 l 696 913 q 719 861 710 889 q 728 803 728 833 q 715 731 728 761 q 680 677 701 700 q 631 640 658 654 q 575 617 604 625 q 658 501 628 572 q 689 336 689 431 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 z "},"ớ":{"ha":753,"x_min":64,"x_max":728,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 508 663 446 692 q 597 705 567 674 q 628 794 628 736 q 622 834 628 814 q 607 871 617 854 l 696 913 q 719 861 710 889 q 728 803 728 833 q 715 731 728 761 q 680 677 701 700 q 631 640 658 654 q 575 617 604 625 q 658 501 628 572 q 689 336 689 431 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 357 796 l 299 853 l 494 1085 l 575 1008 l 357 796 z "},"ờ":{"ha":753,"x_min":64,"x_max":728,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 508 663 446 692 q 597 705 567 674 q 628 794 628 736 q 622 834 628 814 q 607 871 617 854 l 696 913 q 719 861 710 889 q 728 803 728 833 q 715 731 728 761 q 680 677 701 700 q 631 640 658 654 q 575 617 604 625 q 658 501 628 572 q 689 336 689 431 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 396 796 l 178 1008 l 258 1085 l 454 853 l 396 796 z "},"ở":{"ha":753,"x_min":64,"x_max":728,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 508 663 446 692 q 597 705 567 674 q 628 794 628 736 q 622 834 628 814 q 607 871 617 854 l 696 913 q 719 861 710 889 q 728 803 728 833 q 715 731 728 761 q 680 677 701 700 q 631 640 658 654 q 575 617 604 625 q 658 501 628 572 q 689 336 689 431 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 332 794 l 319 850 q 375 873 353 858 q 397 915 397 888 q 282 981 397 975 l 289 1056 q 436 1020 385 1053 q 488 925 488 988 q 474 873 488 894 q 440 835 461 851 q 390 810 418 819 q 332 794 363 800 z "},"ỡ":{"ha":753,"x_min":64,"x_max":728,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 508 663 446 692 q 597 705 567 674 q 628 794 628 736 q 622 834 628 814 q 607 871 617 854 l 696 913 q 719 861 710 889 q 728 803 728 833 q 715 731 728 761 q 680 677 701 700 q 631 640 658 654 q 575 617 604 625 q 658 501 628 572 q 689 336 689 431 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 456 801 q 392 819 418 801 q 343 860 365 838 q 301 900 321 882 q 257 918 281 918 q 210 888 225 918 q 192 808 194 857 l 115 813 q 126 888 117 853 q 151 947 135 922 q 194 987 168 972 q 256 1001 219 1001 q 319 983 293 1001 q 368 943 346 965 q 410 903 390 921 q 456 885 431 885 q 501 915 486 885 q 519 994 517 946 l 596 989 q 585 915 594 949 q 560 856 576 881 q 517 816 543 831 q 456 801 492 801 z "},"ợ":{"ha":753,"x_min":64,"x_max":728,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 508 663 446 692 q 597 705 567 674 q 628 794 628 736 q 622 834 628 814 q 607 871 617 854 l 696 913 q 719 861 710 889 q 728 803 728 833 q 715 731 728 761 q 680 677 701 700 q 631 640 658 654 q 575 617 604 625 q 658 501 628 572 q 689 336 689 431 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 378 -285 q 324 -264 346 -285 q 303 -210 303 -243 q 324 -156 303 -178 q 378 -135 346 -135 q 431 -156 410 -135 q 453 -210 453 -178 q 431 -264 453 -243 q 378 -285 410 -285 z "},"ǫ":{"ha":753,"x_min":64,"x_max":689,"o":"m 410 -286 q 321 -256 357 -286 q 285 -168 285 -226 q 292 -119 285 -142 q 312 -76 300 -96 q 337 -40 324 -56 q 363 -15 350 -25 q 247 13 301 -12 q 152 83 193 39 q 88 192 111 128 q 64 336 64 256 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 673 212 689 265 q 628 117 657 158 q 558 47 599 76 q 468 -6 518 17 q 395 -67 421 -28 q 369 -146 369 -106 q 389 -194 369 -178 q 433 -210 408 -210 q 463 -205 450 -210 q 490 -192 476 -200 l 519 -249 q 469 -275 500 -264 q 410 -286 438 -286 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 z "},"ŕ":{"ha":482,"x_min":114,"x_max":500,"o":"m 114 0 l 114 675 l 208 675 l 218 553 l 222 553 q 306 654 257 617 q 414 692 356 692 q 486 678 454 692 l 464 578 q 433 586 447 583 q 399 589 419 589 q 309 554 356 589 q 228 433 263 519 l 228 0 l 114 0 m 282 796 l 224 853 l 419 1085 l 500 1008 l 282 796 z "},"ŗ":{"ha":482,"x_min":36,"x_max":486,"o":"m 114 0 l 114 675 l 208 675 l 218 553 l 222 553 q 306 654 257 617 q 414 692 356 692 q 486 678 454 692 l 464 578 q 433 586 447 583 q 399 589 419 589 q 309 554 356 589 q 228 433 263 519 l 228 0 l 114 0 m 47 -314 l 36 -258 q 156 -235 124 -251 q 188 -192 188 -219 q 163 -151 188 -164 q 89 -133 138 -137 l 114 -81 q 240 -116 204 -92 q 276 -187 276 -140 q 217 -278 276 -249 q 47 -314 158 -308 z "},"ř":{"ha":482,"x_min":86,"x_max":517,"o":"m 114 0 l 114 675 l 208 675 l 218 553 l 222 553 q 306 654 257 617 q 414 692 356 692 q 486 678 454 692 l 464 578 q 433 586 447 583 q 399 589 419 589 q 309 554 356 589 q 228 433 263 519 l 228 0 l 114 0 m 244 797 l 86 992 l 135 1036 l 299 879 l 304 879 l 468 1036 l 517 992 l 358 797 l 244 797 z "},"ṙ":{"ha":482,"x_min":114,"x_max":486,"o":"m 114 0 l 114 675 l 208 675 l 218 553 l 222 553 q 306 654 257 617 q 414 692 356 692 q 486 678 454 692 l 464 578 q 433 586 447 583 q 399 589 419 589 q 309 554 356 589 q 228 433 263 519 l 228 0 l 114 0 m 300 814 q 247 835 268 814 q 225 889 225 856 q 247 942 225 921 q 300 964 268 964 q 353 942 332 964 q 375 889 375 921 q 353 835 375 856 q 300 814 332 814 z "},"ṛ":{"ha":482,"x_min":93,"x_max":486,"o":"m 114 0 l 114 675 l 208 675 l 218 553 l 222 553 q 306 654 257 617 q 414 692 356 692 q 486 678 454 692 l 464 578 q 433 586 447 583 q 399 589 419 589 q 309 554 356 589 q 228 433 263 519 l 228 0 l 114 0 m 168 -285 q 115 -264 136 -285 q 93 -210 93 -243 q 115 -156 93 -178 q 168 -135 136 -135 q 222 -156 200 -135 q 243 -210 243 -178 q 222 -264 243 -243 q 168 -285 200 -285 z "},"ṝ":{"ha":482,"x_min":93,"x_max":486,"o":"m 114 0 l 114 675 l 208 675 l 218 553 l 222 553 q 306 654 257 617 q 414 692 356 692 q 486 678 454 692 l 464 578 q 433 586 447 583 q 399 589 419 589 q 309 554 356 589 q 228 433 263 519 l 228 0 l 114 0 m 117 835 l 117 914 l 486 914 l 486 835 l 117 835 m 168 -285 q 115 -264 136 -285 q 93 -210 93 -243 q 115 -156 93 -178 q 168 -135 136 -135 q 222 -156 200 -135 q 243 -210 243 -178 q 222 -264 243 -243 q 168 -285 200 -285 z "},"ṟ":{"ha":482,"x_min":-17,"x_max":486,"o":"m 114 0 l 114 675 l 208 675 l 218 553 l 222 553 q 306 654 257 617 q 414 692 356 692 q 486 678 454 692 l 464 578 q 433 586 447 583 q 399 589 419 589 q 309 554 356 589 q 228 433 263 519 l 228 0 l 114 0 m -17 -235 l -17 -156 l 353 -156 l 353 -235 l -17 -235 z "},"ś":{"ha":582,"x_min":39,"x_max":538,"o":"m 290 -17 q 153 10 218 -17 q 39 76 88 36 l 96 153 q 187 94 140 117 q 294 72 233 72 q 394 103 361 72 q 428 178 428 133 q 414 224 428 204 q 378 258 400 243 q 329 283 357 272 q 274 306 301 294 q 201 334 238 318 q 137 373 165 350 q 90 426 108 396 q 72 500 72 457 q 88 576 72 540 q 134 637 104 611 q 207 677 164 663 q 304 692 250 692 q 422 669 368 692 q 514 615 475 647 l 460 543 q 388 586 425 569 q 306 603 350 603 q 212 574 242 603 q 182 506 182 544 q 194 465 182 482 q 228 434 207 447 q 276 410 249 421 q 332 389 303 400 q 405 360 368 375 q 471 322 442 344 q 519 265 500 299 q 538 185 538 232 q 522 107 538 143 q 474 43 506 71 q 397 -1 443 15 q 290 -17 350 -17 m 285 796 l 226 853 l 422 1085 l 503 1008 l 285 796 z "},"ŝ":{"ha":582,"x_min":39,"x_max":538,"o":"m 290 -17 q 153 10 218 -17 q 39 76 88 36 l 96 153 q 187 94 140 117 q 294 72 233 72 q 394 103 361 72 q 428 178 428 133 q 414 224 428 204 q 378 258 400 243 q 329 283 357 272 q 274 306 301 294 q 201 334 238 318 q 137 373 165 350 q 90 426 108 396 q 72 500 72 457 q 88 576 72 540 q 134 637 104 611 q 207 677 164 663 q 304 692 250 692 q 422 669 368 692 q 514 615 475 647 l 460 543 q 388 586 425 569 q 306 603 350 603 q 212 574 242 603 q 182 506 182 544 q 194 465 182 482 q 228 434 207 447 q 276 410 249 421 q 332 389 303 400 q 405 360 368 375 q 471 322 442 344 q 519 265 500 299 q 538 185 538 232 q 522 107 538 143 q 474 43 506 71 q 397 -1 443 15 q 290 -17 350 -17 m 89 833 l 247 1028 l 361 1028 l 519 833 l 471 789 l 307 946 l 301 946 l 138 789 l 89 833 z "},"š":{"ha":582,"x_min":39,"x_max":538,"o":"m 290 -17 q 153 10 218 -17 q 39 76 88 36 l 96 153 q 187 94 140 117 q 294 72 233 72 q 394 103 361 72 q 428 178 428 133 q 414 224 428 204 q 378 258 400 243 q 329 283 357 272 q 274 306 301 294 q 201 334 238 318 q 137 373 165 350 q 90 426 108 396 q 72 500 72 457 q 88 576 72 540 q 134 637 104 611 q 207 677 164 663 q 304 692 250 692 q 422 669 368 692 q 514 615 475 647 l 460 543 q 388 586 425 569 q 306 603 350 603 q 212 574 242 603 q 182 506 182 544 q 194 465 182 482 q 228 434 207 447 q 276 410 249 421 q 332 389 303 400 q 405 360 368 375 q 471 322 442 344 q 519 265 500 299 q 538 185 538 232 q 522 107 538 143 q 474 43 506 71 q 397 -1 443 15 q 290 -17 350 -17 m 247 797 l 89 992 l 138 1036 l 301 879 l 307 879 l 471 1036 l 519 992 l 361 797 l 247 797 z "},"ş":{"ha":582,"x_min":39,"x_max":538,"o":"m 290 -17 q 153 10 218 -17 q 39 76 88 36 l 96 153 q 187 94 140 117 q 294 72 233 72 q 394 103 361 72 q 428 178 428 133 q 414 224 428 204 q 378 258 400 243 q 329 283 357 272 q 274 306 301 294 q 201 334 238 318 q 137 373 165 350 q 90 426 108 396 q 72 500 72 457 q 88 576 72 540 q 134 637 104 611 q 207 677 164 663 q 304 692 250 692 q 422 669 368 692 q 514 615 475 647 l 460 543 q 388 586 425 569 q 306 603 350 603 q 212 574 242 603 q 182 506 182 544 q 194 465 182 482 q 228 434 207 447 q 276 410 249 421 q 332 389 303 400 q 405 360 368 375 q 471 322 442 344 q 519 265 500 299 q 538 185 538 232 q 522 107 538 143 q 474 43 506 71 q 397 -1 443 15 q 290 -17 350 -17 m 188 -314 l 176 -258 q 296 -235 264 -251 q 328 -189 328 -219 q 304 -146 328 -161 q 221 -122 281 -131 l 282 4 l 356 4 l 315 -89 q 390 -122 364 -100 q 417 -187 417 -144 q 358 -278 417 -249 q 188 -314 299 -308 z "},"ș":{"ha":582,"x_min":39,"x_max":538,"o":"m 290 -17 q 153 10 218 -17 q 39 76 88 36 l 96 153 q 187 94 140 117 q 294 72 233 72 q 394 103 361 72 q 428 178 428 133 q 414 224 428 204 q 378 258 400 243 q 329 283 357 272 q 274 306 301 294 q 201 334 238 318 q 137 373 165 350 q 90 426 108 396 q 72 500 72 457 q 88 576 72 540 q 134 637 104 611 q 207 677 164 663 q 304 692 250 692 q 422 669 368 692 q 514 615 475 647 l 460 543 q 388 586 425 569 q 306 603 350 603 q 212 574 242 603 q 182 506 182 544 q 194 465 182 482 q 228 434 207 447 q 276 410 249 421 q 332 389 303 400 q 405 360 368 375 q 471 322 442 344 q 519 265 500 299 q 538 185 538 232 q 522 107 538 143 q 474 43 506 71 q 397 -1 443 15 q 290 -17 350 -17 m 188 -314 l 176 -258 q 296 -235 264 -251 q 328 -192 328 -219 q 303 -151 328 -164 q 229 -133 278 -137 l 254 -81 q 381 -116 344 -92 q 417 -187 417 -140 q 358 -278 417 -249 q 188 -314 299 -308 z "},"ṡ":{"ha":582,"x_min":39,"x_max":538,"o":"m 290 -17 q 153 10 218 -17 q 39 76 88 36 l 96 153 q 187 94 140 117 q 294 72 233 72 q 394 103 361 72 q 428 178 428 133 q 414 224 428 204 q 378 258 400 243 q 329 283 357 272 q 274 306 301 294 q 201 334 238 318 q 137 373 165 350 q 90 426 108 396 q 72 500 72 457 q 88 576 72 540 q 134 637 104 611 q 207 677 164 663 q 304 692 250 692 q 422 669 368 692 q 514 615 475 647 l 460 543 q 388 586 425 569 q 306 603 350 603 q 212 574 242 603 q 182 506 182 544 q 194 465 182 482 q 228 434 207 447 q 276 410 249 421 q 332 389 303 400 q 405 360 368 375 q 471 322 442 344 q 519 265 500 299 q 538 185 538 232 q 522 107 538 143 q 474 43 506 71 q 397 -1 443 15 q 290 -17 350 -17 m 304 814 q 251 835 272 814 q 229 889 229 856 q 251 942 229 921 q 304 964 272 964 q 358 942 336 964 q 379 889 379 921 q 358 835 379 856 q 304 814 336 814 z "},"ṣ":{"ha":582,"x_min":39,"x_max":538,"o":"m 290 -17 q 153 10 218 -17 q 39 76 88 36 l 96 153 q 187 94 140 117 q 294 72 233 72 q 394 103 361 72 q 428 178 428 133 q 414 224 428 204 q 378 258 400 243 q 329 283 357 272 q 274 306 301 294 q 201 334 238 318 q 137 373 165 350 q 90 426 108 396 q 72 500 72 457 q 88 576 72 540 q 134 637 104 611 q 207 677 164 663 q 304 692 250 692 q 422 669 368 692 q 514 615 475 647 l 460 543 q 388 586 425 569 q 306 603 350 603 q 212 574 242 603 q 182 506 182 544 q 194 465 182 482 q 228 434 207 447 q 276 410 249 421 q 332 389 303 400 q 405 360 368 375 q 471 322 442 344 q 519 265 500 299 q 538 185 538 232 q 522 107 538 143 q 474 43 506 71 q 397 -1 443 15 q 290 -17 350 -17 m 310 -285 q 256 -264 278 -285 q 235 -210 235 -243 q 256 -156 235 -178 q 310 -135 278 -135 q 363 -156 342 -135 q 385 -210 385 -178 q 363 -264 385 -243 q 310 -285 342 -285 z "},"ß":{"ha":800,"x_min":114,"x_max":760,"o":"m 538 -17 q 432 1 479 -17 q 342 51 385 19 l 388 132 q 459 87 424 101 q 535 72 494 72 q 622 106 593 72 q 651 183 651 139 q 631 250 651 224 q 581 296 611 276 q 515 333 550 315 q 449 372 479 350 q 398 426 418 394 q 378 506 378 457 q 397 586 378 553 q 438 650 415 619 q 481 713 461 681 q 500 789 500 744 q 472 876 500 842 q 385 910 443 910 q 269 856 310 910 q 228 694 228 803 l 228 0 l 114 0 l 114 715 q 185 924 114 846 q 386 1003 256 1003 q 483 987 440 1003 q 554 943 525 971 q 598 878 583 915 q 613 800 613 842 q 593 710 613 747 q 549 643 574 674 q 506 584 525 613 q 486 519 486 556 q 506 464 486 486 q 557 424 526 442 q 623 389 588 407 q 689 346 658 371 q 740 283 719 321 q 760 190 760 246 q 744 108 760 146 q 700 43 729 71 q 630 -1 671 15 q 538 -17 589 -17 z "},"ť":{"ha":469,"x_min":33,"x_max":451,"o":"m 326 -17 q 235 0 272 -17 q 176 46 199 17 q 143 117 153 75 q 133 208 133 158 l 133 582 l 33 582 l 33 668 l 139 675 l 153 864 l 249 864 l 249 675 l 431 675 l 431 582 l 249 582 l 249 207 q 272 110 249 144 q 353 76 294 76 q 392 82 371 76 q 429 94 413 88 l 451 8 q 391 -9 424 -1 q 326 -17 358 -17 m 357 761 l 351 1056 l 433 1056 l 432 976 l 413 761 l 357 761 z "},"ţ":{"ha":469,"x_min":33,"x_max":451,"o":"m 326 -17 q 235 0 272 -17 q 176 46 199 17 q 143 117 153 75 q 133 208 133 158 l 133 582 l 33 582 l 33 668 l 139 675 l 153 864 l 249 864 l 249 675 l 431 675 l 431 582 l 249 582 l 249 207 q 272 110 249 144 q 353 76 294 76 q 392 82 371 76 q 429 94 413 88 l 451 8 q 391 -9 424 -1 q 326 -17 358 -17 m 179 -314 l 168 -258 q 288 -235 256 -251 q 319 -189 319 -219 q 296 -146 319 -161 q 213 -122 272 -131 l 274 4 l 347 4 l 307 -89 q 382 -122 356 -100 q 408 -187 408 -144 q 349 -278 408 -249 q 179 -314 290 -308 z "},"ț":{"ha":469,"x_min":33,"x_max":451,"o":"m 326 -17 q 235 0 272 -17 q 176 46 199 17 q 143 117 153 75 q 133 208 133 158 l 133 582 l 33 582 l 33 668 l 139 675 l 153 864 l 249 864 l 249 675 l 431 675 l 431 582 l 249 582 l 249 207 q 272 110 249 144 q 353 76 294 76 q 392 82 371 76 q 429 94 413 88 l 451 8 q 391 -9 424 -1 q 326 -17 358 -17 m 175 -314 l 164 -258 q 283 -235 251 -251 q 315 -192 315 -219 q 290 -151 315 -164 q 217 -133 265 -137 l 242 -81 q 368 -116 332 -92 q 404 -187 404 -140 q 345 -278 404 -249 q 175 -314 286 -308 z "},"ṭ":{"ha":469,"x_min":33,"x_max":451,"o":"m 326 -17 q 235 0 272 -17 q 176 46 199 17 q 143 117 153 75 q 133 208 133 158 l 133 582 l 33 582 l 33 668 l 139 675 l 153 864 l 249 864 l 249 675 l 431 675 l 431 582 l 249 582 l 249 207 q 272 110 249 144 q 353 76 294 76 q 392 82 371 76 q 429 94 413 88 l 451 8 q 391 -9 424 -1 q 326 -17 358 -17 m 297 -285 q 244 -264 265 -285 q 222 -210 222 -243 q 244 -156 222 -178 q 297 -135 265 -135 q 351 -156 329 -135 q 372 -210 372 -178 q 351 -264 372 -243 q 297 -285 329 -285 z "},"ṯ":{"ha":469,"x_min":33,"x_max":481,"o":"m 326 -17 q 235 0 272 -17 q 176 46 199 17 q 143 117 153 75 q 133 208 133 158 l 133 582 l 33 582 l 33 668 l 139 675 l 153 864 l 249 864 l 249 675 l 431 675 l 431 582 l 249 582 l 249 207 q 272 110 249 144 q 353 76 294 76 q 392 82 371 76 q 429 94 413 88 l 451 8 q 391 -9 424 -1 q 326 -17 358 -17 m 111 -235 l 111 -156 l 481 -156 l 481 -235 l 111 -235 z "},"ẗ":{"ha":469,"x_min":-3,"x_max":451,"o":"m 326 -17 q 235 0 272 -17 q 176 46 199 17 q 143 117 153 75 q 133 208 133 158 l 133 582 l 33 582 l 33 668 l 139 675 l 153 864 l 249 864 l 249 675 l 431 675 l 431 582 l 249 582 l 249 207 q 272 110 249 144 q 353 76 294 76 q 392 82 371 76 q 429 94 413 88 l 451 8 q 391 -9 424 -1 q 326 -17 358 -17 m 67 1004 q 17 1024 36 1004 q -3 1074 -3 1044 q 17 1123 -3 1103 q 67 1143 36 1143 q 115 1123 96 1143 q 135 1074 135 1103 q 115 1024 135 1044 q 67 1004 96 1004 m 333 1004 q 285 1024 304 1004 q 265 1074 265 1044 q 285 1123 265 1103 q 333 1143 304 1143 q 383 1123 364 1143 q 403 1074 403 1103 q 383 1024 403 1044 q 333 1004 364 1004 z "},"ŧ":{"ha":469,"x_min":33,"x_max":451,"o":"m 33 321 l 33 381 l 133 388 l 133 582 l 33 582 l 33 668 l 139 675 l 153 864 l 249 864 l 249 675 l 431 675 l 431 582 l 249 582 l 249 388 l 431 388 l 431 321 l 249 321 l 249 207 q 272 110 249 144 q 353 76 294 76 q 392 82 371 76 q 429 94 413 88 l 451 8 q 391 -9 424 -1 q 326 -17 358 -17 q 235 0 272 -17 q 176 46 199 17 q 143 117 153 75 q 133 208 133 158 l 133 321 l 33 321 z "},"ù":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 397 796 l 179 1008 l 260 1085 l 456 853 l 397 796 z "},"ú":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 358 796 l 300 853 l 496 1085 l 576 1008 l 358 796 z "},"û":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 163 833 l 321 1028 l 435 1028 l 593 833 l 544 789 l 381 946 l 375 946 l 211 789 l 163 833 z "},"ũ":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 478 801 q 414 819 440 801 q 365 860 388 838 q 323 900 343 882 q 279 918 303 918 q 232 888 247 918 q 214 808 217 857 l 138 813 q 148 888 139 853 q 174 947 157 922 q 216 987 190 972 q 278 1001 242 1001 q 342 983 315 1001 q 390 943 368 965 q 433 903 413 921 q 478 885 453 885 q 524 915 508 885 q 542 994 539 946 l 618 989 q 608 915 617 949 q 582 856 599 881 q 540 816 565 831 q 478 801 514 801 z "},"ü":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 244 815 q 194 835 214 815 q 175 885 175 856 q 194 934 175 914 q 244 954 214 954 q 293 934 274 954 q 313 885 313 914 q 293 835 313 856 q 244 815 274 815 m 511 815 q 463 835 482 815 q 443 885 443 856 q 463 934 443 914 q 511 954 482 954 q 561 934 542 954 q 581 885 581 914 q 561 835 581 856 q 511 815 542 815 z "},"ū":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 189 835 l 189 914 l 558 914 l 558 835 l 189 835 z "},"ŭ":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 378 793 q 282 811 322 793 q 216 859 242 829 q 177 926 190 889 q 161 1003 164 964 l 232 1014 q 247 962 236 988 q 275 915 257 936 q 319 882 293 894 q 378 869 344 869 q 437 882 411 869 q 481 915 463 894 q 509 962 499 936 q 524 1014 519 988 l 594 1003 q 578 926 592 964 q 539 859 565 889 q 473 811 513 829 q 378 793 433 793 z "},"ů":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 378 769 q 266 808 307 769 q 225 907 225 847 q 266 1004 225 965 q 378 1043 307 1043 q 490 1004 449 1043 q 531 907 531 965 q 490 808 531 847 q 378 769 449 769 m 378 821 q 434 844 411 821 q 457 907 457 867 q 434 969 457 946 q 378 992 411 992 q 322 969 344 992 q 299 907 299 946 q 322 844 299 867 q 378 821 344 821 z "},"ű":{"ha":756,"x_min":104,"x_max":654,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 307 789 l 244 818 l 364 1057 l 446 1018 l 307 789 m 517 789 l 453 818 l 574 1057 l 654 1018 l 517 789 z "},"ǔ":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 321 797 l 163 992 l 211 1036 l 375 879 l 381 879 l 544 1036 l 593 992 l 435 797 l 321 797 z "},"ǖ":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 244 817 q 199 835 217 817 q 181 879 181 853 q 199 925 181 907 q 244 943 217 943 q 290 925 272 943 q 307 879 307 907 q 290 835 307 853 q 244 817 272 817 m 192 1042 l 192 1107 l 563 1107 l 563 1042 l 192 1042 m 511 817 q 466 835 483 817 q 449 879 449 853 q 466 925 449 907 q 511 943 483 943 q 557 925 539 943 q 575 879 575 907 q 557 835 575 853 q 511 817 539 817 z "},"ǘ":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 368 979 l 319 1013 l 433 1172 l 501 1125 l 368 979 m 244 817 q 199 835 217 817 q 181 879 181 853 q 199 925 181 907 q 244 943 217 943 q 290 925 272 943 q 307 879 307 907 q 290 835 307 853 q 244 817 272 817 m 511 817 q 466 835 483 817 q 449 879 449 853 q 466 925 449 907 q 511 943 483 943 q 557 925 539 943 q 575 879 575 907 q 557 835 575 853 q 511 817 539 817 z "},"ǚ":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 242 1167 l 375 1065 l 381 1065 l 514 1167 l 556 1128 l 425 1000 l 331 1000 l 200 1128 l 242 1167 m 244 817 q 199 835 217 817 q 181 879 181 853 q 199 925 181 907 q 244 943 217 943 q 290 925 272 943 q 307 879 307 907 q 290 835 307 853 q 244 817 272 817 m 511 817 q 466 835 483 817 q 449 879 449 853 q 466 925 449 907 q 511 943 483 943 q 557 925 539 943 q 575 879 575 907 q 557 835 575 853 q 511 817 539 817 z "},"ǜ":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 388 979 l 254 1125 l 322 1172 l 436 1013 l 388 979 m 244 817 q 199 835 217 817 q 181 879 181 853 q 199 925 181 907 q 244 943 217 943 q 290 925 272 943 q 307 879 307 907 q 290 835 307 853 q 244 817 272 817 m 511 817 q 466 835 483 817 q 449 879 449 853 q 466 925 449 907 q 511 943 483 943 q 557 925 539 943 q 575 879 575 907 q 557 835 575 853 q 511 817 539 817 z "},"ụ":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 403 -285 q 349 -264 371 -285 q 328 -210 328 -243 q 349 -156 328 -178 q 403 -135 371 -135 q 456 -156 435 -135 q 478 -210 478 -178 q 456 -264 478 -243 q 403 -285 435 -285 z "},"ủ":{"ha":756,"x_min":104,"x_max":642,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 333 794 l 321 850 q 376 873 354 858 q 399 915 399 888 q 283 981 399 975 l 290 1056 q 438 1020 386 1053 q 489 925 489 988 q 476 873 489 894 q 441 835 463 851 q 392 810 419 819 q 333 794 364 800 z "},"ų":{"ha":756,"x_min":104,"x_max":671,"o":"m 563 -286 q 473 -256 510 -286 q 436 -168 436 -226 q 470 -69 436 -111 q 549 6 504 -26 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 278 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 642 675 l 642 0 q 550 -68 579 -31 q 521 -146 521 -106 q 541 -194 521 -178 q 585 -210 561 -210 q 615 -205 601 -210 q 642 -192 629 -200 l 671 -249 q 620 -275 651 -264 q 563 -286 589 -286 z "},"ư":{"ha":756,"x_min":104,"x_max":775,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 557 675 q 603 688 582 679 q 640 711 624 696 q 665 750 656 726 q 674 808 674 774 q 668 848 674 828 q 654 885 663 868 l 743 926 q 766 875 757 903 q 775 817 775 847 q 763 744 775 775 q 733 690 751 713 q 690 654 714 668 q 642 632 665 640 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 z "},"ứ":{"ha":756,"x_min":104,"x_max":775,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 557 675 q 603 688 582 679 q 640 711 624 696 q 665 750 656 726 q 674 808 674 774 q 668 848 674 828 q 654 885 663 868 l 743 926 q 766 875 757 903 q 775 817 775 847 q 763 744 775 775 q 733 690 751 713 q 690 654 714 668 q 642 632 665 640 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 350 796 l 292 853 l 488 1085 l 568 1008 l 350 796 z "},"ừ":{"ha":756,"x_min":104,"x_max":775,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 557 675 q 603 688 582 679 q 640 711 624 696 q 665 750 656 726 q 674 808 674 774 q 668 848 674 828 q 654 885 663 868 l 743 926 q 766 875 757 903 q 775 817 775 847 q 763 744 775 775 q 733 690 751 713 q 690 654 714 668 q 642 632 665 640 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 389 796 l 171 1008 l 251 1085 l 447 853 l 389 796 z "},"ử":{"ha":756,"x_min":104,"x_max":775,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 557 675 q 603 688 582 679 q 640 711 624 696 q 665 750 656 726 q 674 808 674 774 q 668 848 674 828 q 654 885 663 868 l 743 926 q 766 875 757 903 q 775 817 775 847 q 763 744 775 775 q 733 690 751 713 q 690 654 714 668 q 642 632 665 640 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 325 794 l 313 850 q 368 873 346 858 q 390 915 390 888 q 275 981 390 975 l 282 1056 q 429 1020 378 1053 q 481 925 481 988 q 467 873 481 894 q 433 835 454 851 q 383 810 411 819 q 325 794 356 800 z "},"ữ":{"ha":756,"x_min":104,"x_max":775,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 557 675 q 603 688 582 679 q 640 711 624 696 q 665 750 656 726 q 674 808 674 774 q 668 848 674 828 q 654 885 663 868 l 743 926 q 766 875 757 903 q 775 817 775 847 q 763 744 775 775 q 733 690 751 713 q 690 654 714 668 q 642 632 665 640 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 469 801 q 406 819 432 801 q 357 860 379 838 q 315 900 335 882 q 271 918 294 918 q 224 888 239 918 q 206 808 208 857 l 129 813 q 140 888 131 853 q 165 947 149 922 q 208 987 182 972 q 269 1001 233 1001 q 333 983 307 1001 q 382 943 360 965 q 424 903 404 921 q 469 885 444 885 q 515 915 500 885 q 533 994 531 946 l 610 989 q 599 915 608 949 q 574 856 590 881 q 531 816 557 831 q 469 801 506 801 z "},"ự":{"ha":756,"x_min":104,"x_max":775,"o":"m 311 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 439 109 399 82 q 528 196 479 136 l 528 675 l 557 675 q 603 688 582 679 q 640 711 624 696 q 665 750 656 726 q 674 808 674 774 q 668 848 674 828 q 654 885 663 868 l 743 926 q 766 875 757 903 q 775 817 775 847 q 763 744 775 775 q 733 690 751 713 q 690 654 714 668 q 642 632 665 640 l 642 0 l 547 0 l 538 106 l 533 106 q 434 17 486 50 q 311 -17 382 -17 m 394 -285 q 341 -264 363 -285 q 319 -210 319 -243 q 341 -156 319 -178 q 394 -135 363 -135 q 448 -156 426 -135 q 469 -210 469 -178 q 448 -264 469 -243 q 394 -285 426 -285 z "},"ẁ":{"ha":997,"x_min":33,"x_max":964,"o":"m 221 0 l 33 675 l 150 675 l 250 285 q 271 190 261 236 q 290 97 281 144 l 296 97 q 318 191 307 144 q 342 285 329 238 l 446 675 l 557 675 l 663 285 q 687 190 675 236 q 710 97 699 144 l 715 97 q 736 190 726 144 q 757 285 746 236 l 856 675 l 964 675 l 783 0 l 644 0 l 547 363 q 524 458 535 411 q 501 557 514 506 l 496 557 q 474 458 485 506 q 449 361 463 410 l 354 0 l 221 0 m 519 796 l 301 1008 l 382 1085 l 578 853 l 519 796 z "},"ẃ":{"ha":997,"x_min":33,"x_max":964,"o":"m 221 0 l 33 675 l 150 675 l 250 285 q 271 190 261 236 q 290 97 281 144 l 296 97 q 318 191 307 144 q 342 285 329 238 l 446 675 l 557 675 l 663 285 q 687 190 675 236 q 710 97 699 144 l 715 97 q 736 190 726 144 q 757 285 746 236 l 856 675 l 964 675 l 783 0 l 644 0 l 547 363 q 524 458 535 411 q 501 557 514 506 l 496 557 q 474 458 485 506 q 449 361 463 410 l 354 0 l 221 0 m 481 796 l 422 853 l 618 1085 l 699 1008 l 481 796 z "},"ŵ":{"ha":997,"x_min":33,"x_max":964,"o":"m 221 0 l 33 675 l 150 675 l 250 285 q 271 190 261 236 q 290 97 281 144 l 296 97 q 318 191 307 144 q 342 285 329 238 l 446 675 l 557 675 l 663 285 q 687 190 675 236 q 710 97 699 144 l 715 97 q 736 190 726 144 q 757 285 746 236 l 856 675 l 964 675 l 783 0 l 644 0 l 547 363 q 524 458 535 411 q 501 557 514 506 l 496 557 q 474 458 485 506 q 449 361 463 410 l 354 0 l 221 0 m 285 833 l 443 1028 l 557 1028 l 715 833 l 667 789 l 503 946 l 497 946 l 333 789 l 285 833 z "},"ẅ":{"ha":997,"x_min":33,"x_max":964,"o":"m 221 0 l 33 675 l 150 675 l 250 285 q 271 190 261 236 q 290 97 281 144 l 296 97 q 318 191 307 144 q 342 285 329 238 l 446 675 l 557 675 l 663 285 q 687 190 675 236 q 710 97 699 144 l 715 97 q 736 190 726 144 q 757 285 746 236 l 856 675 l 964 675 l 783 0 l 644 0 l 547 363 q 524 458 535 411 q 501 557 514 506 l 496 557 q 474 458 485 506 q 449 361 463 410 l 354 0 l 221 0 m 367 815 q 317 835 336 815 q 297 885 297 856 q 317 934 297 914 q 367 954 336 954 q 415 934 396 954 q 435 885 435 914 q 415 835 435 856 q 367 815 396 815 m 633 815 q 585 835 604 815 q 565 885 565 856 q 585 934 565 914 q 633 954 604 954 q 683 934 664 954 q 703 885 703 914 q 683 835 703 856 q 633 815 664 815 z "},"ỳ":{"ha":649,"x_min":17,"x_max":632,"o":"m 125 -290 q 82 -287 101 -290 q 46 -276 63 -283 l 68 -186 q 93 -192 79 -189 q 119 -196 107 -196 q 215 -155 178 -196 q 272 -51 251 -114 l 288 -1 l 17 675 l 135 675 l 272 301 q 305 208 288 257 q 338 111 322 158 l 343 111 q 372 207 358 157 q 400 301 386 257 l 521 675 l 632 675 l 378 -56 q 338 -149 360 -106 q 285 -223 315 -192 q 215 -272 254 -254 q 125 -290 176 -290 m 356 796 l 138 1008 l 218 1085 l 414 853 l 356 796 z "},"ý":{"ha":649,"x_min":17,"x_max":632,"o":"m 125 -290 q 82 -287 101 -290 q 46 -276 63 -283 l 68 -186 q 93 -192 79 -189 q 119 -196 107 -196 q 215 -155 178 -196 q 272 -51 251 -114 l 288 -1 l 17 675 l 135 675 l 272 301 q 305 208 288 257 q 338 111 322 158 l 343 111 q 372 207 358 157 q 400 301 386 257 l 521 675 l 632 675 l 378 -56 q 338 -149 360 -106 q 285 -223 315 -192 q 215 -272 254 -254 q 125 -290 176 -290 m 317 796 l 258 853 l 454 1085 l 535 1008 l 317 796 z "},"ŷ":{"ha":649,"x_min":17,"x_max":632,"o":"m 125 -290 q 82 -287 101 -290 q 46 -276 63 -283 l 68 -186 q 93 -192 79 -189 q 119 -196 107 -196 q 215 -155 178 -196 q 272 -51 251 -114 l 288 -1 l 17 675 l 135 675 l 272 301 q 305 208 288 257 q 338 111 322 158 l 343 111 q 372 207 358 157 q 400 301 386 257 l 521 675 l 632 675 l 378 -56 q 338 -149 360 -106 q 285 -223 315 -192 q 215 -272 254 -254 q 125 -290 176 -290 m 121 833 l 279 1028 l 393 1028 l 551 833 l 503 789 l 339 946 l 333 946 l 169 789 l 121 833 z "},"ÿ":{"ha":649,"x_min":17,"x_max":632,"o":"m 125 -290 q 82 -287 101 -290 q 46 -276 63 -283 l 68 -186 q 93 -192 79 -189 q 119 -196 107 -196 q 215 -155 178 -196 q 272 -51 251 -114 l 288 -1 l 17 675 l 135 675 l 272 301 q 305 208 288 257 q 338 111 322 158 l 343 111 q 372 207 358 157 q 400 301 386 257 l 521 675 l 632 675 l 378 -56 q 338 -149 360 -106 q 285 -223 315 -192 q 215 -272 254 -254 q 125 -290 176 -290 m 203 815 q 153 835 172 815 q 133 885 133 856 q 153 934 133 914 q 203 954 172 954 q 251 934 232 954 q 271 885 271 914 q 251 835 271 856 q 203 815 232 815 m 469 815 q 421 835 440 815 q 401 885 401 856 q 421 934 401 914 q 469 954 440 954 q 519 934 500 954 q 539 885 539 914 q 519 835 539 856 q 469 815 500 815 z "},"ẏ":{"ha":649,"x_min":17,"x_max":632,"o":"m 125 -290 q 82 -287 101 -290 q 46 -276 63 -283 l 68 -186 q 93 -192 79 -189 q 119 -196 107 -196 q 215 -155 178 -196 q 272 -51 251 -114 l 288 -1 l 17 675 l 135 675 l 272 301 q 305 208 288 257 q 338 111 322 158 l 343 111 q 372 207 358 157 q 400 301 386 257 l 521 675 l 632 675 l 378 -56 q 338 -149 360 -106 q 285 -223 315 -192 q 215 -272 254 -254 q 125 -290 176 -290 m 336 814 q 283 835 304 814 q 261 889 261 856 q 283 942 261 921 q 336 964 304 964 q 390 942 368 964 q 411 889 411 921 q 390 835 411 856 q 336 814 368 814 z "},"ỵ":{"ha":649,"x_min":17,"x_max":632,"o":"m 125 -290 q 82 -287 101 -290 q 46 -276 63 -283 l 68 -186 q 93 -192 79 -189 q 119 -196 107 -196 q 215 -155 178 -196 q 272 -51 251 -114 l 288 -1 l 17 675 l 135 675 l 272 301 q 305 208 288 257 q 338 111 322 158 l 343 111 q 372 207 358 157 q 400 301 386 257 l 521 675 l 632 675 l 378 -56 q 338 -149 360 -106 q 285 -223 315 -192 q 215 -272 254 -254 q 125 -290 176 -290 m 543 -279 q 490 -258 511 -279 q 468 -204 468 -237 q 490 -151 468 -172 q 543 -129 511 -129 q 597 -151 575 -129 q 618 -204 618 -172 q 597 -258 618 -237 q 543 -279 575 -279 z "},"ỷ":{"ha":649,"x_min":17,"x_max":632,"o":"m 125 -290 q 82 -287 101 -290 q 46 -276 63 -283 l 68 -186 q 93 -192 79 -189 q 119 -196 107 -196 q 215 -155 178 -196 q 272 -51 251 -114 l 288 -1 l 17 675 l 135 675 l 272 301 q 305 208 288 257 q 338 111 322 158 l 343 111 q 372 207 358 157 q 400 301 386 257 l 521 675 l 632 675 l 378 -56 q 338 -149 360 -106 q 285 -223 315 -192 q 215 -272 254 -254 q 125 -290 176 -290 m 292 794 l 279 850 q 335 873 313 858 q 357 915 357 888 q 242 981 357 975 l 249 1056 q 396 1020 344 1053 q 447 925 447 988 q 434 873 447 894 q 399 835 421 851 q 350 810 378 819 q 292 794 322 800 z "},"ỹ":{"ha":649,"x_min":17,"x_max":632,"o":"m 125 -290 q 82 -287 101 -290 q 46 -276 63 -283 l 68 -186 q 93 -192 79 -189 q 119 -196 107 -196 q 215 -155 178 -196 q 272 -51 251 -114 l 288 -1 l 17 675 l 135 675 l 272 301 q 305 208 288 257 q 338 111 322 158 l 343 111 q 372 207 358 157 q 400 301 386 257 l 521 675 l 632 675 l 378 -56 q 338 -149 360 -106 q 285 -223 315 -192 q 215 -272 254 -254 q 125 -290 176 -290 m 436 801 q 372 819 399 801 q 324 860 346 838 q 281 900 301 882 q 238 918 261 918 q 190 888 206 918 q 172 808 175 857 l 96 813 q 106 888 97 853 q 132 947 115 922 q 174 987 149 972 q 236 1001 200 1001 q 300 983 274 1001 q 349 943 326 965 q 391 903 371 921 q 436 885 411 885 q 482 915 467 885 q 500 994 497 946 l 576 989 q 566 915 575 949 q 540 856 557 881 q 498 816 524 831 q 436 801 472 801 z "},"ź":{"ha":590,"x_min":43,"x_max":554,"o":"m 43 0 l 43 61 l 399 582 l 82 582 l 82 675 l 543 675 l 543 614 l 188 93 l 554 93 l 554 0 l 43 0 m 297 796 l 239 853 l 435 1085 l 515 1008 l 297 796 z "},"ž":{"ha":590,"x_min":43,"x_max":554,"o":"m 43 0 l 43 61 l 399 582 l 82 582 l 82 675 l 543 675 l 543 614 l 188 93 l 554 93 l 554 0 l 43 0 m 260 797 l 101 992 l 150 1036 l 314 879 l 319 879 l 483 1036 l 532 992 l 374 797 l 260 797 z "},"ż":{"ha":590,"x_min":43,"x_max":554,"o":"m 43 0 l 43 61 l 399 582 l 82 582 l 82 675 l 543 675 l 543 614 l 188 93 l 554 93 l 554 0 l 43 0 m 317 814 q 263 835 285 814 q 242 889 242 856 q 263 942 242 921 q 317 964 285 964 q 370 942 349 964 q 392 889 392 921 q 370 835 392 856 q 317 814 349 814 z "},"ẓ":{"ha":590,"x_min":43,"x_max":554,"o":"m 43 0 l 43 61 l 399 582 l 82 582 l 82 675 l 543 675 l 543 614 l 188 93 l 554 93 l 554 0 l 43 0 m 317 -285 q 263 -264 285 -285 q 242 -210 242 -243 q 263 -156 242 -178 q 317 -135 285 -135 q 370 -156 349 -135 q 392 -210 392 -178 q 370 -264 392 -243 q 317 -285 349 -285 z "},"ẕ":{"ha":590,"x_min":43,"x_max":554,"o":"m 43 0 l 43 61 l 399 582 l 82 582 l 82 675 l 543 675 l 543 614 l 188 93 l 554 93 l 554 0 l 43 0 m 132 -235 l 132 -156 l 501 -156 l 501 -235 l 132 -235 z "},"ð":{"ha":757,"x_min":74,"x_max":674,"o":"m 374 -17 q 261 6 315 -17 q 165 70 207 28 q 99 173 124 113 q 74 308 74 233 q 96 437 74 379 q 156 535 118 494 q 247 599 194 576 q 360 621 299 621 q 461 599 413 621 q 546 529 510 576 q 488 679 526 615 q 397 796 450 743 l 201 694 l 168 751 l 344 842 q 189 942 272 897 l 242 1014 q 340 956 292 986 q 433 888 389 925 l 631 989 l 664 932 l 485 840 q 621 639 568 756 q 674 357 674 522 q 652 205 674 274 q 591 87 631 136 q 497 10 551 38 q 374 -17 442 -17 m 376 78 q 458 98 424 78 q 517 154 493 118 q 552 241 540 190 q 564 353 564 292 q 563 392 564 372 q 561 429 563 411 q 469 511 515 490 q 376 532 424 532 q 294 515 331 532 q 233 468 258 499 q 195 397 208 438 q 182 308 182 356 q 197 213 182 256 q 240 141 213 171 q 301 94 267 111 q 376 78 336 78 z "},"þ":{"ha":771,"x_min":114,"x_max":704,"o":"m 114 -285 l 114 989 l 228 989 l 228 719 l 226 604 q 324 666 271 640 q 432 692 376 692 q 549 667 499 692 q 635 598 600 643 q 687 490 669 553 q 704 347 704 426 q 681 194 704 261 q 617 79 657 126 q 524 8 576 32 q 413 -17 471 -17 q 318 3 364 -17 q 226 58 272 22 l 228 -57 l 228 -285 l 114 -285 m 393 79 q 470 98 435 79 q 531 151 506 117 q 572 235 557 185 q 586 347 586 285 q 576 449 586 403 q 545 527 567 494 q 490 578 524 560 q 408 596 456 596 q 322 572 365 596 q 228 504 278 549 l 228 150 q 317 95 274 111 q 393 79 360 79 z "},"ŋ":{"ha":760,"x_min":114,"x_max":654,"o":"m 469 -254 q 413 -249 438 -254 q 371 -236 388 -243 l 393 -149 q 422 -157 406 -153 q 457 -161 439 -161 q 524 -126 507 -161 q 540 -28 540 -90 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 324 659 271 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 -29 q 613 -193 654 -132 q 469 -254 571 -254 z "},"ȷ":{"ha":343,"x_min":-56,"x_max":229,"o":"m 44 -301 q -12 -296 13 -301 q -56 -283 -37 -290 l -32 -197 q -3 -205 -19 -201 q 32 -208 14 -208 q 99 -174 82 -208 q 115 -76 115 -139 l 115 675 l 229 675 l 229 -76 q 188 -240 229 -179 q 44 -301 146 -301 z "},"ij":{"ha":685,"x_min":93,"x_max":593,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m 172 814 q 116 835 139 814 q 93 888 93 856 q 116 941 93 921 q 172 961 139 961 q 228 941 206 961 q 251 888 251 921 q 228 835 251 856 q 172 814 206 814 m 386 -301 q 329 -296 354 -301 q 286 -283 304 -290 l 310 -197 q 339 -205 322 -201 q 374 -208 356 -208 q 440 -174 424 -208 q 457 -76 457 -139 l 457 675 l 571 675 l 571 -76 q 529 -240 571 -179 q 386 -301 488 -301 m 515 814 q 459 835 482 814 q 436 888 436 856 q 459 941 436 921 q 515 961 482 961 q 570 941 547 961 q 593 888 593 921 q 570 835 593 856 q 515 814 547 814 z "},"ɐ":{"ha":711,"x_min":104,"x_max":633,"o":"m 375 -17 q 251 4 303 -17 q 167 63 200 25 q 119 153 135 100 q 104 272 104 207 l 104 675 l 199 675 l 208 581 l 211 581 q 322 661 260 631 q 451 692 383 692 q 582 647 531 692 q 633 515 633 601 q 534 335 633 400 q 218 247 435 271 q 226 186 218 217 q 254 132 235 156 q 307 93 274 108 q 390 78 340 78 q 495 100 447 78 q 582 150 543 122 l 626 71 q 517 12 582 40 q 375 -17 451 -17 m 218 322 q 361 350 303 333 q 455 388 419 367 q 506 438 490 410 q 521 500 521 467 q 490 576 521 553 q 414 600 458 600 q 319 575 367 600 q 218 494 271 550 l 218 322 z "},"ɒ":{"ha":771,"x_min":114,"x_max":704,"o":"m 413 -17 q 219 65 318 -17 l 215 65 l 207 0 l 114 0 l 114 675 l 208 675 l 218 596 l 222 596 q 323 664 268 636 q 438 692 378 692 q 553 667 503 692 q 636 598 603 643 q 687 490 669 553 q 704 347 704 426 q 681 194 704 261 q 617 79 657 126 q 524 8 576 32 q 413 -17 471 -17 m 393 79 q 470 98 435 79 q 531 151 506 117 q 572 235 557 185 q 586 347 586 285 q 576 449 586 403 q 545 527 567 494 q 490 578 524 560 q 408 596 456 596 q 322 572 365 596 q 228 504 278 549 l 228 150 q 317 95 274 111 q 393 79 360 79 z "},"ɓ":{"ha":771,"x_min":114,"x_max":704,"o":"m 413 -17 q 315 5 365 -17 q 219 67 264 26 l 215 67 l 206 0 l 114 0 l 114 746 q 128 851 114 804 q 172 933 143 899 q 245 987 201 968 q 349 1006 289 1006 q 409 999 379 1006 q 463 983 439 993 l 436 896 q 360 913 399 913 q 262 868 293 913 q 228 744 231 824 l 225 588 q 325 655 271 628 q 436 682 379 682 q 551 658 501 682 q 635 590 601 633 q 687 483 669 546 q 704 343 704 419 q 681 190 704 257 q 617 78 657 124 q 524 8 576 32 q 413 -17 471 -17 m 393 79 q 470 97 435 79 q 531 149 506 115 q 572 232 557 183 q 586 342 586 281 q 545 519 586 451 q 408 586 504 586 q 228 493 325 586 l 228 150 q 316 95 272 111 q 393 79 360 79 z "},"ɔ":{"ha":633,"x_min":35,"x_max":569,"o":"m 253 -17 q 135 6 190 -17 q 35 69 79 29 l 83 146 q 156 98 115 118 q 242 78 196 78 q 326 97 288 78 q 392 149 364 115 q 436 231 421 183 q 451 336 451 278 q 436 443 451 394 q 394 526 421 492 q 331 578 368 560 q 253 597 294 597 q 170 581 204 597 q 106 538 136 565 l 47 613 q 137 668 85 644 q 265 692 189 692 q 381 668 325 692 q 478 599 436 644 q 544 488 519 554 q 569 336 569 422 q 544 187 569 253 q 477 76 519 121 q 377 7 435 31 q 253 -17 319 -17 z "},"ɕ":{"ha":633,"x_min":64,"x_max":603,"o":"m 394 75 q 477 96 444 75 q 510 149 510 117 q 492 192 510 172 q 438 211 475 211 q 359 185 400 211 q 279 111 318 158 q 394 75 331 75 m 171 -96 l 79 -57 q 113 19 94 -17 q 150 86 131 54 q 87 194 110 131 q 64 336 64 257 q 90 487 64 421 q 161 599 117 553 q 265 668 206 644 q 389 692 324 692 q 503 668 456 692 q 586 613 550 644 l 531 542 q 467 585 501 568 q 393 601 433 601 q 306 582 346 601 q 238 528 267 563 q 192 444 208 493 q 176 336 176 396 q 188 249 176 289 q 218 176 199 208 q 328 263 271 233 q 444 293 386 293 q 561 253 519 293 q 603 150 603 214 q 588 85 603 115 q 547 33 574 56 q 480 -3 519 10 q 392 -17 440 -17 q 224 28 297 -17 q 171 -96 192 -31 z "},"ɖ":{"ha":771,"x_min":65,"x_max":799,"o":"m 714 -254 q 586 -203 626 -254 q 546 -64 546 -153 l 547 78 q 455 10 506 38 q 344 -17 404 -17 q 141 75 217 -17 q 65 336 65 167 q 90 484 65 418 q 154 596 114 550 q 247 667 194 642 q 358 692 300 692 q 460 671 417 692 q 547 614 503 650 l 542 729 l 542 1006 l 657 1006 l 657 -39 q 672 -129 657 -97 q 726 -161 686 -161 q 753 -157 740 -161 q 776 -149 765 -153 l 799 -236 q 762 -249 783 -243 q 714 -254 740 -254 m 369 79 q 458 102 417 79 q 542 172 500 125 l 542 525 q 459 580 499 564 q 378 596 419 596 q 302 577 338 596 q 240 524 267 558 q 199 443 214 490 q 183 338 183 396 q 232 147 183 215 q 369 79 281 79 z "},"ɗ":{"ha":771,"x_min":65,"x_max":804,"o":"m 344 -17 q 141 75 217 -17 q 65 336 65 167 q 90 484 65 418 q 154 596 114 550 q 247 667 194 642 q 358 692 300 692 q 460 671 417 692 q 547 614 503 650 l 546 799 q 590 952 546 896 q 726 1008 633 1008 q 769 1005 750 1008 q 804 994 789 1001 l 782 907 q 762 913 772 910 q 739 915 751 915 q 675 881 693 915 q 657 788 657 846 l 657 0 l 563 0 l 553 79 l 549 79 q 456 12 508 40 q 344 -17 404 -17 m 369 79 q 458 102 417 79 q 542 172 500 125 l 542 525 q 459 580 499 564 q 378 596 419 596 q 302 577 338 596 q 240 524 267 558 q 199 443 214 490 q 183 338 183 396 q 232 147 183 215 q 369 79 281 79 z "},"ɘ":{"ha":689,"x_min":51,"x_max":625,"o":"m 307 -17 q 181 4 238 -17 q 79 53 124 25 l 119 128 q 201 90 157 104 q 293 75 244 75 q 449 138 393 75 q 511 310 506 201 l 57 310 q 53 340 54 322 q 51 375 51 357 q 72 506 51 447 q 128 606 92 564 q 217 669 165 647 q 335 692 269 692 q 449 667 396 692 q 541 597 501 643 q 603 485 581 551 q 625 336 625 419 q 601 188 625 253 q 535 77 578 122 q 433 8 492 32 q 307 -17 375 -17 m 153 392 l 513 392 q 456 547 503 492 q 332 601 408 601 q 203 548 253 601 q 153 392 153 494 z "},"ɑ":{"ha":771,"x_min":65,"x_max":657,"o":"m 344 -17 q 141 75 217 -17 q 65 336 65 167 q 90 484 65 418 q 155 596 114 550 q 249 667 196 642 q 360 692 301 692 q 461 671 417 692 q 551 610 506 650 l 554 610 l 564 675 l 657 675 l 657 0 l 563 0 l 553 79 l 549 79 q 456 12 508 40 q 344 -17 404 -17 m 369 79 q 458 102 417 79 q 542 172 500 125 l 542 525 q 459 580 499 564 q 378 596 419 596 q 302 577 338 596 q 240 524 267 558 q 199 443 214 490 q 183 338 183 396 q 232 147 183 215 q 369 79 281 79 z "},"ʙ":{"ha":706,"x_min":114,"x_max":651,"o":"m 114 0 l 114 675 l 374 675 q 475 665 429 675 q 553 635 521 656 q 604 583 586 615 q 622 504 622 550 q 592 411 622 447 q 510 360 563 375 l 510 356 q 565 336 539 349 q 610 304 590 324 q 640 257 629 285 q 651 193 651 229 q 631 107 651 143 q 576 47 611 71 q 492 11 540 22 q 385 0 443 0 l 114 0 m 226 392 l 354 392 q 475 419 439 392 q 511 493 511 446 q 476 567 511 540 q 363 593 442 593 l 226 593 l 226 392 m 226 82 l 372 82 q 497 113 456 82 q 538 200 538 143 q 494 281 538 251 q 365 310 451 310 l 226 310 l 226 82 z "},"ə":{"ha":689,"x_min":51,"x_max":625,"o":"m 331 -17 q 215 6 267 -17 q 127 70 164 28 q 71 173 90 113 q 51 308 51 233 q 53 345 51 328 q 57 375 54 363 l 511 375 q 453 539 506 476 q 310 601 401 601 q 217 585 258 601 q 135 543 175 569 l 94 622 q 199 673 142 654 q 328 692 257 692 q 446 668 392 692 q 540 599 500 644 q 602 488 579 553 q 625 339 625 422 q 602 190 625 256 q 540 78 579 124 q 446 8 500 32 q 331 -17 392 -17 m 328 75 q 455 132 407 75 q 513 293 503 189 l 153 293 q 200 129 153 183 q 328 75 247 75 z "},"ɚ":{"ha":900,"x_min":51,"x_max":928,"o":"m 346 -17 q 224 7 276 -17 q 135 70 172 31 q 78 163 99 110 q 51 274 57 215 l 500 457 q 426 566 476 531 q 310 601 376 601 q 217 585 257 601 q 138 543 176 569 l 96 622 q 198 673 143 654 q 322 692 253 692 q 492 641 421 692 q 599 497 564 590 l 711 543 l 772 519 q 781 455 775 479 q 796 417 788 431 q 815 398 804 403 q 842 393 826 393 q 872 399 858 393 q 897 414 886 406 l 928 354 q 888 331 911 342 q 836 319 865 319 q 795 326 815 319 q 757 348 775 332 q 724 390 739 364 q 703 453 710 415 l 619 419 q 624 377 622 399 q 626 332 626 356 q 606 197 626 260 q 550 86 586 133 q 462 11 514 39 q 346 -17 410 -17 m 343 74 q 416 93 383 74 q 472 147 449 113 q 506 226 494 181 q 518 322 518 271 q 517 351 518 338 q 515 376 517 364 l 157 231 q 221 115 171 156 q 343 74 271 74 z "},"ɛ":{"ha":611,"x_min":69,"x_max":582,"o":"m 346 -17 q 238 -3 289 -17 q 150 38 188 11 q 91 101 113 64 q 69 186 69 139 q 82 251 69 222 q 115 300 94 279 q 163 334 136 321 q 219 356 190 347 l 219 361 q 135 422 164 381 q 106 510 106 463 q 126 590 106 556 q 179 647 146 625 q 257 681 213 669 q 351 692 301 692 q 462 674 413 692 q 556 625 511 657 l 510 549 q 435 587 472 572 q 354 601 399 601 q 258 575 297 601 q 219 496 219 549 q 257 421 219 450 q 376 392 294 392 l 453 392 l 453 310 l 356 310 q 228 281 272 310 q 183 196 183 251 q 232 107 183 139 q 358 75 281 75 q 447 90 404 75 q 533 136 489 104 l 582 60 q 469 1 524 18 q 346 -17 415 -17 z "},"ɜ":{"ha":633,"x_min":51,"x_max":564,"o":"m 292 -17 q 167 1 222 -17 q 51 60 111 18 l 100 136 q 188 90 146 104 q 275 75 229 75 q 401 107 353 75 q 450 196 450 139 q 406 281 450 251 q 278 310 361 310 l 182 310 l 182 392 l 257 392 q 376 421 339 392 q 414 496 414 450 q 378 575 414 549 q 285 601 342 601 q 201 587 240 601 q 124 549 161 572 l 78 625 q 177 674 124 657 q 293 692 231 692 q 383 681 340 692 q 458 647 426 669 q 509 590 490 625 q 528 510 528 556 q 499 422 528 463 q 414 361 469 381 l 414 356 q 470 334 443 347 q 518 300 497 321 q 551 251 539 279 q 564 186 564 222 q 542 101 564 139 q 484 38 521 64 q 398 -3 447 11 q 292 -17 349 -17 z "},"ɞ":{"ha":758,"x_min":69,"x_max":696,"o":"m 360 -17 q 245 -3 299 -17 q 153 38 192 11 q 92 101 114 64 q 69 186 69 139 q 82 251 69 222 q 115 300 94 279 q 163 334 136 321 q 219 356 190 347 l 219 361 q 135 422 164 381 q 106 510 106 463 q 125 590 106 556 q 178 647 144 625 q 258 681 213 669 q 356 692 303 692 q 487 669 425 692 q 595 603 549 647 q 669 492 642 558 q 696 336 696 425 q 669 183 696 249 q 598 72 643 117 q 492 6 553 28 q 360 -17 431 -17 m 361 75 q 519 142 461 75 q 578 336 578 208 q 518 533 578 465 q 357 601 458 601 q 259 575 299 601 q 219 496 219 549 q 256 421 219 450 q 371 392 292 392 l 408 392 l 408 310 l 350 310 q 226 281 269 310 q 183 196 183 251 q 231 107 183 139 q 361 75 279 75 z "},"ɟ":{"ha":375,"x_min":-40,"x_max":360,"o":"m 60 -301 q 3 -296 28 -301 q -40 -283 -22 -290 l -17 -197 q 13 -205 -4 -201 q 47 -208 29 -208 q 114 -174 97 -208 q 131 -76 131 -139 l 131 321 l 11 321 l 11 381 l 131 388 l 131 675 l 244 675 l 244 388 l 360 388 l 360 321 l 244 321 l 244 -76 q 203 -240 244 -179 q 60 -301 161 -301 z "},"ɠ":{"ha":776,"x_min":69,"x_max":807,"o":"m 360 -300 q 234 -281 297 -300 q 118 -226 171 -262 l 160 -146 q 260 -194 210 -179 q 360 -208 311 -208 q 498 -160 453 -208 q 546 -31 543 -112 l 547 97 q 458 33 508 60 q 347 7 407 7 q 232 31 283 7 q 144 98 181 54 q 89 205 108 142 q 69 347 69 268 q 94 490 69 426 q 158 599 118 554 q 252 667 199 643 q 363 692 306 692 q 463 671 421 692 q 549 614 504 650 l 547 671 q 591 818 547 763 q 729 874 635 874 q 772 870 753 874 q 807 860 792 867 l 785 772 q 742 781 765 781 q 678 746 696 781 q 660 653 660 711 l 660 -33 q 582 -230 660 -160 q 360 -300 504 -300 m 372 101 q 460 124 419 101 q 546 194 501 147 l 546 525 q 462 580 501 564 q 381 596 422 596 q 305 578 340 596 q 243 526 269 560 q 201 448 217 493 q 186 349 186 403 q 235 168 186 235 q 372 101 283 101 z "},"ɡ":{"ha":776,"x_min":69,"x_max":660,"o":"m 360 -300 q 234 -281 297 -300 q 118 -226 171 -262 l 160 -146 q 260 -194 210 -179 q 360 -208 311 -208 q 498 -160 453 -208 q 546 -31 543 -112 l 547 97 q 458 33 508 60 q 347 7 407 7 q 232 31 283 7 q 144 98 181 54 q 89 205 108 142 q 69 347 69 268 q 94 490 69 426 q 158 599 118 554 q 252 667 199 643 q 363 692 306 692 q 465 672 421 692 q 551 613 508 651 l 554 613 l 564 675 l 660 675 l 660 -33 q 582 -230 660 -160 q 360 -300 504 -300 m 372 101 q 460 124 419 101 q 546 194 501 147 l 546 525 q 462 580 501 564 q 381 596 422 596 q 305 578 340 596 q 243 526 269 560 q 201 448 217 493 q 186 349 186 403 q 235 168 186 235 q 372 101 283 101 z "},"ɢ":{"ha":690,"x_min":64,"x_max":622,"o":"m 389 -17 q 261 6 321 -17 q 158 74 201 29 q 89 186 114 119 q 64 339 64 253 q 90 486 64 421 q 160 597 115 551 q 266 667 206 643 q 396 692 326 692 q 525 666 475 692 q 611 608 575 640 l 556 538 q 491 582 526 563 q 401 601 456 601 q 315 584 356 601 q 244 533 274 567 q 197 450 214 499 q 179 339 179 401 q 239 144 179 214 q 399 75 299 75 q 468 86 436 75 q 521 117 500 97 l 521 282 l 371 282 l 371 364 l 622 364 l 622 68 q 524 8 585 32 q 389 -17 464 -17 z "},"ɣ":{"ha":649,"x_min":17,"x_max":632,"o":"m 328 -311 q 213 -267 253 -311 q 174 -150 174 -222 q 194 -51 174 -101 q 251 72 215 0 l 17 675 l 135 675 l 263 315 q 294 230 278 269 q 325 146 310 190 l 331 146 q 361 230 346 190 q 392 315 376 269 l 519 675 l 632 675 l 401 74 q 434 7 419 38 q 459 -50 449 -24 q 475 -101 469 -76 q 481 -150 481 -125 q 441 -267 481 -222 q 328 -311 401 -311 m 328 -232 q 369 -211 356 -232 q 382 -158 382 -190 q 368 -77 382 -121 q 329 15 354 -33 l 324 15 q 286 -78 300 -33 q 272 -158 272 -124 q 286 -211 272 -190 q 328 -232 300 -232 z "},"ɤ":{"ha":710,"x_min":22,"x_max":688,"o":"m 356 -17 q 176 45 238 -17 q 114 215 114 107 q 160 365 114 292 q 276 504 207 439 q 201 573 240 549 q 124 597 163 597 q 58 578 85 597 l 22 661 q 75 684 43 676 q 139 692 107 692 q 251 659 196 692 q 356 571 307 626 q 459 659 404 626 q 571 692 514 692 q 635 684 603 692 q 688 661 667 676 l 651 578 q 586 597 624 597 q 508 573 546 597 q 433 504 469 549 q 549 365 501 439 q 596 215 596 292 q 535 45 596 107 q 356 -17 474 -17 m 356 78 q 454 119 422 78 q 486 218 486 160 q 448 339 486 279 q 356 450 410 399 q 263 339 300 399 q 225 218 225 279 q 257 119 225 160 q 356 78 289 78 z "},"ɥ":{"ha":760,"x_min":104,"x_max":646,"o":"m 531 -285 l 531 -43 l 538 104 q 435 17 489 50 q 311 -17 382 -17 q 153 50 203 -17 q 104 247 104 117 l 104 675 l 219 675 l 219 263 q 249 124 219 167 q 346 82 279 82 q 440 108 399 82 q 531 196 482 135 l 531 675 l 646 675 l 646 -285 l 531 -285 z "},"ɦ":{"ha":756,"x_min":114,"x_max":654,"o":"m 114 0 l 114 746 q 128 851 114 804 q 172 933 143 899 q 245 987 201 968 q 349 1006 289 1006 q 409 999 379 1006 q 463 983 439 993 l 436 896 q 360 913 399 913 q 262 868 293 913 q 228 744 231 824 l 224 569 q 325 649 272 615 q 449 682 378 682 q 605 615 556 682 q 654 418 654 549 l 654 0 l 540 0 l 540 403 q 510 540 540 499 q 413 582 479 582 q 319 556 360 582 q 228 479 279 531 l 228 0 l 114 0 z "},"ɧ":{"ha":756,"x_min":114,"x_max":654,"o":"m 469 -254 q 413 -249 438 -254 q 371 -236 388 -243 l 393 -149 q 422 -157 406 -153 q 457 -161 439 -161 q 524 -126 507 -161 q 540 -28 540 -90 l 540 403 q 510 540 540 499 q 413 582 479 582 q 319 556 360 582 q 228 479 279 531 l 228 0 l 114 0 l 114 746 q 128 851 114 804 q 172 933 143 899 q 245 987 201 968 q 349 1006 289 1006 q 409 999 379 1006 q 463 983 439 993 l 436 896 q 360 913 399 913 q 262 868 293 913 q 228 744 231 824 l 224 569 q 325 649 272 615 q 449 682 378 682 q 605 615 556 682 q 654 418 654 549 l 654 -29 q 613 -193 654 -132 q 469 -254 571 -254 z "},"ʜ":{"ha":781,"x_min":115,"x_max":668,"o":"m 115 0 l 115 675 l 229 675 l 229 401 l 554 401 l 554 675 l 668 675 l 668 0 l 554 0 l 554 300 l 229 300 l 229 0 l 115 0 z "},"ɨ":{"ha":375,"x_min":11,"x_max":360,"o":"m 11 321 l 11 381 l 131 388 l 131 675 l 244 675 l 244 388 l 360 388 l 360 321 l 244 321 l 244 0 l 131 0 l 131 321 l 11 321 m 189 814 q 133 835 156 814 q 110 888 110 856 q 133 941 110 921 q 189 961 156 961 q 245 941 222 961 q 268 888 268 921 q 245 835 268 856 q 189 814 222 814 z "},"ɪ":{"ha":474,"x_min":64,"x_max":410,"o":"m 64 0 l 64 93 l 181 93 l 181 582 l 64 582 l 64 675 l 410 675 l 410 582 l 294 582 l 294 93 l 410 93 l 410 0 l 64 0 z "},"ʝ":{"ha":394,"x_min":-117,"x_max":425,"o":"m 336 -381 q 232 -215 283 -282 q 160 -278 204 -256 q 56 -301 117 -301 q -17 -289 15 -301 q -71 -256 -49 -276 q -105 -207 -93 -235 q -117 -147 -117 -179 q -73 -47 -117 -85 q 51 -8 -29 -8 q 167 -40 107 -8 l 167 675 l 281 675 l 281 -32 q 272 -121 281 -79 q 425 -339 353 -201 l 336 -381 m 54 -211 q 120 -190 96 -211 q 156 -135 144 -168 q 50 -90 100 -90 q -5 -106 14 -90 q -24 -146 -24 -122 q -2 -192 -24 -174 q 54 -211 19 -211 m 224 814 q 167 835 190 814 q 144 888 144 856 q 167 941 144 921 q 224 961 190 961 q 280 941 257 961 q 303 888 303 921 q 280 835 303 856 q 224 814 257 814 z "},"ɬ":{"ha":419,"x_min":-8,"x_max":411,"o":"m 168 443 q 34 477 76 443 q -8 564 -8 511 q 24 642 -8 611 q 107 674 56 674 q 150 666 132 674 q 182 646 168 658 l 182 989 l 296 989 l 296 508 l 411 508 l 411 443 l 296 443 l 296 128 q 306 89 296 100 q 328 78 315 78 q 338 78 333 78 q 353 81 343 78 l 368 -6 q 342 -14 357 -11 q 303 -17 326 -17 q 210 22 238 -17 q 182 136 182 61 l 182 443 l 168 443 m 154 508 l 182 508 l 182 517 q 178 549 182 532 q 167 578 175 565 q 147 601 160 592 q 113 610 133 610 q 76 596 88 610 q 65 563 65 582 q 87 524 65 540 q 154 508 108 508 z "},"ɭ":{"ha":354,"x_min":114,"x_max":371,"o":"m 285 -254 q 152 -197 190 -254 q 114 -39 114 -139 l 114 989 l 228 989 l 228 -39 q 242 -129 228 -97 q 297 -161 257 -161 q 324 -157 313 -161 q 347 -149 336 -153 l 371 -236 q 334 -249 356 -243 q 285 -254 313 -254 z "},"ɮ":{"ha":801,"x_min":114,"x_max":775,"o":"m 489 -301 q 398 -292 439 -301 q 324 -268 357 -283 q 264 -233 290 -253 q 215 -193 238 -214 l 272 -121 q 357 -181 308 -154 q 479 -207 406 -207 q 549 -192 517 -207 q 606 -151 582 -178 q 645 -85 631 -124 q 660 0 660 -47 q 612 135 660 86 q 474 183 564 183 q 427 178 444 183 q 386 161 410 172 l 340 224 l 607 582 l 228 582 l 228 0 l 114 0 l 114 989 l 228 989 l 228 675 l 746 675 l 746 614 l 485 263 q 606 253 551 269 q 697 201 660 236 q 755 115 735 167 q 775 3 775 64 q 751 -127 775 -71 q 688 -222 728 -183 q 597 -281 649 -261 q 489 -301 544 -301 z "},"ʟ":{"ha":571,"x_min":114,"x_max":535,"o":"m 114 0 l 114 675 l 228 675 l 228 93 l 535 93 l 535 0 l 114 0 z "},"ɯ":{"ha":1151,"x_min":107,"x_max":1039,"o":"m 313 -17 q 158 50 208 -17 q 107 247 107 117 l 107 675 l 221 675 l 221 263 q 251 124 221 167 q 347 82 282 82 q 515 186 424 82 l 515 675 l 631 675 l 631 263 q 660 124 631 167 q 756 82 690 82 q 925 186 831 82 l 925 675 l 1039 675 l 1039 0 l 944 0 l 935 97 l 932 97 q 835 17 888 50 q 721 -17 782 -17 q 599 18 643 -17 q 535 113 556 53 q 428 19 482 54 q 313 -17 375 -17 z "},"ɰ":{"ha":1151,"x_min":107,"x_max":1039,"o":"m 925 -285 l 925 -44 l 931 99 q 831 15 882 46 q 721 -17 779 -17 q 599 18 643 -17 q 535 113 556 53 q 428 19 482 54 q 313 -17 375 -17 q 158 50 208 -17 q 107 247 107 117 l 107 675 l 221 675 l 221 263 q 251 124 221 167 q 347 82 282 82 q 515 186 424 82 l 515 675 l 631 675 l 631 263 q 660 124 631 167 q 756 82 690 82 q 925 186 831 82 l 925 675 l 1039 675 l 1039 -285 l 925 -285 z "},"ɱ":{"ha":1151,"x_min":114,"x_max":1046,"o":"m 867 -254 q 813 -249 838 -254 q 772 -236 789 -243 l 794 -149 q 822 -157 806 -153 q 854 -161 838 -161 q 917 -126 903 -161 q 932 -28 932 -90 l 932 413 q 901 551 932 508 q 807 593 871 593 q 638 489 731 593 l 638 0 l 524 0 l 524 413 q 493 551 524 508 q 397 593 463 593 q 228 489 321 593 l 228 0 l 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 319 659 267 626 q 432 692 371 692 q 553 658 510 692 q 618 563 597 624 q 724 656 671 621 q 840 692 778 692 q 995 625 944 692 q 1046 428 1046 558 l 1046 -29 q 1005 -193 1046 -132 q 867 -254 964 -254 z "},"ɲ":{"ha":760,"x_min":-28,"x_max":654,"o":"m 57 -254 q 8 -249 31 -254 q -28 -236 -14 -243 l -6 -149 q 17 -157 6 -153 q 44 -161 29 -161 q 99 -129 85 -161 q 114 -39 114 -97 l 114 675 l 211 675 l 218 578 l 222 578 q 324 659 271 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 -39 q 190 -197 228 -139 q 57 -254 151 -254 z "},"ɳ":{"ha":760,"x_min":114,"x_max":796,"o":"m 711 -254 q 578 -197 617 -254 q 540 -39 540 -139 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 l 114 675 l 208 675 l 218 578 l 222 578 q 324 659 271 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 -39 q 669 -129 654 -97 q 724 -161 683 -161 q 751 -157 739 -161 q 774 -149 763 -153 l 796 -236 q 760 -249 782 -243 q 711 -254 738 -254 z "},"ɴ":{"ha":754,"x_min":114,"x_max":640,"o":"m 114 0 l 114 675 l 222 675 l 457 293 q 497 221 476 261 q 538 149 518 181 l 543 149 q 535 278 539 215 q 532 394 532 340 l 532 675 l 640 675 l 640 0 l 533 0 l 296 382 q 256 453 276 413 q 217 526 235 494 l 211 526 q 219 397 215 460 q 222 281 222 335 l 222 0 l 114 0 z "},"ɵ":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 257 6 314 -17 q 157 72 200 28 q 89 183 114 117 q 64 336 64 249 q 89 490 64 424 q 157 602 114 557 q 257 669 200 647 q 376 692 314 692 q 496 669 439 692 q 596 602 553 647 q 664 490 639 557 q 689 336 689 424 q 664 183 689 249 q 596 72 639 117 q 496 6 553 28 q 376 -17 439 -17 m 376 603 q 242 547 296 603 q 175 392 188 492 l 579 392 q 513 547 567 492 q 376 603 458 603 m 376 74 q 519 135 464 74 q 581 310 574 197 l 174 310 q 235 135 181 197 q 376 74 290 74 z "},"ɶ":{"ha":971,"x_min":64,"x_max":943,"o":"m 399 -17 q 269 6 329 -17 q 163 74 208 29 q 90 184 117 118 q 64 338 64 250 q 90 491 64 425 q 163 601 117 557 q 269 669 208 646 q 399 692 329 692 q 466 689 433 692 q 540 675 499 686 l 929 675 l 929 588 l 611 588 l 611 392 l 878 392 l 878 310 l 611 310 l 611 88 l 943 88 l 943 0 l 540 0 q 467 -14 500 -11 q 399 -17 433 -17 m 406 76 q 451 81 426 76 q 497 93 475 86 l 497 581 q 451 592 475 588 q 406 597 426 597 q 319 581 360 597 q 248 533 278 565 q 201 451 218 500 q 183 338 183 403 q 201 222 183 271 q 248 140 218 172 q 319 92 278 108 q 406 76 360 76 z "},"ɸ":{"ha":944,"x_min":64,"x_max":881,"o":"m 182 339 q 201 230 182 278 q 251 149 219 182 q 327 96 283 115 q 419 75 371 76 l 419 600 q 327 579 371 597 q 251 528 283 561 q 201 447 219 494 q 182 339 182 399 m 763 339 q 697 528 763 460 q 525 600 631 596 l 525 75 q 618 96 575 76 q 693 149 661 115 q 744 230 725 182 q 763 339 763 278 m 419 -285 l 419 -12 q 286 13 350 -11 q 173 83 222 38 q 94 192 124 128 q 64 339 64 256 q 94 485 64 421 q 173 593 124 549 q 286 661 222 638 q 419 688 350 685 l 419 989 l 525 989 l 525 688 q 660 661 596 685 q 773 593 724 638 q 851 485 822 549 q 881 339 881 421 q 851 192 881 256 q 772 83 821 128 q 658 13 722 38 q 525 -12 593 -11 l 525 -285 l 419 -285 z "},"ɹ":{"ha":482,"x_min":-4,"x_max":368,"o":"m 68 -17 q -4 -3 28 -17 l 18 97 q 50 89 36 92 q 83 86 64 86 q 173 121 126 86 q 254 242 219 156 l 254 675 l 368 675 l 368 0 l 274 0 l 264 124 l 261 124 q 176 21 225 58 q 68 -17 126 -17 z "},"ɺ":{"ha":482,"x_min":-4,"x_max":368,"o":"m 68 -17 q -4 -3 28 -17 l 18 97 q 50 89 36 92 q 83 86 64 86 q 173 121 126 86 q 254 242 219 156 l 254 989 l 368 989 l 368 0 l 274 0 l 264 124 l 261 124 q 176 21 225 58 q 68 -17 126 -17 z "},"ɻ":{"ha":482,"x_min":-4,"x_max":511,"o":"m 425 -254 q 301 -201 338 -254 q 264 -53 264 -149 l 264 124 l 261 124 q 176 21 225 58 q 68 -17 126 -17 q -4 -3 28 -17 l 18 97 q 50 89 36 92 q 83 86 64 86 q 173 121 126 86 q 254 242 219 156 l 254 675 l 368 675 l 368 -39 q 383 -129 368 -97 q 438 -161 397 -161 q 465 -157 453 -161 q 488 -149 476 -153 l 511 -236 q 474 -249 496 -243 q 425 -254 451 -254 z "},"ɽ":{"ha":482,"x_min":114,"x_max":486,"o":"m 285 -254 q 152 -197 190 -254 q 114 -39 114 -139 l 114 675 l 208 675 l 218 553 l 222 553 q 306 654 257 617 q 414 692 356 692 q 486 678 454 692 l 464 578 q 433 586 447 583 q 399 589 419 589 q 309 554 356 589 q 228 433 263 519 l 228 -39 q 242 -129 228 -97 q 297 -161 257 -161 q 324 -157 313 -161 q 347 -149 336 -153 l 371 -236 q 334 -249 356 -243 q 285 -254 313 -254 z "},"ɾ":{"ha":464,"x_min":114,"x_max":467,"o":"m 114 0 l 114 436 q 176 624 114 556 q 349 692 238 692 q 467 672 421 692 l 446 576 q 405 589 422 586 q 360 592 388 592 q 310 581 335 592 q 268 547 286 569 q 239 491 250 525 q 228 413 228 457 l 228 0 l 114 0 z "},"ʀ":{"ha":688,"x_min":114,"x_max":643,"o":"m 114 0 l 114 675 l 353 675 q 454 665 407 675 q 535 631 501 654 q 589 569 569 607 q 608 475 608 531 q 566 347 608 394 q 461 281 524 300 l 643 0 l 517 0 l 354 267 l 228 267 l 228 0 l 114 0 m 228 350 l 333 350 q 452 381 410 350 q 494 472 494 413 q 452 559 494 532 q 333 586 410 586 l 228 586 l 228 350 z "},"ʁ":{"ha":688,"x_min":44,"x_max":574,"o":"m 335 0 q 233 10 281 0 q 152 45 186 21 q 99 108 118 69 q 79 201 79 146 q 122 331 79 283 q 226 397 164 378 l 44 675 l 172 675 l 333 413 l 460 413 l 460 675 l 574 675 l 574 0 l 335 0 m 354 89 l 460 89 l 460 329 l 354 329 q 237 297 279 329 q 194 204 194 264 q 237 117 194 144 q 354 89 279 89 z "},"ʂ":{"ha":582,"x_min":39,"x_max":538,"o":"m 290 -17 q 142 11 213 -17 l 142 -28 q 158 -126 142 -90 q 226 -162 175 -162 q 260 -159 244 -162 q 290 -151 276 -156 l 313 -236 q 270 -249 294 -243 q 214 -254 246 -254 q 79 -193 119 -254 q 39 -29 39 -132 l 39 67 l 96 142 q 187 91 140 110 q 294 72 233 72 q 394 103 361 72 q 428 178 428 133 q 414 224 428 204 q 378 258 400 243 q 329 283 357 272 q 274 306 301 294 q 201 334 238 318 q 137 373 165 350 q 90 426 108 396 q 72 500 72 457 q 88 576 72 540 q 134 637 104 611 q 207 677 164 663 q 304 692 250 692 q 422 669 368 692 q 514 615 475 647 l 460 543 q 388 586 425 569 q 306 603 350 603 q 212 574 242 603 q 182 506 182 544 q 194 465 182 482 q 228 434 207 447 q 276 410 249 421 q 332 389 303 400 q 405 360 368 375 q 471 322 442 344 q 519 265 500 299 q 538 185 538 232 q 522 107 538 143 q 474 43 506 71 q 397 -1 443 15 q 290 -17 350 -17 z "},"ʃ":{"ha":343,"x_min":-56,"x_max":399,"o":"m 44 -301 q -12 -296 13 -301 q -56 -283 -37 -290 l -32 -197 q -3 -205 -19 -201 q 32 -208 14 -208 q 99 -174 82 -208 q 115 -76 115 -139 l 115 783 q 160 948 115 888 q 314 1008 206 1008 q 363 1003 342 1008 q 399 990 383 997 l 376 903 q 353 911 365 907 q 326 915 342 915 q 249 880 268 915 q 229 782 229 844 l 229 -76 q 188 -240 229 -179 q 44 -301 146 -301 z "},"ʄ":{"ha":375,"x_min":-40,"x_max":414,"o":"m 60 -301 q 3 -296 28 -301 q -40 -283 -22 -290 l -17 -197 q 13 -205 -4 -201 q 47 -208 29 -208 q 114 -174 97 -208 q 131 -76 131 -139 l 131 321 l 11 321 l 11 381 l 131 388 l 131 783 q 176 948 131 888 q 329 1008 221 1008 q 378 1003 357 1008 q 414 990 399 997 l 392 903 q 369 911 381 907 q 342 915 357 915 q 264 880 283 915 q 244 782 244 844 l 244 388 l 360 388 l 360 321 l 244 321 l 244 -76 q 203 -240 244 -179 q 60 -301 161 -301 z "},"ʈ":{"ha":469,"x_min":33,"x_max":451,"o":"m 326 -256 q 235 -240 272 -256 q 176 -194 199 -224 q 143 -122 153 -164 q 133 -31 133 -81 l 133 582 l 33 582 l 33 668 l 139 675 l 153 864 l 249 864 l 249 675 l 431 675 l 431 582 l 249 582 l 249 -32 q 272 -128 249 -94 q 353 -162 294 -162 q 392 -157 371 -162 q 429 -144 413 -151 l 451 -231 q 391 -248 424 -240 q 326 -256 358 -256 z "},"ʉ":{"ha":799,"x_min":11,"x_max":782,"o":"m 11 364 l 11 424 l 131 431 l 131 675 l 246 675 l 246 431 l 554 431 l 554 675 l 668 675 l 668 431 l 782 431 l 782 364 l 668 364 l 668 0 l 574 0 l 564 106 l 560 106 q 460 17 513 50 q 338 -17 408 -17 q 180 50 229 -17 q 131 247 131 117 l 131 364 l 11 364 m 372 82 q 465 109 425 82 q 554 196 506 136 l 554 364 l 246 364 l 246 263 q 276 124 246 167 q 372 82 306 82 z "},"ʊ":{"ha":751,"x_min":51,"x_max":700,"o":"m 376 -17 q 245 9 303 -17 q 148 78 188 35 q 88 176 108 121 q 68 290 68 232 q 78 385 68 342 q 106 465 89 429 q 144 530 122 501 q 188 579 165 558 l 188 582 l 51 582 l 51 675 l 310 675 l 310 601 q 218 485 253 554 q 183 315 183 415 q 196 224 183 267 q 232 149 208 181 q 292 97 256 117 q 376 78 328 78 q 460 97 424 78 q 519 149 496 117 q 556 224 543 181 q 568 315 568 267 q 533 485 568 415 q 443 601 499 554 l 443 675 l 700 675 l 700 582 l 564 582 l 564 579 q 608 530 586 558 q 647 465 629 501 q 674 385 664 429 q 685 290 685 342 q 664 176 685 232 q 603 78 643 121 q 507 9 564 35 q 376 -17 450 -17 z "},"ʋ":{"ha":736,"x_min":104,"x_max":667,"o":"m 364 -17 q 260 1 307 -17 q 178 55 213 18 q 124 147 143 92 q 104 281 104 203 l 104 675 l 219 675 l 219 290 q 231 193 219 233 q 263 127 243 153 q 309 90 282 101 q 368 78 336 78 q 445 101 411 78 q 502 165 479 124 q 537 260 525 206 q 549 381 549 315 q 522 544 549 489 q 439 600 496 600 q 400 592 421 600 l 382 681 q 463 692 414 692 q 612 620 557 692 q 667 397 667 549 q 647 233 667 308 q 590 101 628 157 q 495 15 551 46 q 364 -17 439 -17 z "},"ʌ":{"ha":649,"x_min":17,"x_max":632,"o":"m 17 0 l 256 675 l 389 675 l 632 0 l 514 0 l 386 383 q 355 484 371 433 q 324 583 339 535 l 318 583 q 287 484 303 535 q 256 383 271 433 l 129 0 l 17 0 z "},"ʍ":{"ha":997,"x_min":33,"x_max":964,"o":"m 33 0 l 214 675 l 354 675 l 451 313 q 474 217 463 264 q 497 118 485 169 l 503 118 q 524 217 514 169 q 549 314 535 265 l 643 675 l 776 675 l 964 0 l 847 0 l 747 390 q 727 485 736 439 q 707 578 718 531 l 701 578 q 656 390 681 483 l 551 0 l 440 0 l 335 390 q 311 485 322 439 q 288 578 300 531 l 282 578 q 261 485 271 531 q 240 390 251 439 l 142 0 l 33 0 z "},"ʎ":{"ha":649,"x_min":17,"x_max":632,"o":"m 17 0 l 286 771 q 326 864 304 821 q 379 938 349 907 q 449 988 410 969 q 539 1006 488 1006 q 582 1002 563 1006 q 618 992 601 999 l 596 901 q 571 908 585 904 q 544 911 557 911 q 449 870 486 911 q 392 767 413 829 l 361 676 l 632 0 l 515 0 l 376 374 q 344 467 361 418 q 311 564 328 517 l 306 564 q 276 468 290 518 q 249 374 263 418 l 129 0 l 17 0 z "},"ʏ":{"ha":576,"x_min":-1,"x_max":578,"o":"m 232 0 l 232 228 l -1 675 l 121 675 l 213 483 q 249 406 231 443 q 288 328 268 368 l 293 328 q 330 406 313 368 q 365 483 347 443 l 457 675 l 578 675 l 346 228 l 346 0 l 232 0 z "},"ʐ":{"ha":590,"x_min":43,"x_max":683,"o":"m 599 -254 q 466 -198 506 -254 q 426 -50 426 -142 l 426 0 l 43 0 l 43 61 l 399 582 l 82 582 l 82 675 l 543 675 l 543 614 l 188 93 l 540 93 l 540 -39 q 556 -129 540 -97 q 611 -161 571 -161 q 638 -157 625 -161 q 661 -149 650 -153 l 683 -236 q 647 -249 668 -243 q 599 -254 625 -254 z "},"ʑ":{"ha":624,"x_min":43,"x_max":643,"o":"m 331 -112 l 264 -99 q 289 0 275 -44 l 43 0 l 43 61 l 399 582 l 82 582 l 82 675 l 536 675 l 536 614 l 182 93 q 250 91 217 92 q 318 89 283 90 q 406 241 357 188 q 517 294 456 294 q 610 262 576 294 q 643 167 643 229 q 630 102 643 132 q 590 49 617 72 q 524 13 564 26 q 428 0 483 0 l 357 0 q 344 -53 350 -25 q 331 -112 338 -81 m 457 88 q 542 113 513 88 q 571 169 571 138 q 558 209 571 193 q 514 225 544 225 q 449 192 482 225 q 388 88 417 158 l 457 88 z "},"ʒ":{"ha":590,"x_min":4,"x_max":564,"o":"m 278 -301 q 187 -292 228 -301 q 113 -268 146 -283 q 53 -233 79 -253 q 4 -193 26 -214 l 61 -121 q 146 -181 97 -154 q 268 -207 194 -207 q 338 -192 306 -207 q 395 -151 371 -178 q 434 -85 419 -124 q 449 0 449 -47 q 401 135 449 86 q 263 183 353 183 q 216 178 233 183 q 175 161 199 172 l 129 224 l 396 582 l 61 582 l 61 675 l 535 675 l 535 614 l 274 263 q 394 253 340 269 q 486 201 449 236 q 544 115 524 167 q 564 3 564 64 q 540 -127 564 -71 q 477 -222 517 -183 q 385 -281 438 -261 q 278 -301 333 -301 z "},"ʔ":{"ha":579,"x_min":-3,"x_max":551,"o":"m 203 0 l 203 450 q 380 584 324 519 q 436 736 436 649 q 390 864 436 817 q 261 911 344 911 q 142 881 190 911 q 58 810 93 850 l -3 885 q 45 929 18 907 q 106 968 72 951 q 180 995 139 985 q 269 1006 221 1006 q 379 989 328 1006 q 469 939 431 972 q 529 856 507 906 q 551 739 551 806 q 534 632 551 679 q 485 544 517 585 q 411 468 454 503 q 317 399 368 433 l 317 0 l 203 0 z "},"ʕ":{"ha":615,"x_min":43,"x_max":597,"o":"m 278 0 l 278 399 q 183 468 226 433 q 109 544 140 503 q 60 632 78 585 q 43 739 43 679 q 66 856 43 806 q 129 939 89 906 q 224 989 169 972 q 339 1006 278 1006 q 424 995 385 1006 q 494 968 463 985 q 551 929 526 951 q 597 885 576 907 l 536 810 q 458 880 504 849 q 347 911 413 911 q 208 864 257 911 q 158 736 158 817 q 215 584 158 649 q 392 450 271 519 l 392 0 l 278 0 z "},"ʡ":{"ha":613,"x_min":10,"x_max":586,"o":"m 219 0 l 219 357 l 10 357 l 10 443 l 115 450 l 239 450 q 403 590 351 521 q 456 736 456 658 q 410 864 456 817 q 282 911 365 911 q 163 881 211 911 q 79 810 114 850 l 18 885 q 66 929 39 907 q 126 968 93 951 q 200 995 160 985 q 290 1006 240 1006 q 400 989 349 1006 q 490 939 451 972 q 550 856 528 906 q 572 739 572 806 q 519 579 572 650 q 386 450 467 508 l 586 450 l 586 357 l 333 357 l 333 0 l 219 0 z "},"ʢ":{"ha":613,"x_min":26,"x_max":603,"o":"m 278 0 l 278 357 l 26 357 l 26 450 l 226 450 q 93 579 146 508 q 40 739 40 650 q 63 856 40 806 q 126 939 86 906 q 220 989 167 972 q 336 1006 274 1006 q 421 995 382 1006 q 491 968 460 985 q 548 929 522 951 q 594 885 574 907 l 533 810 q 456 880 501 849 q 344 911 410 911 q 205 864 254 911 q 156 736 156 817 q 208 590 156 658 q 374 450 261 521 l 497 450 l 603 443 l 603 357 l 392 357 l 392 0 l 278 0 z "},"ǂ":{"ha":400,"x_min":8,"x_max":390,"o":"m 8 460 l 8 519 l 115 525 l 167 525 l 167 1042 l 247 1042 l 247 525 l 390 525 l 390 460 l 247 460 l 247 289 l 390 289 l 390 224 l 247 224 l 247 -347 l 167 -347 l 167 224 l 8 224 l 8 282 l 115 289 l 167 289 l 167 460 l 8 460 z "},"ʘ":{"ha":729,"x_min":82,"x_max":647,"o":"m 365 -17 q 248 14 300 -17 q 159 108 196 44 q 102 268 122 171 q 82 499 82 365 q 158 877 82 749 q 365 1006 235 1006 q 571 876 494 1006 q 647 499 647 746 q 627 268 647 365 q 571 108 607 171 q 482 14 535 44 q 365 -17 429 -17 m 365 78 q 433 100 401 78 q 489 172 465 122 q 526 302 513 222 q 539 499 539 382 q 526 682 539 604 q 489 811 513 760 q 433 887 465 863 q 365 911 401 911 q 296 887 328 911 q 240 811 264 863 q 203 682 217 760 q 190 499 190 604 q 203 302 190 382 q 240 172 217 222 q 296 100 264 122 q 365 78 328 78 m 365 433 q 318 452 338 433 q 299 499 299 471 q 318 546 299 528 q 365 564 338 564 q 411 546 392 564 q 431 499 431 528 q 411 452 431 471 q 365 433 392 433 z "},"ff":{"ha":801,"x_min":42,"x_max":839,"o":"m 529 0 l 529 582 l 247 582 l 247 0 l 133 0 l 133 582 l 42 582 l 42 668 l 133 675 l 133 764 q 185 931 133 869 q 343 992 238 992 q 409 985 376 992 q 467 967 442 978 l 443 881 q 353 899 401 899 q 275 863 303 899 q 247 761 247 828 l 247 675 l 529 675 l 529 782 q 577 946 529 886 q 726 1006 625 1006 q 787 999 758 1006 q 839 983 815 993 l 814 896 q 738 913 776 913 q 643 782 643 913 l 643 675 l 786 675 l 786 582 l 643 582 l 643 0 l 529 0 z "},"ffi":{"ha":1143,"x_min":42,"x_max":1053,"o":"m 529 0 l 529 582 l 247 582 l 247 0 l 133 0 l 133 582 l 42 582 l 42 668 l 133 675 l 133 764 q 185 931 133 869 q 343 992 238 992 q 409 985 376 992 q 467 967 442 978 l 443 881 q 353 899 401 899 q 275 863 303 899 q 247 761 247 828 l 247 675 l 529 675 l 529 782 q 577 946 529 886 q 726 1006 625 1006 q 787 999 758 1006 q 839 983 815 993 l 814 896 q 738 913 776 913 q 643 782 643 913 l 643 675 l 786 675 l 786 582 l 643 582 l 643 0 l 529 0 m 915 0 l 915 675 l 1029 675 l 1029 0 l 915 0 m 974 814 q 917 835 940 814 q 894 888 894 856 q 917 941 894 921 q 974 961 940 961 q 1030 941 1007 961 q 1053 888 1053 921 q 1030 835 1053 856 q 974 814 1007 814 z "},"ffl":{"ha":1156,"x_min":42,"x_max":1101,"o":"m 529 0 l 529 582 l 247 582 l 247 0 l 133 0 l 133 582 l 42 582 l 42 668 l 133 675 l 133 764 q 185 931 133 869 q 343 992 238 992 q 409 985 376 992 q 467 967 442 978 l 443 881 q 353 899 401 899 q 275 863 303 899 q 247 761 247 828 l 247 675 l 529 675 l 529 782 q 577 946 529 886 q 726 1006 625 1006 q 787 999 758 1006 q 839 983 815 993 l 814 896 q 738 913 776 913 q 643 782 643 913 l 643 675 l 786 675 l 786 582 l 643 582 l 643 0 l 529 0 m 1036 -17 q 943 22 971 -17 q 915 136 915 61 l 915 989 l 1029 989 l 1029 128 q 1039 89 1029 100 q 1061 78 1049 78 q 1072 78 1067 78 q 1086 81 1076 78 l 1101 -6 q 1075 -14 1090 -11 q 1036 -17 1060 -17 z "},"Α":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 z "},"Β":{"ha":817,"x_min":125,"x_max":761,"o":"m 125 0 l 125 911 l 396 911 q 523 899 465 911 q 622 860 581 886 q 685 791 663 833 q 708 689 708 749 q 674 566 708 621 q 575 490 640 511 l 575 485 q 710 415 658 469 q 761 267 761 361 q 736 150 761 200 q 665 67 711 100 q 556 17 619 33 q 415 0 492 0 l 125 0 m 240 524 l 375 524 q 543 564 492 524 q 594 674 594 604 q 541 786 594 753 q 381 819 488 819 l 240 819 l 240 524 m 240 92 l 399 92 q 582 135 517 92 q 647 271 647 179 q 583 395 647 356 q 399 435 519 435 l 240 435 l 240 92 z "},"Γ":{"ha":692,"x_min":125,"x_max":650,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 0 l 125 0 z "},"Δ":{"ha":817,"x_min":42,"x_max":775,"o":"m 42 0 l 42 69 l 342 911 l 475 911 l 775 69 l 775 0 l 42 0 m 167 99 l 647 99 l 506 515 l 410 807 l 404 807 l 308 515 l 167 99 z "},"Ε":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 z "},"Ζ":{"ha":749,"x_min":63,"x_max":690,"o":"m 63 0 l 63 69 l 542 814 l 106 814 l 106 911 l 686 911 l 686 843 l 206 99 l 690 99 l 690 0 l 63 0 z "},"Η":{"ha":906,"x_min":125,"x_max":781,"o":"m 125 0 l 125 911 l 240 911 l 240 529 l 664 529 l 664 911 l 781 911 l 781 0 l 664 0 l 664 429 l 240 429 l 240 0 l 125 0 z "},"Θ":{"ha":922,"x_min":72,"x_max":851,"o":"m 306 429 l 306 529 l 617 529 l 617 429 l 306 429 m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 z "},"Ι":{"ha":365,"x_min":125,"x_max":240,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 z "},"Κ":{"ha":804,"x_min":125,"x_max":799,"o":"m 125 0 l 125 911 l 240 911 l 240 454 l 244 454 l 624 911 l 754 911 l 469 564 l 799 0 l 669 0 l 397 474 l 240 289 l 240 0 l 125 0 z "},"Λ":{"ha":715,"x_min":0,"x_max":715,"o":"m 0 0 l 290 911 l 424 911 l 715 0 l 593 0 l 446 493 q 403 644 422 574 q 357 794 383 714 l 351 794 q 307 644 326 714 q 264 493 288 574 l 118 0 l 0 0 z "},"Μ":{"ha":1010,"x_min":125,"x_max":885,"o":"m 125 0 l 125 911 l 264 911 l 439 425 q 472 330 456 378 q 504 235 488 282 l 510 235 q 541 330 526 282 q 572 425 556 378 l 744 911 l 885 911 l 885 0 l 776 0 l 776 501 q 782 636 776 563 q 792 771 788 710 l 786 771 l 714 564 l 542 92 l 465 92 l 293 564 l 221 771 l 215 771 q 224 636 219 710 q 229 501 229 563 l 229 0 l 125 0 z "},"Ν":{"ha":899,"x_min":125,"x_max":774,"o":"m 125 0 l 125 911 l 244 911 l 574 339 l 672 150 l 678 150 q 669 294 674 219 q 664 440 664 368 l 664 911 l 774 911 l 774 0 l 654 0 l 324 574 l 225 761 l 219 761 q 230 620 225 692 q 235 476 235 549 l 235 0 l 125 0 z "},"Ξ":{"ha":740,"x_min":68,"x_max":672,"o":"m 68 0 l 68 99 l 672 99 l 672 0 l 68 0 m 172 429 l 172 528 l 568 528 l 568 429 l 172 429 m 82 814 l 82 911 l 658 911 l 658 814 l 82 814 z "},"Ο":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 z "},"Π":{"ha":896,"x_min":125,"x_max":771,"o":"m 125 0 l 125 911 l 771 911 l 771 0 l 656 0 l 656 814 l 240 814 l 240 0 l 125 0 z "},"Ρ":{"ha":786,"x_min":125,"x_max":726,"o":"m 125 0 l 125 911 l 385 911 q 524 897 461 911 q 632 852 588 883 q 701 769 676 821 q 726 643 726 718 q 702 518 726 571 q 633 431 678 465 q 527 378 589 396 q 390 361 465 361 l 240 361 l 240 0 l 125 0 m 240 456 l 376 456 q 553 501 496 456 q 611 643 611 546 q 551 780 611 742 q 371 818 490 818 l 240 818 l 240 456 z "},"Σ":{"ha":747,"x_min":61,"x_max":696,"o":"m 61 0 l 61 69 l 375 463 l 67 843 l 67 911 l 654 911 l 654 814 l 213 814 l 492 465 l 208 99 l 696 99 l 696 0 l 61 0 z "},"Τ":{"ha":744,"x_min":39,"x_max":706,"o":"m 314 0 l 314 814 l 39 814 l 39 911 l 706 911 l 706 814 l 431 814 l 431 0 l 314 0 z "},"Υ":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 z "},"Φ":{"ha":999,"x_min":67,"x_max":932,"o":"m 819 460 q 747 647 819 576 q 551 724 675 717 l 551 189 q 663 214 613 193 q 747 270 713 235 q 801 353 782 306 q 819 460 819 401 m 179 460 q 198 353 179 401 q 251 270 217 306 q 336 214 286 235 q 447 189 386 193 l 447 724 q 251 647 324 717 q 179 460 179 576 m 447 -31 l 447 99 q 291 129 361 103 q 171 202 221 156 q 94 313 121 249 q 67 460 67 378 q 94 604 67 540 q 171 713 121 668 q 291 784 221 758 q 447 814 361 810 l 447 942 l 551 942 l 551 814 q 708 784 638 810 q 828 713 778 758 q 905 604 878 668 q 932 460 932 540 q 905 313 932 378 q 828 202 878 249 q 708 129 778 156 q 551 99 638 103 l 551 -31 l 447 -31 z "},"Χ":{"ha":713,"x_min":21,"x_max":692,"o":"m 21 0 l 286 471 l 39 911 l 167 911 l 290 678 q 324 616 308 646 q 361 546 340 586 l 367 546 q 401 616 386 586 q 432 678 415 646 l 553 911 l 675 911 l 426 465 l 692 0 l 564 0 l 431 246 q 394 315 413 279 q 353 392 375 350 l 347 392 q 310 315 328 350 q 275 246 292 279 l 143 0 l 21 0 z "},"Ψ":{"ha":971,"x_min":88,"x_max":883,"o":"m 431 0 l 431 340 q 178 430 269 347 q 88 688 88 513 l 88 911 l 201 911 l 201 693 q 259 500 201 561 q 431 433 317 439 l 431 911 l 540 911 l 540 433 q 711 501 654 440 q 768 693 768 561 l 768 911 l 883 911 l 883 688 q 860 536 883 600 q 792 430 836 472 q 684 366 747 388 q 540 340 621 344 l 540 0 l 431 0 z "},"Ω":{"ha":942,"x_min":63,"x_max":879,"o":"m 63 0 l 63 94 l 244 94 l 244 100 q 186 167 215 129 q 134 254 157 206 q 97 360 111 303 q 82 488 82 418 q 110 664 82 583 q 188 803 138 744 q 310 895 239 863 q 471 928 382 928 q 631 895 560 928 q 754 803 703 863 q 833 664 806 744 q 861 488 861 583 q 847 360 861 418 q 809 254 832 303 q 756 167 786 206 q 697 100 726 129 l 697 94 l 879 94 l 879 0 l 556 0 l 556 85 q 628 154 594 115 q 688 242 663 193 q 727 349 713 290 q 742 481 742 408 q 723 617 742 554 q 669 727 704 681 q 585 800 635 774 q 471 826 535 826 q 357 800 407 826 q 272 727 307 774 q 219 617 238 681 q 201 481 201 554 q 215 349 201 408 q 254 242 229 290 q 313 154 279 193 q 386 85 347 115 l 386 0 l 63 0 z "},"Ά":{"ha":786,"x_min":8,"x_max":782,"o":"m 313 510 l 269 371 l 543 371 l 500 510 q 453 662 475 586 q 408 817 431 738 l 403 817 q 360 662 382 738 q 313 510 338 586 m 35 0 l 343 911 l 474 911 l 782 0 l 658 0 l 572 278 l 240 278 l 153 0 l 35 0 m 8 660 l 49 931 l 154 915 l 85 644 l 8 660 z "},"Έ":{"ha":821,"x_min":-26,"x_max":753,"o":"m 214 0 l 214 911 l 739 911 l 739 814 l 329 814 l 329 528 l 675 528 l 675 429 l 329 429 l 329 99 l 753 99 l 753 0 l 214 0 m -26 660 l 14 931 l 119 915 l 50 644 l -26 660 z "},"Ή":{"ha":994,"x_min":-26,"x_max":869,"o":"m 214 0 l 214 911 l 329 911 l 329 529 l 753 529 l 753 911 l 869 911 l 869 0 l 753 0 l 753 429 l 329 429 l 329 0 l 214 0 m -26 660 l 14 931 l 119 915 l 50 644 l -26 660 z "},"Ί":{"ha":454,"x_min":-26,"x_max":329,"o":"m 214 0 l 214 911 l 329 911 l 329 0 l 214 0 m -26 660 l 14 931 l 119 915 l 50 644 l -26 660 z "},"Ϊ":{"ha":365,"x_min":-29,"x_max":393,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m 39 993 q -10 1013 10 993 q -29 1061 -29 1032 q -10 1110 -29 1092 q 39 1129 10 1129 q 88 1110 69 1129 q 107 1061 107 1092 q 88 1013 107 1032 q 39 993 69 993 m 325 993 q 276 1013 294 993 q 257 1061 257 1032 q 276 1110 257 1092 q 325 1129 294 1129 q 374 1110 354 1129 q 393 1061 393 1092 q 374 1013 393 1032 q 325 993 354 993 z "},"Ό":{"ha":988,"x_min":-26,"x_max":917,"o":"m 526 -17 q 369 17 440 -17 q 246 112 297 50 q 166 262 194 174 q 138 460 138 350 q 166 656 138 569 q 246 803 194 743 q 369 896 297 864 q 526 928 440 928 q 684 895 613 928 q 808 802 756 863 q 888 655 860 742 q 917 460 917 568 q 888 262 917 350 q 808 112 860 174 q 684 17 756 50 q 526 -17 613 -17 m 526 85 q 637 111 588 85 q 722 187 686 138 q 776 305 757 236 q 796 460 796 374 q 776 613 796 544 q 722 728 757 681 q 637 801 686 775 q 526 826 588 826 q 416 801 465 826 q 331 728 367 775 q 276 613 296 681 q 257 460 257 544 q 276 305 257 374 q 331 187 296 236 q 416 111 367 138 q 526 85 465 85 m -26 660 l 14 931 l 119 915 l 50 644 l -26 660 z "},"Ύ":{"ha":833,"x_min":-26,"x_max":835,"o":"m 444 0 l 444 353 l 171 911 l 294 911 l 413 654 q 456 556 435 604 q 500 456 476 507 l 506 456 q 553 556 529 507 q 597 654 576 604 l 714 911 l 835 911 l 561 353 l 561 0 l 444 0 m -26 660 l 14 931 l 119 915 l 50 644 l -26 660 z "},"Ϋ":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 m 188 993 q 139 1013 158 993 q 119 1061 119 1032 q 139 1110 119 1092 q 188 1129 158 1129 q 237 1110 218 1129 q 256 1061 256 1092 q 237 1013 256 1032 q 188 993 218 993 m 474 993 q 424 1013 443 993 q 406 1061 406 1032 q 424 1110 406 1092 q 474 1129 443 1129 q 522 1110 503 1129 q 542 1061 542 1092 q 522 1013 542 1032 q 474 993 503 993 z "},"Ώ":{"ha":1004,"x_min":-31,"x_max":944,"o":"m 128 0 l 128 94 l 310 94 l 310 100 q 251 167 281 129 q 199 254 222 206 q 162 360 176 303 q 147 488 147 418 q 175 664 147 583 q 253 803 203 744 q 376 895 304 863 q 536 928 447 928 q 697 895 625 928 q 819 803 768 863 q 899 664 871 744 q 926 488 926 583 q 912 360 926 418 q 874 254 897 303 q 822 167 851 206 q 763 100 792 129 l 763 94 l 944 94 l 944 0 l 621 0 l 621 85 q 694 154 660 115 q 753 242 728 193 q 792 349 778 290 q 807 481 807 408 q 788 617 807 554 q 735 727 769 681 q 650 800 700 774 q 536 826 600 826 q 422 800 472 826 q 338 727 372 774 q 285 617 303 681 q 267 481 267 554 q 281 349 267 408 q 319 242 294 290 q 378 154 344 193 q 451 85 413 115 l 451 0 l 128 0 m -31 660 l 10 931 l 115 915 l 46 644 l -31 660 z "},"α":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 z "},"β":{"ha":785,"x_min":110,"x_max":724,"o":"m 110 -249 l 110 682 q 126 811 110 751 q 178 914 143 871 q 265 981 213 957 q 388 1006 317 1006 q 483 991 438 1006 q 565 947 529 976 q 621 872 600 917 q 642 765 642 826 q 607 633 642 690 q 508 535 572 575 l 508 529 q 666 445 608 515 q 724 268 724 375 q 701 147 724 200 q 642 58 679 94 q 558 2 606 21 q 460 -17 511 -17 q 333 6 396 -17 q 218 86 271 28 q 222 -81 221 0 q 225 -249 224 -162 l 110 -249 m 433 79 q 501 92 469 79 q 558 131 533 106 q 596 192 582 156 q 610 275 610 229 q 563 410 610 356 q 421 464 515 464 q 351 456 385 464 l 333 543 q 425 576 388 554 q 486 628 463 599 q 520 690 510 657 q 531 757 531 724 q 519 825 531 796 q 489 874 508 854 q 444 903 469 893 q 390 913 418 913 q 267 850 311 913 q 222 667 224 788 q 219 426 219 544 q 218 185 218 307 q 324 101 267 122 q 433 79 381 79 z "},"γ":{"ha":672,"x_min":8,"x_max":644,"o":"m 272 -249 q 275 -208 274 -226 q 278 -170 276 -189 q 279 -130 279 -151 q 279 -81 279 -108 q 256 104 279 3 q 195 308 233 206 q 108 503 157 410 q 8 663 60 596 l 124 692 q 188 585 154 647 q 251 449 221 522 q 306 294 282 375 q 346 135 331 214 l 351 135 q 467 398 417 261 q 529 675 518 535 l 644 675 q 610 513 631 589 q 559 358 590 436 q 483 194 528 279 q 376 7 439 108 q 388 -122 385 -54 q 390 -249 390 -190 l 272 -249 z "},"δ":{"ha":738,"x_min":72,"x_max":672,"o":"m 374 -17 q 261 4 315 -17 q 165 65 207 25 q 98 161 124 104 q 72 290 72 218 q 92 402 72 351 q 147 492 113 453 q 230 560 182 532 q 332 606 278 589 q 262 659 296 632 q 202 716 228 686 q 161 780 176 746 q 146 854 146 814 q 159 912 146 885 q 199 960 172 939 q 268 993 226 981 q 367 1006 310 1006 q 657 951 490 1006 l 629 860 q 478 904 542 892 q 365 917 414 917 q 281 896 307 917 q 254 847 254 875 q 270 795 254 819 q 314 746 286 771 q 378 695 342 721 q 457 639 415 669 q 539 574 500 607 q 608 501 578 540 q 655 413 638 461 q 672 304 672 365 q 652 173 672 232 q 594 72 632 114 q 500 6 556 29 q 374 -17 444 -17 m 375 78 q 513 140 467 78 q 560 303 560 201 q 548 380 560 344 q 516 444 536 415 q 469 499 496 474 q 411 549 442 525 q 244 458 304 525 q 183 293 183 392 q 199 203 183 243 q 242 136 215 164 q 303 93 268 108 q 375 78 338 78 z "},"ε":{"ha":622,"x_min":64,"x_max":594,"o":"m 349 -17 q 234 -3 286 -17 q 144 38 182 11 q 85 101 106 64 q 64 186 64 139 q 105 299 64 260 q 204 354 146 339 l 204 360 q 124 421 151 379 q 97 510 97 463 q 118 590 97 556 q 174 647 139 625 q 256 681 210 669 q 356 692 303 692 q 472 672 417 692 q 574 618 526 653 l 528 542 q 447 586 488 571 q 358 601 406 601 q 253 575 296 601 q 211 496 211 549 q 247 421 211 450 q 365 392 283 392 q 404 392 385 392 q 450 396 424 393 l 450 307 q 394 310 419 310 q 344 310 369 310 q 178 196 178 310 q 226 107 178 139 q 361 75 274 75 q 453 90 410 75 q 546 143 497 106 l 594 67 q 476 1 533 19 q 349 -17 419 -17 z "},"ζ":{"ha":589,"x_min":67,"x_max":578,"o":"m 500 -256 l 408 -218 q 460 -149 444 -174 q 475 -96 475 -124 q 469 -69 475 -81 q 445 -48 463 -57 q 398 -30 428 -39 q 321 -11 368 -21 q 224 19 269 -1 q 143 76 178 40 q 88 169 108 113 q 67 308 67 225 q 101 471 67 386 q 189 635 135 556 q 309 785 243 715 q 439 903 375 854 q 367 903 410 903 q 279 901 325 903 q 188 899 233 900 q 110 896 143 897 l 110 989 l 568 989 l 568 896 l 561 896 q 429 781 496 850 q 308 631 363 711 q 219 468 254 551 q 185 314 185 385 q 199 213 185 254 q 239 146 213 172 q 303 104 265 119 q 388 81 340 89 q 472 59 436 71 q 532 31 508 47 q 567 -10 556 14 q 578 -69 578 -35 q 560 -149 578 -101 q 500 -256 542 -197 z "},"η":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 z "},"θ":{"ha":725,"x_min":82,"x_max":643,"o":"m 363 -17 q 245 14 297 -17 q 157 108 193 44 q 101 268 121 171 q 82 499 82 365 q 157 877 82 749 q 363 1006 232 1006 q 568 877 493 1006 q 643 499 643 749 q 624 268 643 365 q 568 108 604 171 q 480 14 532 44 q 363 -17 428 -17 m 363 911 q 299 890 328 911 q 247 825 269 869 q 211 710 225 781 q 194 542 197 640 l 531 542 q 514 710 528 640 q 478 825 500 781 q 426 890 456 869 q 363 911 397 911 m 363 78 q 427 97 397 78 q 479 162 457 117 q 515 280 501 207 q 531 460 528 353 l 194 460 q 210 280 196 353 q 246 162 224 207 q 298 97 268 117 q 363 78 328 78 z "},"ι":{"ha":364,"x_min":114,"x_max":325,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 z "},"κ":{"ha":686,"x_min":101,"x_max":690,"o":"m 564 -11 q 507 59 536 19 q 449 144 478 99 q 392 237 419 189 q 339 331 364 285 q 308 291 324 311 q 276 249 292 271 q 234 155 246 208 q 221 35 222 101 l 221 0 l 114 0 l 114 490 q 112 581 114 531 q 101 675 110 631 l 214 675 q 224 605 221 647 q 226 518 226 563 l 226 307 l 232 307 q 319 440 272 376 q 419 556 367 504 q 525 642 471 607 q 633 692 579 678 l 644 583 q 530 523 588 565 q 410 413 472 481 q 468 308 435 363 q 538 198 501 253 q 613 92 574 143 q 690 0 653 42 l 564 -11 z "},"λ":{"ha":686,"x_min":22,"x_max":676,"o":"m 143 -11 l 22 0 l 315 690 l 307 719 q 242 860 279 813 q 147 908 206 908 q 99 901 119 908 q 60 886 79 894 l 32 981 q 85 999 56 992 q 160 1006 114 1006 q 318 933 260 1006 q 421 714 376 860 l 676 0 l 556 0 l 369 560 l 364 560 l 143 -11 z "},"μ":{"ha":781,"x_min":114,"x_max":743,"o":"m 114 -249 l 114 675 l 228 675 l 228 263 q 256 127 228 172 q 351 82 285 82 q 396 87 374 82 q 440 106 418 92 q 485 147 463 121 q 531 214 507 172 l 531 675 l 646 675 q 640 396 643 538 q 638 132 638 254 q 651 91 638 104 q 688 78 665 78 q 728 86 704 78 l 743 0 q 709 -12 728 -7 q 663 -17 690 -17 q 576 15 604 -17 q 540 114 547 46 l 538 114 q 453 17 501 49 q 350 -14 406 -14 q 276 -1 310 -14 q 219 51 243 11 q 220 -37 219 1 q 222 -108 221 -75 q 225 -175 224 -142 q 229 -249 226 -208 l 114 -249 z "},"ν":{"ha":658,"x_min":8,"x_max":631,"o":"m 268 0 q 222 184 249 93 q 163 360 196 275 q 90 521 129 444 q 8 663 51 597 l 124 692 q 192 567 158 638 q 253 419 225 496 q 304 264 282 342 q 342 118 326 186 l 347 118 q 456 393 410 249 q 515 675 503 538 l 631 675 q 595 504 617 588 q 543 339 574 421 q 472 173 513 257 q 381 0 432 89 l 268 0 z "},"ξ":{"ha":599,"x_min":39,"x_max":589,"o":"m 510 -256 l 418 -218 q 469 -149 454 -174 q 485 -96 485 -124 q 478 -69 485 -81 q 453 -47 471 -57 q 406 -28 436 -37 q 331 -11 376 -19 q 229 17 276 -1 q 146 67 182 36 q 89 144 110 97 q 68 257 68 190 q 85 351 68 307 q 130 429 101 394 q 196 489 158 464 q 275 526 233 514 l 275 532 q 174 608 213 557 q 135 732 135 658 q 161 835 135 790 q 235 903 188 879 q 185 903 207 903 q 141 901 163 903 q 95 899 119 900 q 39 896 71 897 l 39 989 l 578 989 l 578 896 l 419 896 q 356 885 386 896 q 301 853 325 874 q 264 801 278 832 q 250 729 250 769 q 265 662 250 693 q 306 608 281 631 q 361 572 331 585 q 422 560 392 560 q 467 561 450 560 q 513 568 485 563 l 513 471 q 464 478 485 478 q 415 479 443 479 q 331 465 372 479 q 258 425 290 451 q 206 360 225 399 q 186 272 186 321 q 202 189 186 222 q 247 135 218 156 q 316 101 276 114 q 403 81 356 89 q 488 59 453 71 q 546 31 524 47 q 578 -10 568 14 q 589 -69 589 -35 q 570 -149 589 -101 q 510 -256 551 -197 z "},"ο":{"ha":743,"x_min":64,"x_max":679,"o":"m 371 -17 q 252 7 308 -17 q 154 76 196 31 q 88 186 113 121 q 64 336 64 251 q 88 488 64 421 q 154 599 113 554 q 252 668 196 644 q 371 692 308 692 q 491 668 435 692 q 589 599 547 644 q 655 488 631 554 q 679 336 679 421 q 655 186 679 251 q 589 76 631 121 q 491 7 547 31 q 371 -17 435 -17 m 371 78 q 511 148 461 78 q 561 336 561 218 q 511 526 561 454 q 371 597 461 597 q 231 526 281 597 q 182 336 182 454 q 231 148 182 218 q 371 78 281 78 z "},"π":{"ha":814,"x_min":31,"x_max":779,"o":"m 674 -17 q 560 26 593 -17 q 526 153 526 69 q 527 228 526 179 q 529 338 528 278 q 532 461 531 397 q 533 581 533 525 l 294 581 q 282 287 294 438 q 254 -7 269 136 l 139 0 q 175 293 163 143 q 188 581 188 443 l 31 581 l 31 668 l 128 675 l 779 675 l 779 581 l 644 581 q 640 458 642 524 q 636 330 638 392 q 634 219 635 268 q 633 144 633 169 q 649 93 633 108 q 697 78 665 78 q 751 86 714 78 l 767 -1 q 726 -12 749 -8 q 674 -17 703 -17 z "},"ρ":{"ha":763,"x_min":108,"x_max":697,"o":"m 108 -249 l 108 344 q 132 497 108 432 q 196 606 156 563 q 290 670 236 649 q 406 692 344 692 q 623 600 549 692 q 697 347 697 508 q 674 194 697 261 q 611 79 650 126 q 522 8 572 32 q 419 -17 472 -17 q 314 4 365 -17 q 215 79 263 25 q 218 -6 217 33 q 220 -85 219 -46 q 222 -164 221 -124 q 224 -249 224 -204 l 108 -249 m 399 79 q 469 98 436 79 q 526 151 501 117 q 565 235 551 185 q 579 347 579 285 q 569 449 579 403 q 537 527 558 494 q 482 578 515 560 q 401 596 449 596 q 331 580 364 596 q 272 533 297 564 q 233 454 247 501 q 218 343 218 407 l 218 171 q 310 97 265 114 q 399 79 354 79 z "},"σ":{"ha":758,"x_min":64,"x_max":742,"o":"m 367 -17 q 251 6 306 -17 q 154 73 196 29 q 88 182 113 117 q 64 331 64 247 q 90 484 64 419 q 158 591 115 549 q 257 654 201 633 q 372 675 313 675 l 742 675 l 742 578 q 635 585 683 582 q 528 589 586 588 l 528 583 q 626 479 590 547 q 661 315 661 411 q 638 175 661 236 q 576 71 615 114 q 483 6 536 28 q 367 -17 429 -17 m 368 78 q 441 95 407 78 q 499 144 475 113 q 536 222 522 176 q 550 325 550 268 q 538 422 550 375 q 503 503 526 468 q 447 560 481 539 q 369 581 413 581 q 235 519 289 581 q 182 331 182 457 q 196 226 182 272 q 235 146 210 179 q 294 95 260 113 q 368 78 328 78 z "},"τ":{"ha":639,"x_min":36,"x_max":603,"o":"m 400 -17 q 292 26 322 -17 q 263 153 263 69 l 263 582 l 36 582 l 36 668 l 133 675 l 603 675 l 603 582 l 375 582 q 371 358 372 468 q 369 144 369 247 q 384 93 369 108 q 426 78 399 78 q 458 81 442 78 q 492 89 475 85 l 508 1 q 460 -11 489 -6 q 400 -17 432 -17 z "},"υ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 z "},"φ":{"ha":944,"x_min":64,"x_max":881,"o":"m 182 339 q 201 230 182 278 q 251 149 219 182 q 327 96 283 115 q 419 75 371 76 l 419 600 q 327 579 371 597 q 251 528 283 561 q 201 447 219 494 q 182 339 182 399 m 763 339 q 697 528 763 460 q 525 600 631 596 l 525 75 q 618 96 575 76 q 693 149 661 115 q 744 230 725 182 q 763 339 763 278 m 419 -249 l 419 -12 q 286 13 350 -11 q 173 83 222 38 q 94 192 124 128 q 64 339 64 256 q 94 485 64 421 q 173 593 124 549 q 286 661 222 638 q 419 688 350 685 l 419 864 l 525 864 l 525 688 q 660 661 596 685 q 773 593 724 638 q 851 485 822 549 q 881 339 881 421 q 851 192 881 256 q 772 83 821 128 q 658 13 722 38 q 525 -12 593 -11 l 525 -249 l 419 -249 z "},"χ":{"ha":668,"x_min":13,"x_max":678,"o":"m 128 -265 l 13 -249 l 281 226 l 17 663 l 131 692 l 335 331 l 340 331 l 514 675 l 635 675 l 394 229 l 678 -236 l 567 -265 l 340 133 l 335 133 l 128 -265 z "},"ψ":{"ha":957,"x_min":85,"x_max":879,"o":"m 422 -249 l 422 -17 q 274 9 336 -15 q 173 76 213 33 q 114 178 133 118 q 94 310 94 238 l 94 490 q 93 576 94 531 q 85 675 92 622 l 196 675 q 203 601 201 639 q 204 518 204 563 q 203 459 204 490 q 203 399 203 428 q 202 344 203 369 q 201 303 201 319 q 256 138 201 200 q 422 76 310 76 l 422 864 l 529 864 l 529 76 q 702 151 642 81 q 763 365 763 221 q 760 438 763 403 q 751 509 757 474 q 734 583 744 544 q 707 665 724 621 l 818 692 q 865 532 850 607 q 879 369 879 457 q 788 88 879 188 q 529 -17 696 -12 l 529 -249 l 422 -249 z "},"ω":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 z "},"ς":{"ha":600,"x_min":64,"x_max":560,"o":"m 439 -250 l 347 -214 q 402 -137 383 -168 q 421 -76 421 -107 q 401 -21 421 -43 q 322 19 382 1 q 228 59 275 36 q 146 119 182 82 q 87 213 110 157 q 64 353 64 269 q 88 497 64 433 q 154 603 113 560 q 250 669 196 647 q 365 692 304 692 q 479 668 433 692 q 560 613 525 644 l 501 538 q 442 581 472 564 q 372 597 413 597 q 295 580 331 597 q 235 531 260 563 q 196 453 210 499 q 182 353 182 408 q 197 253 182 293 q 239 187 213 214 q 300 142 265 160 q 374 113 335 125 q 444 85 415 99 q 490 52 472 71 q 516 8 508 33 q 524 -51 524 -17 q 503 -140 524 -87 q 439 -250 482 -192 z "},"ϐ":{"ha":778,"x_min":108,"x_max":717,"o":"m 424 -17 q 313 1 369 -17 q 212 57 257 18 q 138 159 167 96 q 108 314 108 222 l 108 682 q 125 810 108 751 q 175 912 142 869 q 260 978 208 954 q 381 1003 311 1003 q 474 988 428 1003 q 555 944 519 974 q 612 871 590 915 q 633 765 633 826 q 595 631 633 690 q 478 535 557 572 l 478 529 q 653 445 590 518 q 717 263 717 372 q 694 145 717 197 q 631 57 671 93 q 538 2 592 21 q 424 -17 485 -17 m 219 667 q 219 585 219 622 q 218 514 218 547 q 361 555 303 531 q 456 610 419 579 q 507 677 492 640 q 522 756 522 714 q 483 872 522 835 q 388 908 443 908 q 265 848 308 908 q 219 667 222 788 m 421 83 q 551 133 500 83 q 603 269 603 183 q 592 344 603 308 q 556 406 581 379 q 495 449 532 433 q 407 465 458 465 q 342 458 385 465 q 217 426 299 450 l 217 331 q 238 208 217 256 q 290 132 258 160 q 356 94 321 104 q 421 83 392 83 z "},"ϑ":{"ha":725,"x_min":92,"x_max":643,"o":"m 201 751 q 216 665 201 707 q 267 593 231 624 q 368 549 304 563 q 531 550 432 536 q 513 719 528 650 q 472 831 497 788 q 411 892 446 874 q 335 911 376 911 q 239 867 276 911 q 201 751 201 824 m 360 -17 q 185 46 247 -17 q 122 235 122 108 q 121 331 122 294 q 111 404 119 368 l 219 404 q 228 342 228 381 q 229 249 229 304 q 240 167 229 200 q 268 115 250 135 q 311 86 286 94 q 364 78 336 78 q 428 95 399 78 q 481 157 458 113 q 516 278 503 201 q 531 474 529 354 q 318 478 403 457 q 183 543 233 500 q 113 643 133 586 q 92 753 92 700 q 110 855 92 808 q 162 935 129 901 q 238 987 194 968 q 331 1006 281 1006 q 565 879 486 1006 q 643 503 643 753 q 623 258 643 357 q 565 97 603 158 q 476 10 528 36 q 360 -17 424 -17 z "},"ϕ":{"ha":944,"x_min":64,"x_max":881,"o":"m 421 -249 l 421 -12 q 285 12 350 -11 q 172 78 221 35 q 93 187 122 122 q 64 338 64 251 q 106 532 64 442 q 213 697 149 622 l 306 631 q 252 560 275 594 q 213 489 229 525 q 189 413 197 453 q 181 325 181 372 q 199 222 181 267 q 249 144 217 176 q 324 95 281 113 q 421 75 368 78 l 421 411 q 478 623 421 554 q 626 692 536 692 q 731 668 683 692 q 811 601 778 644 q 863 494 844 557 q 881 353 881 432 q 851 200 881 267 q 773 87 822 133 q 660 15 724 40 q 525 -12 596 -11 q 528 -131 526 -72 q 531 -249 529 -190 l 421 -249 m 522 415 q 523 246 522 331 q 525 75 524 161 q 619 97 576 78 q 694 151 663 117 q 744 235 726 186 q 763 347 763 285 q 722 529 763 463 q 621 596 682 596 q 551 552 579 596 q 522 415 522 508 z "},"ά":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 349 790 l 408 1069 l 526 1049 l 428 775 l 349 790 z "},"έ":{"ha":622,"x_min":64,"x_max":594,"o":"m 349 -17 q 234 -3 286 -17 q 144 38 182 11 q 85 101 106 64 q 64 186 64 139 q 105 299 64 260 q 204 354 146 339 l 204 360 q 124 421 151 379 q 97 510 97 463 q 118 590 97 556 q 174 647 139 625 q 256 681 210 669 q 356 692 303 692 q 472 672 417 692 q 574 618 526 653 l 528 542 q 447 586 488 571 q 358 601 406 601 q 253 575 296 601 q 211 496 211 549 q 247 421 211 450 q 365 392 283 392 q 404 392 385 392 q 450 396 424 393 l 450 307 q 394 310 419 310 q 344 310 369 310 q 178 196 178 310 q 226 107 178 139 q 361 75 274 75 q 453 90 410 75 q 546 143 497 106 l 594 67 q 476 1 533 19 q 349 -17 419 -17 m 297 790 l 357 1069 l 475 1049 l 376 775 l 297 790 z "},"ή":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 357 790 l 417 1069 l 535 1049 l 436 775 l 357 790 z "},"ί":{"ha":364,"x_min":114,"x_max":325,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 126 790 l 186 1069 l 304 1049 l 206 775 l 126 790 z "},"ϊ":{"ha":364,"x_min":-31,"x_max":375,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 39 815 q -11 835 8 815 q -31 885 -31 856 q -11 934 -31 914 q 39 954 8 954 q 88 934 68 954 q 107 885 107 914 q 88 835 107 856 q 39 815 68 815 m 306 815 q 257 835 276 815 q 238 885 238 856 q 257 934 238 914 q 306 954 276 954 q 356 934 336 954 q 375 885 375 914 q 356 835 375 856 q 306 815 336 815 z "},"ό":{"ha":743,"x_min":64,"x_max":679,"o":"m 371 -17 q 252 7 308 -17 q 154 76 196 31 q 88 186 113 121 q 64 336 64 251 q 88 488 64 421 q 154 599 113 554 q 252 668 196 644 q 371 692 308 692 q 491 668 435 692 q 589 599 547 644 q 655 488 631 554 q 679 336 679 421 q 655 186 679 251 q 589 76 631 121 q 491 7 547 31 q 371 -17 435 -17 m 371 78 q 511 148 461 78 q 561 336 561 218 q 511 526 561 454 q 371 597 461 597 q 231 526 281 597 q 182 336 182 454 q 231 148 182 218 q 371 78 281 78 m 326 790 l 386 1069 l 504 1049 l 406 775 l 326 790 z "},"ύ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 293 790 l 353 1069 l 471 1049 l 372 775 l 293 790 z "},"ϋ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 206 815 q 156 835 175 815 q 136 885 136 856 q 156 934 136 914 q 206 954 175 954 q 254 934 235 954 q 274 885 274 914 q 254 835 274 856 q 206 815 235 815 m 472 815 q 424 835 443 815 q 404 885 404 856 q 424 934 404 914 q 472 954 443 954 q 522 934 503 954 q 542 885 542 914 q 522 835 542 856 q 472 815 503 815 z "},"ώ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 440 790 l 500 1069 l 618 1049 l 519 775 l 440 790 z "},"ΐ":{"ha":364,"x_min":-43,"x_max":388,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 117 796 l 179 1075 l 271 1056 l 176 782 l 117 796 m 15 826 q -26 842 -10 826 q -43 885 -43 858 q -26 927 -43 911 q 15 943 -10 943 q 56 927 39 943 q 72 885 72 911 q 56 842 72 858 q 15 826 39 826 m 329 826 q 289 842 306 826 q 272 885 272 858 q 289 927 272 911 q 329 943 306 943 q 371 927 354 943 q 388 885 388 911 q 371 842 388 858 q 329 826 354 826 z "},"ΰ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 283 796 l 346 1075 l 438 1056 l 343 782 l 283 796 m 182 826 q 140 842 157 826 q 124 885 124 858 q 140 927 124 911 q 182 943 157 943 q 222 927 206 943 q 239 885 239 911 q 222 842 239 858 q 182 826 206 826 m 496 826 q 456 842 472 826 q 439 885 439 858 q 456 927 439 911 q 496 943 472 943 q 538 927 521 943 q 554 885 554 911 q 538 842 554 858 q 496 826 521 826 z "},"Ἀ":{"ha":806,"x_min":-8,"x_max":803,"o":"m 333 510 l 290 371 l 564 371 l 521 510 q 474 662 496 586 q 429 817 451 738 l 424 817 q 381 662 403 738 q 333 510 358 586 m 56 0 l 364 911 l 494 911 l 803 0 l 679 0 l 593 278 l 261 278 l 174 0 l 56 0 m 42 640 l 29 693 q 84 726 61 706 q 107 785 107 747 q 78 836 107 817 q -8 858 50 856 l 4 924 q 146 890 96 921 q 196 797 196 858 q 183 733 196 760 q 149 689 171 707 q 100 659 128 671 q 42 640 72 647 z "},"Ἁ":{"ha":796,"x_min":-18,"x_max":792,"o":"m 322 510 l 279 371 l 553 371 l 510 510 q 463 662 485 586 q 418 817 440 738 l 413 817 q 369 662 392 738 q 322 510 347 586 m 44 0 l 353 911 l 483 911 l 792 0 l 668 0 l 582 278 l 250 278 l 163 0 l 44 0 m 136 640 q 78 659 106 647 q 28 689 50 671 q -6 733 7 707 q -18 797 -18 760 q 32 890 -18 858 q 174 924 82 921 l 186 858 q 99 836 128 856 q 71 785 71 817 q 94 726 71 747 q 149 693 117 706 l 136 640 z "},"Ὰ":{"ha":786,"x_min":4,"x_max":782,"o":"m 313 510 l 269 371 l 543 371 l 500 510 q 453 662 475 586 q 408 817 431 738 l 403 817 q 360 662 382 738 q 313 510 338 586 m 35 0 l 343 911 l 474 911 l 782 0 l 658 0 l 572 278 l 240 278 l 153 0 l 35 0 m 74 644 l 4 915 l 110 931 l 150 660 l 74 644 z "},"Ά":{"ha":786,"x_min":8,"x_max":782,"o":"m 313 510 l 269 371 l 543 371 l 500 510 q 453 662 475 586 q 408 817 431 738 l 403 817 q 360 662 382 738 q 313 510 338 586 m 35 0 l 343 911 l 474 911 l 782 0 l 658 0 l 572 278 l 240 278 l 153 0 l 35 0 m 8 660 l 49 931 l 154 915 l 85 644 l 8 660 z "},"Ἂ":{"ha":992,"x_min":-17,"x_max":988,"o":"m 518 510 l 475 371 l 749 371 l 706 510 q 658 662 681 586 q 614 817 636 738 l 608 817 q 565 662 588 738 q 518 510 543 586 m 240 0 l 549 911 l 679 911 l 988 0 l 864 0 l 778 278 l 446 278 l 358 0 l 240 0 m 279 644 l 210 915 l 315 931 l 356 660 l 279 644 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 z "},"Ἃ":{"ha":986,"x_min":-18,"x_max":982,"o":"m 513 510 l 469 371 l 743 371 l 700 510 q 653 662 675 586 q 608 817 631 738 l 603 817 q 560 662 582 738 q 513 510 538 586 m 235 0 l 543 911 l 674 911 l 982 0 l 858 0 l 772 278 l 440 278 l 353 0 l 235 0 m 275 644 l 204 915 l 310 931 l 350 660 l 275 644 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ἄ":{"ha":985,"x_min":-17,"x_max":982,"o":"m 513 510 l 469 371 l 743 371 l 700 510 q 653 662 675 586 q 608 817 631 738 l 603 817 q 560 662 582 738 q 513 510 538 586 m 235 0 l 543 911 l 674 911 l 982 0 l 858 0 l 772 278 l 440 278 l 353 0 l 235 0 m 210 660 l 250 931 l 356 915 l 286 644 l 210 660 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 z "},"Ἅ":{"ha":979,"x_min":-18,"x_max":976,"o":"m 507 510 l 464 371 l 738 371 l 694 510 q 647 662 669 586 q 603 817 625 738 l 597 817 q 554 662 576 738 q 507 510 532 586 m 229 0 l 538 911 l 668 911 l 976 0 l 853 0 l 767 278 l 435 278 l 347 0 l 229 0 m 204 660 l 244 931 l 350 915 l 281 644 l 204 660 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ἆ":{"ha":851,"x_min":-33,"x_max":847,"o":"m 378 510 l 335 371 l 608 371 l 565 510 q 518 662 540 586 q 474 817 496 738 l 468 817 q 425 662 447 738 q 378 510 403 586 m 100 0 l 408 911 l 539 911 l 847 0 l 724 0 l 638 278 l 306 278 l 218 0 l 100 0 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 m 93 610 l 82 656 q 124 672 107 663 q 140 696 140 682 q 118 726 140 715 q 44 740 96 738 l 54 794 q 179 772 136 792 q 222 708 222 751 q 183 642 222 665 q 93 610 143 619 z "},"Ἇ":{"ha":851,"x_min":-33,"x_max":847,"o":"m 378 510 l 335 371 l 608 371 l 565 510 q 518 662 540 586 q 474 817 496 738 l 468 817 q 425 662 447 738 q 378 510 403 586 m 100 0 l 408 911 l 539 911 l 847 0 l 724 0 l 638 278 l 306 278 l 218 0 l 100 0 m 168 610 q 119 622 143 614 q 78 642 96 631 q 49 671 60 654 q 38 708 38 688 q 81 772 38 751 q 207 794 125 792 l 217 740 q 143 726 165 738 q 121 696 121 715 q 137 672 121 682 q 179 656 153 663 l 168 610 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 z "},"Ᾰ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 376 979 q 292 994 328 979 q 231 1033 256 1008 q 192 1090 206 1057 q 174 1158 178 1122 l 243 1169 q 284 1087 251 1121 q 376 1053 317 1053 q 469 1087 436 1053 q 510 1169 501 1121 l 579 1158 q 561 1090 575 1122 q 522 1033 547 1057 q 461 994 497 1008 q 376 979 425 979 z "},"Ᾱ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 190 1021 l 190 1100 l 563 1100 l 563 1021 l 190 1021 z "},"Ἐ":{"ha":896,"x_min":-17,"x_max":828,"o":"m 289 0 l 289 911 l 814 911 l 814 814 l 404 814 l 404 528 l 750 528 l 750 429 l 404 429 l 404 99 l 828 99 l 828 0 l 289 0 m 33 640 l 21 693 q 76 726 53 706 q 99 785 99 747 q 70 836 99 817 q -17 858 42 856 l -4 924 q 138 890 88 921 q 188 797 188 858 q 175 733 188 760 q 141 689 163 707 q 92 659 119 671 q 33 640 64 647 z "},"Ἑ":{"ha":896,"x_min":-18,"x_max":828,"o":"m 289 0 l 289 911 l 814 911 l 814 814 l 404 814 l 404 528 l 750 528 l 750 429 l 404 429 l 404 99 l 828 99 l 828 0 l 289 0 m 136 640 q 78 659 106 647 q 28 689 50 671 q -6 733 7 707 q -18 797 -18 760 q 32 890 -18 858 q 174 924 82 921 l 186 858 q 99 836 128 856 q 71 785 71 817 q 94 726 71 747 q 149 693 117 706 l 136 640 z "},"Ὲ":{"ha":821,"x_min":-31,"x_max":753,"o":"m 214 0 l 214 911 l 739 911 l 739 814 l 329 814 l 329 528 l 675 528 l 675 429 l 329 429 l 329 99 l 753 99 l 753 0 l 214 0 m 39 644 l -31 915 l 75 931 l 115 660 l 39 644 z "},"Έ":{"ha":821,"x_min":-26,"x_max":753,"o":"m 214 0 l 214 911 l 739 911 l 739 814 l 329 814 l 329 528 l 675 528 l 675 429 l 329 429 l 329 99 l 753 99 l 753 0 l 214 0 m -26 660 l 14 931 l 119 915 l 50 644 l -26 660 z "},"Ἒ":{"ha":1061,"x_min":-17,"x_max":993,"o":"m 454 0 l 454 911 l 979 911 l 979 814 l 569 814 l 569 528 l 915 528 l 915 429 l 569 429 l 569 99 l 993 99 l 993 0 l 454 0 m 279 644 l 210 915 l 315 931 l 356 660 l 279 644 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 z "},"Ἓ":{"ha":1057,"x_min":-18,"x_max":989,"o":"m 450 0 l 450 911 l 975 911 l 975 814 l 565 814 l 565 528 l 911 528 l 911 429 l 565 429 l 565 99 l 989 99 l 989 0 l 450 0 m 275 644 l 204 915 l 310 931 l 350 660 l 275 644 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ἔ":{"ha":1056,"x_min":-17,"x_max":988,"o":"m 449 0 l 449 911 l 974 911 l 974 814 l 564 814 l 564 528 l 910 528 l 910 429 l 564 429 l 564 99 l 988 99 l 988 0 l 449 0 m 210 660 l 250 931 l 356 915 l 286 644 l 210 660 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 z "},"Ἕ":{"ha":1050,"x_min":-18,"x_max":982,"o":"m 443 0 l 443 911 l 968 911 l 968 814 l 558 814 l 558 528 l 904 528 l 904 429 l 558 429 l 558 99 l 982 99 l 982 0 l 443 0 m 204 660 l 244 931 l 350 915 l 281 644 l 204 660 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ἠ":{"ha":1069,"x_min":-17,"x_max":944,"o":"m 289 0 l 289 911 l 404 911 l 404 529 l 828 529 l 828 911 l 944 911 l 944 0 l 828 0 l 828 429 l 404 429 l 404 0 l 289 0 m 33 640 l 21 693 q 76 726 53 706 q 99 785 99 747 q 70 836 99 817 q -17 858 42 856 l -4 924 q 138 890 88 921 q 188 797 188 858 q 175 733 188 760 q 141 689 163 707 q 92 659 119 671 q 33 640 64 647 z "},"Ἡ":{"ha":1069,"x_min":-18,"x_max":944,"o":"m 289 0 l 289 911 l 404 911 l 404 529 l 828 529 l 828 911 l 944 911 l 944 0 l 828 0 l 828 429 l 404 429 l 404 0 l 289 0 m 136 640 q 78 659 106 647 q 28 689 50 671 q -6 733 7 707 q -18 797 -18 760 q 32 890 -18 858 q 174 924 82 921 l 186 858 q 99 836 128 856 q 71 785 71 817 q 94 726 71 747 q 149 693 117 706 l 136 640 z "},"Ὴ":{"ha":994,"x_min":-31,"x_max":869,"o":"m 214 0 l 214 911 l 329 911 l 329 529 l 753 529 l 753 911 l 869 911 l 869 0 l 753 0 l 753 429 l 329 429 l 329 0 l 214 0 m 39 644 l -31 915 l 75 931 l 115 660 l 39 644 z "},"Ή":{"ha":994,"x_min":-26,"x_max":869,"o":"m 214 0 l 214 911 l 329 911 l 329 529 l 753 529 l 753 911 l 869 911 l 869 0 l 753 0 l 753 429 l 329 429 l 329 0 l 214 0 m -26 660 l 14 931 l 119 915 l 50 644 l -26 660 z "},"Ἢ":{"ha":1235,"x_min":-17,"x_max":1110,"o":"m 454 0 l 454 911 l 569 911 l 569 529 l 993 529 l 993 911 l 1110 911 l 1110 0 l 993 0 l 993 429 l 569 429 l 569 0 l 454 0 m 279 644 l 210 915 l 315 931 l 356 660 l 279 644 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 z "},"Ἣ":{"ha":1229,"x_min":-18,"x_max":1106,"o":"m 450 0 l 450 911 l 565 911 l 565 529 l 989 529 l 989 911 l 1106 911 l 1106 0 l 989 0 l 989 429 l 565 429 l 565 0 l 450 0 m 275 644 l 204 915 l 310 931 l 350 660 l 275 644 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ἤ":{"ha":1229,"x_min":-17,"x_max":1104,"o":"m 449 0 l 449 911 l 564 911 l 564 529 l 988 529 l 988 911 l 1104 911 l 1104 0 l 988 0 l 988 429 l 564 429 l 564 0 l 449 0 m 210 660 l 250 931 l 356 915 l 286 644 l 210 660 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 z "},"Ἥ":{"ha":1224,"x_min":-18,"x_max":1099,"o":"m 443 0 l 443 911 l 558 911 l 558 529 l 982 529 l 982 911 l 1099 911 l 1099 0 l 982 0 l 982 429 l 558 429 l 558 0 l 443 0 m 204 660 l 244 931 l 350 915 l 281 644 l 204 660 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ἦ":{"ha":1167,"x_min":-33,"x_max":1042,"o":"m 386 0 l 386 911 l 501 911 l 501 529 l 925 529 l 925 911 l 1042 911 l 1042 0 l 925 0 l 925 429 l 501 429 l 501 0 l 386 0 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 m 93 610 l 82 656 q 124 672 107 663 q 140 696 140 682 q 118 726 140 715 q 44 740 96 738 l 54 794 q 179 772 136 792 q 222 708 222 751 q 183 642 222 665 q 93 610 143 619 z "},"Ἧ":{"ha":1167,"x_min":-33,"x_max":1042,"o":"m 386 0 l 386 911 l 501 911 l 501 529 l 925 529 l 925 911 l 1042 911 l 1042 0 l 925 0 l 925 429 l 501 429 l 501 0 l 386 0 m 168 610 q 119 622 143 614 q 78 642 96 631 q 49 671 60 654 q 38 708 38 688 q 81 772 38 751 q 207 794 125 792 l 217 740 q 143 726 165 738 q 121 696 121 715 q 137 672 121 682 q 179 656 153 663 l 168 610 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 z "},"Ἰ":{"ha":529,"x_min":-17,"x_max":404,"o":"m 289 0 l 289 911 l 404 911 l 404 0 l 289 0 m 33 640 l 21 693 q 76 726 53 706 q 99 785 99 747 q 70 836 99 817 q -17 858 42 856 l -4 924 q 138 890 88 921 q 188 797 188 858 q 175 733 188 760 q 141 689 163 707 q 92 659 119 671 q 33 640 64 647 z "},"Ἱ":{"ha":529,"x_min":-18,"x_max":404,"o":"m 289 0 l 289 911 l 404 911 l 404 0 l 289 0 m 136 640 q 78 659 106 647 q 28 689 50 671 q -6 733 7 707 q -18 797 -18 760 q 32 890 -18 858 q 174 924 82 921 l 186 858 q 99 836 128 856 q 71 785 71 817 q 94 726 71 747 q 149 693 117 706 l 136 640 z "},"Ὶ":{"ha":454,"x_min":-31,"x_max":329,"o":"m 214 0 l 214 911 l 329 911 l 329 0 l 214 0 m 39 644 l -31 915 l 75 931 l 115 660 l 39 644 z "},"Ί":{"ha":454,"x_min":-26,"x_max":329,"o":"m 214 0 l 214 911 l 329 911 l 329 0 l 214 0 m -26 660 l 14 931 l 119 915 l 50 644 l -26 660 z "},"Ἲ":{"ha":694,"x_min":-17,"x_max":569,"o":"m 454 0 l 454 911 l 569 911 l 569 0 l 454 0 m 279 644 l 210 915 l 315 931 l 356 660 l 279 644 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 z "},"Ἳ":{"ha":690,"x_min":-18,"x_max":565,"o":"m 450 0 l 450 911 l 565 911 l 565 0 l 450 0 m 275 644 l 204 915 l 310 931 l 350 660 l 275 644 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ἴ":{"ha":689,"x_min":-17,"x_max":564,"o":"m 449 0 l 449 911 l 564 911 l 564 0 l 449 0 m 210 660 l 250 931 l 356 915 l 286 644 l 210 660 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 z "},"Ἵ":{"ha":683,"x_min":-18,"x_max":558,"o":"m 443 0 l 443 911 l 558 911 l 558 0 l 443 0 m 204 660 l 244 931 l 350 915 l 281 644 l 204 660 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ἶ":{"ha":626,"x_min":-33,"x_max":501,"o":"m 386 0 l 386 911 l 501 911 l 501 0 l 386 0 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 m 93 610 l 82 656 q 124 672 107 663 q 140 696 140 682 q 118 726 140 715 q 44 740 96 738 l 54 794 q 179 772 136 792 q 222 708 222 751 q 183 642 222 665 q 93 610 143 619 z "},"Ἷ":{"ha":626,"x_min":-33,"x_max":501,"o":"m 386 0 l 386 911 l 501 911 l 501 0 l 386 0 m 168 610 q 119 622 143 614 q 78 642 96 631 q 49 671 60 654 q 38 708 38 688 q 81 772 38 751 q 207 794 125 792 l 217 740 q 143 726 165 738 q 121 696 121 715 q 137 672 121 682 q 179 656 153 663 l 168 610 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 z "},"Ῐ":{"ha":365,"x_min":-21,"x_max":385,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m 182 979 q 97 994 133 979 q 36 1033 61 1008 q -3 1090 11 1057 q -21 1158 -17 1122 l 49 1169 q 90 1087 57 1121 q 182 1053 122 1053 q 274 1087 242 1053 q 315 1169 307 1121 l 385 1158 q 367 1090 381 1122 q 328 1033 353 1057 q 267 994 303 1008 q 182 979 231 979 z "},"Ῑ":{"ha":365,"x_min":-4,"x_max":368,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m -4 1021 l -4 1100 l 368 1100 l 368 1021 l -4 1021 z "},"Ὀ":{"ha":1057,"x_min":-17,"x_max":986,"o":"m 596 -17 q 438 17 510 -17 q 315 112 367 50 q 235 262 264 174 q 207 460 207 350 q 235 656 207 569 q 315 803 264 743 q 438 896 367 864 q 596 928 510 928 q 753 895 682 928 q 877 802 825 863 q 958 655 929 742 q 986 460 986 568 q 958 262 986 350 q 877 112 929 174 q 753 17 825 50 q 596 -17 682 -17 m 596 85 q 706 111 657 85 q 791 187 756 138 q 846 305 826 236 q 865 460 865 374 q 846 613 865 544 q 791 728 826 681 q 706 801 756 775 q 596 826 657 826 q 485 801 535 826 q 401 728 436 775 q 346 613 365 681 q 326 460 326 544 q 346 305 326 374 q 401 187 365 236 q 485 111 436 138 q 596 85 535 85 m 33 640 l 21 693 q 76 726 53 706 q 99 785 99 747 q 70 836 99 817 q -17 858 42 856 l -4 924 q 138 890 88 921 q 188 797 188 858 q 175 733 188 760 q 141 689 163 707 q 92 659 119 671 q 33 640 64 647 z "},"Ὁ":{"ha":1038,"x_min":-18,"x_max":967,"o":"m 576 -17 q 419 17 490 -17 q 296 112 347 50 q 216 262 244 174 q 188 460 188 350 q 216 656 188 569 q 296 803 244 743 q 419 896 347 864 q 576 928 490 928 q 734 895 663 928 q 858 802 806 863 q 938 655 910 742 q 967 460 967 568 q 938 262 967 350 q 858 112 910 174 q 734 17 806 50 q 576 -17 663 -17 m 576 85 q 687 111 638 85 q 772 187 736 138 q 826 305 807 236 q 846 460 846 374 q 826 613 846 544 q 772 728 807 681 q 687 801 736 775 q 576 826 638 826 q 466 801 515 826 q 381 728 417 775 q 326 613 346 681 q 307 460 307 544 q 326 305 307 374 q 381 187 346 236 q 466 111 417 138 q 576 85 515 85 m 136 640 q 78 659 106 647 q 28 689 50 671 q -6 733 7 707 q -18 797 -18 760 q 32 890 -18 858 q 174 924 82 921 l 186 858 q 99 836 128 856 q 71 785 71 817 q 94 726 71 747 q 149 693 117 706 l 136 640 z "},"Ὸ":{"ha":996,"x_min":-31,"x_max":925,"o":"m 535 -17 q 377 17 449 -17 q 254 112 306 50 q 174 262 203 174 q 146 460 146 350 q 174 656 146 569 q 254 803 203 743 q 377 896 306 864 q 535 928 449 928 q 692 895 621 928 q 816 802 764 863 q 897 655 868 742 q 925 460 925 568 q 897 262 925 350 q 816 112 868 174 q 692 17 764 50 q 535 -17 621 -17 m 535 85 q 645 111 596 85 q 730 187 694 138 q 785 305 765 236 q 804 460 804 374 q 785 613 804 544 q 730 728 765 681 q 645 801 694 775 q 535 826 596 826 q 424 801 474 826 q 340 728 375 775 q 285 613 304 681 q 265 460 265 544 q 285 305 265 374 q 340 187 304 236 q 424 111 375 138 q 535 85 474 85 m 39 644 l -31 915 l 75 931 l 115 660 l 39 644 z "},"Ό":{"ha":988,"x_min":-26,"x_max":917,"o":"m 526 -17 q 369 17 440 -17 q 246 112 297 50 q 166 262 194 174 q 138 460 138 350 q 166 656 138 569 q 246 803 194 743 q 369 896 297 864 q 526 928 440 928 q 684 895 613 928 q 808 802 756 863 q 888 655 860 742 q 917 460 917 568 q 888 262 917 350 q 808 112 860 174 q 684 17 756 50 q 526 -17 613 -17 m 526 85 q 637 111 588 85 q 722 187 686 138 q 776 305 757 236 q 796 460 796 374 q 776 613 796 544 q 722 728 757 681 q 637 801 686 775 q 526 826 588 826 q 416 801 465 826 q 331 728 367 775 q 276 613 296 681 q 257 460 257 544 q 276 305 257 374 q 331 187 296 236 q 416 111 367 138 q 526 85 465 85 m -26 660 l 14 931 l 119 915 l 50 644 l -26 660 z "},"Ὂ":{"ha":1228,"x_min":-17,"x_max":1165,"o":"m 775 -17 q 617 17 689 -17 q 494 112 546 50 q 415 262 443 174 q 386 460 386 350 q 415 656 386 569 q 494 803 443 743 q 617 896 546 864 q 775 928 689 928 q 933 895 861 928 q 1056 802 1004 863 q 1137 655 1108 742 q 1165 460 1165 568 q 1137 262 1165 350 q 1056 112 1108 174 q 933 17 1004 50 q 775 -17 861 -17 m 775 85 q 885 111 836 85 q 970 187 935 138 q 1025 305 1006 236 q 1044 460 1044 374 q 1025 613 1044 544 q 970 728 1006 681 q 885 801 935 775 q 775 826 836 826 q 665 801 714 826 q 580 728 615 775 q 525 613 544 681 q 506 460 506 544 q 525 305 506 374 q 580 187 544 236 q 665 111 615 138 q 775 85 714 85 m 279 644 l 210 915 l 315 931 l 356 660 l 279 644 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 z "},"Ὃ":{"ha":1231,"x_min":-18,"x_max":1160,"o":"m 769 -17 q 612 17 683 -17 q 489 112 540 50 q 409 262 438 174 q 381 460 381 350 q 409 656 381 569 q 489 803 438 743 q 612 896 540 864 q 769 928 683 928 q 927 895 856 928 q 1051 802 999 863 q 1131 655 1103 742 q 1160 460 1160 568 q 1131 262 1160 350 q 1051 112 1103 174 q 927 17 999 50 q 769 -17 856 -17 m 769 85 q 880 111 831 85 q 965 187 929 138 q 1019 305 1000 236 q 1039 460 1039 374 q 1019 613 1039 544 q 965 728 1000 681 q 880 801 929 775 q 769 826 831 826 q 659 801 708 826 q 574 728 610 775 q 519 613 539 681 q 500 460 500 544 q 519 305 500 374 q 574 187 539 236 q 659 111 610 138 q 769 85 708 85 m 275 644 l 204 915 l 310 931 l 350 660 l 275 644 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ὄ":{"ha":1222,"x_min":-17,"x_max":1151,"o":"m 761 -17 q 603 17 675 -17 q 481 112 532 50 q 401 262 429 174 q 372 460 372 350 q 401 656 372 569 q 481 803 429 743 q 603 896 532 864 q 761 928 675 928 q 919 895 847 928 q 1042 802 990 863 q 1123 655 1094 742 q 1151 460 1151 568 q 1123 262 1151 350 q 1042 112 1094 174 q 919 17 990 50 q 761 -17 847 -17 m 761 85 q 872 111 822 85 q 956 187 921 138 q 1011 305 992 236 q 1031 460 1031 374 q 1011 613 1031 544 q 956 728 992 681 q 872 801 921 775 q 761 826 822 826 q 651 801 700 826 q 566 728 601 775 q 511 613 531 681 q 492 460 492 544 q 511 305 492 374 q 566 187 531 236 q 651 111 601 138 q 761 85 700 85 m 210 660 l 250 931 l 356 915 l 286 644 l 210 660 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 z "},"Ὅ":{"ha":1217,"x_min":-18,"x_max":1146,"o":"m 756 -17 q 598 17 669 -17 q 475 112 526 50 q 395 262 424 174 q 367 460 367 350 q 395 656 367 569 q 475 803 424 743 q 598 896 526 864 q 756 928 669 928 q 913 895 842 928 q 1037 802 985 863 q 1117 655 1089 742 q 1146 460 1146 568 q 1117 262 1146 350 q 1037 112 1089 174 q 913 17 985 50 q 756 -17 842 -17 m 756 85 q 866 111 817 85 q 951 187 915 138 q 1006 305 986 236 q 1025 460 1025 374 q 1006 613 1025 544 q 951 728 986 681 q 866 801 915 775 q 756 826 817 826 q 645 801 694 826 q 560 728 596 775 q 506 613 525 681 q 486 460 486 544 q 506 305 486 374 q 560 187 525 236 q 645 111 596 138 q 756 85 694 85 m 204 660 l 244 931 l 350 915 l 281 644 l 204 660 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ῥ":{"ha":950,"x_min":-18,"x_max":890,"o":"m 289 0 l 289 911 l 549 911 q 688 897 625 911 q 796 852 751 883 q 865 769 840 821 q 890 643 890 718 q 866 518 890 571 q 797 431 842 465 q 691 378 753 396 q 554 361 629 361 l 404 361 l 404 0 l 289 0 m 404 456 l 540 456 q 717 501 660 456 q 775 643 775 546 q 715 780 775 742 q 535 818 654 818 l 404 818 l 404 456 m 136 640 q 78 659 106 647 q 28 689 50 671 q -6 733 7 707 q -18 797 -18 760 q 32 890 -18 858 q 174 924 82 921 l 186 858 q 99 836 128 856 q 71 785 71 817 q 94 726 71 747 q 149 693 117 706 l 136 640 z "},"Ὑ":{"ha":896,"x_min":-18,"x_max":897,"o":"m 507 0 l 507 353 l 233 911 l 357 911 l 475 654 q 518 556 497 604 q 563 456 539 507 l 568 456 q 615 556 592 507 q 660 654 639 604 l 776 911 l 897 911 l 624 353 l 624 0 l 507 0 m 136 640 q 78 659 106 647 q 28 689 50 671 q -6 733 7 707 q -18 797 -18 760 q 32 890 -18 858 q 174 924 82 921 l 186 858 q 99 836 128 856 q 71 785 71 817 q 94 726 71 747 q 149 693 117 706 l 136 640 z "},"Ὺ":{"ha":833,"x_min":-31,"x_max":835,"o":"m 444 0 l 444 353 l 171 911 l 294 911 l 413 654 q 456 556 435 604 q 500 456 476 507 l 506 456 q 553 556 529 507 q 597 654 576 604 l 714 911 l 835 911 l 561 353 l 561 0 l 444 0 m 39 644 l -31 915 l 75 931 l 115 660 l 39 644 z "},"Ύ":{"ha":833,"x_min":-26,"x_max":835,"o":"m 444 0 l 444 353 l 171 911 l 294 911 l 413 654 q 456 556 435 604 q 500 456 476 507 l 506 456 q 553 556 529 507 q 597 654 576 604 l 714 911 l 835 911 l 561 353 l 561 0 l 444 0 m -26 660 l 14 931 l 119 915 l 50 644 l -26 660 z "},"Ὓ":{"ha":1068,"x_min":-18,"x_max":1071,"o":"m 681 0 l 681 353 l 407 911 l 531 911 l 649 654 q 692 556 671 604 q 736 456 713 507 l 742 456 q 789 556 765 507 q 833 654 813 604 l 950 911 l 1071 911 l 797 353 l 797 0 l 681 0 m 275 644 l 204 915 l 310 931 l 350 660 l 275 644 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ὕ":{"ha":1063,"x_min":-18,"x_max":1064,"o":"m 674 0 l 674 353 l 400 911 l 524 911 l 642 654 q 685 556 664 604 q 729 456 706 507 l 735 456 q 782 556 758 507 q 826 654 806 604 l 943 911 l 1064 911 l 790 353 l 790 0 l 674 0 m 204 660 l 244 931 l 350 915 l 281 644 l 204 660 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ὗ":{"ha":997,"x_min":-33,"x_max":999,"o":"m 608 0 l 608 353 l 335 911 l 458 911 l 576 654 q 619 556 599 604 q 664 456 640 507 l 669 456 q 717 556 693 507 q 761 654 740 604 l 878 911 l 999 911 l 725 353 l 725 0 l 608 0 m 168 610 q 119 622 143 614 q 78 642 96 631 q 49 671 60 654 q 38 708 38 688 q 81 772 38 751 q 207 794 125 792 l 217 740 q 143 726 165 738 q 121 696 121 715 q 137 672 121 682 q 179 656 153 663 l 168 610 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 z "},"Ῠ":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 m 331 979 q 246 994 282 979 q 185 1033 210 1008 q 146 1090 160 1057 q 128 1158 132 1122 l 197 1169 q 238 1087 206 1121 q 331 1053 271 1053 q 423 1087 390 1053 q 464 1169 456 1121 l 533 1158 q 515 1090 529 1122 q 476 1033 501 1057 q 415 994 451 1008 q 331 979 379 979 z "},"Ῡ":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 m 144 1021 l 144 1100 l 517 1100 l 517 1021 l 144 1021 z "},"Ὠ":{"ha":1074,"x_min":-17,"x_max":1014,"o":"m 197 0 l 197 94 l 379 94 l 379 100 q 321 167 350 129 q 269 254 292 206 q 231 360 246 303 q 217 488 217 418 q 244 664 217 583 q 323 803 272 744 q 445 895 374 863 q 606 928 517 928 q 766 895 694 928 q 889 803 838 863 q 968 664 940 744 q 996 488 996 583 q 981 360 996 418 q 944 254 967 303 q 891 167 921 206 q 832 100 861 129 l 832 94 l 1014 94 l 1014 0 l 690 0 l 690 85 q 763 154 729 115 q 822 242 797 193 q 862 349 847 290 q 876 481 876 408 q 858 617 876 554 q 804 727 839 681 q 719 800 769 774 q 606 826 669 826 q 492 800 542 826 q 407 727 442 774 q 354 617 372 681 q 336 481 336 554 q 350 349 336 408 q 389 242 364 290 q 448 154 414 193 q 521 85 482 115 l 521 0 l 197 0 m 33 640 l 21 693 q 76 726 53 706 q 99 785 99 747 q 70 836 99 817 q -17 858 42 856 l -4 924 q 138 890 88 921 q 188 797 188 858 q 175 733 188 760 q 141 689 163 707 q 92 659 119 671 q 33 640 64 647 z "},"Ὡ":{"ha":1054,"x_min":-18,"x_max":994,"o":"m 178 0 l 178 94 l 360 94 l 360 100 q 301 167 331 129 q 249 254 272 206 q 212 360 226 303 q 197 488 197 418 q 225 664 197 583 q 303 803 253 744 q 426 895 354 863 q 586 928 497 928 q 747 895 675 928 q 869 803 818 863 q 949 664 921 744 q 976 488 976 583 q 962 360 976 418 q 924 254 947 303 q 872 167 901 206 q 813 100 842 129 l 813 94 l 994 94 l 994 0 l 671 0 l 671 85 q 744 154 710 115 q 803 242 778 193 q 842 349 828 290 q 857 481 857 408 q 838 617 857 554 q 785 727 819 681 q 700 800 750 774 q 586 826 650 826 q 472 800 522 826 q 388 727 422 774 q 335 617 353 681 q 317 481 317 554 q 331 349 317 408 q 369 242 344 290 q 428 154 394 193 q 501 85 463 115 l 501 0 l 178 0 m 136 640 q 78 659 106 647 q 28 689 50 671 q -6 733 7 707 q -18 797 -18 760 q 32 890 -18 858 q 174 924 82 921 l 186 858 q 99 836 128 856 q 71 785 71 817 q 94 726 71 747 q 149 693 117 706 l 136 640 z "},"Ὼ":{"ha":1008,"x_min":-29,"x_max":949,"o":"m 132 0 l 132 94 l 314 94 l 314 100 q 256 167 285 129 q 203 254 226 206 q 166 360 181 303 q 151 488 151 418 q 179 664 151 583 q 258 803 207 744 q 380 895 308 863 q 540 928 451 928 q 701 895 629 928 q 824 803 772 863 q 903 664 875 744 q 931 488 931 583 q 916 360 931 418 q 878 254 901 303 q 826 167 856 206 q 767 100 796 129 l 767 94 l 949 94 l 949 0 l 625 0 l 625 85 q 698 154 664 115 q 757 242 732 193 q 797 349 782 290 q 811 481 811 408 q 792 617 811 554 q 739 727 774 681 q 654 800 704 774 q 540 826 604 826 q 426 800 476 826 q 342 727 376 774 q 289 617 307 681 q 271 481 271 554 q 285 349 271 408 q 324 242 299 290 q 383 154 349 193 q 456 85 417 115 l 456 0 l 132 0 m 40 644 l -29 915 l 76 931 l 117 660 l 40 644 z "},"Ώ":{"ha":1004,"x_min":-31,"x_max":944,"o":"m 128 0 l 128 94 l 310 94 l 310 100 q 251 167 281 129 q 199 254 222 206 q 162 360 176 303 q 147 488 147 418 q 175 664 147 583 q 253 803 203 744 q 376 895 304 863 q 536 928 447 928 q 697 895 625 928 q 819 803 768 863 q 899 664 871 744 q 926 488 926 583 q 912 360 926 418 q 874 254 897 303 q 822 167 851 206 q 763 100 792 129 l 763 94 l 944 94 l 944 0 l 621 0 l 621 85 q 694 154 660 115 q 753 242 728 193 q 792 349 778 290 q 807 481 807 408 q 788 617 807 554 q 735 727 769 681 q 650 800 700 774 q 536 826 600 826 q 422 800 472 826 q 338 727 372 774 q 285 617 303 681 q 267 481 267 554 q 281 349 267 408 q 319 242 294 290 q 378 154 344 193 q 451 85 413 115 l 451 0 l 128 0 m -31 660 l 10 931 l 115 915 l 46 644 l -31 660 z "},"Ὢ":{"ha":1250,"x_min":-17,"x_max":1190,"o":"m 374 0 l 374 94 l 556 94 l 556 100 q 497 167 526 129 q 445 254 468 206 q 408 360 422 303 q 393 488 393 418 q 421 664 393 583 q 499 803 449 744 q 622 895 550 863 q 782 928 693 928 q 942 895 871 928 q 1065 803 1014 863 q 1144 664 1117 744 q 1172 488 1172 583 q 1158 360 1172 418 q 1120 254 1143 303 q 1067 167 1097 206 q 1008 100 1038 129 l 1008 94 l 1190 94 l 1190 0 l 867 0 l 867 85 q 940 154 906 115 q 999 242 974 193 q 1038 349 1024 290 q 1053 481 1053 408 q 1034 617 1053 554 q 981 727 1015 681 q 896 800 946 774 q 782 826 846 826 q 668 800 718 826 q 583 727 618 774 q 531 617 549 681 q 513 481 513 554 q 526 349 513 408 q 565 242 540 290 q 624 154 590 193 q 697 85 658 115 l 697 0 l 374 0 m 279 644 l 210 915 l 315 931 l 356 660 l 279 644 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 z "},"Ὣ":{"ha":1244,"x_min":-18,"x_max":1185,"o":"m 368 0 l 368 94 l 550 94 l 550 100 q 492 167 521 129 q 440 254 463 206 q 402 360 417 303 q 388 488 388 418 q 415 664 388 583 q 494 803 443 744 q 616 895 544 863 q 776 928 688 928 q 937 895 865 928 q 1060 803 1008 863 q 1139 664 1111 744 q 1167 488 1167 583 q 1152 360 1167 418 q 1115 254 1138 303 q 1062 167 1092 206 q 1003 100 1032 129 l 1003 94 l 1185 94 l 1185 0 l 861 0 l 861 85 q 934 154 900 115 q 993 242 968 193 q 1033 349 1018 290 q 1047 481 1047 408 q 1028 617 1047 554 q 975 727 1010 681 q 890 800 940 774 q 776 826 840 826 q 663 800 713 826 q 578 727 613 774 q 525 617 543 681 q 507 481 507 554 q 521 349 507 408 q 560 242 535 290 q 619 154 585 193 q 692 85 653 115 l 692 0 l 368 0 m 275 644 l 204 915 l 310 931 l 350 660 l 275 644 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ὤ":{"ha":1243,"x_min":-17,"x_max":1183,"o":"m 367 0 l 367 94 l 549 94 l 549 100 q 490 167 519 129 q 438 254 461 206 q 401 360 415 303 q 386 488 386 418 q 414 664 386 583 q 492 803 442 744 q 615 895 543 863 q 775 928 686 928 q 935 895 864 928 q 1058 803 1007 863 q 1138 664 1110 744 q 1165 488 1165 583 q 1151 360 1165 418 q 1113 254 1136 303 q 1060 167 1090 206 q 1001 100 1031 129 l 1001 94 l 1183 94 l 1183 0 l 860 0 l 860 85 q 933 154 899 115 q 992 242 967 193 q 1031 349 1017 290 q 1046 481 1046 408 q 1027 617 1046 554 q 974 727 1008 681 q 889 800 939 774 q 775 826 839 826 q 661 800 711 826 q 576 727 611 774 q 524 617 542 681 q 506 481 506 554 q 519 349 506 408 q 558 242 533 290 q 617 154 583 193 q 690 85 651 115 l 690 0 l 367 0 m 210 660 l 250 931 l 356 915 l 286 644 l 210 660 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 z "},"Ὥ":{"ha":1238,"x_min":-18,"x_max":1179,"o":"m 363 0 l 363 94 l 544 94 l 544 100 q 486 167 515 129 q 434 254 457 206 q 397 360 411 303 q 382 488 382 418 q 410 664 382 583 q 488 803 438 744 q 610 895 539 863 q 771 928 682 928 q 931 895 860 928 q 1054 803 1003 863 q 1133 664 1106 744 q 1161 488 1161 583 q 1147 360 1161 418 q 1109 254 1132 303 q 1056 167 1086 206 q 997 100 1026 129 l 997 94 l 1179 94 l 1179 0 l 856 0 l 856 85 q 928 154 894 115 q 988 242 963 193 q 1027 349 1013 290 q 1042 481 1042 408 q 1023 617 1042 554 q 969 727 1004 681 q 885 800 935 774 q 771 826 835 826 q 657 800 707 826 q 572 727 607 774 q 519 617 538 681 q 501 481 501 554 q 515 349 501 408 q 554 242 529 290 q 613 154 579 193 q 686 85 647 115 l 686 0 l 363 0 m 204 660 l 244 931 l 350 915 l 281 644 l 204 660 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 z "},"Ὦ":{"ha":1135,"x_min":-33,"x_max":1075,"o":"m 258 0 l 258 94 l 440 94 l 440 100 q 382 167 411 129 q 330 254 353 206 q 292 360 307 303 q 278 488 278 418 q 306 664 278 583 q 384 803 333 744 q 506 895 435 863 q 667 928 578 928 q 827 895 756 928 q 950 803 899 863 q 1029 664 1001 744 q 1057 488 1057 583 q 1042 360 1057 418 q 1005 254 1028 303 q 952 167 982 206 q 893 100 922 129 l 893 94 l 1075 94 l 1075 0 l 751 0 l 751 85 q 824 154 790 115 q 883 242 858 193 q 923 349 908 290 q 938 481 938 408 q 919 617 938 554 q 865 727 900 681 q 781 800 831 774 q 667 826 731 826 q 553 800 603 826 q 468 727 503 774 q 415 617 433 681 q 397 481 397 554 q 411 349 397 408 q 450 242 425 290 q 509 154 475 193 q 582 85 543 115 l 582 0 l 258 0 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 m 93 610 l 82 656 q 124 672 107 663 q 140 696 140 682 q 118 726 140 715 q 44 740 96 738 l 54 794 q 179 772 136 792 q 222 708 222 751 q 183 642 222 665 q 93 610 143 619 z "},"Ὧ":{"ha":1135,"x_min":-33,"x_max":1075,"o":"m 258 0 l 258 94 l 440 94 l 440 100 q 382 167 411 129 q 330 254 353 206 q 292 360 307 303 q 278 488 278 418 q 306 664 278 583 q 384 803 333 744 q 506 895 435 863 q 667 928 578 928 q 827 895 756 928 q 950 803 899 863 q 1029 664 1001 744 q 1057 488 1057 583 q 1042 360 1057 418 q 1005 254 1028 303 q 952 167 982 206 q 893 100 922 129 l 893 94 l 1075 94 l 1075 0 l 751 0 l 751 85 q 824 154 790 115 q 883 242 858 193 q 923 349 908 290 q 938 481 938 408 q 919 617 938 554 q 865 727 900 681 q 781 800 831 774 q 667 826 731 826 q 553 800 603 826 q 468 727 503 774 q 415 617 433 681 q 397 481 397 554 q 411 349 397 408 q 450 242 425 290 q 509 154 475 193 q 582 85 543 115 l 582 0 l 258 0 m 168 610 q 119 622 143 614 q 78 642 96 631 q 49 671 60 654 q 38 708 38 688 q 81 772 38 751 q 207 794 125 792 l 217 740 q 143 726 165 738 q 121 696 121 715 q 137 672 121 682 q 179 656 153 663 l 168 610 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 z "},"ᾼ":{"ha":1114,"x_min":4,"x_max":1079,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 997 -17 q 897 24 926 -17 q 867 140 867 65 l 867 564 l 982 564 q 976 342 979 451 q 974 132 974 232 q 988 91 974 104 q 1024 78 1001 78 q 1064 86 1040 78 l 1079 0 q 1045 -12 1064 -7 q 997 -17 1026 -17 z "},"ᾈ":{"ha":1165,"x_min":-8,"x_max":1131,"o":"m 333 510 l 290 371 l 564 371 l 521 510 q 474 662 496 586 q 429 817 451 738 l 424 817 q 381 662 403 738 q 333 510 358 586 m 56 0 l 364 911 l 494 911 l 803 0 l 679 0 l 593 278 l 261 278 l 174 0 l 56 0 m 42 640 l 29 693 q 84 726 61 706 q 107 785 107 747 q 78 836 107 817 q -8 858 50 856 l 4 924 q 146 890 96 921 q 196 797 196 858 q 183 733 196 760 q 149 689 171 707 q 100 659 128 671 q 42 640 72 647 m 1049 -17 q 948 24 978 -17 q 918 140 918 65 l 918 564 l 1033 564 q 1028 342 1031 451 q 1025 132 1025 232 q 1039 91 1025 104 q 1075 78 1053 78 q 1115 86 1092 78 l 1131 0 q 1097 -12 1115 -7 q 1049 -17 1078 -17 z "},"ᾉ":{"ha":1156,"x_min":-18,"x_max":1119,"o":"m 322 510 l 279 371 l 553 371 l 510 510 q 463 662 485 586 q 418 817 440 738 l 413 817 q 369 662 392 738 q 322 510 347 586 m 44 0 l 353 911 l 483 911 l 792 0 l 668 0 l 582 278 l 250 278 l 163 0 l 44 0 m 136 640 q 78 659 106 647 q 28 689 50 671 q -6 733 7 707 q -18 797 -18 760 q 32 890 -18 858 q 174 924 82 921 l 186 858 q 99 836 128 856 q 71 785 71 817 q 94 726 71 747 q 149 693 117 706 l 136 640 m 1038 -17 q 937 24 967 -17 q 907 140 907 65 l 907 564 l 1022 564 q 1017 342 1019 451 q 1014 132 1014 232 q 1028 91 1014 104 q 1064 78 1042 78 q 1104 86 1081 78 l 1119 0 q 1085 -12 1104 -7 q 1038 -17 1067 -17 z "},"ᾊ":{"ha":1350,"x_min":-17,"x_max":1315,"o":"m 518 510 l 475 371 l 749 371 l 706 510 q 658 662 681 586 q 614 817 636 738 l 608 817 q 565 662 588 738 q 518 510 543 586 m 240 0 l 549 911 l 679 911 l 988 0 l 864 0 l 778 278 l 446 278 l 358 0 l 240 0 m 279 644 l 210 915 l 315 931 l 356 660 l 279 644 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 m 1233 -17 q 1133 24 1163 -17 q 1103 140 1103 65 l 1103 564 l 1218 564 q 1213 342 1215 451 q 1210 132 1210 232 q 1224 91 1210 104 q 1260 78 1238 78 q 1300 86 1276 78 l 1315 0 q 1281 -12 1300 -7 q 1233 -17 1263 -17 z "},"ᾋ":{"ha":1344,"x_min":-18,"x_max":1310,"o":"m 513 510 l 469 371 l 743 371 l 700 510 q 653 662 675 586 q 608 817 631 738 l 603 817 q 560 662 582 738 q 513 510 538 586 m 235 0 l 543 911 l 674 911 l 982 0 l 858 0 l 772 278 l 440 278 l 353 0 l 235 0 m 275 644 l 204 915 l 310 931 l 350 660 l 275 644 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 m 1228 -17 q 1127 24 1157 -17 q 1097 140 1097 65 l 1097 564 l 1213 564 q 1207 342 1210 451 q 1204 132 1204 232 q 1218 91 1204 104 q 1254 78 1232 78 q 1294 86 1271 78 l 1310 0 q 1276 -12 1294 -7 q 1228 -17 1257 -17 z "},"ᾌ":{"ha":1344,"x_min":-17,"x_max":1308,"o":"m 513 510 l 469 371 l 743 371 l 700 510 q 653 662 675 586 q 608 817 631 738 l 603 817 q 560 662 582 738 q 513 510 538 586 m 235 0 l 543 911 l 674 911 l 982 0 l 858 0 l 772 278 l 440 278 l 353 0 l 235 0 m 210 660 l 250 931 l 356 915 l 286 644 l 210 660 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 m 1226 -17 q 1126 24 1156 -17 q 1096 140 1096 65 l 1096 564 l 1211 564 q 1206 342 1208 451 q 1203 132 1203 232 q 1217 91 1203 104 q 1253 78 1231 78 q 1293 86 1269 78 l 1308 0 q 1274 -12 1293 -7 q 1226 -17 1256 -17 z "},"ᾍ":{"ha":1339,"x_min":-18,"x_max":1303,"o":"m 507 510 l 464 371 l 738 371 l 694 510 q 647 662 669 586 q 603 817 625 738 l 597 817 q 554 662 576 738 q 507 510 532 586 m 229 0 l 538 911 l 668 911 l 976 0 l 853 0 l 767 278 l 435 278 l 347 0 l 229 0 m 204 660 l 244 931 l 350 915 l 281 644 l 204 660 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 m 1221 -17 q 1120 24 1150 -17 q 1090 140 1090 65 l 1090 564 l 1206 564 q 1200 342 1203 451 q 1197 132 1197 232 q 1211 91 1197 104 q 1247 78 1225 78 q 1288 86 1264 78 l 1303 0 q 1269 -12 1288 -7 q 1221 -17 1250 -17 z "},"ᾎ":{"ha":1211,"x_min":-33,"x_max":1175,"o":"m 378 510 l 335 371 l 608 371 l 565 510 q 518 662 540 586 q 474 817 496 738 l 468 817 q 425 662 447 738 q 378 510 403 586 m 100 0 l 408 911 l 539 911 l 847 0 l 724 0 l 638 278 l 306 278 l 218 0 l 100 0 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 m 93 610 l 82 656 q 124 672 107 663 q 140 696 140 682 q 118 726 140 715 q 44 740 96 738 l 54 794 q 179 772 136 792 q 222 708 222 751 q 183 642 222 665 q 93 610 143 619 m 1093 -17 q 992 24 1022 -17 q 963 140 963 65 l 963 564 l 1078 564 q 1072 342 1075 451 q 1069 132 1069 232 q 1083 91 1069 104 q 1119 78 1097 78 q 1160 86 1136 78 l 1175 0 q 1141 -12 1160 -7 q 1093 -17 1122 -17 z "},"ᾏ":{"ha":1211,"x_min":-33,"x_max":1175,"o":"m 378 510 l 335 371 l 608 371 l 565 510 q 518 662 540 586 q 474 817 496 738 l 468 817 q 425 662 447 738 q 378 510 403 586 m 100 0 l 408 911 l 539 911 l 847 0 l 724 0 l 638 278 l 306 278 l 218 0 l 100 0 m 168 610 q 119 622 143 614 q 78 642 96 631 q 49 671 60 654 q 38 708 38 688 q 81 772 38 751 q 207 794 125 792 l 217 740 q 143 726 165 738 q 121 696 121 715 q 137 672 121 682 q 179 656 153 663 l 168 610 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 m 1093 -17 q 992 24 1022 -17 q 963 140 963 65 l 963 564 l 1078 564 q 1072 342 1075 451 q 1069 132 1069 232 q 1083 91 1069 104 q 1119 78 1097 78 q 1160 86 1136 78 l 1175 0 q 1141 -12 1160 -7 q 1093 -17 1122 -17 z "},"ῌ":{"ha":1264,"x_min":125,"x_max":1229,"o":"m 125 0 l 125 911 l 240 911 l 240 529 l 664 529 l 664 911 l 781 911 l 781 0 l 664 0 l 664 429 l 240 429 l 240 0 l 125 0 m 1147 -17 q 1047 24 1076 -17 q 1017 140 1017 65 l 1017 564 l 1132 564 q 1126 342 1129 451 q 1124 132 1124 232 q 1138 91 1124 104 q 1174 78 1151 78 q 1214 86 1190 78 l 1229 0 q 1195 -12 1214 -7 q 1147 -17 1176 -17 z "},"ᾘ":{"ha":1428,"x_min":-17,"x_max":1393,"o":"m 289 0 l 289 911 l 404 911 l 404 529 l 828 529 l 828 911 l 944 911 l 944 0 l 828 0 l 828 429 l 404 429 l 404 0 l 289 0 m 33 640 l 21 693 q 76 726 53 706 q 99 785 99 747 q 70 836 99 817 q -17 858 42 856 l -4 924 q 138 890 88 921 q 188 797 188 858 q 175 733 188 760 q 141 689 163 707 q 92 659 119 671 q 33 640 64 647 m 1311 -17 q 1210 24 1240 -17 q 1181 140 1181 65 l 1181 564 l 1296 564 q 1290 342 1293 451 q 1288 132 1288 232 q 1301 91 1288 104 q 1338 78 1315 78 q 1378 86 1354 78 l 1393 0 q 1359 -12 1378 -7 q 1311 -17 1340 -17 z "},"ᾙ":{"ha":1428,"x_min":-18,"x_max":1393,"o":"m 289 0 l 289 911 l 404 911 l 404 529 l 828 529 l 828 911 l 944 911 l 944 0 l 828 0 l 828 429 l 404 429 l 404 0 l 289 0 m 136 640 q 78 659 106 647 q 28 689 50 671 q -6 733 7 707 q -18 797 -18 760 q 32 890 -18 858 q 174 924 82 921 l 186 858 q 99 836 128 856 q 71 785 71 817 q 94 726 71 747 q 149 693 117 706 l 136 640 m 1311 -17 q 1210 24 1240 -17 q 1181 140 1181 65 l 1181 564 l 1296 564 q 1290 342 1293 451 q 1288 132 1288 232 q 1301 91 1288 104 q 1338 78 1315 78 q 1378 86 1354 78 l 1393 0 q 1359 -12 1378 -7 q 1311 -17 1340 -17 z "},"ᾚ":{"ha":1594,"x_min":-17,"x_max":1558,"o":"m 454 0 l 454 911 l 569 911 l 569 529 l 993 529 l 993 911 l 1110 911 l 1110 0 l 993 0 l 993 429 l 569 429 l 569 0 l 454 0 m 279 644 l 210 915 l 315 931 l 356 660 l 279 644 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 m 1476 -17 q 1376 24 1406 -17 q 1346 140 1346 65 l 1346 564 l 1461 564 q 1456 342 1458 451 q 1453 132 1453 232 q 1467 91 1453 104 q 1503 78 1481 78 q 1543 86 1519 78 l 1558 0 q 1524 -12 1543 -7 q 1476 -17 1506 -17 z "},"ᾛ":{"ha":1589,"x_min":-18,"x_max":1553,"o":"m 450 0 l 450 911 l 565 911 l 565 529 l 989 529 l 989 911 l 1106 911 l 1106 0 l 989 0 l 989 429 l 565 429 l 565 0 l 450 0 m 275 644 l 204 915 l 310 931 l 350 660 l 275 644 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 m 1471 -17 q 1370 24 1400 -17 q 1340 140 1340 65 l 1340 564 l 1456 564 q 1450 342 1453 451 q 1447 132 1447 232 q 1461 91 1447 104 q 1497 78 1475 78 q 1538 86 1514 78 l 1553 0 q 1519 -12 1538 -7 q 1471 -17 1500 -17 z "},"ᾜ":{"ha":1588,"x_min":-17,"x_max":1553,"o":"m 449 0 l 449 911 l 564 911 l 564 529 l 988 529 l 988 911 l 1104 911 l 1104 0 l 988 0 l 988 429 l 564 429 l 564 0 l 449 0 m 210 660 l 250 931 l 356 915 l 286 644 l 210 660 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 m 1471 -17 q 1370 24 1400 -17 q 1340 140 1340 65 l 1340 564 l 1456 564 q 1450 342 1453 451 q 1447 132 1447 232 q 1461 91 1447 104 q 1497 78 1475 78 q 1538 86 1514 78 l 1553 0 q 1519 -12 1538 -7 q 1471 -17 1500 -17 z "},"ᾝ":{"ha":1583,"x_min":-18,"x_max":1547,"o":"m 443 0 l 443 911 l 558 911 l 558 529 l 982 529 l 982 911 l 1099 911 l 1099 0 l 982 0 l 982 429 l 558 429 l 558 0 l 443 0 m 204 660 l 244 931 l 350 915 l 281 644 l 204 660 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 m 1465 -17 q 1365 24 1394 -17 q 1335 140 1335 65 l 1335 564 l 1450 564 q 1444 342 1447 451 q 1442 132 1442 232 q 1456 91 1442 104 q 1492 78 1469 78 q 1532 86 1508 78 l 1547 0 q 1513 -12 1532 -7 q 1465 -17 1494 -17 z "},"ᾞ":{"ha":1525,"x_min":-33,"x_max":1490,"o":"m 386 0 l 386 911 l 501 911 l 501 529 l 925 529 l 925 911 l 1042 911 l 1042 0 l 925 0 l 925 429 l 501 429 l 501 0 l 386 0 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 m 93 610 l 82 656 q 124 672 107 663 q 140 696 140 682 q 118 726 140 715 q 44 740 96 738 l 54 794 q 179 772 136 792 q 222 708 222 751 q 183 642 222 665 q 93 610 143 619 m 1408 -17 q 1308 24 1338 -17 q 1278 140 1278 65 l 1278 564 l 1393 564 q 1388 342 1390 451 q 1385 132 1385 232 q 1399 91 1385 104 q 1435 78 1413 78 q 1475 86 1451 78 l 1490 0 q 1456 -12 1475 -7 q 1408 -17 1438 -17 z "},"ᾟ":{"ha":1525,"x_min":-33,"x_max":1490,"o":"m 386 0 l 386 911 l 501 911 l 501 529 l 925 529 l 925 911 l 1042 911 l 1042 0 l 925 0 l 925 429 l 501 429 l 501 0 l 386 0 m 168 610 q 119 622 143 614 q 78 642 96 631 q 49 671 60 654 q 38 708 38 688 q 81 772 38 751 q 207 794 125 792 l 217 740 q 143 726 165 738 q 121 696 121 715 q 137 672 121 682 q 179 656 153 663 l 168 610 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 m 1408 -17 q 1308 24 1338 -17 q 1278 140 1278 65 l 1278 564 l 1393 564 q 1388 342 1390 451 q 1385 132 1385 232 q 1399 91 1385 104 q 1435 78 1413 78 q 1475 86 1451 78 l 1490 0 q 1456 -12 1475 -7 q 1408 -17 1438 -17 z "},"ῼ":{"ha":1299,"x_min":63,"x_max":1264,"o":"m 63 0 l 63 94 l 244 94 l 244 100 q 186 167 215 129 q 134 254 157 206 q 97 360 111 303 q 82 488 82 418 q 110 664 82 583 q 188 803 138 744 q 310 895 239 863 q 471 928 382 928 q 631 895 560 928 q 754 803 703 863 q 833 664 806 744 q 861 488 861 583 q 847 360 861 418 q 809 254 832 303 q 756 167 786 206 q 697 100 726 129 l 697 94 l 879 94 l 879 0 l 556 0 l 556 85 q 628 154 594 115 q 688 242 663 193 q 727 349 713 290 q 742 481 742 408 q 723 617 742 554 q 669 727 704 681 q 585 800 635 774 q 471 826 535 826 q 357 800 407 826 q 272 727 307 774 q 219 617 238 681 q 201 481 201 554 q 215 349 201 408 q 254 242 229 290 q 313 154 279 193 q 386 85 347 115 l 386 0 l 63 0 m 1182 -17 q 1081 24 1111 -17 q 1051 140 1051 65 l 1051 564 l 1167 564 q 1161 342 1164 451 q 1158 132 1158 232 q 1172 91 1158 104 q 1208 78 1186 78 q 1249 86 1225 78 l 1264 0 q 1230 -12 1249 -7 q 1182 -17 1211 -17 z "},"ᾨ":{"ha":1432,"x_min":-17,"x_max":1397,"o":"m 197 0 l 197 94 l 379 94 l 379 100 q 321 167 350 129 q 269 254 292 206 q 231 360 246 303 q 217 488 217 418 q 244 664 217 583 q 323 803 272 744 q 445 895 374 863 q 606 928 517 928 q 766 895 694 928 q 889 803 838 863 q 968 664 940 744 q 996 488 996 583 q 981 360 996 418 q 944 254 967 303 q 891 167 921 206 q 832 100 861 129 l 832 94 l 1014 94 l 1014 0 l 690 0 l 690 85 q 763 154 729 115 q 822 242 797 193 q 862 349 847 290 q 876 481 876 408 q 858 617 876 554 q 804 727 839 681 q 719 800 769 774 q 606 826 669 826 q 492 800 542 826 q 407 727 442 774 q 354 617 372 681 q 336 481 336 554 q 350 349 336 408 q 389 242 364 290 q 448 154 414 193 q 521 85 482 115 l 521 0 l 197 0 m 33 640 l 21 693 q 76 726 53 706 q 99 785 99 747 q 70 836 99 817 q -17 858 42 856 l -4 924 q 138 890 88 921 q 188 797 188 858 q 175 733 188 760 q 141 689 163 707 q 92 659 119 671 q 33 640 64 647 m 1315 -17 q 1215 24 1244 -17 q 1185 140 1185 65 l 1185 564 l 1300 564 q 1294 342 1297 451 q 1292 132 1292 232 q 1306 91 1292 104 q 1342 78 1319 78 q 1382 86 1358 78 l 1397 0 q 1363 -12 1382 -7 q 1315 -17 1344 -17 z "},"ᾩ":{"ha":1414,"x_min":-18,"x_max":1378,"o":"m 178 0 l 178 94 l 360 94 l 360 100 q 301 167 331 129 q 249 254 272 206 q 212 360 226 303 q 197 488 197 418 q 225 664 197 583 q 303 803 253 744 q 426 895 354 863 q 586 928 497 928 q 747 895 675 928 q 869 803 818 863 q 949 664 921 744 q 976 488 976 583 q 962 360 976 418 q 924 254 947 303 q 872 167 901 206 q 813 100 842 129 l 813 94 l 994 94 l 994 0 l 671 0 l 671 85 q 744 154 710 115 q 803 242 778 193 q 842 349 828 290 q 857 481 857 408 q 838 617 857 554 q 785 727 819 681 q 700 800 750 774 q 586 826 650 826 q 472 800 522 826 q 388 727 422 774 q 335 617 353 681 q 317 481 317 554 q 331 349 317 408 q 369 242 344 290 q 428 154 394 193 q 501 85 463 115 l 501 0 l 178 0 m 136 640 q 78 659 106 647 q 28 689 50 671 q -6 733 7 707 q -18 797 -18 760 q 32 890 -18 858 q 174 924 82 921 l 186 858 q 99 836 128 856 q 71 785 71 817 q 94 726 71 747 q 149 693 117 706 l 136 640 m 1296 -17 q 1195 24 1225 -17 q 1165 140 1165 65 l 1165 564 l 1281 564 q 1275 342 1278 451 q 1272 132 1272 232 q 1286 91 1272 104 q 1322 78 1300 78 q 1363 86 1339 78 l 1378 0 q 1344 -12 1363 -7 q 1296 -17 1325 -17 z "},"ᾪ":{"ha":1608,"x_min":-17,"x_max":1574,"o":"m 374 0 l 374 94 l 556 94 l 556 100 q 497 167 526 129 q 445 254 468 206 q 408 360 422 303 q 393 488 393 418 q 421 664 393 583 q 499 803 449 744 q 622 895 550 863 q 782 928 693 928 q 942 895 871 928 q 1065 803 1014 863 q 1144 664 1117 744 q 1172 488 1172 583 q 1158 360 1172 418 q 1120 254 1143 303 q 1067 167 1097 206 q 1008 100 1038 129 l 1008 94 l 1190 94 l 1190 0 l 867 0 l 867 85 q 940 154 906 115 q 999 242 974 193 q 1038 349 1024 290 q 1053 481 1053 408 q 1034 617 1053 554 q 981 727 1015 681 q 896 800 946 774 q 782 826 846 826 q 668 800 718 826 q 583 727 618 774 q 531 617 549 681 q 513 481 513 554 q 526 349 513 408 q 565 242 540 290 q 624 154 590 193 q 697 85 658 115 l 697 0 l 374 0 m 279 644 l 210 915 l 315 931 l 356 660 l 279 644 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 m 1492 -17 q 1391 24 1421 -17 q 1361 140 1361 65 l 1361 564 l 1476 564 q 1471 342 1474 451 q 1468 132 1468 232 q 1482 91 1468 104 q 1518 78 1496 78 q 1558 86 1535 78 l 1574 0 q 1540 -12 1558 -7 q 1492 -17 1521 -17 z "},"ᾫ":{"ha":1604,"x_min":-18,"x_max":1568,"o":"m 368 0 l 368 94 l 550 94 l 550 100 q 492 167 521 129 q 440 254 463 206 q 402 360 417 303 q 388 488 388 418 q 415 664 388 583 q 494 803 443 744 q 616 895 544 863 q 776 928 688 928 q 937 895 865 928 q 1060 803 1008 863 q 1139 664 1111 744 q 1167 488 1167 583 q 1152 360 1167 418 q 1115 254 1138 303 q 1062 167 1092 206 q 1003 100 1032 129 l 1003 94 l 1185 94 l 1185 0 l 861 0 l 861 85 q 934 154 900 115 q 993 242 968 193 q 1033 349 1018 290 q 1047 481 1047 408 q 1028 617 1047 554 q 975 727 1010 681 q 890 800 940 774 q 776 826 840 826 q 663 800 713 826 q 578 727 613 774 q 525 617 543 681 q 507 481 507 554 q 521 349 507 408 q 560 242 535 290 q 619 154 585 193 q 692 85 653 115 l 692 0 l 368 0 m 275 644 l 204 915 l 310 931 l 350 660 l 275 644 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 m 1486 -17 q 1385 24 1415 -17 q 1356 140 1356 65 l 1356 564 l 1471 564 q 1465 342 1468 451 q 1463 132 1463 232 q 1476 91 1463 104 q 1513 78 1490 78 q 1553 86 1529 78 l 1568 0 q 1534 -12 1553 -7 q 1486 -17 1515 -17 z "},"ᾬ":{"ha":1603,"x_min":-17,"x_max":1567,"o":"m 367 0 l 367 94 l 549 94 l 549 100 q 490 167 519 129 q 438 254 461 206 q 401 360 415 303 q 386 488 386 418 q 414 664 386 583 q 492 803 442 744 q 615 895 543 863 q 775 928 686 928 q 935 895 864 928 q 1058 803 1007 863 q 1138 664 1110 744 q 1165 488 1165 583 q 1151 360 1165 418 q 1113 254 1136 303 q 1060 167 1090 206 q 1001 100 1031 129 l 1001 94 l 1183 94 l 1183 0 l 860 0 l 860 85 q 933 154 899 115 q 992 242 967 193 q 1031 349 1017 290 q 1046 481 1046 408 q 1027 617 1046 554 q 974 727 1008 681 q 889 800 939 774 q 775 826 839 826 q 661 800 711 826 q 576 727 611 774 q 524 617 542 681 q 506 481 506 554 q 519 349 506 408 q 558 242 533 290 q 617 154 583 193 q 690 85 651 115 l 690 0 l 367 0 m 210 660 l 250 931 l 356 915 l 286 644 l 210 660 m 33 644 l 17 697 q 59 733 42 713 q 76 783 76 754 q -17 863 76 857 l -4 928 q 115 892 71 925 q 160 796 160 860 q 149 741 160 765 q 120 698 138 717 q 80 666 103 679 q 33 644 57 653 m 1485 -17 q 1384 24 1414 -17 q 1354 140 1354 65 l 1354 564 l 1469 564 q 1464 342 1467 451 q 1461 132 1461 232 q 1475 91 1461 104 q 1511 78 1489 78 q 1551 86 1528 78 l 1567 0 q 1533 -12 1551 -7 q 1485 -17 1514 -17 z "},"ᾭ":{"ha":1597,"x_min":-18,"x_max":1561,"o":"m 363 0 l 363 94 l 544 94 l 544 100 q 486 167 515 129 q 434 254 457 206 q 397 360 411 303 q 382 488 382 418 q 410 664 382 583 q 488 803 438 744 q 610 895 539 863 q 771 928 682 928 q 931 895 860 928 q 1054 803 1003 863 q 1133 664 1106 744 q 1161 488 1161 583 q 1147 360 1161 418 q 1109 254 1132 303 q 1056 167 1086 206 q 997 100 1026 129 l 997 94 l 1179 94 l 1179 0 l 856 0 l 856 85 q 928 154 894 115 q 988 242 963 193 q 1027 349 1013 290 q 1042 481 1042 408 q 1023 617 1042 554 q 969 727 1004 681 q 885 800 935 774 q 771 826 835 826 q 657 800 707 826 q 572 727 607 774 q 519 617 538 681 q 501 481 501 554 q 515 349 501 408 q 554 242 529 290 q 613 154 579 193 q 686 85 647 115 l 686 0 l 363 0 m 204 660 l 244 931 l 350 915 l 281 644 l 204 660 m 108 644 q 62 666 85 653 q 22 698 39 679 q -7 741 4 717 q -18 796 -18 765 q 26 892 -18 860 q 146 928 71 925 l 158 863 q 65 783 65 857 q 83 733 65 754 q 125 697 100 713 l 108 644 m 1479 -17 q 1378 24 1408 -17 q 1349 140 1349 65 l 1349 564 l 1464 564 q 1458 342 1461 451 q 1456 132 1456 232 q 1469 91 1456 104 q 1506 78 1483 78 q 1546 86 1522 78 l 1561 0 q 1527 -12 1546 -7 q 1479 -17 1508 -17 z "},"ᾮ":{"ha":1497,"x_min":-33,"x_max":1461,"o":"m 258 0 l 258 94 l 440 94 l 440 100 q 382 167 411 129 q 330 254 353 206 q 292 360 307 303 q 278 488 278 418 q 306 664 278 583 q 384 803 333 744 q 506 895 435 863 q 667 928 578 928 q 827 895 756 928 q 950 803 899 863 q 1029 664 1001 744 q 1057 488 1057 583 q 1042 360 1057 418 q 1005 254 1028 303 q 952 167 982 206 q 893 100 922 129 l 893 94 l 1075 94 l 1075 0 l 751 0 l 751 85 q 824 154 790 115 q 883 242 858 193 q 923 349 908 290 q 938 481 938 408 q 919 617 938 554 q 865 727 900 681 q 781 800 831 774 q 667 826 731 826 q 553 800 603 826 q 468 727 503 774 q 415 617 433 681 q 397 481 397 554 q 411 349 397 408 q 450 242 425 290 q 509 154 475 193 q 582 85 543 115 l 582 0 l 258 0 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 m 93 610 l 82 656 q 124 672 107 663 q 140 696 140 682 q 118 726 140 715 q 44 740 96 738 l 54 794 q 179 772 136 792 q 222 708 222 751 q 183 642 222 665 q 93 610 143 619 m 1379 -17 q 1278 24 1308 -17 q 1249 140 1249 65 l 1249 564 l 1364 564 q 1358 342 1361 451 q 1356 132 1356 232 q 1369 91 1356 104 q 1406 78 1383 78 q 1446 86 1422 78 l 1461 0 q 1427 -12 1446 -7 q 1379 -17 1408 -17 z "},"ᾯ":{"ha":1497,"x_min":-33,"x_max":1461,"o":"m 258 0 l 258 94 l 440 94 l 440 100 q 382 167 411 129 q 330 254 353 206 q 292 360 307 303 q 278 488 278 418 q 306 664 278 583 q 384 803 333 744 q 506 895 435 863 q 667 928 578 928 q 827 895 756 928 q 950 803 899 863 q 1029 664 1001 744 q 1057 488 1057 583 q 1042 360 1057 418 q 1005 254 1028 303 q 952 167 982 206 q 893 100 922 129 l 893 94 l 1075 94 l 1075 0 l 751 0 l 751 85 q 824 154 790 115 q 883 242 858 193 q 923 349 908 290 q 938 481 938 408 q 919 617 938 554 q 865 727 900 681 q 781 800 831 774 q 667 826 731 826 q 553 800 603 826 q 468 727 503 774 q 415 617 433 681 q 397 481 397 554 q 411 349 397 408 q 450 242 425 290 q 509 154 475 193 q 582 85 543 115 l 582 0 l 258 0 m 168 610 q 119 622 143 614 q 78 642 96 631 q 49 671 60 654 q 38 708 38 688 q 81 772 38 751 q 207 794 125 792 l 217 740 q 143 726 165 738 q 121 696 121 715 q 137 672 121 682 q 179 656 153 663 l 168 610 m -33 836 q -6 909 -28 885 q 63 933 17 933 q 105 926 88 933 q 137 909 122 918 q 165 892 151 900 q 194 885 178 885 q 222 893 211 885 q 236 928 233 901 l 294 919 q 267 847 289 871 q 199 822 244 822 q 156 830 174 822 q 124 847 139 838 q 97 863 110 856 q 67 871 83 871 q 39 863 50 871 q 25 828 28 854 l -33 836 m 1379 -17 q 1278 24 1308 -17 q 1249 140 1249 65 l 1249 564 l 1364 564 q 1358 342 1361 451 q 1356 132 1356 232 q 1369 91 1356 104 q 1406 78 1383 78 q 1446 86 1422 78 l 1461 0 q 1427 -12 1446 -7 q 1379 -17 1408 -17 z "},"ἀ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 350 808 l 338 864 q 393 887 371 872 q 415 929 415 901 q 300 994 415 989 l 307 1069 q 454 1034 403 1067 q 506 939 506 1001 q 492 887 506 908 q 458 849 479 865 q 408 824 436 833 q 350 808 381 814 z "},"ἁ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 439 797 q 381 812 408 803 q 331 836 353 821 q 297 873 310 851 q 283 925 283 894 q 335 1017 283 985 q 482 1051 386 1049 l 489 981 q 374 915 374 975 q 396 873 374 888 q 451 850 418 858 l 439 797 z "},"ὰ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 414 796 l 196 1008 l 276 1085 l 472 853 l 414 796 z "},"ά":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 375 796 l 317 853 l 513 1085 l 593 1008 l 375 796 z "},"ἂ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 228 801 l 214 854 q 260 876 242 861 q 279 919 279 892 q 178 979 279 974 l 183 1050 q 314 1018 265 1047 q 363 932 363 989 q 351 879 363 901 q 320 842 339 857 q 277 817 301 826 q 228 801 253 807 m 485 776 l 397 1050 l 500 1069 l 554 790 l 485 776 z "},"ἃ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 304 801 q 255 817 279 807 q 212 842 231 826 q 181 879 193 857 q 169 932 169 901 q 218 1018 169 989 q 349 1050 267 1047 l 354 979 q 253 919 253 974 q 271 876 253 892 q 317 854 289 861 l 304 801 m 476 776 l 388 1050 l 492 1069 l 544 790 l 476 776 z "},"ἄ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 228 801 l 214 854 q 260 876 242 861 q 279 919 279 892 q 178 979 279 974 l 183 1050 q 314 1018 265 1047 q 363 932 363 989 q 351 879 363 901 q 320 842 339 857 q 277 817 301 826 q 228 801 253 807 m 411 790 l 469 1069 l 572 1050 l 481 776 l 411 790 z "},"ἅ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 318 801 q 269 817 293 807 q 226 842 244 826 q 195 879 207 857 q 183 932 183 901 q 232 1018 183 989 q 363 1050 281 1047 l 368 979 q 267 919 267 974 q 285 876 267 892 q 331 854 303 861 l 318 801 m 401 790 l 461 1069 l 564 1050 l 471 776 l 401 790 z "},"ἆ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 199 999 q 228 1086 204 1051 q 304 1121 253 1121 q 358 1112 335 1121 q 402 1092 382 1103 q 441 1072 422 1081 q 479 1063 460 1063 q 510 1077 500 1063 q 525 1121 519 1092 l 590 1115 q 560 1028 585 1063 q 485 993 536 993 q 431 1002 454 993 q 387 1022 407 1011 q 348 1042 367 1033 q 310 1051 329 1051 q 279 1037 289 1051 q 264 993 269 1022 l 199 999 m 357 781 l 346 826 q 388 843 371 833 q 404 868 404 853 q 382 898 404 888 q 308 911 360 908 l 318 965 q 444 942 400 963 q 488 881 488 922 q 447 814 488 838 q 357 781 407 790 z "},"ἇ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 432 781 q 342 814 382 790 q 301 881 301 838 q 345 942 301 922 q 471 965 389 963 l 481 911 q 407 898 429 908 q 385 868 385 888 q 401 843 385 853 q 443 826 418 833 l 432 781 m 199 999 q 228 1086 204 1051 q 304 1121 253 1121 q 358 1112 335 1121 q 402 1092 382 1103 q 441 1072 422 1081 q 479 1063 460 1063 q 510 1077 500 1063 q 525 1121 519 1092 l 590 1115 q 560 1028 585 1063 q 485 993 536 993 q 431 1002 454 993 q 387 1022 407 1011 q 348 1042 367 1033 q 310 1051 329 1051 q 279 1037 289 1051 q 264 993 269 1022 l 199 999 z "},"ᾰ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 394 793 q 299 811 339 793 q 233 859 258 829 q 194 926 207 889 q 178 1003 181 964 l 249 1014 q 263 962 253 988 q 292 915 274 936 q 335 882 310 894 q 394 869 361 869 q 453 882 428 869 q 497 915 479 894 q 526 962 515 936 q 540 1014 536 988 l 611 1003 q 595 926 608 964 q 556 859 582 889 q 490 811 529 829 q 394 793 450 793 z "},"ᾱ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 210 835 l 210 914 l 579 914 l 579 835 l 210 835 z "},"ᾶ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 494 801 q 431 819 457 801 q 382 860 404 838 q 340 900 360 882 q 296 918 319 918 q 249 888 264 918 q 231 808 233 857 l 154 813 q 165 888 156 853 q 190 947 174 922 q 233 987 207 972 q 294 1001 258 1001 q 358 983 332 1001 q 407 943 385 965 q 449 903 429 921 q 494 885 469 885 q 540 915 525 885 q 558 994 556 946 l 635 989 q 624 915 633 949 q 599 856 615 881 q 556 816 582 831 q 494 801 531 801 z "},"ἐ":{"ha":622,"x_min":64,"x_max":594,"o":"m 349 -17 q 234 -3 286 -17 q 144 38 182 11 q 85 101 106 64 q 64 186 64 139 q 105 299 64 260 q 204 354 146 339 l 204 360 q 124 421 151 379 q 97 510 97 463 q 118 590 97 556 q 174 647 139 625 q 256 681 210 669 q 356 692 303 692 q 472 672 417 692 q 574 618 526 653 l 528 542 q 447 586 488 571 q 358 601 406 601 q 253 575 296 601 q 211 496 211 549 q 247 421 211 450 q 365 392 283 392 q 404 392 385 392 q 450 396 424 393 l 450 307 q 394 310 419 310 q 344 310 369 310 q 178 196 178 310 q 226 107 178 139 q 361 75 274 75 q 453 90 410 75 q 546 143 497 106 l 594 67 q 476 1 533 19 q 349 -17 419 -17 m 299 794 l 286 850 q 342 873 319 858 q 364 915 364 888 q 249 981 364 975 l 256 1056 q 403 1020 351 1053 q 454 925 454 988 q 441 873 454 894 q 406 835 428 851 q 357 810 385 819 q 299 794 329 800 z "},"ἑ":{"ha":622,"x_min":64,"x_max":594,"o":"m 349 -17 q 234 -3 286 -17 q 144 38 182 11 q 85 101 106 64 q 64 186 64 139 q 105 299 64 260 q 204 354 146 339 l 204 360 q 124 421 151 379 q 97 510 97 463 q 118 590 97 556 q 174 647 139 625 q 256 681 210 669 q 356 692 303 692 q 472 672 417 692 q 574 618 526 653 l 528 542 q 447 586 488 571 q 358 601 406 601 q 253 575 296 601 q 211 496 211 549 q 247 421 211 450 q 365 392 283 392 q 404 392 385 392 q 450 396 424 393 l 450 307 q 394 310 419 310 q 344 310 369 310 q 178 196 178 310 q 226 107 178 139 q 361 75 274 75 q 453 90 410 75 q 546 143 497 106 l 594 67 q 476 1 533 19 q 349 -17 419 -17 m 388 797 q 329 812 357 803 q 280 836 301 821 q 245 873 258 851 q 232 925 232 894 q 283 1017 232 985 q 431 1051 335 1049 l 438 981 q 322 915 322 975 q 344 873 322 888 q 400 850 367 858 l 388 797 z "},"ὲ":{"ha":622,"x_min":64,"x_max":594,"o":"m 349 -17 q 234 -3 286 -17 q 144 38 182 11 q 85 101 106 64 q 64 186 64 139 q 105 299 64 260 q 204 354 146 339 l 204 360 q 124 421 151 379 q 97 510 97 463 q 118 590 97 556 q 174 647 139 625 q 256 681 210 669 q 356 692 303 692 q 472 672 417 692 q 574 618 526 653 l 528 542 q 447 586 488 571 q 358 601 406 601 q 253 575 296 601 q 211 496 211 549 q 247 421 211 450 q 365 392 283 392 q 404 392 385 392 q 450 396 424 393 l 450 307 q 394 310 419 310 q 344 310 369 310 q 178 196 178 310 q 226 107 178 139 q 361 75 274 75 q 453 90 410 75 q 546 143 497 106 l 594 67 q 476 1 533 19 q 349 -17 419 -17 m 363 796 l 144 1008 l 225 1085 l 421 853 l 363 796 z "},"έ":{"ha":622,"x_min":64,"x_max":594,"o":"m 349 -17 q 234 -3 286 -17 q 144 38 182 11 q 85 101 106 64 q 64 186 64 139 q 105 299 64 260 q 204 354 146 339 l 204 360 q 124 421 151 379 q 97 510 97 463 q 118 590 97 556 q 174 647 139 625 q 256 681 210 669 q 356 692 303 692 q 472 672 417 692 q 574 618 526 653 l 528 542 q 447 586 488 571 q 358 601 406 601 q 253 575 296 601 q 211 496 211 549 q 247 421 211 450 q 365 392 283 392 q 404 392 385 392 q 450 396 424 393 l 450 307 q 394 310 419 310 q 344 310 369 310 q 178 196 178 310 q 226 107 178 139 q 361 75 274 75 q 453 90 410 75 q 546 143 497 106 l 594 67 q 476 1 533 19 q 349 -17 419 -17 m 324 796 l 265 853 l 461 1085 l 542 1008 l 324 796 z "},"ἒ":{"ha":622,"x_min":64,"x_max":594,"o":"m 349 -17 q 234 -3 286 -17 q 144 38 182 11 q 85 101 106 64 q 64 186 64 139 q 105 299 64 260 q 204 354 146 339 l 204 360 q 124 421 151 379 q 97 510 97 463 q 118 590 97 556 q 174 647 139 625 q 256 681 210 669 q 356 692 303 692 q 472 672 417 692 q 574 618 526 653 l 528 542 q 447 586 488 571 q 358 601 406 601 q 253 575 296 601 q 211 496 211 549 q 247 421 211 450 q 365 392 283 392 q 404 392 385 392 q 450 396 424 393 l 450 307 q 394 310 419 310 q 344 310 369 310 q 178 196 178 310 q 226 107 178 139 q 361 75 274 75 q 453 90 410 75 q 546 143 497 106 l 594 67 q 476 1 533 19 q 349 -17 419 -17 m 176 801 l 163 854 q 209 876 190 861 q 228 919 228 892 q 126 979 228 974 l 132 1050 q 263 1018 214 1047 q 311 932 311 989 q 299 879 311 901 q 269 842 288 857 q 226 817 250 826 q 176 801 201 807 m 433 776 l 346 1050 l 449 1069 l 503 790 l 433 776 z "},"ἓ":{"ha":622,"x_min":64,"x_max":594,"o":"m 349 -17 q 234 -3 286 -17 q 144 38 182 11 q 85 101 106 64 q 64 186 64 139 q 105 299 64 260 q 204 354 146 339 l 204 360 q 124 421 151 379 q 97 510 97 463 q 118 590 97 556 q 174 647 139 625 q 256 681 210 669 q 356 692 303 692 q 472 672 417 692 q 574 618 526 653 l 528 542 q 447 586 488 571 q 358 601 406 601 q 253 575 296 601 q 211 496 211 549 q 247 421 211 450 q 365 392 283 392 q 404 392 385 392 q 450 396 424 393 l 450 307 q 394 310 419 310 q 344 310 369 310 q 178 196 178 310 q 226 107 178 139 q 361 75 274 75 q 453 90 410 75 q 546 143 497 106 l 594 67 q 476 1 533 19 q 349 -17 419 -17 m 253 801 q 203 817 228 807 q 160 842 179 826 q 130 879 142 857 q 118 932 118 901 q 167 1018 118 989 q 297 1050 215 1047 l 303 979 q 201 919 201 974 q 219 876 201 892 q 265 854 238 861 l 253 801 m 425 776 l 336 1050 l 440 1069 l 493 790 l 425 776 z "},"ἔ":{"ha":622,"x_min":64,"x_max":594,"o":"m 349 -17 q 234 -3 286 -17 q 144 38 182 11 q 85 101 106 64 q 64 186 64 139 q 105 299 64 260 q 204 354 146 339 l 204 360 q 124 421 151 379 q 97 510 97 463 q 118 590 97 556 q 174 647 139 625 q 256 681 210 669 q 356 692 303 692 q 472 672 417 692 q 574 618 526 653 l 528 542 q 447 586 488 571 q 358 601 406 601 q 253 575 296 601 q 211 496 211 549 q 247 421 211 450 q 365 392 283 392 q 404 392 385 392 q 450 396 424 393 l 450 307 q 394 310 419 310 q 344 310 369 310 q 178 196 178 310 q 226 107 178 139 q 361 75 274 75 q 453 90 410 75 q 546 143 497 106 l 594 67 q 476 1 533 19 q 349 -17 419 -17 m 176 801 l 163 854 q 209 876 190 861 q 228 919 228 892 q 126 979 228 974 l 132 1050 q 263 1018 214 1047 q 311 932 311 989 q 299 879 311 901 q 269 842 288 857 q 226 817 250 826 q 176 801 201 807 m 360 790 l 418 1069 l 521 1050 l 429 776 l 360 790 z "},"ἕ":{"ha":622,"x_min":64,"x_max":594,"o":"m 349 -17 q 234 -3 286 -17 q 144 38 182 11 q 85 101 106 64 q 64 186 64 139 q 105 299 64 260 q 204 354 146 339 l 204 360 q 124 421 151 379 q 97 510 97 463 q 118 590 97 556 q 174 647 139 625 q 256 681 210 669 q 356 692 303 692 q 472 672 417 692 q 574 618 526 653 l 528 542 q 447 586 488 571 q 358 601 406 601 q 253 575 296 601 q 211 496 211 549 q 247 421 211 450 q 365 392 283 392 q 404 392 385 392 q 450 396 424 393 l 450 307 q 394 310 419 310 q 344 310 369 310 q 178 196 178 310 q 226 107 178 139 q 361 75 274 75 q 453 90 410 75 q 546 143 497 106 l 594 67 q 476 1 533 19 q 349 -17 419 -17 m 267 801 q 217 817 242 807 q 174 842 193 826 q 144 879 156 857 q 132 932 132 901 q 181 1018 132 989 q 311 1050 229 1047 l 317 979 q 215 919 215 974 q 233 876 215 892 q 279 854 251 861 l 267 801 m 350 790 l 410 1069 l 513 1050 l 419 776 l 350 790 z "},"ἠ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 358 794 l 346 850 q 401 873 379 858 q 424 915 424 888 q 308 981 424 975 l 315 1056 q 463 1020 411 1053 q 514 925 514 988 q 501 873 514 894 q 466 835 488 851 q 417 810 444 819 q 358 794 389 800 z "},"ἡ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 447 797 q 389 812 417 803 q 340 836 361 821 q 305 873 318 851 q 292 925 292 894 q 343 1017 292 985 q 490 1051 394 1049 l 497 981 q 382 915 382 975 q 404 873 382 888 q 460 850 426 858 l 447 797 z "},"ὴ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 422 796 l 204 1008 l 285 1085 l 481 853 l 422 796 z "},"ή":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 383 796 l 325 853 l 521 1085 l 601 1008 l 383 796 z "},"ἢ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 236 801 l 222 854 q 269 876 250 861 q 288 919 288 892 q 186 979 288 974 l 192 1050 q 322 1018 274 1047 q 371 932 371 989 q 359 879 371 901 q 328 842 347 857 q 285 817 310 826 q 236 801 261 807 m 493 776 l 406 1050 l 508 1069 l 563 790 l 493 776 z "},"ἣ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 313 801 q 263 817 288 807 q 220 842 239 826 q 190 879 201 857 q 178 932 178 901 q 226 1018 178 989 q 357 1050 275 1047 l 363 979 q 261 919 261 974 q 279 876 261 892 q 325 854 297 861 l 313 801 m 485 776 l 396 1050 l 500 1069 l 553 790 l 485 776 z "},"ἤ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 236 801 l 222 854 q 269 876 250 861 q 288 919 288 892 q 186 979 288 974 l 192 1050 q 322 1018 274 1047 q 371 932 371 989 q 359 879 371 901 q 328 842 347 857 q 285 817 310 826 q 236 801 261 807 m 419 790 l 478 1069 l 581 1050 l 489 776 l 419 790 z "},"ἥ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 326 801 q 277 817 301 807 q 234 842 253 826 q 203 879 215 857 q 192 932 192 901 q 240 1018 192 989 q 371 1050 289 1047 l 376 979 q 275 919 275 974 q 293 876 275 892 q 339 854 311 861 l 326 801 m 410 790 l 469 1069 l 572 1050 l 479 776 l 410 790 z "},"ἦ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 207 999 q 237 1086 213 1051 q 313 1121 261 1121 q 367 1112 343 1121 q 410 1092 390 1103 q 449 1072 431 1081 q 488 1063 468 1063 q 518 1077 508 1063 q 533 1121 528 1092 l 599 1115 q 569 1028 593 1063 q 493 993 544 993 q 439 1002 463 993 q 395 1022 415 1011 q 356 1042 375 1033 q 318 1051 338 1051 q 288 1037 297 1051 q 272 993 278 1022 l 207 999 m 365 781 l 354 826 q 396 843 379 833 q 413 868 413 853 q 390 898 413 888 q 317 911 368 908 l 326 965 q 452 942 408 963 q 496 881 496 922 q 456 814 496 838 q 365 781 415 790 z "},"ἧ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 440 781 q 350 814 390 790 q 310 881 310 838 q 353 942 310 922 q 479 965 397 963 l 489 911 q 415 898 438 908 q 393 868 393 888 q 410 843 393 853 q 451 826 426 833 l 440 781 m 207 999 q 237 1086 213 1051 q 313 1121 261 1121 q 367 1112 343 1121 q 410 1092 390 1103 q 449 1072 431 1081 q 488 1063 468 1063 q 518 1077 508 1063 q 533 1121 528 1092 l 599 1115 q 569 1028 593 1063 q 493 993 544 993 q 439 1002 463 993 q 395 1022 415 1011 q 356 1042 375 1033 q 318 1051 338 1051 q 288 1037 297 1051 q 272 993 278 1022 l 207 999 z "},"ῆ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 503 801 q 439 819 465 801 q 390 860 413 838 q 348 900 368 882 q 304 918 328 918 q 257 888 272 918 q 239 808 242 857 l 163 813 q 173 888 164 853 q 199 947 182 922 q 241 987 215 972 q 303 1001 267 1001 q 367 983 340 1001 q 415 943 393 965 q 458 903 438 921 q 503 885 478 885 q 549 915 533 885 q 567 994 564 946 l 643 989 q 633 915 642 949 q 607 856 624 881 q 565 816 590 831 q 503 801 539 801 z "},"ἰ":{"ha":364,"x_min":78,"x_max":325,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 128 808 l 115 864 q 171 887 149 872 q 193 929 193 901 q 78 994 193 989 l 85 1069 q 232 1034 181 1067 q 283 939 283 1001 q 270 887 283 908 q 235 849 257 865 q 186 824 214 833 q 128 808 158 814 z "},"ἱ":{"ha":364,"x_min":61,"x_max":325,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 217 797 q 158 812 186 803 q 109 836 131 821 q 74 873 88 851 q 61 925 61 894 q 113 1017 61 985 q 260 1051 164 1049 l 267 981 q 151 915 151 975 q 174 873 151 888 q 229 850 196 858 l 217 797 z "},"ὶ":{"ha":364,"x_min":-26,"x_max":325,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 192 796 l -26 1008 l 54 1085 l 250 853 l 192 796 z "},"ί":{"ha":364,"x_min":94,"x_max":371,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 153 796 l 94 853 l 290 1085 l 371 1008 l 153 796 z "},"ἲ":{"ha":364,"x_min":-44,"x_max":332,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 6 801 l -8 854 q 38 876 19 861 q 57 919 57 892 q -44 979 57 974 l -39 1050 q 92 1018 43 1047 q 140 932 140 989 q 128 879 140 901 q 98 842 117 857 q 55 817 79 826 q 6 801 31 807 m 263 776 l 175 1050 l 278 1069 l 332 790 l 263 776 z "},"ἳ":{"ha":364,"x_min":-53,"x_max":325,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 82 801 q 33 817 57 807 q -10 842 8 826 q -41 879 -29 857 q -53 932 -53 901 q -4 1018 -53 989 q 126 1050 44 1047 l 132 979 q 31 919 31 974 q 49 876 31 892 q 94 854 67 861 l 82 801 m 254 776 l 165 1050 l 269 1069 l 322 790 l 254 776 z "},"ἴ":{"ha":364,"x_min":-44,"x_max":350,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 6 801 l -8 854 q 38 876 19 861 q 57 919 57 892 q -44 979 57 974 l -39 1050 q 92 1018 43 1047 q 140 932 140 989 q 128 879 140 901 q 98 842 117 857 q 55 817 79 826 q 6 801 31 807 m 189 790 l 247 1069 l 350 1050 l 258 776 l 189 790 z "},"ἵ":{"ha":364,"x_min":-39,"x_max":342,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 96 801 q 47 817 71 807 q 3 842 22 826 q -27 879 -15 857 q -39 932 -39 901 q 10 1018 -39 989 q 140 1050 58 1047 l 146 979 q 44 919 44 974 q 63 876 44 892 q 108 854 81 861 l 96 801 m 179 790 l 239 1069 l 342 1050 l 249 776 l 179 790 z "},"ἶ":{"ha":364,"x_min":-24,"x_max":368,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m -24 999 q 6 1086 -18 1051 q 82 1121 31 1121 q 136 1112 113 1121 q 180 1092 160 1103 q 219 1072 200 1081 q 257 1063 238 1063 q 288 1077 278 1063 q 303 1121 297 1092 l 368 1115 q 338 1028 363 1063 q 263 993 314 993 q 208 1002 232 993 q 165 1022 185 1011 q 126 1042 144 1033 q 88 1051 107 1051 q 57 1037 67 1051 q 42 993 47 1022 l -24 999 m 135 781 l 124 826 q 165 843 149 833 q 182 868 182 853 q 160 898 182 888 q 86 911 138 908 l 96 965 q 222 942 178 963 q 265 881 265 922 q 225 814 265 838 q 135 781 185 790 z "},"ἷ":{"ha":364,"x_min":-24,"x_max":368,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 210 781 q 119 814 160 790 q 79 881 79 838 q 123 942 79 922 q 249 965 167 963 l 258 911 q 185 898 207 908 q 163 868 163 888 q 179 843 163 853 q 221 826 196 833 l 210 781 m -24 999 q 6 1086 -18 1051 q 82 1121 31 1121 q 136 1112 113 1121 q 180 1092 160 1103 q 219 1072 200 1081 q 257 1063 238 1063 q 288 1077 278 1063 q 303 1121 297 1092 l 368 1115 q 338 1028 363 1063 q 263 993 314 993 q 208 1002 232 993 q 165 1022 185 1011 q 126 1042 144 1033 q 88 1051 107 1051 q 57 1037 67 1051 q 42 993 47 1022 l -24 999 z "},"ῐ":{"ha":364,"x_min":-44,"x_max":389,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 172 793 q 76 811 117 793 q 10 859 36 829 q -28 926 -15 889 q -44 1003 -42 964 l 26 1014 q 41 962 31 988 q 69 915 51 936 q 113 882 88 894 q 172 869 139 869 q 231 882 206 869 q 275 915 257 894 q 303 962 293 936 q 318 1014 314 988 l 389 1003 q 373 926 386 964 q 333 859 360 889 q 267 811 307 829 q 172 793 228 793 z "},"ῑ":{"ha":364,"x_min":-12,"x_max":357,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m -12 835 l -12 914 l 357 914 l 357 835 l -12 835 z "},"ῖ":{"ha":364,"x_min":-68,"x_max":413,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 272 801 q 208 819 235 801 q 160 860 182 838 q 117 900 138 882 q 74 918 97 918 q 26 888 42 918 q 8 808 11 857 l -68 813 q -58 888 -67 853 q -32 947 -49 922 q 10 987 -15 972 q 72 1001 36 1001 q 136 983 110 1001 q 185 943 163 965 q 227 903 207 921 q 272 885 247 885 q 318 915 303 885 q 336 994 333 946 l 413 989 q 402 915 411 949 q 376 856 393 881 q 334 816 360 831 q 272 801 308 801 z "},"ῒ":{"ha":364,"x_min":-43,"x_max":388,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 15 826 q -26 842 -10 826 q -43 885 -43 858 q -26 927 -43 911 q 15 943 -10 943 q 56 927 39 943 q 72 885 72 911 q 56 842 72 858 q 15 826 39 826 m 168 782 l 79 1056 l 171 1075 l 228 796 l 168 782 m 329 826 q 289 842 306 826 q 272 885 272 858 q 289 927 272 911 q 329 943 306 943 q 371 927 354 943 q 388 885 388 911 q 371 842 388 858 q 329 826 354 826 z "},"ΐ":{"ha":364,"x_min":-43,"x_max":388,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m 117 796 l 179 1075 l 271 1056 l 176 782 l 117 796 m 15 826 q -26 842 -10 826 q -43 885 -43 858 q -26 927 -43 911 q 15 943 -10 943 q 56 927 39 943 q 72 885 72 911 q 56 842 72 858 q 15 826 39 826 m 329 826 q 289 842 306 826 q 272 885 272 858 q 289 927 272 911 q 329 943 306 943 q 371 927 354 943 q 388 885 388 911 q 371 842 388 858 q 329 826 354 826 z "},"ῗ":{"ha":364,"x_min":-40,"x_max":385,"o":"m 243 -17 q 143 24 172 -17 q 114 140 114 65 l 114 675 l 229 675 q 224 396 226 538 q 221 132 221 254 q 268 78 221 78 q 310 86 285 78 l 325 0 q 290 -12 310 -7 q 243 -17 271 -17 m -40 992 q -8 1083 -37 1046 q 74 1119 21 1119 q 135 1109 110 1119 q 181 1085 160 1099 q 221 1062 201 1072 q 265 1051 240 1051 q 306 1067 289 1051 q 326 1115 322 1083 l 385 1110 q 353 1019 382 1056 q 271 982 324 982 q 210 992 235 982 q 164 1016 185 1003 q 124 1040 143 1029 q 79 1050 104 1050 q 39 1034 56 1050 q 18 986 22 1018 l -40 992 m 39 817 q -7 835 11 817 q -25 879 -25 853 q -7 925 -25 907 q 39 943 11 943 q 84 925 67 943 q 101 879 101 907 q 84 835 101 853 q 39 817 67 817 m 306 817 q 260 835 278 817 q 243 879 243 853 q 260 925 243 907 q 306 943 278 943 q 351 925 333 943 q 369 879 369 907 q 351 835 369 853 q 306 817 333 817 z "},"ὀ":{"ha":743,"x_min":64,"x_max":679,"o":"m 371 -17 q 252 7 308 -17 q 154 76 196 31 q 88 186 113 121 q 64 336 64 251 q 88 488 64 421 q 154 599 113 554 q 252 668 196 644 q 371 692 308 692 q 491 668 435 692 q 589 599 547 644 q 655 488 631 554 q 679 336 679 421 q 655 186 679 251 q 589 76 631 121 q 491 7 547 31 q 371 -17 435 -17 m 371 78 q 511 148 461 78 q 561 336 561 218 q 511 526 561 454 q 371 597 461 597 q 231 526 281 597 q 182 336 182 454 q 231 148 182 218 q 371 78 281 78 m 328 808 l 315 864 q 371 887 349 872 q 393 929 393 901 q 278 994 393 989 l 285 1069 q 432 1034 381 1067 q 483 939 483 1001 q 470 887 483 908 q 435 849 457 865 q 386 824 414 833 q 328 808 358 814 z "},"ὁ":{"ha":743,"x_min":64,"x_max":679,"o":"m 371 -17 q 252 7 308 -17 q 154 76 196 31 q 88 186 113 121 q 64 336 64 251 q 88 488 64 421 q 154 599 113 554 q 252 668 196 644 q 371 692 308 692 q 491 668 435 692 q 589 599 547 644 q 655 488 631 554 q 679 336 679 421 q 655 186 679 251 q 589 76 631 121 q 491 7 547 31 q 371 -17 435 -17 m 371 78 q 511 148 461 78 q 561 336 561 218 q 511 526 561 454 q 371 597 461 597 q 231 526 281 597 q 182 336 182 454 q 231 148 182 218 q 371 78 281 78 m 417 797 q 358 812 386 803 q 309 836 331 821 q 274 873 288 851 q 261 925 261 894 q 313 1017 261 985 q 460 1051 364 1049 l 467 981 q 351 915 351 975 q 374 873 351 888 q 429 850 396 858 l 417 797 z "},"ὸ":{"ha":743,"x_min":64,"x_max":679,"o":"m 371 -17 q 252 7 308 -17 q 154 76 196 31 q 88 186 113 121 q 64 336 64 251 q 88 488 64 421 q 154 599 113 554 q 252 668 196 644 q 371 692 308 692 q 491 668 435 692 q 589 599 547 644 q 655 488 631 554 q 679 336 679 421 q 655 186 679 251 q 589 76 631 121 q 491 7 547 31 q 371 -17 435 -17 m 371 78 q 511 148 461 78 q 561 336 561 218 q 511 526 561 454 q 371 597 461 597 q 231 526 281 597 q 182 336 182 454 q 231 148 182 218 q 371 78 281 78 m 392 796 l 174 1008 l 254 1085 l 450 853 l 392 796 z "},"ό":{"ha":743,"x_min":64,"x_max":679,"o":"m 371 -17 q 252 7 308 -17 q 154 76 196 31 q 88 186 113 121 q 64 336 64 251 q 88 488 64 421 q 154 599 113 554 q 252 668 196 644 q 371 692 308 692 q 491 668 435 692 q 589 599 547 644 q 655 488 631 554 q 679 336 679 421 q 655 186 679 251 q 589 76 631 121 q 491 7 547 31 q 371 -17 435 -17 m 371 78 q 511 148 461 78 q 561 336 561 218 q 511 526 561 454 q 371 597 461 597 q 231 526 281 597 q 182 336 182 454 q 231 148 182 218 q 371 78 281 78 m 353 796 l 294 853 l 490 1085 l 571 1008 l 353 796 z "},"ὂ":{"ha":743,"x_min":64,"x_max":679,"o":"m 371 -17 q 252 7 308 -17 q 154 76 196 31 q 88 186 113 121 q 64 336 64 251 q 88 488 64 421 q 154 599 113 554 q 252 668 196 644 q 371 692 308 692 q 491 668 435 692 q 589 599 547 644 q 655 488 631 554 q 679 336 679 421 q 655 186 679 251 q 589 76 631 121 q 491 7 547 31 q 371 -17 435 -17 m 371 78 q 511 148 461 78 q 561 336 561 218 q 511 526 561 454 q 371 597 461 597 q 231 526 281 597 q 182 336 182 454 q 231 148 182 218 q 371 78 281 78 m 206 801 l 192 854 q 238 876 219 861 q 257 919 257 892 q 156 979 257 974 l 161 1050 q 292 1018 243 1047 q 340 932 340 989 q 328 879 340 901 q 298 842 317 857 q 255 817 279 826 q 206 801 231 807 m 463 776 l 375 1050 l 478 1069 l 532 790 l 463 776 z "},"ὃ":{"ha":743,"x_min":64,"x_max":679,"o":"m 371 -17 q 252 7 308 -17 q 154 76 196 31 q 88 186 113 121 q 64 336 64 251 q 88 488 64 421 q 154 599 113 554 q 252 668 196 644 q 371 692 308 692 q 491 668 435 692 q 589 599 547 644 q 655 488 631 554 q 679 336 679 421 q 655 186 679 251 q 589 76 631 121 q 491 7 547 31 q 371 -17 435 -17 m 371 78 q 511 148 461 78 q 561 336 561 218 q 511 526 561 454 q 371 597 461 597 q 231 526 281 597 q 182 336 182 454 q 231 148 182 218 q 371 78 281 78 m 282 801 q 233 817 257 807 q 190 842 208 826 q 159 879 171 857 q 147 932 147 901 q 196 1018 147 989 q 326 1050 244 1047 l 332 979 q 231 919 231 974 q 249 876 231 892 q 294 854 267 861 l 282 801 m 454 776 l 365 1050 l 469 1069 l 522 790 l 454 776 z "},"ὄ":{"ha":743,"x_min":64,"x_max":679,"o":"m 371 -17 q 252 7 308 -17 q 154 76 196 31 q 88 186 113 121 q 64 336 64 251 q 88 488 64 421 q 154 599 113 554 q 252 668 196 644 q 371 692 308 692 q 491 668 435 692 q 589 599 547 644 q 655 488 631 554 q 679 336 679 421 q 655 186 679 251 q 589 76 631 121 q 491 7 547 31 q 371 -17 435 -17 m 371 78 q 511 148 461 78 q 561 336 561 218 q 511 526 561 454 q 371 597 461 597 q 231 526 281 597 q 182 336 182 454 q 231 148 182 218 q 371 78 281 78 m 206 801 l 192 854 q 238 876 219 861 q 257 919 257 892 q 156 979 257 974 l 161 1050 q 292 1018 243 1047 q 340 932 340 989 q 328 879 340 901 q 298 842 317 857 q 255 817 279 826 q 206 801 231 807 m 389 790 l 447 1069 l 550 1050 l 458 776 l 389 790 z "},"ὅ":{"ha":743,"x_min":64,"x_max":679,"o":"m 371 -17 q 252 7 308 -17 q 154 76 196 31 q 88 186 113 121 q 64 336 64 251 q 88 488 64 421 q 154 599 113 554 q 252 668 196 644 q 371 692 308 692 q 491 668 435 692 q 589 599 547 644 q 655 488 631 554 q 679 336 679 421 q 655 186 679 251 q 589 76 631 121 q 491 7 547 31 q 371 -17 435 -17 m 371 78 q 511 148 461 78 q 561 336 561 218 q 511 526 561 454 q 371 597 461 597 q 231 526 281 597 q 182 336 182 454 q 231 148 182 218 q 371 78 281 78 m 296 801 q 247 817 271 807 q 203 842 222 826 q 173 879 185 857 q 161 932 161 901 q 210 1018 161 989 q 340 1050 258 1047 l 346 979 q 244 919 244 974 q 263 876 244 892 q 308 854 281 861 l 296 801 m 379 790 l 439 1069 l 542 1050 l 449 776 l 379 790 z "},"ῤ":{"ha":763,"x_min":108,"x_max":697,"o":"m 108 -249 l 108 344 q 132 497 108 432 q 196 606 156 563 q 290 670 236 649 q 406 692 344 692 q 623 600 549 692 q 697 347 697 508 q 674 194 697 261 q 611 79 650 126 q 522 8 572 32 q 419 -17 472 -17 q 314 4 365 -17 q 215 79 263 25 q 218 -6 217 33 q 220 -85 219 -46 q 222 -164 221 -124 q 224 -249 224 -204 l 108 -249 m 399 79 q 469 98 436 79 q 526 151 501 117 q 565 235 551 185 q 579 347 579 285 q 569 449 579 403 q 537 527 558 494 q 482 578 515 560 q 401 596 449 596 q 331 580 364 596 q 272 533 297 564 q 233 454 247 501 q 218 343 218 407 l 218 171 q 310 97 265 114 q 399 79 354 79 m 361 808 l 349 864 q 404 887 382 872 q 426 929 426 901 q 311 994 426 989 l 318 1069 q 465 1034 414 1067 q 517 939 517 1001 q 503 887 517 908 q 469 849 490 865 q 419 824 447 833 q 361 808 392 814 z "},"ῥ":{"ha":763,"x_min":108,"x_max":697,"o":"m 108 -249 l 108 344 q 132 497 108 432 q 196 606 156 563 q 290 670 236 649 q 406 692 344 692 q 623 600 549 692 q 697 347 697 508 q 674 194 697 261 q 611 79 650 126 q 522 8 572 32 q 419 -17 472 -17 q 314 4 365 -17 q 215 79 263 25 q 218 -6 217 33 q 220 -85 219 -46 q 222 -164 221 -124 q 224 -249 224 -204 l 108 -249 m 399 79 q 469 98 436 79 q 526 151 501 117 q 565 235 551 185 q 579 347 579 285 q 569 449 579 403 q 537 527 558 494 q 482 578 515 560 q 401 596 449 596 q 331 580 364 596 q 272 533 297 564 q 233 454 247 501 q 218 343 218 407 l 218 171 q 310 97 265 114 q 399 79 354 79 m 450 797 q 392 812 419 803 q 342 836 364 821 q 308 873 321 851 q 294 925 294 894 q 346 1017 294 985 q 493 1051 397 1049 l 500 981 q 385 915 385 975 q 407 873 385 888 q 463 850 429 858 l 450 797 z "},"ὐ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 294 808 l 282 864 q 338 887 315 872 q 360 929 360 901 q 244 994 360 989 l 251 1069 q 399 1034 347 1067 q 450 939 450 1001 q 437 887 450 908 q 402 849 424 865 q 353 824 381 833 q 294 808 325 814 z "},"ὑ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 383 797 q 325 812 353 803 q 276 836 297 821 q 241 873 254 851 q 228 925 228 894 q 279 1017 228 985 q 426 1051 331 1049 l 433 981 q 318 915 318 975 q 340 873 318 888 q 396 850 363 858 l 383 797 z "},"ὺ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 358 796 l 140 1008 l 221 1085 l 417 853 l 358 796 z "},"ύ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 319 796 l 261 853 l 457 1085 l 538 1008 l 319 796 z "},"ὒ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 172 801 l 158 854 q 205 876 186 861 q 224 919 224 892 q 122 979 224 974 l 128 1050 q 258 1018 210 1047 q 307 932 307 989 q 295 879 307 901 q 265 842 283 857 q 222 817 246 826 q 172 801 197 807 m 429 776 l 342 1050 l 444 1069 l 499 790 l 429 776 z "},"ὓ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 249 801 q 199 817 224 807 q 156 842 175 826 q 126 879 138 857 q 114 932 114 901 q 163 1018 114 989 q 293 1050 211 1047 l 299 979 q 197 919 197 974 q 215 876 197 892 q 261 854 233 861 l 249 801 m 421 776 l 332 1050 l 436 1069 l 489 790 l 421 776 z "},"ὔ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 172 801 l 158 854 q 205 876 186 861 q 224 919 224 892 q 122 979 224 974 l 128 1050 q 258 1018 210 1047 q 307 932 307 989 q 295 879 307 901 q 265 842 283 857 q 222 817 246 826 q 172 801 197 807 m 356 790 l 414 1069 l 517 1050 l 425 776 l 356 790 z "},"ὕ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 263 801 q 213 817 238 807 q 170 842 189 826 q 140 879 151 857 q 128 932 128 901 q 176 1018 128 989 q 307 1050 225 1047 l 313 979 q 211 919 211 974 q 229 876 211 892 q 275 854 247 861 l 263 801 m 346 790 l 406 1069 l 508 1050 l 415 776 l 346 790 z "},"ὖ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 143 999 q 173 1086 149 1051 q 249 1121 197 1121 q 303 1112 279 1121 q 347 1092 326 1103 q 385 1072 367 1081 q 424 1063 404 1063 q 454 1077 444 1063 q 469 1121 464 1092 l 535 1115 q 505 1028 529 1063 q 429 993 481 993 q 375 1002 399 993 q 331 1022 351 1011 q 292 1042 311 1033 q 254 1051 274 1051 q 224 1037 233 1051 q 208 993 214 1022 l 143 999 m 301 781 l 290 826 q 332 843 315 833 q 349 868 349 853 q 326 898 349 888 q 253 911 304 908 l 263 965 q 388 942 344 963 q 432 881 432 922 q 392 814 432 838 q 301 781 351 790 z "},"ὗ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 376 781 q 286 814 326 790 q 246 881 246 838 q 290 942 246 922 q 415 965 333 963 l 425 911 q 351 898 374 908 q 329 868 329 888 q 346 843 329 853 q 388 826 363 833 l 376 781 m 143 999 q 173 1086 149 1051 q 249 1121 197 1121 q 303 1112 279 1121 q 347 1092 326 1103 q 385 1072 367 1081 q 424 1063 404 1063 q 454 1077 444 1063 q 469 1121 464 1092 l 535 1115 q 505 1028 529 1063 q 429 993 481 993 q 375 1002 399 993 q 331 1022 351 1011 q 292 1042 311 1033 q 254 1051 274 1051 q 224 1037 233 1051 q 208 993 214 1022 l 143 999 z "},"ῦ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 439 801 q 375 819 401 801 q 326 860 349 838 q 284 900 304 882 q 240 918 264 918 q 193 888 208 918 q 175 808 178 857 l 99 813 q 109 888 100 853 q 135 947 118 922 q 177 987 151 972 q 239 1001 203 1001 q 303 983 276 1001 q 351 943 329 965 q 394 903 374 921 q 439 885 414 885 q 485 915 469 885 q 503 994 500 946 l 579 989 q 569 915 578 949 q 543 856 560 881 q 501 816 526 831 q 439 801 475 801 z "},"ῠ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 339 793 q 243 811 283 793 q 177 859 203 829 q 138 926 151 889 q 122 1003 125 964 l 193 1014 q 208 962 197 988 q 236 915 218 936 q 280 882 254 894 q 339 869 306 869 q 398 882 372 869 q 442 915 424 894 q 470 962 460 936 q 485 1014 481 988 l 556 1003 q 540 926 553 964 q 500 859 526 889 q 434 811 474 829 q 339 793 394 793 z "},"ῡ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 154 835 l 154 914 l 524 914 l 524 835 l 154 835 z "},"ῢ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 182 826 q 140 842 157 826 q 124 885 124 858 q 140 927 124 911 q 182 943 157 943 q 222 927 206 943 q 239 885 239 911 q 222 842 239 858 q 182 826 206 826 m 335 782 l 246 1056 l 338 1075 l 394 796 l 335 782 m 496 826 q 456 842 472 826 q 439 885 439 858 q 456 927 439 911 q 496 943 472 943 q 538 927 521 943 q 554 885 554 911 q 538 842 554 858 q 496 826 521 826 z "},"ΰ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 283 796 l 346 1075 l 438 1056 l 343 782 l 283 796 m 182 826 q 140 842 157 826 q 124 885 124 858 q 140 927 124 911 q 182 943 157 943 q 222 927 206 943 q 239 885 239 911 q 222 842 239 858 q 182 826 206 826 m 496 826 q 456 842 472 826 q 439 885 439 858 q 456 927 439 911 q 496 943 472 943 q 538 927 521 943 q 554 885 554 911 q 538 842 554 858 q 496 826 521 826 z "},"ῧ":{"ha":708,"x_min":83,"x_max":632,"o":"m 346 -17 q 156 49 224 -17 q 89 250 89 115 q 92 370 89 311 q 94 490 94 429 q 92 576 94 531 q 83 675 90 622 l 194 675 q 203 601 201 639 q 206 518 206 563 q 204 455 206 489 q 201 384 203 421 q 199 311 200 347 q 197 244 197 275 q 209 167 197 199 q 242 116 221 136 q 290 87 263 96 q 347 78 317 78 q 469 140 421 78 q 517 333 517 201 q 505 492 517 411 q 461 665 493 572 l 572 692 q 617 516 601 604 q 632 338 632 428 q 611 185 632 251 q 553 74 590 119 q 463 6 515 29 q 346 -17 410 -17 m 126 992 q 158 1083 129 1046 q 240 1119 188 1119 q 301 1109 276 1119 q 347 1085 326 1099 q 388 1062 368 1072 q 432 1051 407 1051 q 472 1067 456 1051 q 493 1115 489 1083 l 551 1110 q 519 1019 549 1056 q 438 982 490 982 q 376 992 401 982 q 331 1016 351 1003 q 290 1040 310 1029 q 246 1050 271 1050 q 206 1034 222 1050 q 185 986 189 1018 l 126 992 m 206 817 q 160 835 178 817 q 142 879 142 853 q 160 925 142 907 q 206 943 178 943 q 251 925 233 943 q 268 879 268 907 q 251 835 268 853 q 206 817 233 817 m 472 817 q 427 835 444 817 q 410 879 410 853 q 427 925 410 907 q 472 943 444 943 q 518 925 500 943 q 536 879 536 907 q 518 835 536 853 q 472 817 500 817 z "},"ὠ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 442 808 l 429 864 q 485 887 463 872 q 507 929 507 901 q 392 994 507 989 l 399 1069 q 546 1034 494 1067 q 597 939 597 1001 q 584 887 597 908 q 549 849 571 865 q 500 824 528 833 q 442 808 472 814 z "},"ὡ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 531 797 q 472 812 500 803 q 423 836 444 821 q 388 873 401 851 q 375 925 375 894 q 426 1017 375 985 q 574 1051 478 1049 l 581 981 q 465 915 465 975 q 488 873 465 888 q 543 850 510 858 l 531 797 z "},"ὼ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 506 796 l 288 1008 l 368 1085 l 564 853 l 506 796 z "},"ώ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 467 796 l 408 853 l 604 1085 l 685 1008 l 467 796 z "},"ὢ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 319 801 l 306 854 q 352 876 333 861 q 371 919 371 892 q 269 979 371 974 l 275 1050 q 406 1018 357 1047 q 454 932 454 989 q 442 879 454 901 q 412 842 431 857 q 369 817 393 826 q 319 801 344 807 m 576 776 l 489 1050 l 592 1069 l 646 790 l 576 776 z "},"ὣ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 396 801 q 347 817 371 807 q 303 842 322 826 q 273 879 285 857 q 261 932 261 901 q 310 1018 261 989 q 440 1050 358 1047 l 446 979 q 344 919 344 974 q 363 876 344 892 q 408 854 381 861 l 396 801 m 568 776 l 479 1050 l 583 1069 l 636 790 l 568 776 z "},"ὤ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 319 801 l 306 854 q 352 876 333 861 q 371 919 371 892 q 269 979 371 974 l 275 1050 q 406 1018 357 1047 q 454 932 454 989 q 442 879 454 901 q 412 842 431 857 q 369 817 393 826 q 319 801 344 807 m 503 790 l 561 1069 l 664 1050 l 572 776 l 503 790 z "},"ὥ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 410 801 q 360 817 385 807 q 317 842 336 826 q 287 879 299 857 q 275 932 275 901 q 324 1018 275 989 q 454 1050 372 1047 l 460 979 q 358 919 358 974 q 376 876 358 892 q 422 854 394 861 l 410 801 m 493 790 l 553 1069 l 656 1050 l 563 776 l 493 790 z "},"ὦ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 290 999 q 320 1086 296 1051 q 396 1121 344 1121 q 450 1112 426 1121 q 494 1092 474 1103 q 533 1072 514 1081 q 571 1063 551 1063 q 601 1077 592 1063 q 617 1121 611 1092 l 682 1115 q 652 1028 676 1063 q 576 993 628 993 q 522 1002 546 993 q 478 1022 499 1011 q 440 1042 458 1033 q 401 1051 421 1051 q 371 1037 381 1051 q 356 993 361 1022 l 290 999 m 449 781 l 438 826 q 479 843 463 833 q 496 868 496 853 q 474 898 496 888 q 400 911 451 908 l 410 965 q 535 942 492 963 q 579 881 579 922 q 539 814 579 838 q 449 781 499 790 z "},"ὧ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 524 781 q 433 814 474 790 q 393 881 393 838 q 437 942 393 922 q 563 965 481 963 l 572 911 q 499 898 521 908 q 476 868 476 888 q 493 843 476 853 q 535 826 510 833 l 524 781 m 290 999 q 320 1086 296 1051 q 396 1121 344 1121 q 450 1112 426 1121 q 494 1092 474 1103 q 533 1072 514 1081 q 571 1063 551 1063 q 601 1077 592 1063 q 617 1121 611 1092 l 682 1115 q 652 1028 676 1063 q 576 993 628 993 q 522 1002 546 993 q 478 1022 499 1011 q 440 1042 458 1033 q 401 1051 421 1051 q 371 1037 381 1051 q 356 993 361 1022 l 290 999 z "},"ῶ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 586 801 q 522 819 549 801 q 474 860 496 838 q 431 900 451 882 q 388 918 411 918 q 340 888 356 918 q 322 808 325 857 l 246 813 q 256 888 247 853 q 282 947 265 922 q 324 987 299 972 q 386 1001 350 1001 q 450 983 424 1001 q 499 943 476 965 q 541 903 521 921 q 586 885 561 885 q 632 915 617 885 q 650 994 647 946 l 726 989 q 716 915 725 949 q 690 856 707 881 q 648 816 674 831 q 586 801 622 801 z "},"ᾳ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 460 -279 q 378 -246 404 -279 q 353 -150 353 -212 l 353 -86 l 442 -86 q 439 -124 439 -104 q 439 -160 439 -144 q 451 -193 439 -183 q 481 -203 464 -203 q 492 -202 486 -203 q 511 -199 497 -201 l 524 -267 q 497 -276 510 -272 q 460 -279 483 -279 z "},"ᾀ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 460 -279 q 378 -246 404 -279 q 353 -150 353 -212 l 353 -86 l 442 -86 q 439 -124 439 -104 q 439 -160 439 -144 q 451 -193 439 -183 q 481 -203 464 -203 q 492 -202 486 -203 q 511 -199 497 -201 l 524 -267 q 497 -276 510 -272 q 460 -279 483 -279 m 350 808 l 338 864 q 393 887 371 872 q 415 929 415 901 q 300 994 415 989 l 307 1069 q 454 1034 403 1067 q 506 939 506 1001 q 492 887 506 908 q 458 849 479 865 q 408 824 436 833 q 350 808 381 814 z "},"ᾁ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 460 -279 q 378 -246 404 -279 q 353 -150 353 -212 l 353 -86 l 442 -86 q 439 -124 439 -104 q 439 -160 439 -144 q 451 -193 439 -183 q 481 -203 464 -203 q 492 -202 486 -203 q 511 -199 497 -201 l 524 -267 q 497 -276 510 -272 q 460 -279 483 -279 m 439 797 q 381 812 408 803 q 331 836 353 821 q 297 873 310 851 q 283 925 283 894 q 335 1017 283 985 q 482 1051 386 1049 l 489 981 q 374 915 374 975 q 396 873 374 888 q 451 850 418 858 l 439 797 z "},"ᾲ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 460 -279 q 378 -246 404 -279 q 353 -150 353 -212 l 353 -86 l 442 -86 q 439 -124 439 -104 q 439 -160 439 -144 q 451 -193 439 -183 q 481 -203 464 -203 q 492 -202 486 -203 q 511 -199 497 -201 l 524 -267 q 497 -276 510 -272 q 460 -279 483 -279 m 414 796 l 196 1008 l 276 1085 l 472 853 l 414 796 z "},"ᾴ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 460 -279 q 378 -246 404 -279 q 353 -150 353 -212 l 353 -86 l 442 -86 q 439 -124 439 -104 q 439 -160 439 -144 q 451 -193 439 -183 q 481 -203 464 -203 q 492 -202 486 -203 q 511 -199 497 -201 l 524 -267 q 497 -276 510 -272 q 460 -279 483 -279 m 375 796 l 317 853 l 513 1085 l 593 1008 l 375 796 z "},"ᾂ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 460 -279 q 378 -246 404 -279 q 353 -150 353 -212 l 353 -86 l 442 -86 q 439 -124 439 -104 q 439 -160 439 -144 q 451 -193 439 -183 q 481 -203 464 -203 q 492 -202 486 -203 q 511 -199 497 -201 l 524 -267 q 497 -276 510 -272 q 460 -279 483 -279 m 228 801 l 214 854 q 260 876 242 861 q 279 919 279 892 q 178 979 279 974 l 183 1050 q 314 1018 265 1047 q 363 932 363 989 q 351 879 363 901 q 320 842 339 857 q 277 817 301 826 q 228 801 253 807 m 485 776 l 397 1050 l 500 1069 l 554 790 l 485 776 z "},"ᾃ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 460 -279 q 378 -246 404 -279 q 353 -150 353 -212 l 353 -86 l 442 -86 q 439 -124 439 -104 q 439 -160 439 -144 q 451 -193 439 -183 q 481 -203 464 -203 q 492 -202 486 -203 q 511 -199 497 -201 l 524 -267 q 497 -276 510 -272 q 460 -279 483 -279 m 304 801 q 255 817 279 807 q 212 842 231 826 q 181 879 193 857 q 169 932 169 901 q 218 1018 169 989 q 349 1050 267 1047 l 354 979 q 253 919 253 974 q 271 876 253 892 q 317 854 289 861 l 304 801 m 476 776 l 388 1050 l 492 1069 l 544 790 l 476 776 z "},"ᾄ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 460 -279 q 378 -246 404 -279 q 353 -150 353 -212 l 353 -86 l 442 -86 q 439 -124 439 -104 q 439 -160 439 -144 q 451 -193 439 -183 q 481 -203 464 -203 q 492 -202 486 -203 q 511 -199 497 -201 l 524 -267 q 497 -276 510 -272 q 460 -279 483 -279 m 228 801 l 214 854 q 260 876 242 861 q 279 919 279 892 q 178 979 279 974 l 183 1050 q 314 1018 265 1047 q 363 932 363 989 q 351 879 363 901 q 320 842 339 857 q 277 817 301 826 q 228 801 253 807 m 411 790 l 469 1069 l 572 1050 l 481 776 l 411 790 z "},"ᾅ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 460 -279 q 378 -246 404 -279 q 353 -150 353 -212 l 353 -86 l 442 -86 q 439 -124 439 -104 q 439 -160 439 -144 q 451 -193 439 -183 q 481 -203 464 -203 q 492 -202 486 -203 q 511 -199 497 -201 l 524 -267 q 497 -276 510 -272 q 460 -279 483 -279 m 318 801 q 269 817 293 807 q 226 842 244 826 q 195 879 207 857 q 183 932 183 901 q 232 1018 183 989 q 363 1050 281 1047 l 368 979 q 267 919 267 974 q 285 876 267 892 q 331 854 303 861 l 318 801 m 401 790 l 461 1069 l 564 1050 l 471 776 l 401 790 z "},"ᾆ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 460 -279 q 378 -246 404 -279 q 353 -150 353 -212 l 353 -86 l 442 -86 q 439 -124 439 -104 q 439 -160 439 -144 q 451 -193 439 -183 q 481 -203 464 -203 q 492 -202 486 -203 q 511 -199 497 -201 l 524 -267 q 497 -276 510 -272 q 460 -279 483 -279 m 199 999 q 228 1086 204 1051 q 304 1121 253 1121 q 358 1112 335 1121 q 402 1092 382 1103 q 441 1072 422 1081 q 479 1063 460 1063 q 510 1077 500 1063 q 525 1121 519 1092 l 590 1115 q 560 1028 585 1063 q 485 993 536 993 q 431 1002 454 993 q 387 1022 407 1011 q 348 1042 367 1033 q 310 1051 329 1051 q 279 1037 289 1051 q 264 993 269 1022 l 199 999 m 357 781 l 346 826 q 388 843 371 833 q 404 868 404 853 q 382 898 404 888 q 308 911 360 908 l 318 965 q 444 942 400 963 q 488 881 488 922 q 447 814 488 838 q 357 781 407 790 z "},"ᾇ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 460 -279 q 378 -246 404 -279 q 353 -150 353 -212 l 353 -86 l 442 -86 q 439 -124 439 -104 q 439 -160 439 -144 q 451 -193 439 -183 q 481 -203 464 -203 q 492 -202 486 -203 q 511 -199 497 -201 l 524 -267 q 497 -276 510 -272 q 460 -279 483 -279 m 432 781 q 342 814 382 790 q 301 881 301 838 q 345 942 301 922 q 471 965 389 963 l 481 911 q 407 898 429 908 q 385 868 385 888 q 401 843 385 853 q 443 826 418 833 l 432 781 m 199 999 q 228 1086 204 1051 q 304 1121 253 1121 q 358 1112 335 1121 q 402 1092 382 1103 q 441 1072 422 1081 q 479 1063 460 1063 q 510 1077 500 1063 q 525 1121 519 1092 l 590 1115 q 560 1028 585 1063 q 485 993 536 993 q 431 1002 454 993 q 387 1022 407 1011 q 348 1042 367 1033 q 310 1051 329 1051 q 279 1037 289 1051 q 264 993 269 1022 l 199 999 z "},"ᾷ":{"ha":778,"x_min":64,"x_max":758,"o":"m 324 -17 q 218 6 265 -17 q 136 72 171 28 q 83 178 101 115 q 64 325 64 242 q 88 481 64 413 q 153 595 113 549 q 248 667 194 642 q 360 692 301 692 q 481 651 422 692 q 568 515 539 611 l 571 515 l 600 675 l 713 675 q 684 535 699 608 q 657 392 669 463 q 636 258 644 321 q 628 149 628 194 q 647 96 628 114 q 694 78 667 78 q 718 81 706 78 q 742 89 731 85 l 758 1 q 722 -11 743 -6 q 671 -17 701 -17 q 574 17 610 -17 q 538 121 538 50 l 533 121 q 324 -17 456 -17 m 347 79 q 413 96 381 79 q 469 141 444 113 q 511 208 494 169 q 531 289 528 246 l 542 415 q 508 506 528 471 q 467 560 489 540 q 420 588 444 581 q 372 596 396 596 q 301 578 336 596 q 240 528 267 561 q 198 444 214 494 q 182 326 182 393 q 225 144 182 208 q 347 79 268 79 m 460 -279 q 378 -246 404 -279 q 353 -150 353 -212 l 353 -86 l 442 -86 q 439 -124 439 -104 q 439 -160 439 -144 q 451 -193 439 -183 q 481 -203 464 -203 q 492 -202 486 -203 q 511 -199 497 -201 l 524 -267 q 497 -276 510 -272 q 460 -279 483 -279 m 494 801 q 431 819 457 801 q 382 860 404 838 q 340 900 360 882 q 296 918 319 918 q 249 888 264 918 q 231 808 233 857 l 154 813 q 165 888 156 853 q 190 947 174 922 q 233 987 207 972 q 294 1001 258 1001 q 358 983 332 1001 q 407 943 385 965 q 449 903 429 921 q 494 885 469 885 q 540 915 525 885 q 558 994 556 946 l 635 989 q 624 915 633 949 q 599 856 615 881 q 556 816 582 831 q 494 801 531 801 z "},"ῃ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 225 -279 q 144 -246 169 -279 q 118 -150 118 -212 l 118 -86 l 207 -86 q 204 -124 204 -104 q 204 -160 204 -144 q 217 -193 204 -183 q 246 -203 229 -203 q 257 -202 251 -203 q 276 -199 263 -201 l 289 -267 q 262 -276 275 -272 q 225 -279 249 -279 z "},"ᾐ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 225 -279 q 144 -246 169 -279 q 118 -150 118 -212 l 118 -86 l 207 -86 q 204 -124 204 -104 q 204 -160 204 -144 q 217 -193 204 -183 q 246 -203 229 -203 q 257 -202 251 -203 q 276 -199 263 -201 l 289 -267 q 262 -276 275 -272 q 225 -279 249 -279 m 358 808 l 346 864 q 401 887 379 872 q 424 929 424 901 q 308 994 424 989 l 315 1069 q 463 1034 411 1067 q 514 939 514 1001 q 501 887 514 908 q 466 849 488 865 q 417 824 444 833 q 358 808 389 814 z "},"ᾑ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 225 -279 q 144 -246 169 -279 q 118 -150 118 -212 l 118 -86 l 207 -86 q 204 -124 204 -104 q 204 -160 204 -144 q 217 -193 204 -183 q 246 -203 229 -203 q 257 -202 251 -203 q 276 -199 263 -201 l 289 -267 q 262 -276 275 -272 q 225 -279 249 -279 m 447 797 q 389 812 417 803 q 340 836 361 821 q 305 873 318 851 q 292 925 292 894 q 343 1017 292 985 q 490 1051 394 1049 l 497 981 q 382 915 382 975 q 404 873 382 888 q 460 850 426 858 l 447 797 z "},"ῂ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 225 -279 q 144 -246 169 -279 q 118 -150 118 -212 l 118 -86 l 207 -86 q 204 -124 204 -104 q 204 -160 204 -144 q 217 -193 204 -183 q 246 -203 229 -203 q 257 -202 251 -203 q 276 -199 263 -201 l 289 -267 q 262 -276 275 -272 q 225 -279 249 -279 m 422 796 l 204 1008 l 285 1085 l 481 853 l 422 796 z "},"ῄ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 225 -279 q 144 -246 169 -279 q 118 -150 118 -212 l 118 -86 l 207 -86 q 204 -124 204 -104 q 204 -160 204 -144 q 217 -193 204 -183 q 246 -203 229 -203 q 257 -202 251 -203 q 276 -199 263 -201 l 289 -267 q 262 -276 275 -272 q 225 -279 249 -279 m 383 796 l 325 853 l 521 1085 l 601 1008 l 383 796 z "},"ᾒ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 225 -279 q 144 -246 169 -279 q 118 -150 118 -212 l 118 -86 l 207 -86 q 204 -124 204 -104 q 204 -160 204 -144 q 217 -193 204 -183 q 246 -203 229 -203 q 257 -202 251 -203 q 276 -199 263 -201 l 289 -267 q 262 -276 275 -272 q 225 -279 249 -279 m 236 801 l 222 854 q 269 876 250 861 q 288 919 288 892 q 186 979 288 974 l 192 1050 q 322 1018 274 1047 q 371 932 371 989 q 359 879 371 901 q 328 842 347 857 q 285 817 310 826 q 236 801 261 807 m 493 776 l 406 1050 l 508 1069 l 563 790 l 493 776 z "},"ᾓ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 225 -279 q 144 -246 169 -279 q 118 -150 118 -212 l 118 -86 l 207 -86 q 204 -124 204 -104 q 204 -160 204 -144 q 217 -193 204 -183 q 246 -203 229 -203 q 257 -202 251 -203 q 276 -199 263 -201 l 289 -267 q 262 -276 275 -272 q 225 -279 249 -279 m 313 801 q 263 817 288 807 q 220 842 239 826 q 190 879 201 857 q 178 932 178 901 q 226 1018 178 989 q 357 1050 275 1047 l 363 979 q 261 919 261 974 q 279 876 261 892 q 325 854 297 861 l 313 801 m 485 776 l 396 1050 l 500 1069 l 553 790 l 485 776 z "},"ᾔ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 225 -279 q 144 -246 169 -279 q 118 -150 118 -212 l 118 -86 l 207 -86 q 204 -124 204 -104 q 204 -160 204 -144 q 217 -193 204 -183 q 246 -203 229 -203 q 257 -202 251 -203 q 276 -199 263 -201 l 289 -267 q 262 -276 275 -272 q 225 -279 249 -279 m 236 801 l 222 854 q 269 876 250 861 q 288 919 288 892 q 186 979 288 974 l 192 1050 q 322 1018 274 1047 q 371 932 371 989 q 359 879 371 901 q 328 842 347 857 q 285 817 310 826 q 236 801 261 807 m 419 790 l 478 1069 l 581 1050 l 489 776 l 419 790 z "},"ᾕ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 225 -279 q 144 -246 169 -279 q 118 -150 118 -212 l 118 -86 l 207 -86 q 204 -124 204 -104 q 204 -160 204 -144 q 217 -193 204 -183 q 246 -203 229 -203 q 257 -202 251 -203 q 276 -199 263 -201 l 289 -267 q 262 -276 275 -272 q 225 -279 249 -279 m 326 801 q 277 817 301 807 q 234 842 253 826 q 203 879 215 857 q 192 932 192 901 q 240 1018 192 989 q 371 1050 289 1047 l 376 979 q 275 919 275 974 q 293 876 275 892 q 339 854 311 861 l 326 801 m 410 790 l 469 1069 l 572 1050 l 479 776 l 410 790 z "},"ᾖ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 225 -279 q 144 -246 169 -279 q 118 -150 118 -212 l 118 -86 l 207 -86 q 204 -124 204 -104 q 204 -160 204 -144 q 217 -193 204 -183 q 246 -203 229 -203 q 257 -202 251 -203 q 276 -199 263 -201 l 289 -267 q 262 -276 275 -272 q 225 -279 249 -279 m 207 999 q 237 1086 213 1051 q 313 1121 261 1121 q 367 1112 343 1121 q 410 1092 390 1103 q 449 1072 431 1081 q 488 1063 468 1063 q 518 1077 508 1063 q 533 1121 528 1092 l 599 1115 q 569 1028 593 1063 q 493 993 544 993 q 439 1002 463 993 q 395 1022 415 1011 q 356 1042 375 1033 q 318 1051 338 1051 q 288 1037 297 1051 q 272 993 278 1022 l 207 999 m 365 781 l 354 826 q 396 843 379 833 q 413 868 413 853 q 390 898 413 888 q 317 911 368 908 l 326 965 q 452 942 408 963 q 496 881 496 922 q 456 814 496 838 q 365 781 415 790 z "},"ᾗ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 225 -279 q 144 -246 169 -279 q 118 -150 118 -212 l 118 -86 l 207 -86 q 204 -124 204 -104 q 204 -160 204 -144 q 217 -193 204 -183 q 246 -203 229 -203 q 257 -202 251 -203 q 276 -199 263 -201 l 289 -267 q 262 -276 275 -272 q 225 -279 249 -279 m 440 781 q 350 814 390 790 q 310 881 310 838 q 353 942 310 922 q 479 965 397 963 l 489 911 q 415 898 438 908 q 393 868 393 888 q 410 843 393 853 q 451 826 426 833 l 440 781 m 207 999 q 237 1086 213 1051 q 313 1121 261 1121 q 367 1112 343 1121 q 410 1092 390 1103 q 449 1072 431 1081 q 488 1063 468 1063 q 518 1077 508 1063 q 533 1121 528 1092 l 599 1115 q 569 1028 593 1063 q 493 993 544 993 q 439 1002 463 993 q 395 1022 415 1011 q 356 1042 375 1033 q 318 1051 338 1051 q 288 1037 297 1051 q 272 993 278 1022 l 207 999 z "},"ῇ":{"ha":751,"x_min":104,"x_max":646,"o":"m 531 -249 q 537 92 535 -82 q 539 413 539 265 q 514 551 539 508 q 429 593 489 593 q 377 585 401 593 q 329 560 353 578 q 281 513 306 542 q 228 442 257 485 l 228 0 l 114 0 l 114 490 q 113 576 114 531 q 104 675 111 622 l 208 675 l 218 535 l 222 535 q 331 653 275 614 q 463 692 388 692 q 603 625 561 692 q 646 428 646 558 l 646 -249 l 531 -249 m 225 -279 q 144 -246 169 -279 q 118 -150 118 -212 l 118 -86 l 207 -86 q 204 -124 204 -104 q 204 -160 204 -144 q 217 -193 204 -183 q 246 -203 229 -203 q 257 -202 251 -203 q 276 -199 263 -201 l 289 -267 q 262 -276 275 -272 q 225 -279 249 -279 m 503 801 q 439 819 465 801 q 390 860 413 838 q 348 900 368 882 q 304 918 328 918 q 257 888 272 918 q 239 808 242 857 l 163 813 q 173 888 164 853 q 199 947 182 922 q 241 987 215 972 q 303 1001 267 1001 q 367 983 340 1001 q 415 943 393 965 q 458 903 438 921 q 503 885 478 885 q 549 915 533 885 q 567 994 564 946 l 643 989 q 633 915 642 949 q 607 856 624 881 q 565 816 590 831 q 503 801 539 801 z "},"ῳ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 539 -279 q 458 -246 483 -279 q 432 -150 432 -212 l 432 -86 l 521 -86 q 518 -124 518 -104 q 518 -160 518 -144 q 531 -193 518 -183 q 560 -203 543 -203 q 571 -202 565 -203 q 590 -199 576 -201 l 603 -267 q 576 -276 589 -272 q 539 -279 563 -279 z "},"ᾠ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 539 -279 q 458 -246 483 -279 q 432 -150 432 -212 l 432 -86 l 521 -86 q 518 -124 518 -104 q 518 -160 518 -144 q 531 -193 518 -183 q 560 -203 543 -203 q 571 -202 565 -203 q 590 -199 576 -201 l 603 -267 q 576 -276 589 -272 q 539 -279 563 -279 m 442 808 l 429 864 q 485 887 463 872 q 507 929 507 901 q 392 994 507 989 l 399 1069 q 546 1034 494 1067 q 597 939 597 1001 q 584 887 597 908 q 549 849 571 865 q 500 824 528 833 q 442 808 472 814 z "},"ᾡ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 539 -279 q 458 -246 483 -279 q 432 -150 432 -212 l 432 -86 l 521 -86 q 518 -124 518 -104 q 518 -160 518 -144 q 531 -193 518 -183 q 560 -203 543 -203 q 571 -202 565 -203 q 590 -199 576 -201 l 603 -267 q 576 -276 589 -272 q 539 -279 563 -279 m 531 797 q 472 812 500 803 q 423 836 444 821 q 388 873 401 851 q 375 925 375 894 q 426 1017 375 985 q 574 1051 478 1049 l 581 981 q 465 915 465 975 q 488 873 465 888 q 543 850 510 858 l 531 797 z "},"ῲ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 539 -279 q 458 -246 483 -279 q 432 -150 432 -212 l 432 -86 l 521 -86 q 518 -124 518 -104 q 518 -160 518 -144 q 531 -193 518 -183 q 560 -203 543 -203 q 571 -202 565 -203 q 590 -199 576 -201 l 603 -267 q 576 -276 589 -272 q 539 -279 563 -279 m 506 796 l 288 1008 l 368 1085 l 564 853 l 506 796 z "},"ῴ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 539 -279 q 458 -246 483 -279 q 432 -150 432 -212 l 432 -86 l 521 -86 q 518 -124 518 -104 q 518 -160 518 -144 q 531 -193 518 -183 q 560 -203 543 -203 q 571 -202 565 -203 q 590 -199 576 -201 l 603 -267 q 576 -276 589 -272 q 539 -279 563 -279 m 467 796 l 408 853 l 604 1085 l 685 1008 l 467 796 z "},"ᾢ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 539 -279 q 458 -246 483 -279 q 432 -150 432 -212 l 432 -86 l 521 -86 q 518 -124 518 -104 q 518 -160 518 -144 q 531 -193 518 -183 q 560 -203 543 -203 q 571 -202 565 -203 q 590 -199 576 -201 l 603 -267 q 576 -276 589 -272 q 539 -279 563 -279 m 319 801 l 306 854 q 352 876 333 861 q 371 919 371 892 q 269 979 371 974 l 275 1050 q 406 1018 357 1047 q 454 932 454 989 q 442 879 454 901 q 412 842 431 857 q 369 817 393 826 q 319 801 344 807 m 576 776 l 489 1050 l 592 1069 l 646 790 l 576 776 z "},"ᾣ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 539 -279 q 458 -246 483 -279 q 432 -150 432 -212 l 432 -86 l 521 -86 q 518 -124 518 -104 q 518 -160 518 -144 q 531 -193 518 -183 q 560 -203 543 -203 q 571 -202 565 -203 q 590 -199 576 -201 l 603 -267 q 576 -276 589 -272 q 539 -279 563 -279 m 396 801 q 347 817 371 807 q 303 842 322 826 q 273 879 285 857 q 261 932 261 901 q 310 1018 261 989 q 440 1050 358 1047 l 446 979 q 344 919 344 974 q 363 876 344 892 q 408 854 381 861 l 396 801 m 568 776 l 479 1050 l 583 1069 l 636 790 l 568 776 z "},"ᾤ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 539 -279 q 458 -246 483 -279 q 432 -150 432 -212 l 432 -86 l 521 -86 q 518 -124 518 -104 q 518 -160 518 -144 q 531 -193 518 -183 q 560 -203 543 -203 q 571 -202 565 -203 q 590 -199 576 -201 l 603 -267 q 576 -276 589 -272 q 539 -279 563 -279 m 319 801 l 306 854 q 352 876 333 861 q 371 919 371 892 q 269 979 371 974 l 275 1050 q 406 1018 357 1047 q 454 932 454 989 q 442 879 454 901 q 412 842 431 857 q 369 817 393 826 q 319 801 344 807 m 503 790 l 561 1069 l 664 1050 l 572 776 l 503 790 z "},"ᾥ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 539 -279 q 458 -246 483 -279 q 432 -150 432 -212 l 432 -86 l 521 -86 q 518 -124 518 -104 q 518 -160 518 -144 q 531 -193 518 -183 q 560 -203 543 -203 q 571 -202 565 -203 q 590 -199 576 -201 l 603 -267 q 576 -276 589 -272 q 539 -279 563 -279 m 410 801 q 360 817 385 807 q 317 842 336 826 q 287 879 299 857 q 275 932 275 901 q 324 1018 275 989 q 454 1050 372 1047 l 460 979 q 358 919 358 974 q 376 876 358 892 q 422 854 394 861 l 410 801 m 493 790 l 553 1069 l 656 1050 l 563 776 l 493 790 z "},"ᾦ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 539 -279 q 458 -246 483 -279 q 432 -150 432 -212 l 432 -86 l 521 -86 q 518 -124 518 -104 q 518 -160 518 -144 q 531 -193 518 -183 q 560 -203 543 -203 q 571 -202 565 -203 q 590 -199 576 -201 l 603 -267 q 576 -276 589 -272 q 539 -279 563 -279 m 290 999 q 320 1086 296 1051 q 396 1121 344 1121 q 450 1112 426 1121 q 494 1092 474 1103 q 533 1072 514 1081 q 571 1063 551 1063 q 601 1077 592 1063 q 617 1121 611 1092 l 682 1115 q 652 1028 676 1063 q 576 993 628 993 q 522 1002 546 993 q 478 1022 499 1011 q 440 1042 458 1033 q 401 1051 421 1051 q 371 1037 381 1051 q 356 993 361 1022 l 290 999 m 449 781 l 438 826 q 479 843 463 833 q 496 868 496 853 q 474 898 496 888 q 400 911 451 908 l 410 965 q 535 942 492 963 q 579 881 579 922 q 539 814 579 838 q 449 781 499 790 z "},"ᾧ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 539 -279 q 458 -246 483 -279 q 432 -150 432 -212 l 432 -86 l 521 -86 q 518 -124 518 -104 q 518 -160 518 -144 q 531 -193 518 -183 q 560 -203 543 -203 q 571 -202 565 -203 q 590 -199 576 -201 l 603 -267 q 576 -276 589 -272 q 539 -279 563 -279 m 524 781 q 433 814 474 790 q 393 881 393 838 q 437 942 393 922 q 563 965 481 963 l 572 911 q 499 898 521 908 q 476 868 476 888 q 493 843 476 853 q 535 826 510 833 l 524 781 m 290 999 q 320 1086 296 1051 q 396 1121 344 1121 q 450 1112 426 1121 q 494 1092 474 1103 q 533 1072 514 1081 q 571 1063 551 1063 q 601 1077 592 1063 q 617 1121 611 1092 l 682 1115 q 652 1028 676 1063 q 576 993 628 993 q 522 1002 546 993 q 478 1022 499 1011 q 440 1042 458 1033 q 401 1051 421 1051 q 371 1037 381 1051 q 356 993 361 1022 l 290 999 z "},"ῷ":{"ha":974,"x_min":71,"x_max":903,"o":"m 306 -17 q 213 4 256 -17 q 138 67 169 25 q 89 172 107 108 q 71 318 71 235 q 107 519 71 426 q 196 692 143 613 l 300 646 q 249 565 271 604 q 211 483 226 525 q 188 396 196 442 q 181 297 181 350 q 217 135 181 192 q 311 78 254 78 q 358 87 336 78 q 397 116 381 96 q 424 168 414 136 q 433 247 433 200 q 431 331 433 289 q 422 428 428 374 l 547 428 q 539 331 542 374 q 536 247 536 289 q 546 166 536 199 q 572 114 556 133 q 611 86 589 94 q 657 78 633 78 q 750 135 714 78 q 786 315 786 193 q 780 409 786 367 q 760 490 774 451 q 727 567 747 529 q 678 649 707 606 l 781 692 q 831 611 808 651 q 869 526 853 571 q 894 431 885 481 q 903 322 903 381 q 840 67 903 151 q 671 -17 776 -17 q 563 13 613 -17 q 489 106 514 42 l 483 106 q 410 13 457 42 q 306 -17 364 -17 m 539 -279 q 458 -246 483 -279 q 432 -150 432 -212 l 432 -86 l 521 -86 q 518 -124 518 -104 q 518 -160 518 -144 q 531 -193 518 -183 q 560 -203 543 -203 q 571 -202 565 -203 q 590 -199 576 -201 l 603 -267 q 576 -276 589 -272 q 539 -279 563 -279 m 586 801 q 522 819 549 801 q 474 860 496 838 q 431 900 451 882 q 388 918 411 918 q 340 888 356 918 q 322 808 325 857 l 246 813 q 256 888 247 853 q 282 947 265 922 q 324 987 299 972 q 386 1001 350 1001 q 450 983 424 1001 q 499 943 476 965 q 541 903 521 921 q 586 885 561 885 q 632 915 617 885 q 650 994 647 946 l 726 989 q 716 915 725 949 q 690 856 707 881 q 648 816 674 831 q 586 801 622 801 z "},"ϗ":{"ha":686,"x_min":101,"x_max":690,"o":"m 503 -260 l 369 -249 q 473 -130 424 -192 q 563 -8 522 -68 q 506 62 535 22 q 447 146 476 101 q 390 238 418 190 q 339 331 363 285 q 308 291 324 311 q 276 249 292 271 q 234 155 246 208 q 221 35 222 101 l 221 0 l 114 0 l 114 490 q 112 581 114 531 q 101 675 110 631 l 214 675 q 224 605 221 647 q 226 518 226 563 l 226 307 l 232 307 q 319 440 272 376 q 419 556 367 504 q 525 642 471 607 q 633 692 579 678 l 644 583 q 530 523 588 565 q 410 413 472 481 q 468 308 435 363 q 538 198 501 253 q 613 92 574 143 q 690 0 653 42 q 594 -142 644 -74 q 503 -260 543 -211 z "},"ϙ":{"ha":743,"x_min":64,"x_max":679,"o":"m 371 75 q 511 146 461 75 q 561 336 561 217 q 511 526 561 454 q 371 597 461 597 q 231 526 281 597 q 182 336 182 454 q 231 146 182 217 q 371 75 281 75 m 319 -249 l 319 -12 q 219 24 265 -4 q 138 95 172 51 q 83 200 103 139 q 64 336 64 261 q 88 488 64 421 q 154 599 113 554 q 252 668 196 644 q 371 692 308 692 q 491 668 435 692 q 589 599 547 644 q 655 488 631 554 q 679 336 679 421 q 660 201 679 261 q 607 98 640 142 q 528 26 574 54 q 429 -11 482 -1 q 431 -71 431 -43 q 433 -126 432 -99 q 434 -183 433 -153 q 435 -249 435 -212 l 319 -249 z "},"ϛ":{"ha":647,"x_min":64,"x_max":611,"o":"m 488 -256 l 396 -218 q 449 -148 433 -174 q 464 -97 464 -122 q 460 -71 464 -83 q 442 -47 456 -58 q 405 -26 429 -36 q 340 -6 381 -15 q 235 33 285 8 q 147 97 185 57 q 86 194 108 136 q 64 331 64 251 q 90 484 64 419 q 161 591 115 549 q 269 654 207 633 q 401 675 331 675 l 611 675 l 611 578 q 519 581 571 581 q 410 581 467 581 q 244 519 306 581 q 182 331 182 457 q 198 235 182 275 q 242 166 214 194 q 309 119 269 138 q 396 89 349 100 q 530 30 493 65 q 567 -69 567 -6 q 547 -152 567 -101 q 488 -256 526 -203 z "},"ϝ":{"ha":574,"x_min":114,"x_max":538,"o":"m 114 -249 l 114 675 l 538 675 l 538 582 l 221 582 l 224 281 l 510 281 l 510 199 l 224 199 q 225 -20 224 86 q 229 -249 226 -126 l 114 -249 z "},"ϡ":{"ha":692,"x_min":24,"x_max":658,"o":"m 633 -249 l 522 -235 q 542 -104 536 -168 q 547 24 547 -40 q 533 199 547 117 q 362 119 446 158 q 182 31 278 79 l 135 126 l 513 296 q 454 461 492 383 q 267 375 358 418 q 71 279 175 332 l 24 375 l 410 549 q 271 731 351 649 q 86 874 190 813 l 157 958 q 372 783 278 885 q 528 561 465 682 q 625 303 592 440 q 658 22 658 167 q 653 -115 658 -49 q 633 -249 647 -181 z "},";":{"ha":346,"x_min":65,"x_max":275,"o":"m 174 485 q 115 509 139 485 q 90 571 90 533 q 115 635 90 611 q 174 660 139 660 q 231 635 207 660 q 256 571 256 611 q 231 509 256 533 q 174 485 207 485 m 93 -236 l 65 -169 q 158 -99 125 -143 q 190 0 192 -56 q 176 -1 186 -1 q 119 19 143 -1 q 94 78 94 39 q 119 137 94 115 q 179 158 144 158 q 249 122 224 158 q 275 24 275 86 q 226 -133 275 -67 q 93 -236 178 -200 z "},"·":{"ha":346,"x_min":90,"x_max":256,"o":"m 174 485 q 115 509 139 485 q 90 571 90 533 q 115 635 90 611 q 174 660 139 660 q 231 635 207 660 q 256 571 256 611 q 231 509 256 533 q 174 485 207 485 z "},"ʹ":{"ha":346,"x_min":114,"x_max":257,"o":"m 114 624 l 144 958 l 257 958 l 236 831 l 189 624 l 114 624 z "},"͵":{"ha":346,"x_min":89,"x_max":232,"o":"m 89 0 l 110 128 l 157 336 l 232 336 l 201 0 l 89 0 z "},"΄":{"ha":753,"x_min":331,"x_max":508,"o":"m 331 790 l 390 1069 l 508 1049 l 410 775 l 331 790 z "},"΅":{"ha":753,"x_min":169,"x_max":600,"o":"m 329 796 l 392 1075 l 483 1056 l 389 782 l 329 796 m 228 826 q 186 842 203 826 q 169 885 169 858 q 186 927 169 911 q 228 943 203 943 q 268 927 251 943 q 285 885 285 911 q 268 842 285 858 q 228 826 251 826 m 542 826 q 501 842 518 826 q 485 885 485 858 q 501 927 485 911 q 542 943 518 943 q 583 927 567 943 q 600 885 600 911 q 583 842 600 858 q 542 826 567 826 z "},"ͺ":{"ha":753,"x_min":339,"x_max":510,"o":"m 446 -279 q 365 -246 390 -279 q 339 -150 339 -212 l 339 -86 l 428 -86 q 425 -124 425 -104 q 425 -160 425 -144 q 438 -193 425 -183 q 467 -203 450 -203 q 478 -202 472 -203 q 497 -199 483 -201 l 510 -267 q 483 -276 496 -272 q 446 -279 469 -279 z "},"ι":{"ha":364,"x_min":114,"x_max":326,"o":"m 244 -17 q 144 24 174 -17 q 114 140 114 65 l 114 564 l 229 564 q 224 342 226 451 q 221 132 221 232 q 235 91 221 104 q 271 78 249 78 q 311 86 288 78 l 326 0 q 292 -12 311 -7 q 244 -17 274 -17 z "},"᾽":{"ha":753,"x_min":282,"x_max":488,"o":"m 332 794 l 319 850 q 375 873 353 858 q 397 915 397 888 q 282 981 397 975 l 289 1056 q 436 1020 385 1053 q 488 925 488 988 q 474 873 488 894 q 440 835 461 851 q 390 810 418 819 q 332 794 363 800 z "},"᾿":{"ha":753,"x_min":282,"x_max":488,"o":"m 332 794 l 319 850 q 375 873 353 858 q 397 915 397 888 q 282 981 397 975 l 289 1056 q 436 1020 385 1053 q 488 925 488 988 q 474 873 488 894 q 440 835 461 851 q 390 810 418 819 q 332 794 363 800 z "},"῾":{"ha":753,"x_min":265,"x_max":471,"o":"m 421 797 q 363 812 390 803 q 313 836 335 821 q 278 873 292 851 q 265 925 265 894 q 317 1017 265 985 q 464 1051 368 1049 l 471 981 q 356 915 356 975 q 378 873 356 888 q 433 850 400 858 l 421 797 z "},"`":{"ha":753,"x_min":250,"x_max":422,"o":"m 343 775 l 250 1049 l 368 1069 l 422 790 l 343 775 z "},"´":{"ha":753,"x_min":331,"x_max":508,"o":"m 331 790 l 390 1069 l 508 1049 l 410 775 l 331 790 z "},"῍":{"ha":753,"x_min":160,"x_max":536,"o":"m 210 801 l 196 854 q 242 876 224 861 q 261 919 261 892 q 160 979 261 974 l 165 1050 q 296 1018 247 1047 q 344 932 344 989 q 333 879 344 901 q 302 842 321 857 q 259 817 283 826 q 210 801 235 807 m 467 776 l 379 1050 l 482 1069 l 536 790 l 467 776 z "},"῝":{"ha":753,"x_min":151,"x_max":526,"o":"m 286 801 q 237 817 261 807 q 194 842 213 826 q 163 879 175 857 q 151 932 151 901 q 200 1018 151 989 q 331 1050 249 1047 l 336 979 q 235 919 235 974 q 253 876 235 892 q 299 854 271 861 l 286 801 m 458 776 l 369 1050 l 474 1069 l 526 790 l 458 776 z "},"῎":{"ha":753,"x_min":160,"x_max":554,"o":"m 210 801 l 196 854 q 242 876 224 861 q 261 919 261 892 q 160 979 261 974 l 165 1050 q 296 1018 247 1047 q 344 932 344 989 q 333 879 344 901 q 302 842 321 857 q 259 817 283 826 q 210 801 235 807 m 393 790 l 451 1069 l 554 1050 l 463 776 l 393 790 z "},"῞":{"ha":753,"x_min":165,"x_max":546,"o":"m 300 801 q 251 817 275 807 q 208 842 226 826 q 177 879 189 857 q 165 932 165 901 q 214 1018 165 989 q 344 1050 263 1047 l 350 979 q 249 919 249 974 q 267 876 249 892 q 313 854 285 861 l 300 801 m 383 790 l 443 1069 l 546 1050 l 453 776 l 383 790 z "},"῏":{"ha":753,"x_min":181,"x_max":572,"o":"m 181 999 q 210 1086 186 1051 q 286 1121 235 1121 q 340 1112 317 1121 q 384 1092 364 1103 q 423 1072 404 1081 q 461 1063 442 1063 q 492 1077 482 1063 q 507 1121 501 1092 l 572 1115 q 542 1028 567 1063 q 467 993 518 993 q 413 1002 436 993 q 369 1022 389 1011 q 330 1042 349 1033 q 292 1051 311 1051 q 261 1037 271 1051 q 246 993 251 1022 l 181 999 m 339 781 l 328 826 q 369 843 353 833 q 386 868 386 853 q 364 898 386 888 q 290 911 342 908 l 300 965 q 426 942 382 963 q 469 881 469 922 q 429 814 469 838 q 339 781 389 790 z "},"῟":{"ha":753,"x_min":181,"x_max":572,"o":"m 414 781 q 324 814 364 790 q 283 881 283 838 q 327 942 283 922 q 453 965 371 963 l 463 911 q 389 898 411 908 q 367 868 367 888 q 383 843 367 853 q 425 826 400 833 l 414 781 m 181 999 q 210 1086 186 1051 q 286 1121 235 1121 q 340 1112 317 1121 q 384 1092 364 1103 q 423 1072 404 1081 q 461 1063 442 1063 q 492 1077 482 1063 q 507 1121 501 1092 l 572 1115 q 542 1028 567 1063 q 467 993 518 993 q 413 1002 436 993 q 369 1022 389 1011 q 330 1042 349 1033 q 292 1051 311 1051 q 261 1037 271 1051 q 246 993 251 1022 l 181 999 z "},"῀":{"ha":753,"x_min":136,"x_max":617,"o":"m 476 801 q 413 819 439 801 q 364 860 386 838 q 322 900 342 882 q 278 918 301 918 q 231 888 246 918 q 213 808 215 857 l 136 813 q 147 888 138 853 q 172 947 156 922 q 215 987 189 972 q 276 1001 240 1001 q 340 983 314 1001 q 389 943 367 965 q 431 903 411 921 q 476 885 451 885 q 522 915 507 885 q 540 994 538 946 l 617 989 q 606 915 615 949 q 581 856 597 881 q 538 816 564 831 q 476 801 513 801 z "},"῭":{"ha":753,"x_min":161,"x_max":592,"o":"m 219 826 q 178 842 194 826 q 161 885 161 858 q 178 927 161 911 q 219 943 194 943 q 260 927 243 943 q 276 885 276 911 q 260 842 276 858 q 219 826 243 826 m 372 782 l 283 1056 l 375 1075 l 432 796 l 372 782 m 533 826 q 493 842 510 826 q 476 885 476 858 q 493 927 476 911 q 533 943 510 943 q 575 927 558 943 q 592 885 592 911 q 575 842 592 858 q 533 826 558 826 z "},"΅":{"ha":753,"x_min":161,"x_max":592,"o":"m 321 796 l 383 1075 l 475 1056 l 381 782 l 321 796 m 219 826 q 178 842 194 826 q 161 885 161 858 q 178 927 161 911 q 219 943 194 943 q 260 927 243 943 q 276 885 276 911 q 260 842 276 858 q 219 826 243 826 m 533 826 q 493 842 510 826 q 476 885 476 858 q 493 927 476 911 q 533 943 510 943 q 575 927 558 943 q 592 885 592 911 q 575 842 592 858 q 533 826 558 826 z "},"῁":{"ha":753,"x_min":164,"x_max":589,"o":"m 164 992 q 196 1083 167 1046 q 278 1119 225 1119 q 339 1109 314 1119 q 385 1085 364 1099 q 425 1062 406 1072 q 469 1051 444 1051 q 510 1067 493 1051 q 531 1115 526 1083 l 589 1110 q 557 1019 586 1056 q 475 982 528 982 q 414 992 439 982 q 368 1016 389 1003 q 328 1040 347 1029 q 283 1050 308 1050 q 243 1034 260 1050 q 222 986 226 1018 l 164 992 m 243 817 q 197 835 215 817 q 179 879 179 853 q 197 925 179 907 q 243 943 215 943 q 288 925 271 943 q 306 879 306 907 q 288 835 306 853 q 243 817 271 817 m 510 817 q 465 835 482 817 q 447 879 447 853 q 465 925 447 907 q 510 943 482 943 q 556 925 538 943 q 574 879 574 907 q 556 835 574 853 q 510 817 538 817 z "},"А":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 z "},"Б":{"ha":806,"x_min":125,"x_max":749,"o":"m 125 0 l 125 911 l 688 911 l 688 814 l 240 814 l 240 528 l 415 528 q 549 514 488 528 q 654 470 610 500 q 724 392 699 440 q 749 276 749 344 q 660 67 749 133 q 421 0 571 0 l 125 0 m 240 92 l 401 92 q 577 135 519 92 q 635 274 635 179 q 576 400 635 361 q 399 439 517 439 l 240 439 l 240 92 z "},"В":{"ha":817,"x_min":125,"x_max":761,"o":"m 125 0 l 125 911 l 396 911 q 523 899 465 911 q 622 860 581 886 q 685 791 663 833 q 708 689 708 749 q 674 566 708 621 q 575 490 640 511 l 575 485 q 710 415 658 469 q 761 267 761 361 q 736 150 761 200 q 665 67 711 100 q 556 17 619 33 q 415 0 492 0 l 125 0 m 240 524 l 375 524 q 543 564 492 524 q 594 674 594 604 q 541 786 594 753 q 381 819 488 819 l 240 819 l 240 524 m 240 92 l 399 92 q 582 135 517 92 q 647 271 647 179 q 583 395 647 356 q 399 435 519 435 l 240 435 l 240 92 z "},"Г":{"ha":692,"x_min":125,"x_max":650,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 0 l 125 0 z "},"Д":{"ha":886,"x_min":36,"x_max":850,"o":"m 150 0 l 150 -261 l 49 -261 l 36 29 l 36 99 l 78 99 q 107 122 92 104 q 138 178 122 140 q 171 276 154 215 q 204 426 188 336 q 227 551 217 494 q 247 664 238 608 q 265 778 256 719 q 288 911 275 838 l 749 911 l 749 99 l 850 99 l 850 29 l 838 -261 l 736 -261 l 736 0 l 150 0 m 310 407 q 263 216 288 290 q 208 99 239 142 l 632 99 l 632 814 l 378 814 q 359 706 367 756 q 344 610 351 657 q 328 514 336 563 q 310 407 319 465 z "},"Е":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 z "},"Ж":{"ha":1118,"x_min":8,"x_max":1108,"o":"m 8 0 l 286 486 l 190 701 q 157 762 172 739 q 128 797 142 785 q 100 813 114 810 q 71 817 86 817 q 55 815 64 817 q 38 811 46 814 l 18 919 q 42 926 29 924 q 68 928 56 928 q 125 921 99 928 q 176 895 151 914 q 225 843 201 876 q 274 758 249 810 l 381 526 l 504 526 l 504 911 l 614 911 l 614 526 l 736 526 l 844 758 q 893 843 869 810 q 942 895 917 876 q 993 921 967 914 q 1050 928 1019 928 q 1076 926 1063 928 q 1100 919 1089 924 l 1081 811 q 1063 815 1071 814 q 1047 817 1054 817 q 1018 813 1032 817 q 990 797 1004 810 q 961 762 976 785 q 928 701 946 739 l 832 486 l 1108 0 l 982 0 l 746 432 l 614 432 l 614 0 l 504 0 l 504 432 l 372 432 l 136 0 l 8 0 z "},"З":{"ha":769,"x_min":58,"x_max":714,"o":"m 386 -17 q 207 15 286 -17 q 58 117 128 46 l 124 196 q 244 110 183 135 q 385 85 306 85 q 468 97 429 85 q 536 131 507 108 q 583 188 565 154 q 600 264 600 221 q 536 393 600 351 q 354 435 472 435 l 251 435 l 251 524 l 326 524 q 500 563 447 524 q 553 681 553 603 q 502 790 553 753 q 375 826 451 826 q 257 803 311 826 q 161 742 203 781 l 99 819 q 221 898 147 868 q 378 928 294 928 q 495 912 442 928 q 587 866 549 896 q 646 792 625 836 q 667 694 667 749 q 632 567 667 622 q 531 489 597 513 l 531 483 q 662 410 610 468 q 714 258 714 353 q 688 142 714 193 q 618 55 663 90 q 514 1 574 19 q 386 -17 454 -17 z "},"И":{"ha":911,"x_min":125,"x_max":786,"o":"m 125 0 l 125 911 l 239 911 l 239 440 q 234 294 239 368 q 225 150 229 219 l 231 150 l 329 336 l 664 911 l 786 911 l 786 0 l 672 0 l 672 476 q 677 620 672 549 q 686 761 682 692 l 681 761 l 582 575 l 247 0 l 125 0 z "},"Й":{"ha":911,"x_min":125,"x_max":786,"o":"m 125 0 l 125 911 l 239 911 l 239 440 q 234 294 239 368 q 225 150 229 219 l 231 150 l 329 336 l 664 911 l 786 911 l 786 0 l 672 0 l 672 476 q 677 620 672 549 q 686 761 682 692 l 681 761 l 582 575 l 247 0 l 125 0 m 461 985 q 364 1000 403 985 q 301 1041 325 1015 q 265 1100 276 1067 q 251 1168 253 1133 l 351 1168 q 378 1084 353 1119 q 461 1049 403 1049 q 510 1058 490 1049 q 544 1084 531 1068 q 563 1122 557 1100 q 571 1168 569 1143 l 671 1168 q 657 1100 668 1133 q 622 1041 646 1067 q 558 1000 597 1015 q 461 985 519 985 z "},"К":{"ha":806,"x_min":125,"x_max":803,"o":"m 125 0 l 125 911 l 240 911 l 240 526 l 397 526 l 525 758 q 578 843 554 810 q 626 895 601 876 q 675 921 650 914 q 731 928 700 928 q 756 926 743 928 q 781 919 769 924 l 761 811 q 744 815 753 814 q 728 817 735 817 q 700 813 713 817 q 674 796 688 808 q 646 761 661 783 q 610 701 631 739 l 489 486 l 803 0 l 676 0 l 396 432 l 240 432 l 240 0 l 125 0 z "},"Л":{"ha":875,"x_min":0,"x_max":750,"o":"m 78 -17 q 38 -14 56 -17 q 0 -4 19 -11 l 24 103 q 63 94 44 94 q 97 102 81 94 q 128 135 113 110 q 159 210 144 161 q 190 339 174 258 q 243 621 218 482 q 294 911 268 760 l 750 911 l 750 0 l 635 0 l 635 814 l 385 814 q 342 568 363 688 q 299 326 322 449 q 258 156 279 222 q 210 51 236 89 q 151 -2 183 13 q 78 -17 119 -17 z "},"М":{"ha":1010,"x_min":125,"x_max":885,"o":"m 125 0 l 125 911 l 264 911 l 439 425 q 472 330 456 378 q 504 235 488 282 l 510 235 q 541 330 526 282 q 572 425 556 378 l 744 911 l 885 911 l 885 0 l 776 0 l 776 501 q 782 636 776 563 q 792 771 788 710 l 786 771 l 714 564 l 542 92 l 465 92 l 293 564 l 221 771 l 215 771 q 224 636 219 710 q 229 501 229 563 l 229 0 l 125 0 z "},"Н":{"ha":906,"x_min":125,"x_max":781,"o":"m 125 0 l 125 911 l 240 911 l 240 529 l 664 529 l 664 911 l 781 911 l 781 0 l 664 0 l 664 429 l 240 429 l 240 0 l 125 0 z "},"О":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 z "},"П":{"ha":896,"x_min":125,"x_max":771,"o":"m 125 0 l 125 911 l 771 911 l 771 0 l 656 0 l 656 814 l 240 814 l 240 0 l 125 0 z "},"Р":{"ha":786,"x_min":125,"x_max":726,"o":"m 125 0 l 125 911 l 385 911 q 524 897 461 911 q 632 852 588 883 q 701 769 676 821 q 726 643 726 718 q 702 518 726 571 q 633 431 678 465 q 527 378 589 396 q 390 361 465 361 l 240 361 l 240 0 l 125 0 m 240 456 l 376 456 q 553 501 496 456 q 611 643 611 546 q 551 780 611 742 q 371 818 490 818 l 240 818 l 240 456 z "},"С":{"ha":793,"x_min":72,"x_max":749,"o":"m 469 -17 q 311 15 383 -17 q 185 108 239 47 q 102 256 132 168 q 72 456 72 344 q 103 653 72 565 q 188 801 133 740 q 315 895 242 863 q 476 928 389 928 q 623 894 560 928 q 726 815 686 860 l 664 740 q 582 803 628 779 q 478 826 536 826 q 360 801 413 826 q 269 727 307 775 q 212 611 232 679 q 192 458 192 543 q 212 303 192 372 q 268 186 232 235 q 356 111 304 138 q 474 85 408 85 q 590 112 540 85 q 685 188 640 139 l 749 115 q 626 18 694 53 q 469 -17 558 -17 z "},"Т":{"ha":744,"x_min":39,"x_max":706,"o":"m 314 0 l 314 814 l 39 814 l 39 911 l 706 911 l 706 814 l 431 814 l 431 0 l 314 0 z "},"У":{"ha":714,"x_min":7,"x_max":714,"o":"m 189 -17 q 138 -13 158 -17 q 99 -3 118 -10 l 122 101 q 147 94 133 97 q 181 92 161 92 q 252 109 225 92 q 299 165 279 126 l 318 214 l 7 911 l 131 911 l 300 506 l 369 326 l 375 326 l 439 506 l 596 911 l 714 911 l 415 165 q 328 32 381 81 q 189 -17 276 -17 z "},"Ф":{"ha":1017,"x_min":65,"x_max":951,"o":"m 176 460 q 249 274 176 342 q 457 203 321 207 l 457 710 q 249 642 321 706 q 176 460 176 578 m 840 460 q 768 642 840 578 q 560 710 696 706 l 560 203 q 768 274 696 207 q 840 460 840 342 m 457 -17 l 457 114 q 168 210 271 121 q 65 460 65 299 q 168 706 65 619 q 457 799 271 793 l 457 928 l 560 928 l 560 799 q 849 706 746 793 q 951 460 951 619 q 849 210 951 299 q 560 114 746 121 l 560 -17 l 457 -17 z "},"Х":{"ha":713,"x_min":21,"x_max":692,"o":"m 21 0 l 286 471 l 39 911 l 167 911 l 290 678 q 324 616 308 646 q 361 546 340 586 l 367 546 q 401 616 386 586 q 432 678 415 646 l 553 911 l 675 911 l 426 465 l 692 0 l 564 0 l 431 246 q 394 315 413 279 q 353 392 375 350 l 347 392 q 310 315 328 350 q 275 246 292 279 l 143 0 l 21 0 z "},"Ц":{"ha":892,"x_min":125,"x_max":856,"o":"m 125 0 l 125 911 l 240 911 l 240 99 l 639 99 l 639 911 l 754 911 l 754 99 l 856 99 l 856 29 l 843 -261 l 742 -261 l 742 0 l 125 0 z "},"Ч":{"ha":831,"x_min":93,"x_max":706,"o":"m 590 0 l 590 408 q 517 398 557 401 q 424 394 478 394 q 285 410 346 394 q 181 460 224 425 q 116 553 139 496 q 93 692 93 610 l 93 911 l 207 911 l 207 692 q 222 596 207 635 q 265 533 236 557 q 337 500 294 510 q 435 490 379 490 q 524 494 486 490 q 590 504 563 497 l 590 911 l 706 911 l 706 0 l 590 0 z "},"Ш":{"ha":1201,"x_min":125,"x_max":1076,"o":"m 125 0 l 125 911 l 239 911 l 239 99 l 544 99 l 544 911 l 657 911 l 657 99 l 963 99 l 963 911 l 1076 911 l 1076 0 l 125 0 z "},"Щ":{"ha":1214,"x_min":125,"x_max":1178,"o":"m 1064 -261 l 1064 0 l 125 0 l 125 911 l 239 911 l 239 99 l 544 99 l 544 911 l 657 911 l 657 99 l 963 99 l 963 911 l 1076 911 l 1076 99 l 1178 99 l 1178 29 l 1165 -261 l 1064 -261 z "},"Ъ":{"ha":1000,"x_min":39,"x_max":939,"o":"m 331 0 l 331 814 l 39 814 l 39 911 l 447 911 l 447 538 l 597 538 q 732 522 669 538 q 840 476 794 507 q 913 396 886 444 q 939 281 939 347 q 915 154 939 207 q 848 67 892 101 q 742 17 804 33 q 606 0 681 0 l 331 0 m 447 94 l 592 94 q 766 138 707 94 q 825 278 825 181 q 763 403 825 361 q 582 444 701 444 l 447 444 l 447 94 z "},"Ы":{"ha":1108,"x_min":125,"x_max":983,"o":"m 125 0 l 125 911 l 240 911 l 240 538 l 382 538 q 519 523 457 538 q 625 477 581 508 q 694 397 669 446 q 718 281 718 349 q 694 154 718 207 q 627 67 671 101 q 522 17 583 33 q 383 0 460 0 l 125 0 m 240 94 l 369 94 q 544 138 485 94 q 604 278 604 181 q 544 405 604 365 q 365 444 485 444 l 240 444 l 240 94 m 868 0 l 868 911 l 983 911 l 983 0 l 868 0 z "},"Ь":{"ha":806,"x_min":125,"x_max":744,"o":"m 125 0 l 125 911 l 240 911 l 240 538 l 408 538 q 545 523 483 538 q 651 477 607 508 q 720 397 696 446 q 744 281 744 349 q 721 154 744 207 q 653 67 697 101 q 548 17 610 33 q 410 0 486 0 l 125 0 m 240 94 l 394 94 q 571 138 511 94 q 631 278 631 181 q 571 405 631 365 q 392 444 511 444 l 240 444 l 240 94 z "},"Э":{"ha":793,"x_min":44,"x_max":721,"o":"m 338 -17 q 174 18 244 -17 q 44 115 103 53 l 108 188 q 209 112 154 139 q 335 85 264 85 q 526 170 456 85 q 604 429 597 256 l 222 429 l 222 528 l 603 528 q 522 750 590 674 q 333 826 453 826 q 221 803 272 826 q 129 740 169 781 l 65 815 q 181 894 110 860 q 338 928 253 928 q 494 897 424 928 q 615 807 565 867 q 693 659 665 747 q 721 456 721 571 q 692 251 721 339 q 613 103 664 163 q 491 14 561 44 q 338 -17 421 -17 z "},"Ю":{"ha":1261,"x_min":125,"x_max":1189,"o":"m 814 -17 q 667 15 733 -17 q 552 103 600 46 q 476 244 504 161 q 443 429 447 326 l 240 429 l 240 0 l 125 0 l 125 911 l 240 911 l 240 529 l 446 529 q 484 697 454 622 q 561 822 514 771 q 672 901 608 874 q 814 928 736 928 q 967 895 897 928 q 1085 802 1036 863 q 1162 655 1135 742 q 1189 460 1189 568 q 1162 262 1189 350 q 1085 112 1135 174 q 967 17 1036 50 q 814 -17 897 -17 m 814 85 q 921 111 874 85 q 1001 187 968 138 q 1052 305 1035 236 q 1069 460 1069 374 q 1052 613 1069 544 q 1001 728 1035 681 q 921 801 968 775 q 814 826 874 826 q 708 801 756 826 q 628 728 661 775 q 577 613 594 681 q 560 460 560 544 q 577 305 560 374 q 628 187 594 236 q 708 111 661 138 q 814 85 756 85 z "},"Я":{"ha":808,"x_min":31,"x_max":683,"o":"m 568 0 l 568 385 l 400 385 l 164 0 l 31 0 l 285 397 q 137 483 194 421 q 79 656 79 546 q 103 775 79 726 q 169 854 126 824 q 270 898 211 885 q 399 911 329 911 l 683 911 l 683 0 l 568 0 m 415 479 l 568 479 l 568 818 l 415 818 q 251 782 308 818 q 194 656 194 746 q 251 523 194 567 q 415 479 308 479 z "},"Ѐ":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 418 968 l 207 1128 l 272 1204 l 469 1026 l 418 968 z "},"Ё":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 251 993 q 203 1013 222 993 q 183 1061 183 1032 q 203 1110 183 1092 q 251 1129 222 1129 q 301 1110 282 1129 q 319 1061 319 1092 q 301 1013 319 1032 q 251 993 282 993 m 538 993 q 488 1013 507 993 q 469 1061 469 1032 q 488 1110 469 1092 q 538 1129 507 1129 q 586 1110 567 1129 q 606 1061 606 1092 q 586 1013 606 1032 q 538 993 567 993 z "},"Ђ":{"ha":954,"x_min":39,"x_max":886,"o":"m 636 -17 q 588 -12 613 -17 q 547 -3 563 -8 l 568 90 q 593 83 578 86 q 622 79 608 79 q 674 89 647 79 q 722 120 700 99 q 757 177 743 142 q 771 265 771 213 q 713 415 771 368 q 547 461 654 461 q 469 458 507 461 q 403 447 432 454 l 403 0 l 286 0 l 286 814 l 39 814 l 39 911 l 721 911 l 721 814 l 403 814 l 403 543 q 476 553 436 550 q 563 557 515 557 q 691 540 632 557 q 794 489 750 524 q 862 399 838 454 q 886 267 886 343 q 865 133 886 188 q 809 46 844 79 q 728 -2 774 13 q 636 -17 683 -17 z "},"Ѓ":{"ha":692,"x_min":125,"x_max":650,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 0 l 125 0 m 379 968 l 328 1026 l 525 1204 l 590 1128 l 379 968 z "},"Є":{"ha":793,"x_min":72,"x_max":749,"o":"m 469 -17 q 309 14 382 -17 q 183 103 236 44 q 101 251 131 163 q 72 456 72 339 q 102 659 72 571 q 185 807 132 747 q 313 897 239 867 q 475 928 386 928 q 622 894 558 928 q 726 815 686 860 l 664 740 q 581 803 628 779 q 476 826 535 826 q 279 750 354 826 q 189 528 204 674 l 571 528 l 571 429 l 188 429 q 269 170 194 256 q 474 85 343 85 q 590 112 540 85 q 685 188 640 139 l 749 115 q 626 18 694 53 q 469 -17 558 -17 z "},"Ѕ":{"ha":742,"x_min":58,"x_max":688,"o":"m 378 -17 q 200 19 282 -17 q 58 118 118 56 l 128 199 q 242 116 176 147 q 379 85 308 85 q 519 126 469 85 q 569 233 569 167 q 558 292 569 268 q 526 334 546 317 q 478 365 506 351 q 418 394 450 379 l 288 451 q 222 485 256 465 q 163 532 189 504 q 119 598 136 560 q 103 686 103 636 q 124 782 103 738 q 184 859 146 826 q 274 910 222 892 q 389 928 326 928 q 540 897 471 928 q 658 815 610 865 l 596 740 q 503 803 554 781 q 389 826 453 826 q 266 791 313 826 q 219 693 219 756 q 233 637 219 660 q 268 597 246 614 q 317 566 290 579 q 371 542 343 553 l 500 486 q 574 448 539 469 q 633 398 608 426 q 673 331 658 369 q 688 243 688 293 q 666 142 688 189 q 604 59 644 94 q 507 3 564 24 q 378 -17 450 -17 z "},"І":{"ha":365,"x_min":125,"x_max":240,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 z "},"Ї":{"ha":365,"x_min":-29,"x_max":393,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 m 39 993 q -10 1013 10 993 q -29 1061 -29 1032 q -10 1110 -29 1092 q 39 1129 10 1129 q 88 1110 69 1129 q 107 1061 107 1092 q 88 1013 107 1032 q 39 993 69 993 m 325 993 q 276 1013 294 993 q 257 1061 257 1032 q 276 1110 257 1092 q 325 1129 294 1129 q 374 1110 354 1129 q 393 1061 393 1092 q 374 1013 393 1032 q 325 993 354 993 z "},"Ј":{"ha":667,"x_min":43,"x_max":546,"o":"m 294 -17 q 43 129 124 -17 l 126 188 q 196 109 157 133 q 283 85 235 85 q 393 130 357 85 q 429 279 429 175 l 429 911 l 546 911 l 546 268 q 531 158 546 210 q 487 67 517 106 q 409 6 457 28 q 294 -17 361 -17 z "},"Љ":{"ha":1254,"x_min":8,"x_max":1193,"o":"m 86 -17 q 46 -14 64 -17 q 8 -4 28 -11 l 32 103 q 71 94 50 94 q 105 102 89 94 q 136 135 121 110 q 167 210 151 161 q 199 339 182 258 q 251 621 226 482 q 303 911 276 760 l 731 911 l 731 538 l 857 538 q 994 523 932 538 q 1100 477 1056 508 q 1169 397 1144 446 q 1193 281 1193 349 q 1169 154 1193 207 q 1102 67 1146 101 q 997 17 1058 33 q 858 0 935 0 l 615 0 l 615 814 l 393 814 q 351 567 371 688 q 308 325 331 447 q 267 154 289 221 q 218 49 244 88 q 160 -3 192 11 q 86 -17 128 -17 m 731 94 l 843 94 q 1019 138 960 94 q 1079 278 1079 181 q 1019 405 1079 365 q 840 444 960 444 l 731 444 l 731 94 z "},"Њ":{"ha":1290,"x_min":125,"x_max":1229,"o":"m 125 0 l 125 911 l 240 911 l 240 529 l 650 529 l 650 911 l 767 911 l 767 538 l 893 538 q 1030 523 968 538 q 1136 477 1092 508 q 1205 397 1181 446 q 1229 281 1229 349 q 1206 154 1229 207 q 1138 67 1182 101 q 1033 17 1094 33 q 894 0 971 0 l 650 0 l 650 429 l 240 429 l 240 0 l 125 0 m 767 94 l 879 94 q 1056 138 996 94 q 1115 278 1115 181 q 1056 405 1115 365 q 876 444 996 444 l 767 444 l 767 94 z "},"Ћ":{"ha":967,"x_min":39,"x_max":874,"o":"m 286 0 l 286 814 l 39 814 l 39 911 l 721 911 l 721 814 l 403 814 l 403 543 q 476 553 436 550 q 557 557 517 557 q 690 541 631 557 q 790 490 749 525 q 852 401 831 456 q 874 271 874 347 l 874 0 l 760 0 l 760 271 q 707 417 760 374 q 546 461 654 461 q 471 458 510 461 q 403 447 432 454 l 403 0 l 286 0 z "},"Ќ":{"ha":806,"x_min":125,"x_max":803,"o":"m 125 0 l 125 911 l 240 911 l 240 526 l 397 526 l 525 758 q 578 843 554 810 q 626 895 601 876 q 675 921 650 914 q 731 928 700 928 q 756 926 743 928 q 781 919 769 924 l 761 811 q 744 815 753 814 q 728 817 735 817 q 700 813 713 817 q 674 796 688 808 q 646 761 661 783 q 610 701 631 739 l 489 486 l 803 0 l 676 0 l 396 432 l 240 432 l 240 0 l 125 0 m 426 974 l 375 1032 l 572 1210 l 638 1133 l 426 974 z "},"Ѝ":{"ha":911,"x_min":125,"x_max":786,"o":"m 125 0 l 125 911 l 239 911 l 239 440 q 234 294 239 368 q 225 150 229 219 l 231 150 l 329 336 l 664 911 l 786 911 l 786 0 l 672 0 l 672 476 q 677 620 672 549 q 686 761 682 692 l 681 761 l 582 575 l 247 0 l 125 0 m 485 974 l 274 1133 l 339 1210 l 536 1032 l 485 974 z "},"Ў":{"ha":714,"x_min":7,"x_max":714,"o":"m 189 -17 q 138 -13 158 -17 q 99 -3 118 -10 l 122 101 q 147 94 133 97 q 181 92 161 92 q 252 109 225 92 q 299 165 279 126 l 318 214 l 7 911 l 131 911 l 300 506 l 369 326 l 375 326 l 439 506 l 596 911 l 714 911 l 415 165 q 328 32 381 81 q 189 -17 276 -17 m 357 979 q 260 994 299 979 q 197 1035 221 1010 q 160 1094 172 1061 q 147 1163 149 1128 l 247 1163 q 274 1078 249 1114 q 357 1043 299 1043 q 406 1053 386 1043 q 440 1078 426 1063 q 459 1116 453 1094 q 467 1163 465 1138 l 567 1163 q 553 1094 564 1128 q 517 1035 542 1061 q 454 994 493 1010 q 357 979 415 979 z "},"Џ":{"ha":896,"x_min":125,"x_max":771,"o":"m 125 0 l 125 911 l 240 911 l 240 99 l 656 99 l 656 911 l 771 911 l 771 0 l 511 0 l 500 -261 l 399 -261 l 399 0 l 125 0 z "},"Ѣ":{"ha":853,"x_min":39,"x_max":792,"o":"m 231 0 l 231 704 l 39 704 l 39 799 l 231 799 l 231 972 l 347 972 l 347 799 l 672 799 l 672 704 l 347 704 l 347 515 l 456 515 q 592 502 531 515 q 699 460 654 489 q 767 386 743 432 q 792 275 792 340 q 769 149 792 201 q 703 64 746 97 q 601 15 661 31 q 464 0 540 0 l 231 0 m 347 92 l 450 92 q 622 133 565 92 q 678 269 678 174 q 620 392 678 356 q 440 429 563 429 l 347 429 l 347 92 z "},"Ѳ":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 15 375 -17 q 181 108 232 47 q 101 257 129 168 q 72 460 72 346 q 101 660 72 574 q 181 807 129 747 q 303 897 232 867 q 461 928 375 928 q 619 897 547 928 q 742 807 690 867 q 823 660 794 747 q 851 460 851 572 q 823 257 851 346 q 742 108 794 168 q 619 15 690 47 q 461 -17 547 -17 m 461 831 q 275 752 347 831 q 189 526 203 674 l 733 526 q 647 752 719 674 q 461 831 575 831 m 461 81 q 656 171 582 81 q 736 432 729 261 l 186 432 q 267 171 193 261 q 461 81 340 81 z "},"Ѵ":{"ha":735,"x_min":0,"x_max":779,"o":"m 292 0 l 0 911 l 124 911 l 269 419 q 313 268 293 338 q 358 118 332 199 l 364 118 q 384 195 375 158 q 403 268 393 232 q 422 342 413 304 q 443 419 432 379 l 532 735 q 599 882 560 836 q 713 928 639 928 q 748 925 733 928 q 779 915 763 922 l 756 808 q 740 814 749 811 q 719 817 731 817 q 671 791 689 817 q 638 714 653 765 l 433 0 l 292 0 z "},"Ґ":{"ha":692,"x_min":125,"x_max":663,"o":"m 125 0 l 125 911 l 543 911 l 564 1150 l 663 1150 l 650 814 l 240 814 l 240 0 l 125 0 z "},"Ғ":{"ha":724,"x_min":46,"x_max":681,"o":"m 46 426 l 46 488 l 156 492 l 156 911 l 681 911 l 681 814 l 271 814 l 271 492 l 478 492 l 478 426 l 271 426 l 271 0 l 156 0 l 156 426 l 46 426 z "},"Җ":{"ha":1176,"x_min":8,"x_max":1140,"o":"m 1026 -261 l 1026 0 l 982 0 l 746 432 l 614 432 l 614 0 l 504 0 l 504 432 l 372 432 l 136 0 l 8 0 l 286 486 l 190 701 q 157 762 172 739 q 128 797 142 785 q 100 813 114 810 q 71 817 86 817 q 55 815 64 817 q 38 811 46 814 l 18 919 q 42 926 29 924 q 68 928 56 928 q 125 921 99 928 q 176 895 151 914 q 225 843 201 876 q 274 758 249 810 l 381 526 l 504 526 l 504 911 l 614 911 l 614 526 l 736 526 l 844 758 q 893 843 869 810 q 942 895 917 876 q 993 921 967 914 q 1050 928 1019 928 q 1076 926 1063 928 q 1100 919 1089 924 l 1081 811 q 1063 815 1071 814 q 1047 817 1054 817 q 1018 813 1032 817 q 990 797 1004 810 q 961 762 976 785 q 928 701 946 739 l 832 486 l 1053 99 l 1140 99 l 1140 29 l 1128 -261 l 1026 -261 z "},"Ҙ":{"ha":769,"x_min":58,"x_max":714,"o":"m 335 -261 l 335 -14 q 185 24 253 -7 q 58 117 118 54 l 124 196 q 244 110 183 135 q 385 85 306 85 q 468 97 429 85 q 536 131 507 108 q 583 188 565 154 q 600 264 600 221 q 536 393 600 351 q 354 435 472 435 l 251 435 l 251 524 l 326 524 q 500 563 447 524 q 553 681 553 603 q 502 790 553 753 q 375 826 451 826 q 257 803 311 826 q 161 742 203 781 l 99 819 q 221 898 147 868 q 378 928 294 928 q 495 912 442 928 q 587 866 549 896 q 646 792 625 836 q 667 694 667 749 q 632 567 667 622 q 531 489 597 513 l 531 483 q 662 410 610 468 q 714 258 714 353 q 694 153 714 200 q 638 72 674 106 q 553 16 603 38 q 447 -12 504 -6 l 436 -261 l 335 -261 z "},"Қ":{"ha":872,"x_min":125,"x_max":836,"o":"m 722 -261 l 722 0 l 676 0 l 396 432 l 240 432 l 240 0 l 125 0 l 125 911 l 240 911 l 240 526 l 397 526 l 525 758 q 578 843 554 810 q 626 895 601 876 q 675 921 650 914 q 731 928 700 928 q 756 926 743 928 q 781 919 769 924 l 761 811 q 744 815 753 814 q 728 817 735 817 q 700 813 713 817 q 674 796 688 808 q 646 761 661 783 q 610 701 631 739 l 489 486 l 739 99 l 836 99 l 836 29 l 824 -261 l 722 -261 z "},"Ҡ":{"ha":994,"x_min":39,"x_max":992,"o":"m 314 0 l 314 814 l 39 814 l 39 911 l 431 911 l 431 526 l 588 526 l 715 758 q 767 843 743 810 q 815 895 792 876 q 865 921 839 914 q 921 928 890 928 q 947 926 933 928 q 971 919 960 924 l 951 811 q 933 815 942 814 q 918 817 925 817 q 890 813 903 817 q 864 796 878 808 q 835 761 850 783 q 799 701 819 739 l 679 486 l 992 0 l 867 0 l 586 432 l 431 432 l 431 0 l 314 0 z "},"Ң":{"ha":918,"x_min":125,"x_max":882,"o":"m 768 -261 l 768 0 l 664 0 l 664 429 l 240 429 l 240 0 l 125 0 l 125 911 l 240 911 l 240 529 l 664 529 l 664 911 l 781 911 l 781 99 l 882 99 l 882 29 l 869 -261 l 768 -261 z "},"Ҫ":{"ha":793,"x_min":72,"x_max":749,"o":"m 415 -261 l 415 -14 q 277 32 340 -4 q 169 128 214 68 q 98 270 124 188 q 72 456 72 353 q 103 653 72 565 q 188 801 133 740 q 315 895 242 863 q 476 928 389 928 q 623 894 560 928 q 726 815 686 860 l 664 740 q 582 803 628 779 q 478 826 536 826 q 360 801 413 826 q 269 727 307 775 q 212 611 232 679 q 192 458 192 543 q 212 303 192 372 q 268 186 232 235 q 356 111 304 138 q 474 85 408 85 q 590 112 540 85 q 685 188 640 139 l 749 115 q 650 31 704 63 q 528 -12 596 -1 l 517 -261 l 415 -261 z "},"Ү":{"ha":661,"x_min":-1,"x_max":663,"o":"m 272 0 l 272 353 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 389 353 l 389 0 l 272 0 z "},"Ұ":{"ha":661,"x_min":-1,"x_max":663,"o":"m 79 338 l 79 399 l 201 403 l 247 403 l -1 911 l 122 911 l 240 654 q 283 556 263 604 q 328 456 304 507 l 333 456 q 381 556 357 507 q 425 654 404 604 l 542 911 l 663 911 l 414 403 l 582 403 l 582 338 l 389 338 l 389 0 l 272 0 l 272 338 l 79 338 z "},"Ҳ":{"ha":765,"x_min":21,"x_max":731,"o":"m 618 -261 l 618 0 l 564 0 l 431 246 q 394 315 413 279 q 353 392 375 350 l 347 392 q 310 315 328 350 q 275 246 292 279 l 143 0 l 21 0 l 286 471 l 39 911 l 167 911 l 290 678 q 324 616 308 646 q 361 546 340 586 l 367 546 q 401 616 386 586 q 432 678 415 646 l 553 911 l 675 911 l 426 465 l 636 99 l 731 99 l 731 29 l 718 -261 l 618 -261 z "},"Ҷ":{"ha":843,"x_min":93,"x_max":807,"o":"m 696 -261 l 696 0 l 590 0 l 590 408 q 517 398 557 401 q 424 394 478 394 q 285 410 346 394 q 181 460 224 425 q 116 553 139 496 q 93 692 93 610 l 93 911 l 207 911 l 207 692 q 222 596 207 635 q 265 533 236 557 q 337 500 294 510 q 435 490 379 490 q 524 494 486 490 q 590 504 563 497 l 590 911 l 706 911 l 706 99 l 807 99 l 807 29 l 794 -261 l 696 -261 z "},"Һ":{"ha":831,"x_min":125,"x_max":738,"o":"m 125 0 l 125 911 l 240 911 l 240 553 q 313 563 274 558 q 406 567 353 567 q 545 551 483 567 q 649 501 607 536 q 715 408 692 465 q 738 269 738 351 l 738 0 l 624 0 l 624 269 q 609 365 624 326 q 565 428 594 404 q 493 461 536 451 q 394 471 450 471 q 306 467 344 471 q 240 457 268 463 l 240 0 l 125 0 z "},"Ӏ":{"ha":365,"x_min":125,"x_max":240,"o":"m 125 0 l 125 911 l 240 911 l 240 0 l 125 0 z "},"Ӂ":{"ha":1118,"x_min":8,"x_max":1108,"o":"m 8 0 l 286 486 l 190 701 q 157 762 172 739 q 128 797 142 785 q 100 813 114 810 q 71 817 86 817 q 55 815 64 817 q 38 811 46 814 l 18 919 q 42 926 29 924 q 68 928 56 928 q 125 921 99 928 q 176 895 151 914 q 225 843 201 876 q 274 758 249 810 l 381 526 l 504 526 l 504 911 l 614 911 l 614 526 l 736 526 l 844 758 q 893 843 869 810 q 942 895 917 876 q 993 921 967 914 q 1050 928 1019 928 q 1076 926 1063 928 q 1100 919 1089 924 l 1081 811 q 1063 815 1071 814 q 1047 817 1054 817 q 1018 813 1032 817 q 990 797 1004 810 q 961 762 976 785 q 928 701 946 739 l 832 486 l 1108 0 l 982 0 l 746 432 l 614 432 l 614 0 l 504 0 l 504 432 l 372 432 l 136 0 l 8 0 m 557 979 q 460 994 499 979 q 397 1035 421 1010 q 360 1094 372 1061 q 347 1163 349 1128 l 447 1163 q 474 1078 449 1114 q 557 1043 499 1043 q 606 1053 586 1043 q 640 1078 626 1063 q 659 1116 653 1094 q 667 1163 665 1138 l 767 1163 q 753 1094 764 1128 q 717 1035 742 1061 q 654 994 693 1010 q 557 979 615 979 z "},"Ӑ":{"ha":756,"x_min":4,"x_max":751,"o":"m 282 510 l 239 371 l 513 371 l 469 510 q 422 662 444 586 q 378 817 400 738 l 372 817 q 329 662 351 738 q 282 510 307 586 m 4 0 l 313 911 l 443 911 l 751 0 l 628 0 l 542 278 l 210 278 l 122 0 l 4 0 m 378 979 q 281 994 319 979 q 217 1035 242 1010 q 181 1094 193 1061 q 168 1163 169 1128 l 268 1163 q 294 1078 269 1114 q 378 1043 319 1043 q 427 1053 407 1043 q 460 1078 447 1063 q 480 1116 474 1094 q 488 1163 486 1138 l 588 1163 q 574 1094 585 1128 q 538 1035 563 1061 q 475 994 514 1010 q 378 979 436 979 z "},"Ӕ":{"ha":1142,"x_min":11,"x_max":1074,"o":"m 403 522 l 318 358 l 557 358 l 557 819 l 551 819 q 403 522 478 671 m 11 0 l 489 911 l 1060 911 l 1060 814 l 674 814 l 674 528 l 996 528 l 996 429 l 674 429 l 674 99 l 1074 99 l 1074 0 l 557 0 l 557 265 l 271 265 l 133 0 l 11 0 z "},"Ӗ":{"ha":732,"x_min":125,"x_max":664,"o":"m 125 0 l 125 911 l 650 911 l 650 814 l 240 814 l 240 528 l 586 528 l 586 429 l 240 429 l 240 99 l 664 99 l 664 0 l 125 0 m 394 979 q 297 994 336 979 q 234 1035 258 1010 q 198 1094 210 1061 q 185 1163 186 1128 l 285 1163 q 311 1078 286 1114 q 394 1043 336 1043 q 444 1053 424 1043 q 477 1078 464 1063 q 497 1116 490 1094 q 504 1163 503 1138 l 604 1163 q 590 1094 601 1128 q 555 1035 579 1061 q 492 994 531 1010 q 394 979 453 979 z "},"Ә":{"ha":914,"x_min":81,"x_max":842,"o":"m 454 -17 q 297 16 367 -17 q 180 110 228 49 q 106 258 132 171 q 81 451 81 344 q 81 467 81 458 q 83 486 82 476 l 728 486 q 651 743 721 654 q 451 832 582 832 q 326 807 382 832 q 229 742 269 782 l 172 821 q 294 898 221 868 q 460 928 367 928 q 740 808 639 928 q 842 458 842 688 q 815 256 842 344 q 737 108 788 168 q 615 15 686 47 q 454 -17 543 -17 m 454 79 q 642 160 571 79 q 725 397 714 242 l 199 397 q 274 163 206 246 q 454 79 343 79 z "},"Ӣ":{"ha":911,"x_min":125,"x_max":786,"o":"m 125 0 l 125 911 l 239 911 l 239 440 q 234 294 239 368 q 225 150 229 219 l 231 150 l 329 336 l 664 911 l 786 911 l 786 0 l 672 0 l 672 476 q 677 620 672 549 q 686 761 682 692 l 681 761 l 582 575 l 247 0 l 125 0 m 275 1026 l 275 1106 l 647 1106 l 647 1026 l 275 1026 z "},"Ӧ":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 17 375 -17 q 181 112 232 50 q 101 262 129 174 q 72 460 72 350 q 101 656 72 569 q 181 803 129 743 q 303 896 232 864 q 461 928 375 928 q 619 895 547 928 q 742 802 690 863 q 823 655 794 742 q 851 460 851 568 q 823 262 851 350 q 742 112 794 174 q 619 17 690 50 q 461 -17 547 -17 m 461 85 q 572 111 522 85 q 656 187 621 138 q 711 305 692 236 q 731 460 731 374 q 711 613 731 544 q 656 728 692 681 q 572 801 621 775 q 461 826 522 826 q 351 801 400 826 q 266 728 301 775 q 211 613 231 681 q 192 460 192 544 q 211 305 192 374 q 266 187 231 236 q 351 111 301 138 q 461 85 400 85 m 318 993 q 269 1013 289 993 q 250 1061 250 1032 q 269 1110 250 1092 q 318 1129 289 1129 q 367 1110 349 1129 q 386 1061 386 1092 q 367 1013 386 1032 q 318 993 349 993 m 604 993 q 555 1013 574 993 q 536 1061 536 1032 q 555 1110 536 1092 q 604 1129 574 1129 q 653 1110 633 1129 q 672 1061 672 1092 q 653 1013 672 1032 q 604 993 633 993 z "},"Ө":{"ha":922,"x_min":72,"x_max":851,"o":"m 461 -17 q 303 15 375 -17 q 181 108 232 47 q 101 257 129 168 q 72 460 72 346 q 101 660 72 574 q 181 807 129 747 q 303 897 232 867 q 461 928 375 928 q 619 897 547 928 q 742 807 690 867 q 823 660 794 747 q 851 460 851 572 q 823 257 851 346 q 742 108 794 168 q 619 15 690 47 q 461 -17 547 -17 m 461 831 q 275 752 347 831 q 189 526 203 674 l 733 526 q 647 752 719 674 q 461 831 575 831 m 461 81 q 656 171 582 81 q 736 432 729 261 l 186 432 q 267 171 193 261 q 461 81 340 81 z "},"Ӯ":{"ha":714,"x_min":7,"x_max":714,"o":"m 189 -17 q 138 -13 158 -17 q 99 -3 118 -10 l 122 101 q 147 94 133 97 q 181 92 161 92 q 252 109 225 92 q 299 165 279 126 l 318 214 l 7 911 l 131 911 l 300 506 l 369 326 l 375 326 l 439 506 l 596 911 l 714 911 l 415 165 q 328 32 381 81 q 189 -17 276 -17 m 164 1021 l 164 1100 l 536 1100 l 536 1021 l 164 1021 z "},"Ӳ":{"ha":714,"x_min":7,"x_max":714,"o":"m 189 -17 q 138 -13 158 -17 q 99 -3 118 -10 l 122 101 q 147 94 133 97 q 181 92 161 92 q 252 109 225 92 q 299 165 279 126 l 318 214 l 7 911 l 131 911 l 300 506 l 369 326 l 375 326 l 439 506 l 596 911 l 714 911 l 415 165 q 328 32 381 81 q 189 -17 276 -17 m 208 1006 l 336 1217 l 414 1172 l 268 976 l 208 1006 m 431 1006 l 558 1217 l 636 1172 l 490 976 l 431 1006 z "},"а":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 z "},"б":{"ha":756,"x_min":74,"x_max":689,"o":"m 392 -17 q 157 94 240 -17 q 74 410 74 204 q 103 685 74 581 q 189 849 133 789 q 323 935 244 910 q 497 976 401 961 q 544 984 525 981 q 580 992 564 988 q 609 1001 596 996 q 638 1014 622 1007 l 660 910 q 598 883 632 892 q 521 867 564 874 q 380 840 439 854 q 281 794 321 826 q 219 701 242 761 q 189 538 197 642 q 294 622 233 593 q 418 650 354 650 q 528 628 478 650 q 613 566 578 607 q 669 467 649 525 q 689 335 689 408 q 665 189 689 254 q 601 78 642 124 q 507 8 561 32 q 392 -17 453 -17 m 392 78 q 463 97 431 78 q 520 149 496 115 q 558 231 544 183 q 571 335 571 278 q 524 501 571 439 q 389 563 476 563 q 288 536 340 563 q 183 440 235 510 l 183 388 q 235 159 183 240 q 392 78 288 78 z "},"в":{"ha":706,"x_min":114,"x_max":651,"o":"m 114 0 l 114 675 l 374 675 q 475 665 429 675 q 553 635 521 656 q 604 583 586 615 q 622 504 622 550 q 592 411 622 447 q 510 360 563 375 l 510 356 q 565 336 539 349 q 610 304 590 324 q 640 257 629 285 q 651 193 651 229 q 631 107 651 143 q 576 47 611 71 q 492 11 540 22 q 385 0 443 0 l 114 0 m 226 392 l 354 392 q 475 419 439 392 q 511 493 511 446 q 476 567 511 540 q 363 593 442 593 l 226 593 l 226 392 m 226 82 l 372 82 q 497 113 456 82 q 538 200 538 143 q 494 281 538 251 q 365 310 451 310 l 226 310 l 226 82 z "},"г":{"ha":571,"x_min":114,"x_max":535,"o":"m 114 0 l 114 675 l 535 675 l 535 582 l 228 582 l 228 0 l 114 0 z "},"д":{"ha":739,"x_min":26,"x_max":708,"o":"m 138 0 l 138 -239 l 39 -239 l 26 21 l 26 93 l 60 93 q 87 116 74 101 q 111 161 100 131 q 133 243 122 192 q 154 376 144 294 l 190 675 l 610 675 l 610 93 l 708 93 l 708 21 l 697 -239 l 599 -239 l 599 0 l 138 0 m 254 354 q 224 192 243 254 q 182 93 206 129 l 496 93 l 496 582 l 281 582 l 254 354 z "},"е":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 z "},"ж":{"ha":946,"x_min":18,"x_max":928,"o":"m 18 0 l 231 356 l 176 489 q 130 564 153 547 q 79 581 107 581 q 68 581 72 581 q 57 578 64 581 l 36 685 q 76 692 54 692 q 175 662 132 692 q 254 547 218 632 l 318 397 l 422 397 l 422 675 l 524 675 l 524 397 l 628 397 l 692 547 q 771 662 728 632 q 869 692 814 692 q 908 685 892 692 l 889 578 q 878 581 882 581 q 867 581 874 581 q 815 564 839 581 q 768 489 792 547 l 715 356 l 928 0 l 804 0 l 635 304 l 524 304 l 524 0 l 422 0 l 422 304 l 311 304 l 142 0 l 18 0 z "},"з":{"ha":633,"x_min":51,"x_max":579,"o":"m 307 -17 q 174 2 236 -17 q 51 69 111 21 l 100 143 q 197 90 147 104 q 297 75 246 75 q 363 83 332 75 q 416 107 393 92 q 452 145 439 122 q 465 196 465 168 q 421 282 465 254 q 293 310 376 310 l 200 310 l 200 392 l 276 392 q 399 420 358 392 q 439 499 439 449 q 400 576 439 550 q 299 601 361 601 q 198 586 240 601 q 115 542 156 571 l 67 617 q 173 672 115 651 q 304 692 231 692 q 399 681 354 692 q 476 647 443 669 q 530 590 510 625 q 550 510 550 556 q 521 421 550 461 q 439 360 492 381 l 439 354 q 538 299 497 339 q 579 186 579 260 q 557 101 579 139 q 497 38 535 64 q 410 -3 460 11 q 307 -17 361 -17 z "},"и":{"ha":785,"x_min":114,"x_max":671,"o":"m 114 0 l 114 675 l 225 675 l 225 394 q 222 276 225 340 q 214 146 218 211 l 219 146 q 265 218 239 178 q 308 290 290 258 l 564 675 l 671 675 l 671 0 l 560 0 l 560 281 q 563 399 560 335 q 571 531 567 464 l 565 531 q 520 458 546 499 q 476 386 494 417 l 219 0 l 114 0 z "},"й":{"ha":785,"x_min":114,"x_max":671,"o":"m 114 0 l 114 675 l 225 675 l 225 394 q 222 276 225 340 q 214 146 218 211 l 219 146 q 265 218 239 178 q 308 290 290 258 l 564 675 l 671 675 l 671 0 l 560 0 l 560 281 q 563 399 560 335 q 571 531 567 464 l 565 531 q 520 458 546 499 q 476 386 494 417 l 219 0 l 114 0 m 396 796 q 297 814 338 796 q 231 862 257 832 q 192 930 204 892 q 178 1008 179 968 l 272 1008 q 280 952 274 979 q 301 906 286 925 q 338 874 315 886 q 396 863 361 863 q 453 874 431 863 q 491 906 476 886 q 512 952 506 925 q 519 1008 518 979 l 614 1008 q 599 930 611 968 q 561 862 588 892 q 494 814 535 832 q 396 796 454 796 z "},"к":{"ha":692,"x_min":114,"x_max":674,"o":"m 114 0 l 114 675 l 228 675 l 228 397 l 358 397 l 425 547 q 464 619 444 592 q 506 663 483 647 q 551 685 528 679 q 603 692 575 692 q 642 685 625 692 l 622 578 q 611 581 615 581 q 600 581 607 581 q 574 577 586 581 q 551 564 563 574 q 526 536 539 554 q 501 489 514 518 l 444 356 l 674 0 l 549 0 l 361 304 l 228 304 l 228 0 l 114 0 z "},"л":{"ha":738,"x_min":14,"x_max":624,"o":"m 75 -17 q 42 -14 56 -17 q 14 -6 29 -11 l 36 100 q 50 96 43 97 q 67 94 57 94 q 125 128 103 94 q 157 238 147 163 q 183 456 171 347 q 208 675 196 565 l 624 675 l 624 0 l 508 0 l 508 582 l 299 582 q 276 395 288 489 q 254 208 265 301 q 75 -17 225 -17 z "},"м":{"ha":879,"x_min":114,"x_max":765,"o":"m 114 0 l 114 675 l 246 675 l 378 358 q 408 276 393 317 q 439 194 424 235 l 444 194 q 476 276 460 235 q 506 358 492 317 l 635 675 l 765 675 l 765 0 l 661 0 l 661 303 q 663 355 661 325 q 666 416 664 385 q 670 478 668 447 q 675 536 672 510 l 669 536 q 638 455 654 496 q 607 376 622 414 l 479 64 l 403 64 l 272 376 q 241 455 257 414 q 210 536 225 496 l 204 536 q 208 478 206 510 q 212 416 210 447 q 215 355 214 385 q 217 303 217 325 l 217 0 l 114 0 z "},"н":{"ha":781,"x_min":114,"x_max":667,"o":"m 114 0 l 114 675 l 228 675 l 228 401 l 553 401 l 553 675 l 667 675 l 667 0 l 553 0 l 553 300 l 228 300 l 228 0 l 114 0 z "},"о":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 z "},"п":{"ha":768,"x_min":114,"x_max":654,"o":"m 114 0 l 114 675 l 654 675 l 654 0 l 540 0 l 540 582 l 228 582 l 228 0 l 114 0 z "},"р":{"ha":771,"x_min":114,"x_max":704,"o":"m 114 -285 l 114 675 l 208 675 l 218 597 l 222 597 q 323 664 268 636 q 438 692 378 692 q 553 667 503 692 q 636 598 603 643 q 687 490 669 553 q 704 347 704 426 q 681 194 704 261 q 617 79 657 126 q 524 8 576 32 q 413 -17 471 -17 q 319 4 365 -17 q 225 61 272 25 l 228 -57 l 228 -285 l 114 -285 m 393 79 q 470 98 435 79 q 531 151 506 117 q 572 235 557 185 q 586 347 586 285 q 576 449 586 403 q 545 527 567 494 q 490 578 524 560 q 408 596 456 596 q 322 572 365 596 q 228 504 278 549 l 228 150 q 317 95 274 111 q 393 79 360 79 z "},"с":{"ha":633,"x_min":64,"x_max":599,"o":"m 381 -17 q 256 7 314 -17 q 155 76 197 31 q 88 187 113 121 q 64 336 64 253 q 90 487 64 421 q 161 599 117 553 q 265 668 206 644 q 389 692 324 692 q 503 668 456 692 q 586 613 550 644 l 528 538 q 466 581 499 564 q 393 597 433 597 q 308 578 347 597 q 242 525 269 560 q 198 442 214 490 q 182 336 182 394 q 197 231 182 278 q 240 149 213 183 q 306 97 267 115 q 390 78 344 78 q 477 98 438 78 q 549 146 517 118 l 599 69 q 497 6 553 29 q 381 -17 442 -17 z "},"т":{"ha":639,"x_min":36,"x_max":603,"o":"m 263 0 l 263 582 l 36 582 l 36 675 l 603 675 l 603 582 l 376 582 l 376 0 l 263 0 z "},"у":{"ha":649,"x_min":17,"x_max":632,"o":"m 125 -290 q 82 -287 101 -290 q 46 -276 63 -283 l 68 -186 q 93 -192 79 -189 q 119 -196 107 -196 q 215 -155 178 -196 q 272 -51 251 -114 l 288 -1 l 17 675 l 135 675 l 272 301 q 305 208 288 257 q 338 111 322 158 l 343 111 q 372 207 358 157 q 400 301 386 257 l 521 675 l 632 675 l 378 -56 q 338 -149 360 -106 q 285 -223 315 -192 q 215 -272 254 -254 q 125 -290 176 -290 z "},"ф":{"ha":1019,"x_min":65,"x_max":954,"o":"m 454 -285 l 454 -68 l 457 33 q 395 -2 429 13 q 321 -17 361 -17 q 135 75 204 -17 q 65 336 65 167 q 86 484 65 418 q 142 596 107 550 q 224 667 178 642 q 321 692 269 692 q 394 678 361 692 q 457 643 426 664 l 454 743 l 454 989 l 565 989 l 565 743 l 563 640 q 633 678 594 664 q 708 692 671 692 q 814 667 768 692 q 891 598 860 643 q 938 490 922 553 q 954 347 954 426 q 933 194 954 261 q 877 79 913 126 q 794 8 842 32 q 696 -17 747 -17 q 630 -4 664 -17 q 563 32 596 8 l 565 -68 l 565 -285 l 454 -285 m 346 79 q 403 90 376 79 q 457 128 429 100 l 457 550 q 399 585 429 575 q 340 596 369 596 q 278 577 307 596 q 228 524 250 558 q 195 443 207 490 q 183 338 183 396 q 226 147 183 215 q 346 79 268 79 m 676 79 q 792 150 747 79 q 836 347 836 221 q 827 449 836 403 q 799 527 818 494 q 751 578 781 560 q 681 596 722 596 q 624 586 653 596 q 563 549 594 576 l 563 125 q 623 88 593 97 q 676 79 653 79 z "},"х":{"ha":619,"x_min":19,"x_max":600,"o":"m 19 0 l 240 353 l 36 675 l 160 675 l 250 526 q 282 470 265 499 q 317 414 299 442 l 322 414 q 353 470 338 442 q 383 526 368 499 l 465 675 l 585 675 l 381 340 l 600 0 l 476 0 l 378 157 q 342 218 360 188 q 304 278 324 249 l 299 278 q 264 219 281 249 q 231 157 247 189 l 139 0 l 19 0 z "},"ц":{"ha":769,"x_min":114,"x_max":743,"o":"m 114 0 l 114 675 l 228 675 l 228 93 l 531 93 l 531 675 l 644 675 l 644 93 l 743 93 l 743 21 l 732 -239 l 633 -239 l 633 0 l 114 0 z "},"ч":{"ha":711,"x_min":82,"x_max":597,"o":"m 483 0 l 483 269 q 451 263 465 265 q 422 259 436 261 q 390 256 407 257 q 351 256 374 256 q 152 310 222 256 q 82 490 82 364 l 82 675 l 196 675 l 196 490 q 238 382 196 415 q 374 349 281 349 q 429 351 404 349 q 483 361 454 354 l 483 675 l 597 675 l 597 0 l 483 0 z "},"ш":{"ha":1040,"x_min":114,"x_max":926,"o":"m 114 0 l 114 675 l 228 675 l 228 93 l 465 93 l 465 675 l 575 675 l 575 93 l 814 93 l 814 675 l 926 675 l 926 0 l 114 0 z "},"щ":{"ha":1051,"x_min":114,"x_max":1025,"o":"m 915 -239 l 915 0 l 114 0 l 114 675 l 228 675 l 228 93 l 465 93 l 465 675 l 575 675 l 575 93 l 814 93 l 814 675 l 926 675 l 926 93 l 1025 93 l 1025 21 l 1014 -239 l 915 -239 z "},"ъ":{"ha":828,"x_min":36,"x_max":769,"o":"m 275 0 l 275 582 l 36 582 l 36 675 l 389 675 l 389 426 l 501 426 q 696 376 622 426 q 769 215 769 325 q 696 51 769 103 q 501 0 622 0 l 275 0 m 389 92 l 490 92 q 658 215 658 92 q 617 308 658 279 q 490 338 575 338 l 389 338 l 389 92 z "},"ы":{"ha":936,"x_min":114,"x_max":822,"o":"m 114 0 l 114 675 l 228 675 l 228 426 l 324 426 q 433 414 383 426 q 517 376 482 401 q 572 310 553 350 q 592 215 592 271 q 572 118 592 158 q 517 51 553 78 q 433 13 482 25 q 324 0 383 0 l 114 0 m 228 92 l 311 92 q 479 215 479 92 q 438 308 479 279 q 311 338 397 338 l 228 338 l 228 92 m 708 0 l 708 675 l 822 675 l 822 0 l 708 0 z "},"ь":{"ha":682,"x_min":114,"x_max":624,"o":"m 114 0 l 114 675 l 228 675 l 228 426 l 356 426 q 465 414 415 426 q 549 376 514 401 q 604 310 585 350 q 624 215 624 271 q 604 118 624 158 q 549 51 585 78 q 465 13 514 25 q 356 0 415 0 l 114 0 m 228 92 l 343 92 q 511 215 511 92 q 470 308 511 279 q 343 338 429 338 l 228 338 l 228 92 z "},"э":{"ha":633,"x_min":33,"x_max":569,"o":"m 254 -17 q 133 6 189 -17 q 33 69 76 29 l 81 139 q 153 93 113 111 q 244 75 194 75 q 395 133 338 75 q 460 310 453 192 l 161 310 l 161 392 l 457 392 q 390 549 444 497 q 254 601 335 601 q 167 584 204 601 q 101 542 131 567 l 47 611 q 134 667 82 643 q 261 692 186 692 q 380 670 324 692 q 478 605 436 649 q 545 494 521 561 q 569 336 569 426 q 546 181 569 247 q 480 72 522 115 q 380 6 438 28 q 254 -17 322 -17 z "},"ю":{"ha":1025,"x_min":114,"x_max":961,"o":"m 669 -17 q 558 4 610 -17 q 468 65 507 25 q 404 164 429 106 q 374 296 379 222 l 228 296 l 228 0 l 114 0 l 114 675 l 228 675 l 228 397 l 375 397 q 409 522 383 467 q 474 614 435 576 q 563 672 513 651 q 669 692 613 692 q 783 668 729 692 q 876 599 836 644 q 938 487 915 553 q 961 336 961 421 q 938 187 961 253 q 876 76 915 121 q 783 7 836 31 q 669 -17 729 -17 m 664 78 q 739 97 706 78 q 795 149 772 115 q 831 231 818 183 q 843 336 843 278 q 795 525 843 453 q 664 597 747 597 q 589 578 622 597 q 531 525 556 560 q 494 442 507 490 q 481 336 481 394 q 494 231 481 278 q 531 149 507 183 q 589 97 556 115 q 664 78 622 78 z "},"я":{"ha":714,"x_min":44,"x_max":600,"o":"m 486 0 l 486 267 l 361 267 l 360 267 l 174 0 l 44 0 l 250 282 q 140 348 185 301 q 96 475 96 394 q 116 569 96 531 q 172 631 136 607 q 256 665 207 654 q 361 675 304 675 l 600 675 l 600 0 l 486 0 m 381 350 l 486 350 l 486 586 l 381 586 q 256 559 301 586 q 211 472 211 532 q 256 381 211 413 q 381 350 301 350 z "},"ѐ":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 388 796 l 169 1008 l 250 1085 l 446 853 l 388 796 z "},"ё":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 235 815 q 185 835 204 815 q 165 885 165 856 q 185 934 165 914 q 235 954 204 954 q 283 934 264 954 q 303 885 303 914 q 283 835 303 856 q 235 815 264 815 m 501 815 q 453 835 472 815 q 433 885 433 856 q 453 934 433 914 q 501 954 472 954 q 551 934 532 954 q 571 885 571 914 q 551 835 571 856 q 501 815 532 815 z "},"ђ":{"ha":761,"x_min":11,"x_max":693,"o":"m 410 -301 q 362 -296 383 -301 q 325 -283 340 -290 l 347 -197 q 373 -205 358 -201 q 403 -208 388 -208 q 471 -189 439 -208 q 526 -121 503 -169 q 562 12 549 -72 q 575 225 575 96 q 565 374 575 314 q 533 470 554 433 q 480 522 511 507 q 407 538 449 538 q 319 513 360 538 q 228 438 278 489 l 228 0 l 114 0 l 114 793 l 11 793 l 11 853 l 114 860 l 114 989 l 228 989 l 228 860 l 481 860 l 481 793 l 228 793 l 228 664 l 222 529 q 322 606 269 575 q 443 638 375 638 q 629 542 565 638 q 693 238 693 446 q 674 -23 693 81 q 617 -188 654 -126 q 528 -276 581 -250 q 410 -301 475 -301 z "},"ѓ":{"ha":571,"x_min":114,"x_max":542,"o":"m 114 0 l 114 675 l 535 675 l 535 582 l 228 582 l 228 0 l 114 0 m 324 797 l 265 854 l 461 1086 l 542 1010 l 324 797 z "},"є":{"ha":633,"x_min":64,"x_max":599,"o":"m 381 -17 q 254 6 313 -17 q 153 72 196 28 q 88 181 111 115 q 64 336 64 247 q 90 492 64 425 q 160 603 115 560 q 263 669 204 647 q 388 692 322 692 q 502 668 454 692 q 586 613 550 644 l 532 540 q 467 584 501 567 q 388 601 432 601 q 247 549 304 601 q 176 392 190 496 l 490 392 l 490 310 l 174 310 q 238 133 181 192 q 390 75 294 75 q 480 94 439 75 q 553 142 521 114 l 599 69 q 497 6 553 29 q 381 -17 442 -17 z "},"ѕ":{"ha":582,"x_min":39,"x_max":538,"o":"m 290 -17 q 153 10 218 -17 q 39 76 88 36 l 96 153 q 187 94 140 117 q 294 72 233 72 q 394 103 361 72 q 428 178 428 133 q 414 224 428 204 q 378 258 400 243 q 329 283 357 272 q 274 306 301 294 q 201 334 238 318 q 137 373 165 350 q 90 426 108 396 q 72 500 72 457 q 88 576 72 540 q 134 637 104 611 q 207 677 164 663 q 304 692 250 692 q 422 669 368 692 q 514 615 475 647 l 460 543 q 388 586 425 569 q 306 603 350 603 q 212 574 242 603 q 182 506 182 544 q 194 465 182 482 q 228 434 207 447 q 276 410 249 421 q 332 389 303 400 q 405 360 368 375 q 471 322 442 344 q 519 265 500 299 q 538 185 538 232 q 522 107 538 143 q 474 43 506 71 q 397 -1 443 15 q 290 -17 350 -17 z "},"і":{"ha":342,"x_min":93,"x_max":251,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m 172 814 q 116 835 139 814 q 93 888 93 856 q 116 941 93 921 q 172 961 139 961 q 228 941 206 961 q 251 888 251 921 q 228 835 251 856 q 172 814 206 814 z "},"ї":{"ha":342,"x_min":-32,"x_max":374,"o":"m 114 0 l 114 675 l 228 675 l 228 0 l 114 0 m 38 815 q -12 835 7 815 q -32 885 -32 856 q -12 934 -32 914 q 38 954 7 954 q 86 934 67 954 q 106 885 106 914 q 86 835 106 856 q 38 815 67 815 m 304 815 q 256 835 275 815 q 236 885 236 856 q 256 934 236 914 q 304 954 275 954 q 354 934 335 954 q 374 885 374 914 q 354 835 374 856 q 304 815 335 815 z "},"ј":{"ha":343,"x_min":-56,"x_max":251,"o":"m 44 -301 q -12 -296 13 -301 q -56 -283 -37 -290 l -32 -197 q -3 -205 -19 -201 q 32 -208 14 -208 q 99 -174 82 -208 q 115 -76 115 -139 l 115 675 l 229 675 l 229 -76 q 188 -240 229 -179 q 44 -301 146 -301 m 174 814 q 117 835 140 814 q 94 888 94 856 q 117 941 94 921 q 174 961 140 961 q 228 941 206 961 q 251 888 251 921 q 228 835 251 856 q 174 814 206 814 z "},"љ":{"ha":1021,"x_min":17,"x_max":963,"o":"m 78 -17 q 44 -14 58 -17 q 17 -6 31 -11 l 38 100 q 51 96 44 97 q 68 94 58 94 q 126 127 100 94 q 164 238 151 160 q 187 451 179 342 q 200 675 194 560 l 606 675 l 606 426 l 694 426 q 803 414 754 426 q 888 376 853 401 q 943 310 924 350 q 963 215 963 271 q 943 118 963 158 q 888 51 924 78 q 803 13 853 25 q 694 0 754 0 l 490 0 l 490 582 l 300 582 q 286 390 293 489 q 263 192 279 292 q 196 34 244 85 q 78 -17 147 -17 m 606 92 l 682 92 q 851 215 851 92 q 810 308 851 279 q 682 338 768 338 l 606 338 l 606 92 z "},"њ":{"ha":1053,"x_min":114,"x_max":996,"o":"m 114 0 l 114 675 l 228 675 l 228 401 l 524 401 l 524 675 l 638 675 l 638 426 l 726 426 q 922 376 847 426 q 996 215 996 325 q 922 51 996 103 q 726 0 847 0 l 524 0 l 524 300 l 228 300 l 228 0 l 114 0 m 638 92 l 715 92 q 883 215 883 92 q 842 308 883 279 q 715 338 801 338 l 638 338 l 638 92 z "},"ћ":{"ha":756,"x_min":11,"x_max":654,"o":"m 114 0 l 114 793 l 11 793 l 11 853 l 114 860 l 114 989 l 228 989 l 228 860 l 481 860 l 481 793 l 228 793 l 228 664 l 224 525 q 325 604 272 571 q 449 638 378 638 q 605 571 556 638 q 654 374 654 504 l 654 0 l 540 0 l 540 358 q 510 496 540 454 q 413 538 479 538 q 319 512 360 538 q 228 435 279 486 l 228 0 l 114 0 z "},"ќ":{"ha":692,"x_min":114,"x_max":674,"o":"m 114 0 l 114 675 l 228 675 l 228 397 l 358 397 l 425 547 q 464 619 444 592 q 506 663 483 647 q 551 685 528 679 q 603 692 575 692 q 642 685 625 692 l 622 578 q 611 581 615 581 q 600 581 607 581 q 574 577 586 581 q 551 564 563 574 q 526 536 539 554 q 501 489 514 518 l 444 356 l 674 0 l 549 0 l 361 304 l 228 304 l 228 0 l 114 0 m 365 797 l 307 854 l 503 1086 l 583 1010 l 365 797 z "},"ѝ":{"ha":785,"x_min":114,"x_max":671,"o":"m 114 0 l 114 675 l 225 675 l 225 394 q 222 276 225 340 q 214 146 218 211 l 219 146 q 265 218 239 178 q 308 290 290 258 l 564 675 l 671 675 l 671 0 l 560 0 l 560 281 q 563 399 560 335 q 571 531 567 464 l 565 531 q 520 458 546 499 q 476 386 494 417 l 219 0 l 114 0 m 415 797 l 197 1010 l 278 1086 l 474 854 l 415 797 z "},"ў":{"ha":649,"x_min":17,"x_max":632,"o":"m 125 -290 q 82 -287 101 -290 q 46 -276 63 -283 l 68 -186 q 93 -192 79 -189 q 119 -196 107 -196 q 215 -155 178 -196 q 272 -51 251 -114 l 288 -1 l 17 675 l 135 675 l 272 301 q 305 208 288 257 q 338 111 322 158 l 343 111 q 372 207 358 157 q 400 301 386 257 l 521 675 l 632 675 l 378 -56 q 338 -149 360 -106 q 285 -223 315 -192 q 215 -272 254 -254 q 125 -290 176 -290 m 336 794 q 238 813 278 794 q 171 860 197 831 q 132 928 144 890 q 118 1007 119 967 l 213 1007 q 220 951 214 978 q 241 904 226 924 q 278 873 256 885 q 336 861 301 861 q 394 873 371 861 q 431 904 417 885 q 452 951 446 924 q 460 1007 458 978 l 554 1007 q 540 928 551 967 q 501 860 528 890 q 435 813 475 831 q 336 794 394 794 z "},"џ":{"ha":775,"x_min":114,"x_max":661,"o":"m 114 0 l 114 675 l 228 675 l 228 93 l 547 93 l 547 675 l 661 675 l 661 0 l 447 0 l 435 -239 l 338 -239 l 333 0 l 114 0 z "},"ѣ":{"ha":800,"x_min":36,"x_max":742,"o":"m 247 0 l 247 610 l 36 610 l 36 703 l 247 703 l 247 864 l 361 864 l 361 703 l 622 703 l 622 610 l 361 610 l 361 426 l 474 426 q 668 376 594 426 q 742 215 742 325 q 668 51 742 103 q 474 0 594 0 l 247 0 m 361 92 l 461 92 q 631 215 631 92 q 589 308 631 279 q 461 338 547 338 l 361 338 l 361 92 z "},"ѳ":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 257 6 314 -17 q 157 72 200 28 q 89 183 114 117 q 64 336 64 249 q 89 490 64 424 q 157 602 114 557 q 257 669 200 647 q 376 692 314 692 q 496 669 439 692 q 596 602 553 647 q 664 490 639 557 q 689 336 689 424 q 664 183 689 249 q 596 72 639 117 q 496 6 553 28 q 376 -17 439 -17 m 376 603 q 242 547 296 603 q 175 392 188 492 l 579 392 q 513 547 567 492 q 376 603 458 603 m 376 74 q 519 135 464 74 q 581 310 574 197 l 174 310 q 235 135 181 197 q 376 74 290 74 z "},"ѵ":{"ha":663,"x_min":17,"x_max":692,"o":"m 260 0 l 17 675 l 135 675 l 263 292 q 294 192 278 242 q 326 93 311 142 l 332 93 q 357 192 344 142 q 385 292 369 242 l 451 497 q 517 644 479 597 q 625 692 556 692 q 660 689 646 692 q 692 679 675 686 l 669 576 q 635 585 654 585 q 586 560 604 585 q 551 483 568 535 l 400 0 l 260 0 z "},"ґ":{"ha":578,"x_min":114,"x_max":554,"o":"m 114 0 l 114 675 l 439 675 l 461 914 l 554 914 l 542 582 l 228 582 l 228 0 l 114 0 z "},"ғ":{"ha":589,"x_min":42,"x_max":554,"o":"m 42 296 l 42 354 l 133 361 l 133 675 l 554 675 l 554 582 l 247 582 l 247 361 l 432 361 l 432 296 l 247 296 l 247 0 l 133 0 l 133 296 l 42 296 z "},"җ":{"ha":997,"x_min":18,"x_max":971,"o":"m 861 -239 l 861 0 l 804 0 l 635 304 l 524 304 l 524 0 l 422 0 l 422 304 l 311 304 l 142 0 l 18 0 l 231 356 l 176 489 q 130 564 153 547 q 79 581 107 581 q 68 581 72 581 q 57 578 64 581 l 36 685 q 76 692 54 692 q 175 662 132 692 q 254 547 218 632 l 318 397 l 422 397 l 422 675 l 524 675 l 524 397 l 628 397 l 692 547 q 771 662 728 632 q 869 692 814 692 q 908 685 892 692 l 889 578 q 878 581 882 581 q 867 581 874 581 q 815 564 839 581 q 768 489 792 547 l 715 356 l 872 93 l 971 93 l 971 21 l 960 -239 l 861 -239 z "},"ҙ":{"ha":633,"x_min":51,"x_max":579,"o":"m 258 -239 l 253 -14 q 150 10 200 -8 q 51 69 100 29 l 100 143 q 197 90 147 104 q 297 75 246 75 q 363 83 332 75 q 416 107 393 92 q 452 145 439 122 q 465 196 465 168 q 421 282 465 254 q 293 310 376 310 l 200 310 l 200 392 l 276 392 q 399 420 358 392 q 439 499 439 449 q 400 576 439 550 q 299 601 361 601 q 198 586 240 601 q 115 542 156 571 l 67 617 q 173 672 115 651 q 304 692 231 692 q 399 681 354 692 q 476 647 443 669 q 530 590 510 625 q 550 510 550 556 q 521 421 550 461 q 439 360 492 381 l 439 354 q 538 299 497 339 q 579 186 579 260 q 563 112 579 146 q 517 53 546 78 q 449 11 488 28 q 365 -12 410 -6 l 353 -239 l 258 -239 z "},"қ":{"ha":744,"x_min":114,"x_max":718,"o":"m 608 -239 l 608 0 l 549 0 l 361 304 l 228 304 l 228 0 l 114 0 l 114 675 l 228 675 l 228 397 l 358 397 l 425 547 q 464 619 444 592 q 506 663 483 647 q 551 685 528 679 q 603 692 575 692 q 642 685 625 692 l 622 578 q 611 581 615 581 q 600 581 607 581 q 574 577 586 581 q 551 564 563 574 q 526 536 539 554 q 501 489 514 518 l 444 356 l 614 93 l 718 93 l 718 21 l 706 -239 l 608 -239 z "},"ҡ":{"ha":853,"x_min":36,"x_max":835,"o":"m 275 0 l 275 582 l 36 582 l 36 675 l 389 675 l 389 397 l 519 397 l 586 547 q 625 619 606 592 q 666 663 644 647 q 711 685 688 679 q 763 692 735 692 q 803 685 785 692 l 782 578 q 771 581 775 581 q 760 581 767 581 q 735 577 747 581 q 711 564 722 574 q 688 536 700 554 q 663 489 675 518 l 606 354 l 835 0 l 708 0 l 521 304 l 389 304 l 389 0 l 275 0 z "},"ң":{"ha":792,"x_min":115,"x_max":765,"o":"m 654 -239 l 654 0 l 554 0 l 554 300 l 229 300 l 229 0 l 115 0 l 115 675 l 229 675 l 229 401 l 554 401 l 554 675 l 668 675 l 668 93 l 765 93 l 765 21 l 753 -239 l 654 -239 z "},"ҫ":{"ha":633,"x_min":64,"x_max":599,"o":"m 325 -239 l 319 -11 q 217 26 264 -1 q 135 99 169 54 q 83 203 101 143 q 64 336 64 263 q 90 487 64 421 q 161 599 117 553 q 265 668 206 644 q 389 692 324 692 q 503 668 456 692 q 586 613 550 644 l 528 538 q 466 581 499 564 q 393 597 433 597 q 308 578 347 597 q 242 525 269 560 q 198 442 214 490 q 182 336 182 394 q 197 231 182 278 q 240 149 213 183 q 306 97 267 115 q 390 78 344 78 q 477 98 438 78 q 549 146 517 118 l 599 69 q 432 -12 525 4 l 419 -239 l 325 -239 z "},"ү":{"ha":649,"x_min":17,"x_max":632,"o":"m 271 -285 l 271 0 l 17 675 l 135 675 l 261 307 q 293 208 276 257 q 325 111 310 158 l 331 111 q 362 208 346 158 q 393 307 378 257 l 519 675 l 632 675 l 385 0 l 385 -285 l 271 -285 z "},"ұ":{"ha":649,"x_min":17,"x_max":632,"o":"m 271 -285 l 271 0 l 65 0 l 65 58 l 174 65 l 246 65 l 17 675 l 135 675 l 261 307 q 293 208 276 257 q 325 111 310 158 l 331 111 q 362 208 346 158 q 393 307 378 257 l 519 675 l 632 675 l 408 65 l 582 65 l 582 0 l 385 0 l 385 -285 l 271 -285 z "},"ҳ":{"ha":669,"x_min":19,"x_max":642,"o":"m 533 -239 l 533 0 l 476 0 l 378 157 q 342 218 360 188 q 304 278 324 249 l 299 278 q 264 219 281 249 q 231 157 247 189 l 139 0 l 19 0 l 240 353 l 36 675 l 160 675 l 250 526 q 282 470 265 499 q 317 414 299 442 l 322 414 q 353 470 338 442 q 383 526 368 499 l 465 675 l 585 675 l 381 340 l 540 93 l 642 93 l 642 21 l 631 -239 l 533 -239 z "},"ҷ":{"ha":722,"x_min":82,"x_max":696,"o":"m 586 -239 l 586 0 l 483 0 l 483 269 q 451 263 465 265 q 422 259 436 261 q 390 256 407 257 q 351 256 374 256 q 152 310 222 256 q 82 490 82 364 l 82 675 l 196 675 l 196 490 q 238 382 196 415 q 374 349 281 349 q 429 351 404 349 q 483 361 454 354 l 483 675 l 597 675 l 597 93 l 696 93 l 696 21 l 683 -239 l 586 -239 z "},"һ":{"ha":756,"x_min":114,"x_max":654,"o":"m 114 0 l 114 989 l 228 989 l 228 719 l 224 581 q 325 659 272 626 q 449 692 378 692 q 605 625 556 692 q 654 428 654 558 l 654 0 l 540 0 l 540 413 q 510 551 540 508 q 413 593 479 593 q 319 567 360 593 q 228 489 279 540 l 228 0 l 114 0 z "},"ӂ":{"ha":946,"x_min":18,"x_max":928,"o":"m 18 0 l 231 356 l 176 489 q 130 564 153 547 q 79 581 107 581 q 68 581 72 581 q 57 578 64 581 l 36 685 q 76 692 54 692 q 175 662 132 692 q 254 547 218 632 l 318 397 l 422 397 l 422 675 l 524 675 l 524 397 l 628 397 l 692 547 q 771 662 728 632 q 869 692 814 692 q 908 685 892 692 l 889 578 q 878 581 882 581 q 867 581 874 581 q 815 564 839 581 q 768 489 792 547 l 715 356 l 928 0 l 804 0 l 635 304 l 524 304 l 524 0 l 422 0 l 422 304 l 311 304 l 142 0 l 18 0 m 474 794 q 375 813 415 794 q 308 860 335 831 q 269 928 282 890 q 256 1007 257 967 l 350 1007 q 358 951 351 978 q 378 904 364 924 q 416 873 393 885 q 474 861 439 861 q 531 873 508 861 q 569 904 554 885 q 590 951 583 924 q 597 1007 596 978 l 692 1007 q 677 928 689 967 q 639 860 665 890 q 572 813 613 831 q 474 794 532 794 z "},"ӏ":{"ha":354,"x_min":114,"x_max":300,"o":"m 235 -17 q 142 22 169 -17 q 114 136 114 61 l 114 989 l 228 989 l 228 128 q 238 89 228 100 q 260 78 247 78 q 270 78 265 78 q 285 81 275 78 l 300 -6 q 274 -14 289 -11 q 235 -17 258 -17 z "},"ӑ":{"ha":700,"x_min":72,"x_max":601,"o":"m 269 -17 q 128 33 185 -17 q 72 175 72 83 q 171 345 72 286 q 486 428 269 404 q 480 490 486 460 q 458 544 474 521 q 416 583 443 568 q 347 597 389 597 q 238 575 289 597 q 146 525 186 553 l 101 604 q 217 663 149 635 q 367 692 285 692 q 546 616 490 692 q 601 414 601 540 l 601 0 l 507 0 l 497 81 l 493 81 q 389 12 444 40 q 269 -17 333 -17 m 303 75 q 394 98 351 75 q 486 165 438 121 l 486 353 q 344 326 401 342 q 251 290 286 311 q 199 242 215 269 q 183 183 183 215 q 218 100 183 125 q 303 75 253 75 m 364 794 q 265 813 306 794 q 199 860 225 831 q 160 928 172 890 q 146 1007 147 967 l 240 1007 q 248 951 242 978 q 269 904 254 924 q 306 873 283 885 q 364 861 329 861 q 422 873 399 861 q 459 904 444 885 q 480 951 474 924 q 488 1007 486 978 l 582 1007 q 567 928 579 967 q 529 860 556 890 q 463 813 503 831 q 364 794 422 794 z "},"ӕ":{"ha":1090,"x_min":81,"x_max":1038,"o":"m 279 -17 q 137 33 193 -17 q 81 175 81 83 q 179 345 81 286 q 489 428 278 404 q 483 490 489 460 q 462 544 478 521 q 419 583 446 568 q 351 597 393 597 q 246 575 296 597 q 156 525 196 553 l 110 604 q 224 663 157 635 q 365 692 290 692 q 489 653 440 692 q 558 549 538 615 q 655 653 599 615 q 781 692 711 692 q 891 669 843 692 q 972 606 939 647 q 1021 505 1004 564 q 1038 374 1038 446 q 1033 310 1038 335 l 596 310 q 615 214 597 257 q 660 140 632 171 q 725 93 688 110 q 806 76 763 76 q 893 92 854 76 q 969 132 932 108 l 1011 53 q 914 4 967 25 q 792 -17 861 -17 q 650 22 707 -17 q 554 110 593 60 q 415 15 485 47 q 279 -17 344 -17 m 311 75 q 414 102 358 75 q 515 179 469 129 q 497 242 504 206 q 489 318 490 279 l 489 353 q 352 326 408 342 q 260 290 296 311 q 209 242 225 269 q 193 183 193 215 q 227 100 193 125 q 311 75 261 75 m 596 386 l 938 386 q 897 546 938 490 q 778 601 856 601 q 656 544 707 601 q 596 386 606 486 z "},"ӗ":{"ha":689,"x_min":64,"x_max":636,"o":"m 388 -17 q 260 8 319 -17 q 158 77 201 32 q 89 188 114 122 q 64 336 64 253 q 90 485 64 419 q 158 597 115 551 q 254 667 200 643 q 367 692 308 692 q 481 669 431 692 q 566 606 532 647 q 618 506 600 564 q 636 375 636 447 q 635 340 636 357 q 632 310 635 322 l 176 310 q 244 138 183 201 q 401 75 304 75 q 491 90 450 75 q 569 128 532 104 l 610 53 q 511 4 565 25 q 388 -17 457 -17 m 175 392 l 536 392 q 492 548 536 494 q 369 601 449 601 q 301 588 333 601 q 242 547 268 574 q 198 481 215 519 q 175 392 181 442 m 368 794 q 269 813 310 794 q 203 860 229 831 q 164 928 176 890 q 150 1007 151 967 l 244 1007 q 252 951 246 978 q 273 904 258 924 q 310 873 288 885 q 368 861 333 861 q 426 873 403 861 q 463 904 449 885 q 484 951 478 924 q 492 1007 490 978 l 586 1007 q 572 928 583 967 q 533 860 560 890 q 467 813 507 831 q 368 794 426 794 z "},"ә":{"ha":689,"x_min":51,"x_max":625,"o":"m 331 -17 q 215 6 267 -17 q 127 70 164 28 q 71 173 90 113 q 51 308 51 233 q 53 345 51 328 q 57 375 54 363 l 511 375 q 453 539 506 476 q 310 601 401 601 q 217 585 258 601 q 135 543 175 569 l 94 622 q 199 673 142 654 q 328 692 257 692 q 446 668 392 692 q 540 599 500 644 q 602 488 579 553 q 625 339 625 422 q 602 190 625 256 q 540 78 579 124 q 446 8 500 32 q 331 -17 392 -17 m 328 75 q 455 132 407 75 q 513 293 503 189 l 153 293 q 200 129 153 183 q 328 75 247 75 z "},"ӣ":{"ha":785,"x_min":114,"x_max":671,"o":"m 114 0 l 114 675 l 225 675 l 225 394 q 222 276 225 340 q 214 146 218 211 l 219 146 q 265 218 239 178 q 308 290 290 258 l 564 675 l 671 675 l 671 0 l 560 0 l 560 281 q 563 399 560 335 q 571 531 567 464 l 565 531 q 520 458 546 499 q 476 386 494 417 l 219 0 l 114 0 m 210 836 l 210 915 l 579 915 l 579 836 l 210 836 z "},"ӧ":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 258 7 314 -17 q 158 76 201 31 q 90 187 115 121 q 64 336 64 253 q 90 487 64 421 q 158 599 115 553 q 258 668 201 644 q 376 692 314 692 q 495 668 439 692 q 594 599 551 644 q 663 487 638 553 q 689 336 689 421 q 663 187 689 253 q 594 76 638 121 q 495 7 551 31 q 376 -17 439 -17 m 376 78 q 456 97 419 78 q 517 149 492 115 q 557 231 543 183 q 571 336 571 278 q 557 442 571 394 q 517 525 543 490 q 456 578 492 560 q 376 597 419 597 q 297 578 333 597 q 235 525 261 560 q 196 442 210 490 q 182 336 182 394 q 196 231 182 278 q 235 149 210 183 q 297 97 261 115 q 376 78 333 78 m 243 815 q 193 835 213 815 q 174 885 174 856 q 193 934 174 914 q 243 954 213 954 q 292 934 272 954 q 311 885 311 914 q 292 835 311 856 q 243 815 272 815 m 510 815 q 461 835 481 815 q 442 885 442 856 q 461 934 442 914 q 510 954 481 954 q 560 934 540 954 q 579 885 579 914 q 560 835 579 856 q 510 815 540 815 z "},"ө":{"ha":753,"x_min":64,"x_max":689,"o":"m 376 -17 q 257 6 314 -17 q 157 72 200 28 q 89 183 114 117 q 64 336 64 249 q 89 490 64 424 q 157 602 114 557 q 257 669 200 647 q 376 692 314 692 q 496 669 439 692 q 596 602 553 647 q 664 490 639 557 q 689 336 689 424 q 664 183 689 249 q 596 72 639 117 q 496 6 553 28 q 376 -17 439 -17 m 376 603 q 242 547 296 603 q 175 392 188 492 l 579 392 q 513 547 567 492 q 376 603 458 603 m 376 74 q 519 135 464 74 q 581 310 574 197 l 174 310 q 235 135 181 197 q 376 74 290 74 z "},"ӯ":{"ha":649,"x_min":17,"x_max":632,"o":"m 125 -290 q 82 -287 101 -290 q 46 -276 63 -283 l 68 -186 q 93 -192 79 -189 q 119 -196 107 -196 q 215 -155 178 -196 q 272 -51 251 -114 l 288 -1 l 17 675 l 135 675 l 272 301 q 305 208 288 257 q 338 111 322 158 l 343 111 q 372 207 358 157 q 400 301 386 257 l 521 675 l 632 675 l 378 -56 q 338 -149 360 -106 q 285 -223 315 -192 q 215 -272 254 -254 q 125 -290 176 -290 m 151 835 l 151 914 l 521 914 l 521 835 l 151 835 z "},"ӳ":{"ha":649,"x_min":17,"x_max":632,"o":"m 125 -290 q 82 -287 101 -290 q 46 -276 63 -283 l 68 -186 q 93 -192 79 -189 q 119 -196 107 -196 q 215 -155 178 -196 q 272 -51 251 -114 l 288 -1 l 17 675 l 135 675 l 272 301 q 305 208 288 257 q 338 111 322 158 l 343 111 q 372 207 358 157 q 400 301 386 257 l 521 675 l 632 675 l 378 -56 q 338 -149 360 -106 q 285 -223 315 -192 q 215 -272 254 -254 q 125 -290 176 -290 m 265 789 l 203 818 l 322 1057 l 404 1018 l 265 789 m 475 789 l 411 818 l 532 1057 l 613 1018 l 475 789 z "},"№":{"ha":1240,"x_min":82,"x_max":1221,"o":"m 126 -17 q 108 -16 114 -17 q 92 -12 103 -15 l 82 78 q 117 90 106 78 q 129 136 129 103 l 129 886 l 257 886 q 382 601 321 743 q 503 315 443 460 l 582 136 l 588 136 q 579 256 582 201 q 574 358 576 310 q 572 451 572 406 q 571 546 571 496 l 571 765 q 597 869 571 835 q 679 903 622 903 q 697 901 690 903 q 714 897 703 900 l 724 807 q 688 795 700 807 q 675 750 675 783 l 675 0 l 547 0 q 424 285 485 143 q 301 572 363 426 l 224 750 l 218 750 q 226 631 224 685 q 231 528 229 576 q 233 435 232 481 q 233 340 233 390 l 233 119 q 208 17 233 51 q 126 -17 183 -17 m 1008 383 q 925 399 964 383 q 857 442 886 414 q 811 513 828 471 q 794 607 794 554 q 811 703 794 661 q 857 773 828 744 q 925 816 886 801 q 1008 831 964 831 q 1090 816 1051 831 q 1158 773 1129 801 q 1204 703 1188 744 q 1221 607 1221 661 q 1204 513 1221 554 q 1158 442 1188 471 q 1090 399 1129 414 q 1008 383 1051 383 m 1008 460 q 1095 499 1063 460 q 1128 607 1128 538 q 1095 717 1128 678 q 1008 756 1063 756 q 922 717 954 756 q 889 607 889 678 q 922 499 889 538 q 1008 460 954 460 m 832 208 l 832 278 l 1183 278 l 1183 208 l 832 208 z "},"&":{"ha":846,"x_min":44,"x_max":825,"o":"m 322 -17 q 209 2 260 -17 q 122 54 158 21 q 65 134 85 88 q 44 236 44 181 q 59 319 44 282 q 99 389 74 357 q 156 448 124 421 q 224 499 189 475 q 180 609 196 556 q 164 713 164 663 q 179 797 164 758 q 222 865 194 836 q 289 911 250 894 q 375 928 328 928 q 507 878 460 928 q 554 747 554 828 q 536 665 554 703 q 489 595 518 628 q 423 534 460 563 q 349 478 386 506 q 453 342 393 407 q 579 222 514 276 q 653 346 621 279 q 707 492 686 413 l 814 492 q 747 319 786 401 q 654 165 708 238 q 744 111 701 133 q 825 78 788 89 l 794 -17 q 693 23 746 -3 q 585 88 640 49 q 467 12 532 40 q 322 -17 403 -17 m 263 714 q 274 636 263 676 q 306 554 286 596 q 365 597 336 575 q 415 641 393 618 q 449 690 436 664 q 461 746 461 715 q 441 816 461 786 q 375 846 421 846 q 293 808 324 846 q 263 714 263 771 m 335 75 q 425 94 382 75 q 508 149 468 114 q 380 276 442 207 q 269 419 318 344 q 188 338 221 381 q 156 243 156 296 q 169 174 156 206 q 208 121 183 143 q 265 87 232 99 q 335 75 297 75 z "},".":{"ha":346,"x_min":90,"x_max":256,"o":"m 174 -17 q 115 8 139 -17 q 90 69 90 32 q 115 134 90 110 q 174 158 139 158 q 231 134 207 158 q 256 69 256 110 q 231 8 256 32 q 174 -17 207 -17 z "},",":{"ha":346,"x_min":65,"x_max":275,"o":"m 93 -236 l 65 -169 q 158 -99 125 -143 q 190 0 192 -56 q 176 -1 186 -1 q 119 19 143 -1 q 94 78 94 39 q 119 137 94 115 q 179 158 144 158 q 249 122 224 158 q 275 24 275 86 q 226 -133 275 -67 q 93 -236 178 -200 z "},":":{"ha":346,"x_min":90,"x_max":256,"o":"m 174 485 q 115 509 139 485 q 90 571 90 533 q 115 635 90 611 q 174 660 139 660 q 231 635 207 660 q 256 571 256 611 q 231 509 256 533 q 174 485 207 485 m 174 -17 q 115 8 139 -17 q 90 69 90 32 q 115 134 90 110 q 174 158 139 158 q 231 134 207 158 q 256 69 256 110 q 231 8 256 32 q 174 -17 207 -17 z "},";":{"ha":346,"x_min":65,"x_max":275,"o":"m 174 485 q 115 509 139 485 q 90 571 90 533 q 115 635 90 611 q 174 660 139 660 q 231 635 207 660 q 256 571 256 611 q 231 509 256 533 q 174 485 207 485 m 93 -236 l 65 -169 q 158 -99 125 -143 q 190 0 192 -56 q 176 -1 186 -1 q 119 19 143 -1 q 94 78 94 39 q 119 137 94 115 q 179 158 144 158 q 249 122 224 158 q 275 24 275 86 q 226 -133 275 -67 q 93 -236 178 -200 z "},"…":{"ha":1317,"x_min":131,"x_max":1226,"o":"m 214 -17 q 155 8 179 -17 q 131 69 131 32 q 155 134 131 110 q 214 158 179 158 q 272 134 247 158 q 296 69 296 110 q 272 8 296 32 q 214 -17 247 -17 m 679 -17 q 620 8 644 -17 q 596 69 596 32 q 620 134 596 110 q 679 158 644 158 q 737 134 713 158 q 761 69 761 110 q 737 8 761 32 q 679 -17 713 -17 m 1144 -17 q 1085 8 1110 -17 q 1061 69 1061 32 q 1085 134 1061 110 q 1144 158 1110 158 q 1202 134 1178 158 q 1226 69 1226 110 q 1202 8 1226 32 q 1144 -17 1178 -17 z "},"!":{"ha":401,"x_min":118,"x_max":283,"o":"m 161 275 l 146 800 l 143 931 l 258 931 l 256 800 l 240 275 l 161 275 m 201 -17 q 142 8 167 -17 q 118 69 118 32 q 142 134 118 110 q 201 158 167 158 q 259 134 235 158 q 283 69 283 110 q 259 8 283 32 q 201 -17 235 -17 z "},"¡":{"ha":401,"x_min":118,"x_max":283,"o":"m 143 -256 l 146 -125 l 161 400 l 240 400 l 256 -125 l 258 -256 l 143 -256 m 201 517 q 142 541 167 517 q 118 606 118 565 q 142 667 118 643 q 201 692 167 692 q 259 667 235 692 q 283 606 283 643 q 259 541 283 565 q 201 517 235 517 z "},"?":{"ha":590,"x_min":53,"x_max":524,"o":"m 222 275 q 226 373 214 329 q 258 453 238 417 q 306 522 279 490 q 357 585 333 554 q 397 649 381 617 q 413 718 413 681 q 378 813 413 774 q 278 853 344 853 q 191 831 232 853 q 118 772 150 810 l 53 832 q 156 915 97 882 q 292 947 215 947 q 460 888 397 947 q 524 725 524 829 q 507 642 524 679 q 466 571 490 604 q 415 505 442 538 q 365 438 388 472 q 329 363 342 403 q 322 275 317 324 l 222 275 m 275 -17 q 217 8 240 -17 q 193 69 193 32 q 217 134 193 110 q 275 158 240 158 q 334 134 310 158 q 358 69 358 110 q 334 8 358 32 q 275 -17 310 -17 z "},"¿":{"ha":590,"x_min":67,"x_max":538,"o":"m 299 -272 q 130 -213 193 -272 q 67 -50 67 -154 q 83 33 67 -4 q 124 104 100 71 q 176 170 149 138 q 225 238 203 203 q 260 312 247 272 q 267 400 272 351 l 368 400 q 364 302 375 346 q 332 222 353 258 q 284 153 311 185 q 233 90 257 121 q 194 26 210 58 q 178 -43 178 -7 q 211 -137 178 -99 q 313 -176 244 -176 q 399 -156 358 -176 q 471 -97 439 -135 l 538 -157 q 434 -239 493 -206 q 299 -272 375 -272 m 315 517 q 256 541 281 517 q 232 606 232 565 q 256 667 232 643 q 315 692 281 692 q 373 667 349 692 q 397 606 397 643 q 373 541 397 565 q 315 517 349 517 z "},"'":{"ha":346,"x_min":111,"x_max":233,"o":"m 138 599 l 115 831 l 111 958 l 233 958 l 229 831 l 207 599 l 138 599 z "},"\"":{"ha":590,"x_min":111,"x_max":478,"o":"m 138 599 l 115 831 l 111 958 l 233 958 l 229 831 l 207 599 l 138 599 m 382 599 l 360 831 l 356 958 l 478 958 l 474 831 l 451 599 l 382 599 z "},"‘":{"ha":346,"x_min":79,"x_max":260,"o":"m 167 594 q 102 626 125 594 q 79 719 79 658 q 117 864 79 803 q 226 967 154 925 l 260 913 q 181 838 207 878 q 154 740 154 799 q 167 742 158 742 q 217 724 194 742 q 240 671 240 706 q 219 615 240 635 q 167 594 199 594 z "},"’":{"ha":346,"x_min":88,"x_max":268,"o":"m 119 599 l 88 651 q 166 726 140 686 q 192 825 192 765 q 181 824 188 824 q 129 842 151 824 q 107 893 107 860 q 128 950 107 929 q 181 971 149 971 q 244 938 221 971 q 268 844 268 906 q 230 701 268 761 q 119 599 192 640 z "},"“":{"ha":590,"x_min":79,"x_max":504,"o":"m 167 594 q 102 626 125 594 q 79 719 79 658 q 117 864 79 803 q 226 967 154 925 l 260 913 q 181 838 207 878 q 154 740 154 799 q 167 742 158 742 q 217 724 194 742 q 240 671 240 706 q 219 615 240 635 q 167 594 199 594 m 411 594 q 347 626 369 594 q 324 719 324 658 q 361 864 324 803 q 471 967 399 925 l 504 913 q 425 838 451 878 q 399 740 399 799 q 411 742 403 742 q 462 724 439 742 q 485 671 485 706 q 464 615 485 635 q 411 594 443 594 z "},"”":{"ha":590,"x_min":88,"x_max":513,"o":"m 119 599 l 88 651 q 166 726 140 686 q 192 825 192 765 q 181 824 188 824 q 129 842 151 824 q 107 893 107 860 q 128 950 107 929 q 181 971 149 971 q 244 938 221 971 q 268 844 268 906 q 230 701 268 761 q 119 599 192 640 m 364 599 l 332 651 q 410 726 385 686 q 436 825 436 765 q 425 824 432 824 q 374 842 396 824 q 351 893 351 860 q 372 950 351 929 q 425 971 393 971 q 489 938 465 971 q 513 844 513 906 q 474 701 513 761 q 364 599 436 640 z "},"‚":{"ha":346,"x_min":88,"x_max":268,"o":"m 119 -200 l 88 -147 q 166 -73 140 -112 q 192 26 192 -33 q 181 25 188 25 q 129 43 151 25 q 107 94 107 61 q 128 151 107 131 q 181 172 149 172 q 244 140 221 172 q 268 46 268 107 q 230 -98 268 -37 q 119 -200 192 -158 z "},"„":{"ha":590,"x_min":88,"x_max":513,"o":"m 119 -200 l 88 -147 q 166 -73 140 -112 q 192 26 192 -33 q 181 25 188 25 q 129 43 151 25 q 107 94 107 61 q 128 151 107 131 q 181 172 149 172 q 244 140 221 172 q 268 46 268 107 q 230 -98 268 -37 q 119 -200 192 -158 m 364 -200 l 332 -147 q 410 -73 385 -112 q 436 26 436 -33 q 425 25 432 25 q 374 43 396 25 q 351 94 351 61 q 372 151 351 131 q 425 172 393 172 q 489 140 465 172 q 513 46 513 107 q 474 -98 513 -37 q 364 -200 436 -158 z "},"‹":{"ha":376,"x_min":63,"x_max":301,"o":"m 251 92 l 63 307 l 63 393 l 251 608 l 301 567 l 138 350 l 301 131 l 251 92 z "},"›":{"ha":376,"x_min":75,"x_max":314,"o":"m 124 92 l 75 131 l 239 350 l 75 567 l 124 608 l 314 393 l 314 307 l 124 92 z "},"«":{"ha":596,"x_min":63,"x_max":521,"o":"m 251 92 l 63 307 l 63 393 l 251 608 l 301 567 l 138 350 l 301 131 l 251 92 m 471 92 l 282 307 l 282 393 l 471 608 l 521 567 l 357 350 l 521 131 l 471 92 z "},"»":{"ha":596,"x_min":75,"x_max":533,"o":"m 124 92 l 75 131 l 239 350 l 75 567 l 124 608 l 314 393 l 314 307 l 124 92 m 343 92 l 294 131 l 458 350 l 294 567 l 343 608 l 533 393 l 533 307 l 343 92 z "},"-":{"ha":432,"x_min":57,"x_max":376,"o":"m 57 304 l 57 392 l 376 392 l 376 304 l 57 304 z "},"­":{"ha":432,"x_min":57,"x_max":376,"o":"m 57 304 l 57 392 l 376 392 l 376 304 l 57 304 z "},"–":{"ha":667,"x_min":57,"x_max":610,"o":"m 57 310 l 57 389 l 610 389 l 610 310 l 57 310 z "},"—":{"ha":1111,"x_min":57,"x_max":1054,"o":"m 57 310 l 57 389 l 1054 389 l 1054 310 l 57 310 z "},"⸺":{"ha":2083,"x_min":57,"x_max":2026,"o":"m 57 310 l 57 389 l 2026 389 l 2026 310 l 57 310 z "},"⸻":{"ha":3056,"x_min":57,"x_max":2999,"o":"m 2999 389 l 2999 310 l 57 310 l 57 389 l 2999 389 z "},"‒":{"ha":690,"x_min":57,"x_max":635,"o":"m 57 310 l 57 389 l 635 389 l 635 310 l 57 310 z "},"―":{"ha":1111,"x_min":57,"x_max":1054,"o":"m 57 310 l 57 389 l 1054 389 l 1054 310 l 57 310 z "},"·":{"ha":346,"x_min":90,"x_max":256,"o":"m 174 360 q 115 384 139 360 q 90 446 90 408 q 115 510 90 486 q 174 535 139 535 q 231 510 207 535 q 256 446 256 486 q 231 384 256 408 q 174 360 207 360 z "},"•":{"ha":422,"x_min":56,"x_max":367,"o":"m 211 199 q 151 210 179 199 q 102 244 124 222 q 68 297 81 267 q 56 365 56 328 q 68 434 56 403 q 102 487 81 465 q 151 521 124 508 q 211 533 179 533 q 270 521 242 533 q 320 487 299 508 q 354 434 342 465 q 367 365 367 403 q 354 297 367 328 q 320 244 342 267 q 270 210 299 222 q 211 199 242 199 z "},"_":{"ha":694,"x_min":17,"x_max":678,"o":"m 17 -175 l 17 -99 l 678 -99 l 678 -175 l 17 -175 z "},"‾":{"ha":694,"x_min":17,"x_max":678,"o":"m 17 789 l 17 865 l 678 865 l 678 789 l 17 789 z "},"‿":{"ha":0,"x_min":-631,"x_max":631,"o":"m 0 -324 q -334 -278 -178 -324 q -631 -146 -490 -233 l -597 -89 q -308 -206 -464 -169 q 0 -243 -151 -243 q 308 -206 151 -243 q 597 -89 464 -169 l 631 -146 q 334 -278 490 -233 q 0 -324 178 -324 z "},"(":{"ha":421,"x_min":114,"x_max":368,"o":"m 297 -244 q 163 49 211 -106 q 114 386 114 203 q 163 723 114 569 q 297 1017 211 876 l 368 983 q 248 698 288 850 q 208 386 208 546 q 248 74 208 226 q 368 -211 288 -78 l 297 -244 z "},")":{"ha":421,"x_min":53,"x_max":307,"o":"m 124 -244 l 53 -211 q 173 74 133 -78 q 213 386 213 226 q 173 698 213 546 q 53 983 133 850 l 124 1017 q 258 723 210 876 q 307 386 307 569 q 258 49 307 203 q 124 -244 210 -106 z "},"[":{"ha":421,"x_min":131,"x_max":379,"o":"m 131 -211 l 131 983 l 379 983 l 379 918 l 217 918 l 217 -146 l 379 -146 l 379 -211 l 131 -211 z "},"]":{"ha":421,"x_min":43,"x_max":290,"o":"m 43 -211 l 43 -146 l 204 -146 l 204 918 l 43 918 l 43 983 l 290 983 l 290 -211 l 43 -211 z "},"{":{"ha":421,"x_min":47,"x_max":379,"o":"m 317 -211 q 194 -172 235 -211 q 154 -26 154 -133 q 156 45 154 11 q 160 111 158 79 q 165 175 163 143 q 167 242 167 207 q 161 281 167 263 q 142 315 156 300 q 106 340 129 331 q 47 350 82 350 l 47 422 q 106 432 82 422 q 142 456 129 442 q 161 490 156 471 q 167 529 167 510 q 160 661 167 600 q 154 799 154 722 q 194 944 154 906 q 317 983 235 983 l 379 983 l 379 918 l 342 918 q 266 889 285 918 q 247 792 247 860 q 251 669 247 728 q 256 540 256 611 q 236 437 256 472 q 172 389 217 401 l 172 383 q 236 335 217 371 q 256 232 256 299 q 251 103 256 161 q 247 -19 247 44 q 266 -117 247 -87 q 342 -146 285 -146 l 379 -146 l 379 -211 l 317 -211 z "},"}":{"ha":421,"x_min":43,"x_max":374,"o":"m 43 -211 l 43 -146 l 79 -146 q 155 -117 136 -146 q 174 -19 174 -87 q 170 103 174 44 q 167 232 167 161 q 185 335 167 299 q 249 383 204 371 l 249 389 q 185 437 204 401 q 167 540 167 472 q 170 669 167 611 q 174 792 174 728 q 155 889 174 860 q 79 918 136 918 l 43 918 l 43 983 l 104 983 q 176 974 146 983 q 227 944 207 965 q 257 888 247 924 q 267 799 267 853 q 260 661 267 722 q 254 529 254 600 q 279 456 254 489 q 374 422 304 424 l 374 350 q 316 340 339 350 q 279 315 293 331 q 260 281 265 300 q 254 242 254 263 q 256 175 254 207 q 260 111 258 143 q 265 45 263 79 q 267 -26 267 11 q 257 -116 267 -81 q 227 -172 247 -151 q 176 -202 207 -193 q 104 -211 146 -211 l 43 -211 z "},"/":{"ha":486,"x_min":14,"x_max":468,"o":"m 14 -222 l 385 986 l 468 986 l 97 -222 l 14 -222 z "},"|":{"ha":335,"x_min":128,"x_max":208,"o":"m 128 -347 l 128 1042 l 208 1042 l 208 -347 l 128 -347 z "},"\\":{"ha":486,"x_min":19,"x_max":472,"o":"m 390 -222 l 19 986 l 101 986 l 472 -222 l 390 -222 z "},"¦":{"ha":335,"x_min":128,"x_max":208,"o":"m 128 404 l 128 1042 l 208 1042 l 208 404 l 128 404 m 128 -347 l 128 297 l 208 297 l 208 -347 l 128 -347 z "},"*":{"ha":581,"x_min":81,"x_max":500,"o":"m 192 583 l 136 624 l 215 754 l 81 810 l 101 874 l 243 839 l 256 989 l 324 989 l 336 840 l 479 874 l 500 810 l 365 754 l 443 624 l 389 583 l 290 703 l 192 583 z "},"†":{"ha":631,"x_min":75,"x_max":556,"o":"m 267 -111 l 274 682 l 75 675 l 75 774 l 274 767 l 267 989 l 364 989 l 357 767 l 556 774 l 556 675 l 357 682 l 364 -111 l 267 -111 z "},"‡":{"ha":631,"x_min":75,"x_max":556,"o":"m 267 -111 l 274 111 l 75 104 l 75 203 l 274 193 l 267 439 l 274 685 l 75 675 l 75 774 l 274 767 l 267 989 l 364 989 l 357 767 l 556 774 l 556 675 l 357 685 l 364 439 l 357 193 l 556 203 l 556 104 l 357 111 l 364 -111 l 267 -111 z "},"§":{"ha":690,"x_min":63,"x_max":628,"o":"m 163 483 q 190 408 163 438 q 260 356 218 378 q 352 313 303 333 q 444 268 401 293 q 506 314 485 288 q 528 386 528 340 q 500 464 528 433 q 431 517 472 494 q 340 560 389 540 q 247 604 290 579 q 185 554 207 582 q 163 483 163 526 m 328 -89 q 192 -62 253 -89 q 88 10 131 -36 l 157 72 q 232 19 192 39 q 328 0 272 0 q 415 28 383 0 q 446 96 446 56 q 417 161 446 135 q 347 208 389 188 q 254 249 304 229 q 162 299 204 269 q 91 370 119 328 q 63 476 63 413 q 96 582 63 538 q 182 656 129 626 q 149 706 161 678 q 138 769 138 733 q 151 838 138 806 q 191 896 164 871 q 257 935 218 921 q 349 950 296 950 q 469 926 415 950 q 563 871 522 903 l 507 797 q 436 843 474 825 q 353 861 399 861 q 269 835 294 861 q 243 774 243 810 q 272 711 243 736 q 343 665 300 686 q 435 624 386 644 q 528 573 485 603 q 599 501 571 543 q 628 394 628 458 q 595 287 628 328 q 510 215 563 246 q 540 165 529 192 q 551 101 551 138 q 535 25 551 60 q 488 -35 518 -10 q 417 -74 458 -60 q 328 -89 376 -89 z "},"¶":{"ha":778,"x_min":57,"x_max":644,"o":"m 528 -111 l 528 911 l 644 911 l 644 -111 l 528 -111 m 407 314 q 267 331 332 314 q 156 385 203 349 q 83 479 110 422 q 57 615 57 536 q 82 753 57 697 q 152 845 107 810 q 258 896 197 881 q 392 911 319 911 l 453 911 l 453 314 l 407 314 z "},"‖":{"ha":542,"x_min":128,"x_max":415,"o":"m 128 -347 l 128 1042 l 208 1042 l 208 -347 l 128 -347 m 335 -347 l 335 1042 l 415 1042 l 415 -347 l 335 -347 z "},"‼":{"ha":763,"x_min":118,"x_max":644,"o":"m 161 275 l 146 800 l 143 931 l 258 931 l 256 800 l 240 275 l 161 275 m 201 -17 q 142 8 167 -17 q 118 69 118 32 q 142 134 118 110 q 201 158 167 158 q 259 134 235 158 q 283 69 283 110 q 259 8 283 32 q 201 -17 235 -17 m 522 275 l 507 800 l 504 931 l 619 931 l 617 800 l 601 275 l 522 275 m 563 -17 q 503 8 528 -17 q 479 69 479 32 q 503 134 479 110 q 563 158 528 158 q 620 134 596 158 q 644 69 644 110 q 620 8 644 32 q 563 -17 596 -17 z "},"⁇":{"ha":1132,"x_min":53,"x_max":1065,"o":"m 222 275 q 226 373 214 329 q 258 453 238 417 q 306 522 279 490 q 357 585 333 554 q 397 649 381 617 q 413 718 413 681 q 378 813 413 774 q 278 853 344 853 q 191 831 232 853 q 118 772 150 810 l 53 832 q 156 915 97 882 q 292 947 215 947 q 460 888 397 947 q 524 725 524 829 q 507 642 524 679 q 466 571 490 604 q 415 505 442 538 q 365 438 388 472 q 329 363 342 403 q 322 275 317 324 l 222 275 m 275 -17 q 217 8 240 -17 q 193 69 193 32 q 217 134 193 110 q 275 158 240 158 q 334 134 310 158 q 358 69 358 110 q 334 8 358 32 q 275 -17 310 -17 m 764 275 q 767 373 756 329 q 800 453 779 417 q 848 522 821 490 q 899 585 875 554 q 938 649 922 617 q 954 718 954 681 q 920 813 954 774 q 819 853 886 853 q 733 831 774 853 q 660 772 692 810 l 594 832 q 698 915 639 882 q 833 947 757 947 q 1002 888 939 947 q 1065 725 1065 829 q 1049 642 1065 679 q 1008 571 1032 604 q 956 505 983 538 q 906 438 929 472 q 871 363 883 403 q 864 275 858 324 l 764 275 m 817 -17 q 758 8 782 -17 q 735 69 735 32 q 758 134 735 110 q 817 158 782 158 q 876 134 851 158 q 900 69 900 110 q 876 8 900 32 q 817 -17 851 -17 z "},"⁉":{"ha":943,"x_min":118,"x_max":876,"o":"m 161 275 l 146 800 l 143 931 l 258 931 l 256 800 l 240 275 l 161 275 m 201 -17 q 142 8 167 -17 q 118 69 118 32 q 142 134 118 110 q 201 158 167 158 q 259 134 235 158 q 283 69 283 110 q 259 8 283 32 q 201 -17 235 -17 m 575 275 q 578 373 567 329 q 611 453 590 417 q 659 522 632 490 q 710 585 686 554 q 749 649 733 617 q 765 718 765 681 q 731 813 765 774 q 631 853 697 853 q 544 831 585 853 q 471 772 503 810 l 406 832 q 509 915 450 882 q 644 947 568 947 q 813 888 750 947 q 876 725 876 829 q 860 642 876 679 q 819 571 843 604 q 767 505 794 538 q 717 438 740 472 q 682 363 694 403 q 675 275 669 324 l 575 275 m 628 -17 q 569 8 593 -17 q 546 69 546 32 q 569 134 546 110 q 628 158 593 158 q 687 134 663 158 q 711 69 711 110 q 687 8 711 32 q 628 -17 663 -17 z "},"⁈":{"ha":943,"x_min":53,"x_max":825,"o":"m 222 275 q 226 373 214 329 q 258 453 238 417 q 306 522 279 490 q 357 585 333 554 q 397 649 381 617 q 413 718 413 681 q 378 813 413 774 q 278 853 344 853 q 191 831 232 853 q 118 772 150 810 l 53 832 q 156 915 97 882 q 292 947 215 947 q 460 888 397 947 q 524 725 524 829 q 507 642 524 679 q 466 571 490 604 q 415 505 442 538 q 365 438 388 472 q 329 363 342 403 q 322 275 317 324 l 222 275 m 275 -17 q 217 8 240 -17 q 193 69 193 32 q 217 134 193 110 q 275 158 240 158 q 334 134 310 158 q 358 69 358 110 q 334 8 358 32 q 275 -17 310 -17 m 703 275 l 688 800 l 685 931 l 800 931 l 797 800 l 782 275 l 703 275 m 743 -17 q 684 8 708 -17 q 660 69 660 32 q 684 134 660 110 q 743 158 708 158 q 801 134 776 158 q 825 69 825 110 q 801 8 825 32 q 743 -17 776 -17 z "},"‽":{"ha":600,"x_min":38,"x_max":535,"o":"m 238 275 l 224 624 l 217 739 l 314 739 l 314 649 l 307 464 q 346 524 325 496 q 385 580 367 551 q 415 640 403 608 q 428 711 428 672 q 390 815 428 772 q 278 857 351 857 q 184 835 228 857 q 103 768 140 814 l 38 828 q 149 916 86 885 q 286 947 211 947 q 388 931 342 947 q 467 886 435 915 q 517 817 499 857 q 535 729 535 776 q 517 636 535 678 q 474 559 500 594 q 417 491 447 524 q 364 426 388 458 q 326 356 340 393 q 318 275 313 319 l 238 275 m 275 -17 q 217 8 240 -17 q 193 69 193 32 q 217 134 193 110 q 275 158 240 158 q 334 134 310 158 q 358 69 358 110 q 334 8 358 32 q 275 -17 310 -17 z "},"⌜":{"ha":421,"x_min":131,"x_max":379,"o":"m 131 0 l 131 957 l 379 957 l 379 892 l 217 892 l 217 0 l 131 0 z "},"⌝":{"ha":421,"x_min":43,"x_max":290,"o":"m 204 0 l 204 892 l 43 892 l 43 957 l 290 957 l 290 0 l 204 0 z "},"⌞":{"ha":421,"x_min":131,"x_max":379,"o":"m 131 -72 l 131 886 l 217 886 l 217 -7 l 379 -7 l 379 -72 l 131 -72 z "},"⌟":{"ha":421,"x_min":43,"x_max":290,"o":"m 43 -72 l 43 -7 l 204 -7 l 204 886 l 290 886 l 290 -72 l 43 -72 z "},"⟦":{"ha":525,"x_min":131,"x_max":482,"o":"m 131 -211 l 131 983 l 482 983 l 482 918 l 329 918 l 329 -146 l 482 -146 l 482 -211 l 131 -211 m 201 -146 l 264 -146 l 264 918 l 201 918 l 201 -146 z "},"⟧":{"ha":525,"x_min":43,"x_max":394,"o":"m 43 -211 l 43 -146 l 196 -146 l 196 918 l 43 918 l 43 983 l 394 983 l 394 -211 l 43 -211 m 261 -146 l 322 -146 l 322 918 l 261 918 l 261 -146 z "},"⸢":{"ha":421,"x_min":131,"x_max":379,"o":"m 131 386 l 131 983 l 379 983 l 379 918 l 217 918 l 217 386 l 131 386 z "},"⸣":{"ha":421,"x_min":43,"x_max":290,"o":"m 204 386 l 204 918 l 43 918 l 43 983 l 290 983 l 290 386 l 204 386 z "},"⸤":{"ha":421,"x_min":131,"x_max":379,"o":"m 131 -211 l 131 386 l 217 386 l 217 -146 l 379 -146 l 379 -211 l 131 -211 z "},"⸥":{"ha":421,"x_min":43,"x_max":290,"o":"m 43 -211 l 43 -146 l 204 -146 l 204 386 l 290 386 l 290 -211 l 43 -211 z "},"©":{"ha":1033,"x_min":68,"x_max":965,"o":"m 517 -15 q 344 17 426 -15 q 201 110 263 50 q 104 256 140 171 q 68 449 68 342 q 104 639 68 554 q 201 783 140 724 q 344 875 263 843 q 517 907 426 907 q 688 875 607 907 q 831 783 769 843 q 929 639 893 724 q 965 449 965 554 q 929 256 965 342 q 831 110 893 171 q 688 17 769 50 q 517 -15 607 -15 m 517 43 q 665 72 596 43 q 787 155 735 101 q 869 283 839 208 q 900 449 900 357 q 869 613 900 539 q 787 740 839 688 q 665 822 735 793 q 517 850 596 850 q 368 822 438 850 q 247 740 299 793 q 164 613 194 688 q 133 449 133 539 q 164 283 133 357 q 247 155 194 208 q 368 72 299 101 q 517 43 438 43 m 528 174 q 429 192 475 174 q 349 247 383 211 q 294 333 314 282 q 275 449 275 383 q 297 557 275 508 q 353 640 318 606 q 435 693 389 675 q 532 711 482 711 q 631 688 590 711 q 706 632 672 665 l 657 578 q 601 620 629 606 q 536 635 572 635 q 413 583 460 635 q 367 449 367 531 q 412 303 367 357 q 532 250 457 250 q 610 267 576 250 q 674 311 643 285 l 715 253 q 633 197 676 219 q 528 174 590 174 z "},"℗":{"ha":1032,"x_min":68,"x_max":965,"o":"m 517 -15 q 344 17 426 -15 q 201 110 263 50 q 104 256 140 171 q 68 449 68 342 q 104 639 68 554 q 201 783 140 724 q 344 875 263 843 q 517 907 426 907 q 688 875 607 907 q 831 783 769 843 q 929 639 893 724 q 965 449 965 554 q 929 256 965 342 q 831 110 893 171 q 688 17 769 50 q 517 -15 607 -15 m 517 43 q 665 72 596 43 q 787 155 735 101 q 869 283 839 208 q 900 449 900 357 q 869 613 900 539 q 787 740 839 688 q 665 822 735 793 q 517 850 596 850 q 368 822 438 850 q 247 740 299 793 q 164 613 194 688 q 133 449 133 539 q 164 283 133 357 q 247 155 194 208 q 368 72 299 101 q 517 43 438 43 m 351 190 l 351 694 l 543 694 q 624 685 586 694 q 689 656 661 675 q 733 605 717 636 q 749 532 749 574 q 733 452 749 486 q 689 395 717 418 q 624 361 661 372 q 543 350 586 350 l 442 350 l 442 190 l 351 190 m 442 419 l 528 419 q 624 445 590 419 q 658 529 658 471 q 624 601 658 579 q 528 624 590 624 l 442 624 l 442 419 z "},"®":{"ha":588,"x_min":32,"x_max":556,"o":"m 293 443 q 192 463 239 443 q 109 519 144 483 q 53 606 74 556 q 32 717 32 656 q 53 828 32 778 q 109 914 74 878 q 192 970 144 950 q 293 990 239 990 q 395 970 347 990 q 478 914 443 950 q 535 828 514 878 q 556 717 556 778 q 535 606 556 656 q 478 519 514 556 q 395 463 443 483 q 293 443 347 443 m 293 494 q 374 510 336 494 q 440 556 413 526 q 484 626 468 585 q 500 717 500 667 q 484 806 500 765 q 440 877 468 847 q 374 924 413 907 q 293 940 336 940 q 211 924 249 940 q 147 877 174 907 q 103 806 119 847 q 88 717 88 765 q 103 626 88 667 q 147 556 119 585 q 211 510 174 526 q 293 494 249 494 m 193 579 l 193 861 l 299 861 q 375 841 343 861 q 407 771 407 821 q 393 724 407 746 q 356 694 379 703 l 419 579 l 356 579 l 307 676 l 250 676 l 250 579 l 193 579 m 250 721 l 286 721 q 346 768 346 721 q 333 801 346 789 q 289 814 321 814 l 250 814 l 250 721 z "},"™":{"ha":885,"x_min":4,"x_max":844,"o":"m 142 508 l 142 864 l 4 864 l 4 939 l 364 939 l 364 864 l 225 864 l 225 508 l 142 508 m 431 508 l 431 939 l 532 939 l 597 778 l 636 669 l 642 669 l 681 778 l 744 939 l 844 939 l 844 508 l 768 508 l 768 699 l 778 844 l 772 844 l 671 575 l 606 575 l 504 844 l 499 844 l 508 699 l 508 508 l 431 508 z "},"℠":{"ha":885,"x_min":38,"x_max":844,"o":"m 194 492 q 109 509 149 492 q 38 558 69 526 l 83 610 q 137 572 108 586 q 200 557 165 557 q 250 572 232 557 q 268 611 268 586 q 253 649 268 639 q 208 675 239 660 l 143 707 q 85 750 111 722 q 60 826 60 778 q 100 915 60 881 q 206 949 140 949 q 279 933 244 949 q 338 896 314 918 l 297 842 q 250 871 275 858 q 201 883 225 883 q 153 867 169 883 q 136 831 136 851 q 151 797 136 810 q 194 771 167 783 l 258 739 q 322 694 299 721 q 346 618 346 667 q 335 571 346 593 q 305 531 325 549 q 257 502 285 513 q 194 492 229 492 m 431 508 l 431 939 l 532 939 l 597 778 l 636 669 l 642 669 l 681 778 l 744 939 l 844 939 l 844 508 l 768 508 l 768 699 l 778 844 l 772 844 l 671 575 l 606 575 l 504 844 l 499 844 l 508 699 l 508 508 l 431 508 z "},"@":{"ha":1176,"x_min":71,"x_max":1106,"o":"m 560 -215 q 368 -183 457 -215 q 213 -88 279 -151 q 109 68 147 -25 q 71 282 71 161 q 117 535 71 421 q 244 729 164 649 q 428 853 324 810 q 650 897 533 897 q 840 864 756 897 q 983 770 924 831 q 1074 625 1042 710 q 1106 438 1106 540 q 1080 277 1106 346 q 1014 162 1054 208 q 924 92 974 115 q 828 68 875 68 q 731 94 771 68 q 685 174 692 121 l 682 174 q 603 106 647 133 q 513 79 558 79 q 394 129 442 79 q 346 275 346 179 q 365 388 346 331 q 418 492 383 446 q 502 568 453 539 q 613 597 551 597 q 676 581 649 597 q 724 531 704 565 l 726 531 l 742 586 l 818 586 l 764 308 q 839 146 722 146 q 905 165 872 146 q 965 222 938 185 q 1008 312 992 258 q 1025 433 1025 365 q 1001 588 1025 517 q 928 711 976 660 q 807 792 879 763 q 640 821 735 821 q 460 783 547 821 q 304 675 372 744 q 195 507 236 606 q 154 286 154 408 q 185 106 154 185 q 272 -28 217 26 q 403 -110 328 -82 q 568 -139 479 -139 q 689 -122 632 -139 q 793 -76 746 -104 l 824 -144 q 560 -215 706 -215 m 535 157 q 595 176 564 157 q 663 239 626 196 l 703 460 q 663 505 683 492 q 614 518 642 518 q 540 496 572 518 q 484 439 507 474 q 449 363 461 404 q 438 282 438 321 q 465 186 438 215 q 535 157 493 157 z "},"#":{"ha":690,"x_min":49,"x_max":649,"o":"m 125 0 l 160 283 l 49 283 l 49 363 l 169 363 l 194 568 l 76 568 l 76 649 l 204 649 l 236 903 l 310 903 l 278 649 l 463 649 l 496 903 l 569 903 l 536 649 l 649 649 l 649 568 l 528 568 l 503 363 l 621 363 l 621 283 l 493 283 l 458 0 l 385 0 l 418 283 l 235 283 l 200 0 l 125 0 m 244 363 l 428 363 l 453 568 l 269 568 l 244 363 z "},"⁰":{"ha":510,"x_min":49,"x_max":463,"o":"m 256 532 q 105 607 161 532 q 49 821 49 682 q 105 1033 49 958 q 256 1107 161 1107 q 406 1033 349 1107 q 463 821 463 958 q 406 607 463 682 q 256 532 349 532 m 256 603 q 342 658 308 603 q 375 821 375 713 q 342 983 375 929 q 256 1036 308 1036 q 168 983 201 1036 q 135 821 135 929 q 168 658 135 713 q 256 603 201 603 z "},"¹":{"ha":510,"x_min":121,"x_max":328,"o":"m 239 549 l 239 976 l 121 976 l 121 1035 q 197 1056 167 1043 q 256 1090 228 1069 l 328 1090 l 328 549 l 239 549 z "},"²":{"ha":510,"x_min":56,"x_max":444,"o":"m 72 549 l 72 600 q 183 702 135 657 q 264 785 232 747 q 313 855 296 822 q 329 918 329 888 q 301 1001 329 971 q 225 1032 274 1032 q 161 1009 190 1032 q 108 953 132 986 l 56 1001 q 134 1078 88 1049 q 236 1107 181 1107 q 367 1063 318 1107 q 417 932 417 1018 q 401 857 417 893 q 359 784 386 821 q 295 708 332 747 q 215 625 258 669 l 444 625 l 444 549 l 72 549 z "},"³":{"ha":510,"x_min":49,"x_max":443,"o":"m 250 532 q 132 562 183 532 q 49 638 81 592 l 108 683 q 168 624 133 646 q 246 603 203 603 q 322 628 290 603 q 354 700 354 653 q 310 772 354 747 q 186 796 265 796 l 186 853 q 295 881 257 853 q 333 950 333 908 q 306 1013 333 989 q 235 1036 279 1036 q 176 1017 204 1036 q 125 971 149 999 l 71 1018 q 149 1083 107 1058 q 249 1107 192 1107 q 315 1097 283 1107 q 369 1069 346 1088 q 407 1023 393 1050 q 421 961 421 996 q 394 880 421 913 q 326 828 368 847 q 408 783 372 817 q 443 694 443 749 q 428 627 443 657 q 386 576 413 597 q 324 543 360 554 q 250 532 289 532 z "},"⁴":{"ha":510,"x_min":58,"x_max":467,"o":"m 306 549 l 306 693 l 58 693 l 58 739 l 286 1090 l 386 1090 l 386 757 l 467 757 l 467 693 l 386 693 l 386 549 l 306 549 m 151 757 l 306 757 l 306 854 l 311 1006 l 306 1006 l 236 893 l 151 757 z "},"⁵":{"ha":510,"x_min":49,"x_max":449,"o":"m 254 532 q 131 562 182 532 q 49 638 81 592 l 108 683 q 168 624 135 646 q 249 603 201 603 q 328 636 297 603 q 360 722 360 669 q 328 810 360 778 q 246 842 296 842 q 190 829 214 842 q 143 797 165 817 l 100 829 l 125 1090 l 421 1090 l 421 1013 l 199 1013 l 183 881 q 225 895 203 889 q 271 901 247 901 q 340 890 307 901 q 397 854 372 878 q 435 797 421 831 q 449 719 449 763 q 433 643 449 678 q 392 584 418 608 q 331 546 367 560 q 254 532 296 532 z "},"⁶":{"ha":510,"x_min":63,"x_max":453,"o":"m 272 532 q 119 604 176 532 q 63 806 63 676 q 81 939 63 882 q 131 1033 99 996 q 206 1089 163 1071 q 299 1107 249 1107 q 376 1094 346 1107 q 431 1065 407 1082 l 394 1003 q 352 1026 375 1017 q 301 1036 329 1036 q 197 987 240 1036 q 147 833 154 938 q 283 889 207 889 q 409 841 365 889 q 453 715 453 793 q 439 643 453 676 q 401 585 425 610 q 344 546 376 560 q 272 532 311 532 m 271 603 q 342 634 315 603 q 369 714 369 665 q 343 793 369 763 q 265 824 317 824 q 207 810 235 824 q 147 764 179 797 q 188 643 154 683 q 271 603 221 603 z "},"⁷":{"ha":510,"x_min":69,"x_max":449,"o":"m 182 549 q 197 679 186 619 q 228 794 208 739 q 277 903 247 850 q 349 1014 307 957 l 69 1014 l 69 1090 l 449 1090 l 449 1040 q 367 919 399 978 q 317 802 336 861 q 288 681 297 743 q 275 549 279 619 l 182 549 z "},"⁸":{"ha":510,"x_min":63,"x_max":444,"o":"m 253 532 q 175 544 210 532 q 115 576 140 556 q 76 625 90 597 q 63 683 63 653 q 94 773 63 735 q 165 835 125 811 l 165 840 q 107 892 129 864 q 85 964 85 921 q 98 1022 85 996 q 134 1067 111 1049 q 188 1097 157 1086 q 253 1107 218 1107 q 376 1069 326 1107 q 426 964 426 1031 q 419 921 426 940 q 399 885 411 901 q 372 856 386 868 q 343 833 357 843 l 343 828 q 417 770 390 804 q 444 688 444 736 q 430 626 444 654 q 390 576 415 597 q 329 544 364 556 q 253 532 294 532 m 285 858 q 329 908 315 882 q 343 961 343 933 q 317 1018 343 997 q 253 1039 290 1039 q 192 1017 217 1039 q 167 963 167 996 q 201 897 167 921 q 285 858 236 874 m 253 597 q 329 624 297 597 q 361 690 361 651 q 349 732 361 715 q 318 761 338 749 q 274 783 299 774 q 221 804 249 793 q 146 692 146 760 q 175 626 146 656 q 253 597 204 597 z "},"⁹":{"ha":510,"x_min":54,"x_max":444,"o":"m 240 815 q 300 828 272 815 q 360 875 328 842 q 319 996 353 956 q 235 1036 286 1036 q 164 1005 192 1036 q 136 925 136 974 q 163 846 136 876 q 240 815 190 815 m 208 532 q 130 544 161 532 q 75 574 99 557 l 113 636 q 155 613 132 622 q 206 603 178 603 q 310 653 267 603 q 360 807 353 703 q 224 750 300 750 q 98 798 142 750 q 54 924 54 846 q 68 996 54 963 q 106 1054 82 1029 q 163 1093 129 1079 q 233 1107 196 1107 q 388 1035 331 1107 q 444 833 444 963 q 426 700 444 757 q 376 606 408 643 q 301 550 344 568 q 208 532 258 532 z "},"⁽":{"ha":329,"x_min":90,"x_max":275,"o":"m 213 439 q 122 613 153 524 q 90 819 90 701 q 122 1024 90 936 q 213 1197 153 1113 l 275 1167 q 199 998 222 1085 q 176 819 176 911 q 199 640 176 726 q 275 469 222 553 l 213 439 z "},"⁾":{"ha":329,"x_min":54,"x_max":239,"o":"m 119 439 l 54 469 q 130 640 107 553 q 153 819 153 726 q 130 998 153 911 q 54 1167 107 1085 l 119 1197 q 208 1024 176 1113 q 239 819 239 936 q 208 613 239 701 q 119 439 178 524 z "},"₀":{"ha":510,"x_min":49,"x_max":463,"o":"m 256 -261 q 105 -186 161 -261 q 49 28 49 -111 q 105 240 49 165 q 256 314 161 314 q 406 240 349 314 q 463 28 463 165 q 406 -186 463 -111 q 256 -261 349 -261 m 256 -190 q 342 -135 308 -190 q 375 28 375 -81 q 342 190 375 136 q 256 243 308 243 q 168 190 201 243 q 135 28 135 136 q 168 -135 135 -81 q 256 -190 201 -190 z "},"₁":{"ha":510,"x_min":121,"x_max":328,"o":"m 239 -244 l 239 183 l 121 183 l 121 242 q 197 263 167 250 q 256 297 228 276 l 328 297 l 328 -244 l 239 -244 z "},"₂":{"ha":510,"x_min":56,"x_max":444,"o":"m 72 -244 l 72 -193 q 183 -91 135 -136 q 264 -8 232 -46 q 313 62 296 29 q 329 125 329 94 q 301 208 329 178 q 225 239 274 239 q 161 216 190 239 q 108 160 132 193 l 56 208 q 134 285 88 256 q 236 314 181 314 q 367 269 318 314 q 417 139 417 225 q 401 64 417 100 q 359 -9 386 28 q 295 -85 332 -46 q 215 -168 258 -124 l 444 -168 l 444 -244 l 72 -244 z "},"₃":{"ha":510,"x_min":49,"x_max":443,"o":"m 250 -261 q 132 -231 183 -261 q 49 -156 81 -201 l 108 -110 q 168 -169 133 -147 q 246 -190 203 -190 q 322 -165 290 -190 q 354 -93 354 -140 q 310 -22 354 -46 q 186 3 265 3 l 186 60 q 295 88 257 60 q 333 157 333 115 q 306 219 333 196 q 235 243 279 243 q 176 224 204 243 q 125 178 149 206 l 71 225 q 149 290 107 265 q 249 314 192 314 q 315 304 283 314 q 369 276 346 294 q 407 230 393 257 q 421 168 421 203 q 394 87 421 119 q 326 35 368 54 q 408 -10 372 24 q 443 -99 443 -44 q 428 -166 443 -136 q 386 -217 413 -196 q 324 -250 360 -239 q 250 -261 289 -261 z "},"₄":{"ha":510,"x_min":58,"x_max":467,"o":"m 306 -244 l 306 -100 l 58 -100 l 58 -54 l 286 297 l 386 297 l 386 -36 l 467 -36 l 467 -100 l 386 -100 l 386 -244 l 306 -244 m 151 -36 l 306 -36 l 306 61 l 311 213 l 306 213 l 236 100 l 151 -36 z "},"₅":{"ha":510,"x_min":49,"x_max":449,"o":"m 254 -261 q 131 -231 182 -261 q 49 -156 81 -201 l 108 -110 q 168 -169 135 -147 q 249 -190 201 -190 q 328 -157 297 -190 q 360 -71 360 -124 q 328 17 360 -15 q 246 49 296 49 q 190 36 214 49 q 143 4 165 24 l 100 36 l 125 297 l 421 297 l 421 219 l 199 219 l 183 88 q 225 102 203 96 q 271 108 247 108 q 340 97 307 108 q 397 61 372 85 q 435 3 421 38 q 449 -74 449 -31 q 433 -150 449 -115 q 392 -209 418 -185 q 331 -247 367 -233 q 254 -261 296 -261 z "},"₆":{"ha":510,"x_min":63,"x_max":453,"o":"m 272 -261 q 119 -189 176 -261 q 63 13 63 -117 q 81 146 63 89 q 131 240 99 203 q 206 296 163 278 q 299 314 249 314 q 376 301 346 314 q 431 272 407 289 l 394 210 q 352 233 375 224 q 301 243 329 243 q 197 194 240 243 q 147 40 154 144 q 283 96 207 96 q 409 48 365 96 q 453 -78 453 0 q 439 -150 453 -117 q 401 -208 425 -183 q 344 -247 376 -233 q 272 -261 311 -261 m 271 -190 q 342 -159 315 -190 q 369 -79 369 -128 q 343 0 369 -31 q 265 31 317 31 q 207 17 235 31 q 147 -29 179 4 q 188 -150 154 -110 q 271 -190 221 -190 z "},"₇":{"ha":510,"x_min":69,"x_max":449,"o":"m 182 -244 q 197 -114 186 -174 q 228 1 208 -54 q 277 110 247 57 q 349 221 307 164 l 69 221 l 69 297 l 449 297 l 449 247 q 367 126 399 185 q 317 9 336 68 q 288 -112 297 -50 q 275 -244 279 -174 l 182 -244 z "},"₈":{"ha":510,"x_min":63,"x_max":444,"o":"m 253 -261 q 175 -249 210 -261 q 115 -217 140 -237 q 76 -168 90 -196 q 63 -110 63 -140 q 94 -20 63 -58 q 165 42 125 18 l 165 47 q 107 99 129 71 q 85 171 85 128 q 98 229 85 203 q 134 274 111 256 q 188 303 157 293 q 253 314 218 314 q 376 276 326 314 q 426 171 426 238 q 419 128 426 147 q 399 92 411 108 q 372 63 386 75 q 343 40 357 50 l 343 35 q 417 -23 390 11 q 444 -106 444 -57 q 430 -167 444 -139 q 390 -217 415 -196 q 329 -249 364 -237 q 253 -261 294 -261 m 285 65 q 329 115 315 89 q 343 168 343 140 q 317 225 343 204 q 253 246 290 246 q 192 224 217 246 q 167 169 167 203 q 201 104 167 128 q 285 65 236 81 m 253 -196 q 329 -169 297 -196 q 361 -103 361 -142 q 349 -61 361 -78 q 318 -32 338 -44 q 274 -10 299 -19 q 221 11 249 0 q 146 -101 146 -33 q 175 -167 146 -137 q 253 -196 204 -196 z "},"₉":{"ha":510,"x_min":54,"x_max":444,"o":"m 240 22 q 300 35 272 22 q 360 82 328 49 q 319 203 353 163 q 235 243 286 243 q 164 212 192 243 q 136 132 136 181 q 163 53 136 83 q 240 22 190 22 m 208 -261 q 130 -249 161 -261 q 75 -219 99 -236 l 113 -157 q 155 -181 132 -171 q 206 -190 178 -190 q 310 -140 267 -190 q 360 14 353 -90 q 224 -43 300 -43 q 98 5 142 -43 q 54 131 54 53 q 68 203 54 169 q 106 261 82 236 q 163 300 129 286 q 233 314 196 314 q 388 242 331 314 q 444 40 444 169 q 426 -93 444 -36 q 376 -187 408 -150 q 301 -243 344 -225 q 208 -261 258 -261 z "},"₍":{"ha":329,"x_min":90,"x_max":275,"o":"m 213 -354 q 122 -181 153 -269 q 90 26 90 -92 q 122 231 90 143 q 213 404 153 319 l 275 374 q 199 205 222 292 q 176 26 176 118 q 199 -153 176 -67 q 275 -324 222 -240 l 213 -354 z "},"₎":{"ha":329,"x_min":54,"x_max":239,"o":"m 119 -354 l 54 -324 q 130 -153 107 -240 q 153 26 153 -67 q 130 205 153 118 q 54 374 107 292 l 119 404 q 208 231 176 319 q 239 26 239 143 q 208 -181 239 -92 q 119 -354 178 -269 z "},"ª":{"ha":479,"x_min":51,"x_max":414,"o":"m 189 538 q 89 573 126 538 q 51 668 51 608 q 117 780 51 742 q 328 833 183 818 q 308 906 326 878 q 242 935 290 935 q 167 920 206 935 q 101 888 129 906 l 69 947 q 152 987 104 968 q 254 1006 200 1006 q 376 957 338 1006 q 414 821 414 908 l 414 549 l 344 549 l 335 600 l 329 600 q 267 556 301 575 q 189 538 232 538 m 214 606 q 328 661 268 606 l 328 779 q 178 741 221 768 q 136 675 136 714 q 157 622 136 639 q 214 606 178 606 z "},"º":{"ha":507,"x_min":42,"x_max":464,"o":"m 253 538 q 172 553 210 538 q 104 599 133 569 q 58 672 75 629 q 42 771 42 715 q 58 870 42 826 q 104 944 75 914 q 172 990 133 975 q 253 1006 210 1006 q 334 990 296 1006 q 401 944 372 975 q 447 870 431 914 q 464 771 464 826 q 447 672 464 715 q 401 599 431 629 q 334 553 372 569 q 253 538 296 538 m 253 608 q 343 653 311 608 q 375 771 375 699 q 343 890 375 846 q 253 935 311 935 q 162 890 194 935 q 129 771 129 846 q 162 653 129 699 q 253 608 194 608 z "},"ᵃ":{"ha":479,"x_min":51,"x_max":414,"o":"m 189 538 q 89 573 126 538 q 51 668 51 608 q 117 780 51 742 q 328 833 183 818 q 308 906 326 878 q 242 935 290 935 q 167 920 206 935 q 101 888 129 906 l 69 947 q 152 987 104 968 q 254 1006 200 1006 q 376 957 338 1006 q 414 821 414 908 l 414 549 l 344 549 l 335 600 l 329 600 q 267 556 301 575 q 189 538 232 538 m 214 606 q 328 661 268 606 l 328 779 q 178 741 221 768 q 136 675 136 714 q 157 622 136 639 q 214 606 178 606 z "},"ᵇ":{"ha":519,"x_min":72,"x_max":474,"o":"m 279 538 q 214 551 247 538 q 153 593 181 565 l 147 593 l 139 549 l 72 549 l 72 1199 l 158 1199 l 158 1024 l 154 943 q 220 988 186 969 q 293 1006 254 1006 q 427 944 381 1006 q 474 779 474 883 q 458 677 474 722 q 415 601 442 632 q 353 553 388 569 q 279 538 318 538 m 267 608 q 351 652 317 608 q 385 779 385 696 q 358 893 385 851 q 272 935 331 935 q 158 875 218 935 l 158 651 q 215 618 186 628 q 267 608 243 608 z "},"ᶜ":{"ha":425,"x_min":42,"x_max":403,"o":"m 256 538 q 102 598 163 538 q 42 771 42 658 q 59 870 42 826 q 106 944 76 914 q 176 990 136 974 q 258 1006 215 1006 q 341 990 307 1006 q 396 957 375 975 l 354 901 q 314 926 333 918 q 264 935 294 935 q 167 890 206 935 q 129 771 129 844 q 167 653 129 699 q 264 608 204 608 q 324 619 300 608 q 367 646 347 631 l 403 590 q 344 553 379 569 q 256 538 308 538 z "},"ᵈ":{"ha":519,"x_min":46,"x_max":447,"o":"m 236 538 q 97 600 147 538 q 46 779 46 663 q 62 874 46 832 q 105 944 78 915 q 167 990 132 974 q 240 1006 203 1006 q 307 992 276 1006 q 365 956 338 979 l 361 1033 l 361 1199 l 447 1199 l 447 549 l 378 549 l 368 597 l 364 597 q 306 555 336 572 q 236 538 275 538 m 256 608 q 308 623 283 608 q 361 665 333 638 l 361 890 q 306 924 333 914 q 254 935 279 935 q 170 892 206 935 q 135 779 135 850 q 164 652 135 696 q 256 608 193 608 z "},"ᵉ":{"ha":467,"x_min":39,"x_max":431,"o":"m 258 538 q 172 553 213 538 q 103 598 132 568 q 56 671 74 628 q 39 771 39 714 q 56 869 39 825 q 101 942 72 913 q 167 989 129 972 q 247 1006 206 1006 q 334 986 299 1006 q 391 936 369 967 q 422 869 413 906 q 431 800 431 833 q 429 776 431 786 q 425 751 428 767 l 124 751 q 167 644 128 682 q 268 606 206 606 q 329 615 300 606 q 382 642 358 625 l 415 586 q 344 551 383 565 q 258 538 304 538 m 122 808 l 354 808 q 349 854 354 831 q 331 896 343 878 q 298 926 318 914 q 247 938 278 938 q 164 904 197 938 q 122 808 131 871 z "},"ᶠ":{"ha":279,"x_min":26,"x_max":306,"o":"m 89 549 l 89 926 l 26 926 l 26 992 l 89 994 l 89 1053 q 122 1169 89 1124 q 228 1214 156 1214 q 306 1200 272 1214 l 288 1136 q 265 1142 278 1139 q 236 1144 253 1144 q 190 1122 206 1144 q 175 1058 175 1099 l 175 994 l 269 994 l 269 926 l 175 926 l 175 549 l 89 549 z "},"ᵍ":{"ha":476,"x_min":42,"x_max":461,"o":"m 228 344 q 93 375 144 344 q 42 464 42 406 q 106 561 42 522 l 106 567 q 76 596 88 578 q 65 640 65 614 q 81 688 65 667 q 115 721 96 708 l 115 726 q 74 775 92 744 q 56 846 56 806 q 69 913 56 883 q 108 963 83 943 q 163 994 132 983 q 231 1006 194 1006 q 301 993 269 1006 l 454 993 l 454 926 l 368 926 q 391 890 382 913 q 400 843 400 868 q 387 778 400 807 q 351 728 374 749 q 297 698 328 708 q 231 688 265 688 q 198 690 215 688 q 164 701 181 693 q 145 681 153 693 q 138 654 138 669 q 154 621 138 632 q 215 610 171 610 l 301 610 q 422 584 383 610 q 461 500 461 558 q 445 440 461 468 q 399 391 429 413 q 325 357 368 369 q 228 344 282 344 m 231 746 q 295 773 268 746 q 322 846 322 800 q 295 917 322 892 q 231 943 268 943 q 164 918 190 943 q 138 846 138 893 q 164 773 138 800 q 231 746 190 746 m 242 404 q 340 430 303 404 q 378 488 378 456 q 355 526 378 515 q 290 538 332 538 l 217 538 q 190 538 206 538 q 158 543 174 539 q 115 476 115 513 q 149 423 115 442 q 242 404 182 404 z "},"ʰ":{"ha":508,"x_min":72,"x_max":446,"o":"m 72 549 l 72 1199 l 158 1199 l 158 1025 l 154 932 q 221 983 182 961 q 304 1006 260 1006 q 414 957 382 1006 q 446 831 446 908 l 446 549 l 360 549 l 360 818 q 344 901 360 871 q 275 932 328 932 q 158 867 224 932 l 158 549 l 72 549 z "},"ⁱ":{"ha":231,"x_min":58,"x_max":175,"o":"m 117 1081 q 75 1096 92 1081 q 58 1135 58 1111 q 75 1174 58 1158 q 117 1190 92 1190 q 158 1174 142 1190 q 175 1135 175 1158 q 158 1096 175 1111 q 117 1081 142 1081 m 72 549 l 72 994 l 158 994 l 158 549 l 72 549 z "},"ʲ":{"ha":235,"x_min":-36,"x_max":178,"o":"m 32 347 q -6 350 8 347 q -36 358 -21 353 l -18 426 q -1 420 -10 422 q 21 418 7 418 q 64 440 53 418 q 75 501 75 461 l 75 994 l 161 994 l 161 507 q 132 390 161 432 q 32 347 103 347 m 119 1081 q 78 1096 94 1081 q 61 1135 61 1111 q 78 1174 61 1158 q 119 1190 94 1190 q 161 1174 144 1190 q 178 1135 178 1158 q 161 1096 178 1111 q 119 1081 144 1081 z "},"ᵏ":{"ha":468,"x_min":72,"x_max":461,"o":"m 72 549 l 72 1199 l 158 1199 l 158 772 l 164 772 l 346 994 l 442 994 l 286 813 l 461 549 l 365 549 l 236 754 l 158 661 l 158 549 l 72 549 z "},"ˡ":{"ha":242,"x_min":72,"x_max":213,"o":"m 163 538 q 92 567 113 538 q 72 650 72 597 l 72 1199 l 158 1199 l 158 643 q 164 616 158 624 q 181 608 169 608 q 189 608 185 608 q 200 611 193 608 l 213 546 q 192 540 203 542 q 163 538 181 538 z "},"ᵐ":{"ha":776,"x_min":72,"x_max":710,"o":"m 72 549 l 72 994 l 142 994 l 149 932 l 154 932 q 215 984 182 963 q 294 1006 249 1006 q 419 922 388 1006 q 488 981 451 956 q 569 1006 525 1006 q 677 958 644 1006 q 710 831 710 910 l 710 549 l 624 549 l 624 818 q 607 901 624 871 q 542 932 590 932 q 491 917 517 932 q 433 867 465 901 l 433 549 l 347 549 l 347 818 q 331 901 347 871 q 265 932 314 932 q 216 917 242 932 q 158 867 190 901 l 158 549 l 72 549 z "},"ⁿ":{"ha":513,"x_min":72,"x_max":446,"o":"m 72 549 l 72 994 l 140 994 l 149 932 l 154 932 q 222 984 183 963 q 304 1006 260 1006 q 414 957 382 1006 q 446 831 446 908 l 446 549 l 360 549 l 360 818 q 344 901 360 871 q 276 932 328 932 q 158 867 224 932 l 158 549 l 72 549 z "},"ᵒ":{"ha":507,"x_min":42,"x_max":464,"o":"m 253 538 q 172 553 210 538 q 104 599 133 569 q 58 672 75 629 q 42 771 42 715 q 58 870 42 826 q 104 944 75 914 q 172 990 133 975 q 253 1006 210 1006 q 334 990 296 1006 q 401 944 372 975 q 447 870 431 914 q 464 771 464 826 q 447 672 464 715 q 401 599 431 629 q 334 553 372 569 q 253 538 296 538 m 253 608 q 343 653 311 608 q 375 771 375 699 q 343 890 375 846 q 253 935 311 935 q 162 890 194 935 q 129 771 129 846 q 162 653 129 699 q 253 608 194 608 z "},"ᵖ":{"ha":519,"x_min":72,"x_max":474,"o":"m 72 357 l 72 994 l 140 994 l 150 943 l 154 943 q 217 987 182 968 q 293 1006 253 1006 q 427 944 381 1006 q 474 779 474 883 q 458 677 474 722 q 415 601 442 632 q 353 553 388 569 q 279 538 318 538 q 215 551 249 538 q 153 589 181 564 l 158 501 l 158 357 l 72 357 m 267 608 q 351 652 317 608 q 385 779 385 696 q 358 893 385 851 q 272 935 331 935 q 158 875 218 935 l 158 651 q 215 618 186 628 q 267 608 243 608 z "},"ʳ":{"ha":333,"x_min":72,"x_max":335,"o":"m 72 549 l 72 994 l 142 994 l 151 917 l 156 917 q 282 1006 208 1006 q 335 997 318 1006 l 318 919 q 297 924 310 922 q 274 926 285 926 q 214 905 244 926 q 160 831 183 883 l 160 549 l 72 549 z "},"ˢ":{"ha":393,"x_min":26,"x_max":365,"o":"m 200 538 q 105 555 150 538 q 26 599 60 572 l 68 656 q 131 618 99 632 q 201 604 164 604 q 261 622 240 604 q 282 667 282 640 q 251 715 282 699 q 181 746 219 731 q 133 765 157 754 q 91 792 110 776 q 60 828 72 807 q 49 878 49 849 q 89 968 49 931 q 203 1006 129 1006 q 288 990 251 1006 q 351 956 324 975 l 308 900 q 260 929 283 919 q 206 939 238 939 q 149 922 168 939 q 131 883 131 904 q 139 857 131 868 q 161 838 147 846 q 193 822 175 829 q 231 807 211 815 q 278 788 254 799 q 322 763 303 778 q 353 727 342 749 q 365 675 365 706 q 321 576 365 614 q 200 538 276 538 z "},"ᵗ":{"ha":322,"x_min":22,"x_max":313,"o":"m 222 538 q 119 581 149 538 q 89 693 89 624 l 89 925 l 22 925 l 22 992 l 92 994 l 103 1121 l 175 1121 l 175 994 l 297 994 l 297 925 l 175 925 l 175 693 q 243 607 175 607 q 294 618 272 607 l 313 554 q 269 542 293 547 q 222 538 246 538 z "},"ᵘ":{"ha":514,"x_min":69,"x_max":443,"o":"m 213 538 q 102 585 135 538 q 69 711 69 633 l 69 994 l 156 994 l 156 724 q 172 641 156 671 q 240 611 188 611 q 297 626 268 611 q 357 676 325 642 l 357 994 l 443 994 l 443 549 l 375 549 l 365 611 l 361 611 q 295 559 333 581 q 213 538 257 538 z "},"ᵛ":{"ha":446,"x_min":11,"x_max":435,"o":"m 172 549 l 11 994 l 97 994 l 178 750 l 221 617 l 226 617 l 269 750 l 350 994 l 435 994 l 274 549 l 172 549 z "},"ʷ":{"ha":676,"x_min":22,"x_max":654,"o":"m 146 549 l 22 994 l 111 994 l 172 746 l 199 619 l 204 619 l 235 746 l 300 994 l 378 994 l 447 746 l 478 619 l 483 619 l 513 746 l 572 994 l 654 994 l 533 549 l 429 549 l 369 775 l 340 903 l 338 903 l 308 775 l 249 549 l 146 549 z "},"ˣ":{"ha":426,"x_min":11,"x_max":414,"o":"m 11 549 l 161 782 l 24 994 l 118 994 l 175 903 l 218 832 l 224 832 l 261 903 l 313 994 l 404 994 l 268 772 l 414 549 l 319 549 l 260 644 l 211 721 l 206 721 l 160 644 l 103 549 l 11 549 z "},"ʸ":{"ha":443,"x_min":11,"x_max":432,"o":"m 90 363 q 33 371 58 363 l 51 440 q 85 432 69 432 q 146 457 121 432 q 183 522 171 482 l 193 551 l 11 994 l 99 994 l 186 760 q 208 697 197 729 q 229 631 218 665 l 235 631 q 254 696 244 664 q 275 760 264 728 l 347 994 l 432 994 l 267 522 q 201 407 242 451 q 90 363 161 363 z "},"ᶻ":{"ha":403,"x_min":29,"x_max":378,"o":"m 29 549 l 29 594 l 263 925 l 57 925 l 57 994 l 371 994 l 371 947 l 139 618 l 378 618 l 378 549 l 29 549 z "},"ˁ":{"ha":419,"x_min":31,"x_max":406,"o":"m 186 549 l 186 808 q 74 904 117 854 q 31 1032 31 954 q 46 1110 31 1076 q 88 1166 61 1143 q 152 1200 115 1189 q 231 1211 189 1211 q 335 1186 293 1211 q 406 1131 378 1161 l 361 1075 q 310 1121 340 1101 q 238 1140 281 1140 q 148 1110 179 1140 q 117 1031 117 1081 q 153 933 117 974 q 271 844 189 892 l 271 549 l 186 549 z "},"ː":{"ha":346,"x_min":69,"x_max":276,"o":"m 69 0 l 165 192 l 181 192 l 276 0 l 69 0 m 165 454 l 69 643 l 276 643 l 181 454 l 165 454 z "},"ˑ":{"ha":346,"x_min":69,"x_max":276,"o":"m 165 374 l 69 563 l 276 563 l 181 374 l 165 374 z "},"˞":{"ha":210,"x_min":-135,"x_max":238,"o":"m 144 319 q 66 349 100 319 q 13 453 32 378 l -135 393 l -135 481 l 68 564 q 84 477 75 511 q 103 424 93 443 q 126 399 114 406 q 153 392 139 392 q 183 398 171 392 q 207 413 196 404 l 238 353 q 198 330 221 340 q 144 319 175 319 z "},"ˠ":{"ha":442,"x_min":11,"x_max":431,"o":"m 222 344 q 142 375 171 344 q 114 454 114 406 q 128 519 114 486 q 167 601 143 553 l 11 994 l 99 994 l 181 764 q 201 708 190 733 q 221 651 211 682 l 225 651 q 245 708 235 682 q 267 764 256 733 l 347 994 l 431 994 l 278 600 q 317 519 303 551 q 332 454 332 486 q 303 375 332 406 q 222 344 275 344 m 222 401 q 251 415 242 401 q 260 449 260 428 q 225 560 260 493 l 221 560 q 197 499 206 528 q 188 449 188 471 q 196 415 188 428 q 222 401 204 401 z "},"ₔ":{"ha":467,"x_min":35,"x_max":426,"o":"m 222 538 q 133 557 169 538 q 75 607 97 576 q 44 675 53 638 q 35 747 35 713 q 36 772 35 763 q 40 797 38 781 l 342 797 q 306 899 339 860 q 211 938 274 938 q 151 928 178 938 q 99 901 124 918 l 67 957 q 135 992 99 978 q 217 1006 172 1006 q 369 944 313 1006 q 426 771 426 883 q 410 674 426 717 q 367 601 394 631 q 302 554 339 571 q 222 538 265 538 m 221 606 q 305 639 272 606 q 342 740 338 672 l 111 740 q 136 645 111 685 q 221 606 161 606 z "},"°":{"ha":460,"x_min":57,"x_max":404,"o":"m 231 596 q 165 608 196 596 q 109 644 133 621 q 71 699 85 667 q 57 772 57 732 q 71 847 57 814 q 109 903 85 879 q 165 939 133 926 q 231 951 196 951 q 297 939 265 951 q 352 903 328 926 q 390 847 376 879 q 404 772 404 814 q 390 699 404 732 q 352 644 376 667 q 297 608 328 621 q 231 596 265 596 m 231 660 q 306 692 276 660 q 335 772 335 724 q 306 856 335 824 q 231 888 276 888 q 156 856 185 888 q 126 772 126 824 q 156 692 126 724 q 231 660 185 660 z "},"¤":{"ha":690,"x_min":36,"x_max":654,"o":"m 97 143 l 36 206 l 125 296 q 88 368 101 328 q 75 457 75 408 q 88 547 75 506 q 125 619 101 588 l 36 711 l 97 774 l 192 676 q 346 728 258 728 q 426 715 386 728 q 499 676 467 701 l 593 774 l 654 711 l 564 619 q 601 547 588 588 q 615 457 615 506 q 601 368 615 408 q 564 296 588 328 l 654 206 l 593 143 l 499 239 q 426 199 467 213 q 346 186 386 186 q 192 239 257 186 l 97 143 m 346 271 q 409 284 379 271 q 461 322 439 297 q 497 381 483 347 q 510 457 510 415 q 497 533 510 499 q 461 592 483 567 q 409 630 439 617 q 346 643 379 643 q 282 630 313 643 q 229 592 251 617 q 194 533 207 567 q 181 457 181 499 q 194 381 181 415 q 229 322 207 347 q 282 284 251 297 q 346 271 313 271 z "},"$":{"ha":690,"x_min":72,"x_max":607,"o":"m 308 -153 l 308 -15 q 179 22 242 -8 q 72 92 117 51 l 125 171 q 223 105 169 132 q 340 78 276 78 q 456 117 418 78 q 494 221 494 156 q 466 313 494 276 q 394 377 438 350 q 301 428 351 404 q 207 482 250 451 q 135 556 164 513 q 107 668 107 600 q 162 823 107 761 q 308 899 217 885 l 308 1039 l 392 1039 l 392 901 q 505 865 458 894 q 589 796 551 836 l 528 728 q 452 786 489 765 q 358 807 415 807 q 257 771 294 807 q 219 674 219 735 q 248 592 219 624 q 319 535 276 560 q 413 488 363 511 q 507 433 464 465 q 578 352 550 400 q 607 229 607 304 q 549 65 607 129 q 392 -12 492 1 l 392 -153 l 308 -153 z "},"£":{"ha":690,"x_min":74,"x_max":629,"o":"m 75 0 l 75 69 q 184 174 146 108 q 222 319 222 240 q 219 358 222 339 q 213 396 217 376 l 74 396 l 74 468 l 167 474 l 192 474 q 166 560 178 518 q 154 647 154 603 q 173 753 154 706 q 226 833 192 800 q 307 885 260 867 q 413 903 354 903 q 540 873 488 903 q 628 799 592 843 l 561 733 q 501 786 535 765 q 421 807 468 807 q 306 762 346 807 q 267 644 267 717 q 277 559 267 600 q 300 474 288 518 l 521 474 l 521 396 l 318 396 q 323 358 321 376 q 325 318 325 339 q 303 196 325 244 q 239 104 281 147 l 239 99 l 629 99 l 629 0 l 75 0 z "},"¥":{"ha":690,"x_min":32,"x_max":658,"o":"m 288 0 l 288 219 l 63 219 l 63 286 l 288 286 l 288 376 l 63 376 l 63 442 l 258 442 l 32 886 l 151 886 l 260 649 q 301 556 281 603 q 343 461 321 510 l 349 461 q 392 556 372 510 q 433 649 413 603 l 542 886 l 658 886 l 431 442 l 628 442 l 628 376 l 401 376 l 401 286 l 628 286 l 628 219 l 401 219 l 401 0 l 288 0 z "},"€":{"ha":690,"x_min":32,"x_max":682,"o":"m 443 -17 q 327 6 381 -17 q 232 74 274 29 q 162 181 190 118 q 121 326 133 244 l 32 326 l 32 386 l 114 392 q 113 417 113 404 q 113 442 113 429 q 113 464 113 453 q 114 486 113 475 l 32 486 l 32 547 l 121 554 q 163 701 133 636 q 235 810 192 765 q 337 879 279 856 q 463 903 394 903 q 579 872 525 903 q 669 794 633 840 l 601 729 q 538 788 572 765 q 458 811 503 811 q 311 743 367 811 q 238 554 256 675 l 590 554 l 590 486 l 232 486 q 231 467 231 476 q 231 446 231 457 q 231 419 231 432 q 232 393 231 406 l 535 393 l 535 326 l 239 326 q 310 142 257 208 q 450 75 364 75 q 540 100 501 75 q 614 174 578 125 l 682 113 q 578 17 636 51 q 443 -17 519 -17 z "},"¢":{"ha":690,"x_min":85,"x_max":631,"o":"m 199 431 q 242 276 199 338 q 364 197 285 215 l 364 663 q 243 583 288 644 q 199 431 199 522 m 364 -46 l 364 99 q 250 131 301 106 q 162 199 199 157 q 105 299 125 240 q 85 431 85 357 q 106 560 85 503 q 165 658 128 617 q 254 726 203 700 q 364 760 306 751 l 364 907 l 436 907 l 436 764 q 542 738 497 761 q 618 683 586 714 l 563 611 q 503 651 535 636 q 436 669 472 667 l 436 192 q 517 213 481 194 q 581 257 553 232 l 631 185 q 540 125 590 149 q 436 97 490 101 l 436 -46 l 364 -46 z "},"ƒ":{"ha":690,"x_min":25,"x_max":642,"o":"m 126 -135 q 68 -129 94 -135 q 25 -114 42 -124 l 46 -28 q 115 -42 78 -42 q 209 13 181 -42 q 249 175 238 68 l 282 479 l 161 479 l 161 561 l 257 567 l 292 567 l 300 644 q 369 856 315 783 q 533 928 422 928 q 593 920 564 928 q 642 903 622 913 l 617 815 q 583 828 601 822 q 539 835 565 835 q 485 819 507 835 q 448 779 463 804 q 424 722 433 754 q 411 654 415 689 l 401 567 l 576 567 l 576 479 l 392 479 l 356 150 q 333 34 349 86 q 292 -56 318 -18 q 225 -114 265 -93 q 126 -135 185 -135 z "},"₡":{"ha":690,"x_min":85,"x_max":664,"o":"m 442 811 q 422 810 431 811 q 403 808 413 810 l 319 108 q 397 78 354 83 l 483 806 q 463 810 472 808 q 442 811 453 811 m 203 446 q 221 278 203 351 q 274 157 239 206 l 349 790 q 240 665 278 754 q 203 446 203 576 m 369 -153 l 386 -15 q 307 4 347 -11 l 289 -153 l 236 -153 l 258 29 q 131 187 178 82 q 85 442 85 292 q 159 745 85 628 q 361 893 233 863 l 378 1039 l 431 1039 l 414 901 q 429 903 421 903 q 444 903 438 903 q 494 897 472 903 l 511 1039 l 564 1039 l 544 881 q 606 841 578 865 q 657 789 635 817 l 589 725 q 533 779 563 758 l 450 76 q 530 106 494 82 q 597 174 565 131 l 664 113 q 565 22 619 56 q 439 -17 510 -12 l 422 -153 l 369 -153 z "},"₤":{"ha":690,"x_min":74,"x_max":629,"o":"m 75 0 l 75 69 q 184 174 146 108 q 222 319 222 240 l 222 326 l 74 326 l 74 388 l 169 394 l 214 394 q 203 435 208 415 q 190 476 197 456 l 74 476 l 74 538 l 158 544 l 171 544 q 159 596 164 571 q 154 647 154 621 q 173 753 154 706 q 226 833 192 800 q 307 885 260 867 q 413 903 354 903 q 540 873 488 903 q 628 799 592 843 l 561 733 q 501 786 535 765 q 421 807 468 807 q 306 762 346 807 q 267 644 267 717 q 270 594 267 618 q 281 544 274 569 l 521 544 l 521 476 l 299 476 q 318 394 313 433 l 521 394 l 521 326 l 325 326 l 325 318 q 303 196 325 244 q 239 104 281 147 l 239 99 l 629 99 l 629 0 l 75 0 z "},"₦":{"ha":690,"x_min":15,"x_max":671,"o":"m 188 782 l 204 535 l 269 535 l 193 782 l 188 782 m 497 103 l 503 103 l 488 333 l 426 333 l 497 103 m 119 0 l 119 333 l 15 333 l 15 386 l 119 393 l 119 476 l 15 476 l 15 528 l 119 535 l 119 886 l 236 886 l 360 535 l 481 535 l 481 886 l 571 886 l 571 535 l 671 535 l 671 476 l 571 476 l 571 393 l 671 393 l 671 333 l 571 333 l 571 0 l 454 0 l 338 333 l 210 333 l 210 0 l 119 0 m 403 413 l 408 393 l 483 393 l 481 440 l 481 476 l 381 476 l 403 413 m 210 446 l 210 393 l 317 393 l 288 475 l 288 476 l 208 476 l 210 446 z "},"₧":{"ha":690,"x_min":14,"x_max":672,"o":"m 115 0 l 115 579 l 14 579 l 14 650 l 115 657 l 115 886 l 283 886 q 397 874 344 886 q 489 834 449 861 q 554 763 529 807 q 586 657 579 719 l 672 657 l 672 579 l 586 579 q 554 473 579 518 q 489 398 529 428 q 396 353 449 368 q 283 339 343 339 l 225 339 l 225 0 l 115 0 m 225 807 l 225 657 l 476 657 q 413 773 465 739 q 269 807 361 807 l 225 807 m 225 418 l 269 418 q 414 459 361 418 q 476 579 467 500 l 225 579 l 225 418 z "},"₩":{"ha":690,"x_min":-21,"x_max":707,"o":"m 319 517 l 315 481 l 375 481 l 369 518 l 349 743 l 343 743 l 319 517 m 497 86 l 503 86 l 518 275 l 532 421 l 456 421 l 476 275 l 497 86 m 133 0 l 78 421 l -21 421 l -21 474 l 69 479 l 15 886 l 122 886 l 163 481 l 250 481 l 299 831 l 399 831 l 447 481 l 538 481 l 578 886 l 676 886 l 625 481 l 707 481 l 707 421 l 617 421 l 564 0 l 440 0 l 383 421 l 307 421 l 251 0 l 133 0 m 197 86 l 203 86 l 221 275 l 242 421 l 168 421 l 182 275 l 197 86 z "},"₫":{"ha":690,"x_min":94,"x_max":672,"o":"m 313 153 q 153 220 213 153 q 94 415 94 288 q 113 518 94 472 q 164 597 132 564 q 236 647 196 629 q 321 664 276 664 q 405 647 372 664 q 472 600 438 631 l 467 715 l 467 763 l 264 763 l 264 831 l 467 831 l 467 924 l 564 924 l 564 831 l 672 831 l 672 769 l 564 763 l 564 167 l 483 167 l 475 226 l 471 226 q 401 174 440 194 q 313 153 361 153 m 332 235 q 401 252 368 235 q 467 308 433 269 l 467 524 q 404 567 432 554 q 338 581 376 581 q 283 568 308 581 q 238 533 257 556 q 207 481 218 511 q 196 417 196 451 q 231 283 196 331 q 332 235 267 235 m 110 0 l 110 68 l 608 68 l 608 0 l 110 0 z "},"₱":{"ha":690,"x_min":14,"x_max":672,"o":"m 115 0 l 115 524 l 14 524 l 14 574 l 115 581 l 115 663 l 14 663 l 14 714 l 115 719 l 115 886 l 283 886 q 467 848 389 886 q 574 719 544 810 l 672 719 l 672 663 l 585 663 q 587 640 586 651 q 588 617 588 629 q 588 598 588 607 q 586 581 588 589 l 672 581 l 672 524 l 575 524 q 469 384 547 429 q 283 339 390 339 l 225 339 l 225 0 l 115 0 m 225 807 l 225 719 l 460 719 q 388 787 436 767 q 269 807 340 807 l 225 807 m 479 617 q 478 640 479 629 q 476 663 478 651 l 225 663 l 225 581 l 476 581 q 478 598 478 589 q 479 617 479 607 m 225 418 l 269 418 q 463 524 418 418 l 225 524 l 225 418 z "},"₲":{"ha":690,"x_min":65,"x_max":639,"o":"m 360 -153 l 360 -14 q 240 29 294 -6 q 147 122 186 64 q 87 261 108 181 q 65 442 65 342 q 86 618 65 539 q 145 756 107 697 q 238 851 183 814 q 360 899 292 888 l 360 1039 l 443 1039 l 443 901 q 550 865 501 896 q 635 792 599 835 l 567 728 q 499 788 535 765 q 417 811 464 811 q 316 785 360 811 q 242 713 272 760 q 197 597 213 665 q 182 446 182 529 q 241 176 182 275 q 407 78 300 78 q 481 93 447 78 q 535 129 515 108 l 535 364 l 394 364 l 394 460 l 639 460 l 639 85 q 549 18 599 43 q 443 -14 500 -7 l 443 -153 l 360 -153 z "},"₴":{"ha":690,"x_min":32,"x_max":657,"o":"m 376 -17 q 187 42 258 -17 q 115 207 115 101 q 122 271 115 242 q 140 326 129 300 l 32 326 l 32 386 l 126 393 l 185 393 q 233 443 207 421 q 288 486 260 465 l 32 486 l 32 547 l 128 554 l 376 554 q 432 617 410 583 q 454 694 454 650 q 422 778 454 744 q 331 811 389 811 q 244 790 279 811 q 172 732 208 768 l 113 796 q 204 872 153 840 q 333 903 256 903 q 428 888 385 903 q 502 844 471 872 q 550 778 533 817 q 567 690 567 739 q 555 616 567 650 q 524 554 543 582 l 657 554 l 657 486 l 463 486 q 404 439 435 461 q 344 393 374 417 l 657 393 l 657 326 l 274 326 q 240 269 253 300 q 226 200 226 239 q 265 110 226 146 q 376 75 303 75 q 483 102 435 75 q 571 167 531 129 l 622 92 q 511 15 576 46 q 376 -17 446 -17 z "},"₵":{"ha":690,"x_min":85,"x_max":664,"o":"m 203 446 q 251 194 203 290 q 388 79 299 97 l 388 804 q 250 688 297 782 q 203 446 203 593 m 388 -153 l 388 -15 q 264 26 319 -8 q 169 118 208 60 q 107 258 129 176 q 85 442 85 340 q 106 619 85 539 q 167 757 128 699 q 263 851 207 815 q 388 899 318 888 l 388 1035 l 460 1035 l 460 903 q 567 868 518 899 q 651 794 617 838 l 583 729 q 528 784 558 763 q 460 810 499 806 l 460 78 q 533 109 500 85 q 597 174 567 133 l 664 113 q 574 27 624 60 q 460 -14 524 -6 l 460 -153 l 388 -153 z "},"₹":{"ha":690,"x_min":100,"x_max":626,"o":"m 100 350 l 100 443 l 199 443 q 356 483 299 443 q 421 607 414 524 l 100 607 l 100 668 l 196 675 l 418 675 q 347 765 403 739 q 199 792 290 792 l 100 792 l 100 886 l 626 886 l 626 818 l 429 818 q 496 760 469 797 q 532 675 522 724 l 626 675 l 626 607 l 535 607 q 471 442 528 503 q 324 361 414 382 l 585 0 l 454 0 l 207 350 l 100 350 z "},"₺":{"ha":690,"x_min":32,"x_max":646,"o":"m 160 -17 l 160 363 l 32 296 l 32 369 l 160 436 l 160 536 l 32 469 l 32 542 l 160 610 l 160 886 l 276 886 l 276 667 l 504 786 l 504 713 l 276 593 l 276 493 l 504 613 l 504 540 l 276 419 l 276 92 q 370 108 322 93 q 457 152 418 124 q 521 223 496 181 q 546 319 546 265 q 545 345 546 331 q 539 379 544 360 l 636 404 q 646 325 646 360 q 609 172 646 238 q 507 64 572 107 q 353 1 442 21 q 160 -17 264 -19 z "},"₮":{"ha":690,"x_min":46,"x_max":640,"o":"m 288 0 l 288 268 l 107 174 l 107 247 l 288 342 l 288 442 l 107 347 l 107 421 l 288 515 l 288 797 l 46 797 l 46 886 l 640 886 l 640 797 l 401 797 l 401 569 l 581 665 l 581 592 l 401 496 l 401 396 l 581 492 l 581 418 l 401 324 l 401 0 l 288 0 z "},"₸":{"ha":690,"x_min":46,"x_max":640,"o":"m 288 0 l 288 658 l 46 658 l 46 719 l 143 725 l 640 725 l 640 658 l 401 658 l 401 0 l 288 0 m 46 818 l 46 886 l 640 886 l 640 818 l 46 818 z "},"₽":{"ha":690,"x_min":14,"x_max":588,"o":"m 115 0 l 115 231 l 14 231 l 14 290 l 115 297 l 115 382 l 14 382 l 14 443 l 115 449 l 115 886 l 282 886 q 403 872 347 886 q 501 828 460 858 q 565 751 542 799 q 588 639 588 704 q 564 524 588 572 q 499 444 540 475 q 402 397 458 413 q 282 382 346 382 l 225 382 l 225 297 l 506 297 l 506 231 l 225 231 l 225 0 l 115 0 m 225 449 l 269 449 q 424 495 369 449 q 479 633 479 542 q 424 768 479 729 q 269 807 369 807 l 225 807 l 225 449 z "},"⁄":{"ha":119,"x_min":-232,"x_max":349,"o":"m -232 -17 l 271 928 l 349 928 l -154 -17 l -232 -17 z "},"∕":{"ha":119,"x_min":-232,"x_max":349,"o":"m -232 -17 l 271 928 l 349 928 l -154 -17 l -232 -17 z "},"%":{"ha":1144,"x_min":49,"x_max":1097,"o":"m 256 353 q 105 428 161 353 q 49 642 49 503 q 105 853 49 779 q 256 928 161 928 q 406 853 349 928 q 463 642 463 779 q 406 428 463 503 q 256 353 349 353 m 256 424 q 342 478 308 424 q 375 642 375 533 q 342 803 375 750 q 256 857 308 857 q 168 803 201 857 q 135 642 135 750 q 168 478 135 533 q 256 424 201 424 m 281 -17 l 783 928 l 861 928 l 358 -17 l 281 -17 m 890 -17 q 740 58 796 -17 q 683 272 683 133 q 740 484 683 410 q 890 558 796 558 q 1040 484 983 558 q 1097 272 1097 410 q 1040 58 1097 133 q 890 -17 983 -17 m 890 54 q 976 109 943 54 q 1010 272 1010 164 q 976 434 1010 381 q 890 488 943 488 q 803 434 836 488 q 769 272 769 381 q 803 109 769 164 q 890 54 836 54 z "},"‰":{"ha":1658,"x_min":49,"x_max":1611,"o":"m 278 -17 l 781 928 l 858 928 l 356 -17 l 278 -17 m 256 353 q 105 428 161 353 q 49 642 49 503 q 105 853 49 779 q 256 928 161 928 q 406 853 349 928 q 463 642 463 779 q 406 428 463 503 q 256 353 349 353 m 256 424 q 342 478 308 424 q 375 642 375 533 q 342 803 375 750 q 256 857 308 857 q 168 803 201 857 q 135 642 135 750 q 168 478 135 533 q 256 424 201 424 m 888 -17 q 737 58 793 -17 q 681 272 681 133 q 737 484 681 410 q 888 558 793 558 q 1038 484 981 558 q 1094 272 1094 410 q 1038 58 1094 133 q 888 -17 981 -17 m 888 54 q 974 109 940 54 q 1007 272 1007 164 q 974 434 1007 381 q 888 488 940 488 q 800 434 833 488 q 767 272 767 381 q 800 109 767 164 q 888 54 833 54 m 1404 -17 q 1253 58 1310 -17 q 1197 272 1197 133 q 1253 484 1197 410 q 1404 558 1310 558 q 1554 484 1497 558 q 1611 272 1611 410 q 1554 58 1611 133 q 1404 -17 1497 -17 m 1404 54 q 1490 109 1457 54 q 1524 272 1524 164 q 1490 434 1524 381 q 1404 488 1457 488 q 1317 434 1350 488 q 1283 272 1283 381 q 1317 109 1283 164 q 1404 54 1350 54 z "},"¼":{"ha":1085,"x_min":89,"x_max":1040,"o":"m 207 369 l 207 797 l 89 797 l 89 856 q 165 877 135 864 q 224 911 196 890 l 296 911 l 296 369 l 207 369 m 250 -17 l 753 928 l 831 928 l 328 -17 l 250 -17 m 879 0 l 879 144 l 632 144 l 632 190 l 860 542 l 960 542 l 960 208 l 1040 208 l 1040 144 l 960 144 l 960 0 l 879 0 m 725 208 l 879 208 l 879 306 l 885 457 l 879 457 l 810 344 l 725 208 z "},"½":{"ha":1122,"x_min":89,"x_max":1057,"o":"m 207 369 l 207 797 l 89 797 l 89 856 q 165 877 135 864 q 224 911 196 890 l 296 911 l 296 369 l 207 369 m 221 -17 l 724 928 l 801 928 l 299 -17 l 221 -17 m 685 0 l 685 51 q 796 153 747 108 q 876 236 844 199 q 925 306 908 274 q 942 369 942 339 q 914 453 942 422 q 838 483 886 483 q 774 460 803 483 q 721 404 744 438 l 668 453 q 747 529 700 500 q 849 558 793 558 q 980 514 931 558 q 1029 383 1029 469 q 1014 308 1029 344 q 972 235 999 272 q 908 160 944 199 q 828 76 871 121 l 1057 76 l 1057 0 l 685 0 z "},"¾":{"ha":1106,"x_min":49,"x_max":1061,"o":"m 250 353 q 132 383 183 353 q 49 458 81 413 l 108 504 q 168 445 133 467 q 246 424 203 424 q 322 449 290 424 q 354 521 354 474 q 310 592 354 568 q 186 617 265 617 l 186 674 q 295 701 257 674 q 333 771 333 729 q 306 833 333 810 q 235 857 279 857 q 176 838 204 857 q 125 792 149 819 l 71 839 q 149 903 107 879 q 249 928 192 928 q 315 918 283 928 q 369 890 346 908 q 407 844 393 871 q 421 782 421 817 q 394 701 421 733 q 326 649 368 668 q 408 603 372 638 q 443 515 443 569 q 428 448 443 478 q 386 397 413 418 q 324 364 360 375 q 250 353 289 353 m 301 -17 l 804 928 l 882 928 l 379 -17 l 301 -17 m 900 0 l 900 144 l 653 144 l 653 190 l 881 542 l 981 542 l 981 208 l 1061 208 l 1061 144 l 981 144 l 981 0 l 900 0 m 746 208 l 900 208 l 900 306 l 906 457 l 900 457 l 831 344 l 746 208 z "},"⅓":{"ha":1117,"x_min":89,"x_max":1050,"o":"m 207 369 l 207 797 l 89 797 l 89 856 q 165 877 135 864 q 224 911 196 890 l 296 911 l 296 369 l 207 369 m 213 -17 l 715 928 l 793 928 l 290 -17 l 213 -17 m 857 -17 q 739 13 790 -17 q 656 89 688 43 l 715 135 q 775 76 740 97 q 853 54 810 54 q 929 79 897 54 q 961 151 961 104 q 917 223 961 199 q 793 247 872 247 l 793 304 q 902 332 864 304 q 940 401 940 360 q 913 464 940 440 q 842 488 886 488 q 783 469 811 488 q 732 422 756 450 l 678 469 q 756 534 714 510 q 856 558 799 558 q 922 549 890 558 q 976 520 953 539 q 1014 474 1000 501 q 1028 413 1028 447 q 1001 331 1028 364 q 933 279 975 299 q 1015 234 979 268 q 1050 146 1050 200 q 1035 78 1050 108 q 993 27 1019 49 q 931 -6 967 6 q 857 -17 896 -17 z "},"⅔":{"ha":1140,"x_min":57,"x_max":1072,"o":"m 74 369 l 74 421 q 185 523 136 478 q 265 606 233 568 q 314 676 297 643 q 331 739 331 708 q 303 822 331 792 q 226 853 275 853 q 163 830 192 853 q 110 774 133 807 l 57 822 q 135 899 89 869 q 238 928 182 928 q 369 883 319 928 q 418 753 418 839 q 403 678 418 714 q 360 605 388 642 q 297 529 333 568 q 217 446 260 490 l 446 446 l 446 369 l 74 369 m 282 -17 l 785 928 l 863 928 l 360 -17 l 282 -17 m 879 -17 q 761 13 813 -17 q 678 89 710 43 l 738 135 q 797 76 763 97 q 875 54 832 54 q 951 79 919 54 q 983 151 983 104 q 939 223 983 199 q 815 247 894 247 l 815 304 q 924 332 886 304 q 963 401 963 360 q 935 464 963 440 q 864 488 908 488 q 806 469 833 488 q 754 422 778 450 l 700 469 q 778 534 736 510 q 878 558 821 558 q 944 549 913 558 q 999 520 975 539 q 1036 474 1022 501 q 1050 413 1050 447 q 1024 331 1050 364 q 956 279 997 299 q 1037 234 1001 268 q 1072 146 1072 200 q 1057 78 1072 108 q 1015 27 1042 49 q 953 -6 989 6 q 879 -17 918 -17 z "},"⅕":{"ha":1117,"x_min":89,"x_max":1056,"o":"m 207 369 l 207 797 l 89 797 l 89 856 q 165 877 135 864 q 224 911 196 890 l 296 911 l 296 369 l 207 369 m 213 -17 l 715 928 l 793 928 l 290 -17 l 213 -17 m 861 -17 q 738 13 789 -17 q 656 89 688 43 l 715 135 q 775 76 742 97 q 856 54 808 54 q 935 88 904 54 q 967 174 967 121 q 935 261 967 229 q 853 293 903 293 q 797 281 821 293 q 750 249 772 268 l 707 281 l 732 542 l 1028 542 l 1028 464 l 806 464 l 790 332 q 832 347 810 340 q 878 353 854 353 q 947 341 914 353 q 1003 306 979 329 q 1042 248 1028 282 q 1056 171 1056 214 q 1040 94 1056 129 q 999 35 1025 60 q 938 -3 974 11 q 861 -17 903 -17 z "},"⅖":{"ha":1140,"x_min":57,"x_max":1078,"o":"m 74 369 l 74 421 q 185 523 136 478 q 265 606 233 568 q 314 676 297 643 q 331 739 331 708 q 303 822 331 792 q 226 853 275 853 q 163 830 192 853 q 110 774 133 807 l 57 822 q 135 899 89 869 q 238 928 182 928 q 369 883 319 928 q 418 753 418 839 q 403 678 418 714 q 360 605 388 642 q 297 529 333 568 q 217 446 260 490 l 446 446 l 446 369 l 74 369 m 282 -17 l 785 928 l 863 928 l 360 -17 l 282 -17 m 883 -17 q 760 13 811 -17 q 678 89 710 43 l 738 135 q 797 76 764 97 q 878 54 831 54 q 958 88 926 54 q 989 174 989 121 q 957 261 989 229 q 875 293 925 293 q 819 281 843 293 q 772 249 794 268 l 729 281 l 754 542 l 1050 542 l 1050 464 l 828 464 l 813 332 q 854 347 832 340 q 900 353 876 353 q 969 341 936 353 q 1026 306 1001 329 q 1064 248 1050 282 q 1078 171 1078 214 q 1063 94 1078 129 q 1022 35 1047 60 q 960 -3 996 11 q 883 -17 925 -17 z "},"⅗":{"ha":1140,"x_min":49,"x_max":1078,"o":"m 250 353 q 132 383 183 353 q 49 458 81 413 l 108 504 q 168 445 133 467 q 246 424 203 424 q 322 449 290 424 q 354 521 354 474 q 310 592 354 568 q 186 617 265 617 l 186 674 q 295 701 257 674 q 333 771 333 729 q 306 833 333 810 q 235 857 279 857 q 176 838 204 857 q 125 792 149 819 l 71 839 q 149 903 107 879 q 249 928 192 928 q 315 918 283 928 q 369 890 346 908 q 407 844 393 871 q 421 782 421 817 q 394 701 421 733 q 326 649 368 668 q 408 603 372 638 q 443 515 443 569 q 428 448 443 478 q 386 397 413 418 q 324 364 360 375 q 250 353 289 353 m 278 -17 l 781 928 l 858 928 l 356 -17 l 278 -17 m 883 -17 q 760 13 811 -17 q 678 89 710 43 l 738 135 q 797 76 764 97 q 878 54 831 54 q 958 88 926 54 q 989 174 989 121 q 957 261 989 229 q 875 293 925 293 q 819 281 843 293 q 772 249 794 268 l 729 281 l 754 542 l 1050 542 l 1050 464 l 828 464 l 813 332 q 854 347 832 340 q 900 353 876 353 q 969 341 936 353 q 1026 306 1001 329 q 1064 248 1050 282 q 1078 171 1078 214 q 1063 94 1078 129 q 1022 35 1047 60 q 960 -3 996 11 q 883 -17 925 -17 z "},"⅘":{"ha":1175,"x_min":58,"x_max":1113,"o":"m 306 369 l 306 514 l 58 514 l 58 560 l 286 911 l 386 911 l 386 578 l 467 578 l 467 514 l 386 514 l 386 369 l 306 369 m 151 578 l 306 578 l 306 675 l 311 826 l 306 826 l 236 714 l 151 578 m 311 -17 l 814 928 l 892 928 l 389 -17 l 311 -17 m 918 -17 q 795 13 846 -17 q 713 89 744 43 l 772 135 q 832 76 799 97 q 913 54 865 54 q 992 88 961 54 q 1024 174 1024 121 q 992 261 1024 229 q 910 293 960 293 q 853 281 878 293 q 807 249 829 268 l 764 281 l 789 542 l 1085 542 l 1085 464 l 863 464 l 847 332 q 889 347 867 340 q 935 353 911 353 q 1003 341 971 353 q 1060 306 1036 329 q 1099 248 1085 282 q 1113 171 1113 214 q 1097 94 1113 129 q 1056 35 1082 60 q 995 -3 1031 11 q 918 -17 960 -17 z "},"⅙":{"ha":1117,"x_min":89,"x_max":1046,"o":"m 207 369 l 207 797 l 89 797 l 89 856 q 165 877 135 864 q 224 911 196 890 l 296 911 l 296 369 l 207 369 m 226 -17 l 729 928 l 807 928 l 304 -17 l 226 -17 m 865 -17 q 713 56 769 -17 q 656 257 656 128 q 674 390 656 333 q 724 485 692 447 q 799 540 756 522 q 892 558 842 558 q 969 546 939 558 q 1024 517 1000 533 l 988 454 q 945 478 968 468 q 894 488 922 488 q 790 438 833 488 q 740 285 747 389 q 876 340 800 340 q 1002 292 958 340 q 1046 167 1046 244 q 1032 94 1046 128 q 994 36 1018 61 q 937 -3 969 11 q 865 -17 904 -17 m 864 54 q 935 85 908 54 q 963 165 963 117 q 936 244 963 214 q 858 275 910 275 q 800 262 828 275 q 740 215 772 249 q 781 94 747 135 q 864 54 814 54 z "},"⅚":{"ha":1140,"x_min":49,"x_max":1068,"o":"m 254 353 q 131 383 182 353 q 49 458 81 413 l 108 504 q 168 445 135 467 q 249 424 201 424 q 328 457 297 424 q 360 543 360 490 q 328 631 360 599 q 246 663 296 663 q 190 650 214 663 q 143 618 165 638 l 100 650 l 125 911 l 421 911 l 421 833 l 199 833 l 183 701 q 225 716 203 710 q 271 722 247 722 q 340 710 307 722 q 397 675 372 699 q 435 617 421 651 q 449 540 449 583 q 433 464 449 499 q 392 405 418 429 q 331 367 367 381 q 254 353 296 353 m 278 -17 l 781 928 l 858 928 l 356 -17 l 278 -17 m 888 -17 q 735 56 792 -17 q 678 257 678 128 q 696 390 678 333 q 746 485 714 447 q 821 540 778 522 q 914 558 864 558 q 992 546 961 558 q 1046 517 1022 533 l 1010 454 q 967 478 990 468 q 917 488 944 488 q 813 438 856 488 q 763 285 769 389 q 899 340 822 340 q 1024 292 981 340 q 1068 167 1068 244 q 1054 94 1068 128 q 1016 36 1040 61 q 959 -3 992 11 q 888 -17 926 -17 m 886 54 q 958 85 931 54 q 985 165 985 117 q 958 244 985 214 q 881 275 932 275 q 822 262 850 275 q 763 215 794 249 q 803 94 769 135 q 886 54 836 54 z "},"⅐":{"ha":1117,"x_min":89,"x_max":1056,"o":"m 207 369 l 207 797 l 89 797 l 89 856 q 165 877 135 864 q 224 911 196 890 l 296 911 l 296 369 l 207 369 m 213 -17 l 715 928 l 793 928 l 290 -17 l 213 -17 m 789 0 q 804 131 793 71 q 835 246 815 190 q 884 355 854 301 q 956 465 914 408 l 676 465 l 676 542 l 1056 542 l 1056 492 q 974 371 1006 429 q 924 253 943 313 q 895 133 904 194 q 882 0 886 71 l 789 0 z "},"⅛":{"ha":1117,"x_min":89,"x_max":1051,"o":"m 207 369 l 207 797 l 89 797 l 89 856 q 165 877 135 864 q 224 911 196 890 l 296 911 l 296 369 l 207 369 m 226 -17 l 729 928 l 807 928 l 304 -17 l 226 -17 m 860 -17 q 782 -5 817 -17 q 722 28 747 7 q 683 76 697 49 q 669 135 669 104 q 701 224 669 186 q 772 286 732 263 l 772 292 q 714 344 736 315 q 692 415 692 372 q 705 474 692 447 q 741 519 718 500 q 794 548 764 538 q 860 558 825 558 q 983 520 933 558 q 1033 415 1033 482 q 1026 372 1033 392 q 1006 336 1018 353 q 978 307 993 319 q 950 285 964 294 l 950 279 q 1024 222 997 256 q 1051 139 1051 188 q 1037 77 1051 106 q 997 28 1022 49 q 936 -5 971 7 q 860 -17 901 -17 m 892 310 q 936 359 922 333 q 950 413 950 385 q 924 469 950 449 q 860 490 897 490 q 799 469 824 490 q 774 414 774 447 q 808 349 774 372 q 892 310 843 325 m 860 49 q 936 76 904 49 q 968 142 968 103 q 956 183 968 167 q 925 213 944 200 q 881 235 906 225 q 828 256 856 244 q 753 143 753 211 q 782 78 753 107 q 860 49 811 49 z "},"⅜":{"ha":1140,"x_min":49,"x_max":1074,"o":"m 250 353 q 132 383 183 353 q 49 458 81 413 l 108 504 q 168 445 133 467 q 246 424 203 424 q 322 449 290 424 q 354 521 354 474 q 310 592 354 568 q 186 617 265 617 l 186 674 q 295 701 257 674 q 333 771 333 729 q 306 833 333 810 q 235 857 279 857 q 176 838 204 857 q 125 792 149 819 l 71 839 q 149 903 107 879 q 249 928 192 928 q 315 918 283 928 q 369 890 346 908 q 407 844 393 871 q 421 782 421 817 q 394 701 421 733 q 326 649 368 668 q 408 603 372 638 q 443 515 443 569 q 428 448 443 478 q 386 397 413 418 q 324 364 360 375 q 250 353 289 353 m 278 -17 l 781 928 l 858 928 l 356 -17 l 278 -17 m 882 -17 q 804 -5 839 -17 q 744 28 769 7 q 706 76 719 49 q 692 135 692 104 q 723 224 692 186 q 794 286 754 263 l 794 292 q 736 344 758 315 q 714 415 714 372 q 727 474 714 447 q 763 519 740 500 q 817 548 786 538 q 882 558 847 558 q 1006 520 956 558 q 1056 415 1056 482 q 1048 372 1056 392 q 1028 336 1040 353 q 1001 307 1015 319 q 972 285 986 294 l 972 279 q 1047 222 1019 256 q 1074 139 1074 188 q 1059 77 1074 106 q 1019 28 1044 49 q 958 -5 993 7 q 882 -17 924 -17 m 914 310 q 958 359 944 333 q 972 413 972 385 q 946 469 972 449 q 882 490 919 490 q 821 469 846 490 q 796 414 796 447 q 831 349 796 372 q 914 310 865 325 m 882 49 q 958 76 926 49 q 990 142 990 103 q 978 183 990 167 q 947 213 967 200 q 903 235 928 225 q 850 256 878 244 q 775 143 775 211 q 804 78 775 107 q 882 49 833 49 z "},"⅝":{"ha":1140,"x_min":49,"x_max":1074,"o":"m 254 353 q 131 383 182 353 q 49 458 81 413 l 108 504 q 168 445 135 467 q 249 424 201 424 q 328 457 297 424 q 360 543 360 490 q 328 631 360 599 q 246 663 296 663 q 190 650 214 663 q 143 618 165 638 l 100 650 l 125 911 l 421 911 l 421 833 l 199 833 l 183 701 q 225 716 203 710 q 271 722 247 722 q 340 710 307 722 q 397 675 372 699 q 435 617 421 651 q 449 540 449 583 q 433 464 449 499 q 392 405 418 429 q 331 367 367 381 q 254 353 296 353 m 278 -17 l 781 928 l 858 928 l 356 -17 l 278 -17 m 882 -17 q 804 -5 839 -17 q 744 28 769 7 q 706 76 719 49 q 692 135 692 104 q 723 224 692 186 q 794 286 754 263 l 794 292 q 736 344 758 315 q 714 415 714 372 q 727 474 714 447 q 763 519 740 500 q 817 548 786 538 q 882 558 847 558 q 1006 520 956 558 q 1056 415 1056 482 q 1048 372 1056 392 q 1028 336 1040 353 q 1001 307 1015 319 q 972 285 986 294 l 972 279 q 1047 222 1019 256 q 1074 139 1074 188 q 1059 77 1074 106 q 1019 28 1044 49 q 958 -5 993 7 q 882 -17 924 -17 m 914 310 q 958 359 944 333 q 972 413 972 385 q 946 469 972 449 q 882 490 919 490 q 821 469 846 490 q 796 414 796 447 q 831 349 796 372 q 914 310 865 325 m 882 49 q 958 76 926 49 q 990 142 990 103 q 978 183 990 167 q 947 213 967 200 q 903 235 928 225 q 850 256 878 244 q 775 143 775 211 q 804 78 775 107 q 882 49 833 49 z "},"⅞":{"ha":1113,"x_min":43,"x_max":1046,"o":"m 156 369 q 171 500 160 440 q 201 615 182 560 q 251 724 221 671 q 322 835 281 778 l 43 835 l 43 911 l 422 911 l 422 861 q 341 740 372 799 q 290 623 310 682 q 262 502 271 564 q 249 369 253 440 l 156 369 m 208 -17 l 711 928 l 789 928 l 286 -17 l 208 -17 m 854 -17 q 776 -5 811 -17 q 717 28 742 7 q 678 76 692 49 q 664 135 664 104 q 695 224 664 186 q 767 286 726 263 l 767 292 q 708 344 731 315 q 686 415 686 372 q 699 474 686 447 q 735 519 713 500 q 789 548 758 538 q 854 558 819 558 q 978 520 928 558 q 1028 415 1028 482 q 1020 372 1028 392 q 1000 336 1013 353 q 973 307 988 319 q 944 285 958 294 l 944 279 q 1019 222 992 256 q 1046 139 1046 188 q 1031 77 1046 106 q 991 28 1017 49 q 931 -5 965 7 q 854 -17 896 -17 m 886 310 q 931 359 917 333 q 944 413 944 385 q 918 469 944 449 q 854 490 892 490 q 793 469 818 490 q 768 414 768 447 q 803 349 768 372 q 886 310 838 325 m 854 49 q 931 76 899 49 q 963 142 963 103 q 951 183 963 167 q 919 213 939 200 q 875 235 900 225 q 822 256 850 244 q 747 143 747 211 q 776 78 747 107 q 854 49 806 49 z "},"⅑":{"ha":1117,"x_min":89,"x_max":1060,"o":"m 207 369 l 207 797 l 89 797 l 89 856 q 165 877 135 864 q 224 911 196 890 l 296 911 l 296 369 l 207 369 m 226 -17 l 729 928 l 807 928 l 304 -17 l 226 -17 m 856 267 q 915 280 888 267 q 975 326 943 293 q 935 447 968 407 q 850 488 901 488 q 779 456 807 488 q 751 376 751 425 q 778 297 751 328 q 856 267 806 267 m 824 -17 q 745 -4 776 -17 q 690 25 714 8 l 728 88 q 770 64 747 74 q 821 54 793 54 q 925 104 882 54 q 975 258 968 154 q 839 201 915 201 q 713 249 757 201 q 669 375 669 297 q 683 447 669 414 q 721 506 697 481 q 778 544 744 531 q 849 558 811 558 q 1003 486 946 558 q 1060 285 1060 414 q 1042 151 1060 208 q 992 57 1024 94 q 917 1 960 19 q 824 -17 874 -17 z "},"⅒":{"ha":1517,"x_min":88,"x_max":1468,"o":"m 228 -17 l 731 928 l 808 928 l 306 -17 l 228 -17 m 206 369 l 206 797 l 88 797 l 88 856 q 164 877 133 864 q 222 911 194 890 l 294 911 l 294 369 l 206 369 m 825 0 l 825 428 l 707 428 l 707 486 q 783 508 753 494 q 842 542 814 521 l 914 542 l 914 0 l 825 0 m 1261 -17 q 1110 58 1167 -17 q 1054 272 1054 133 q 1110 484 1054 410 q 1261 558 1167 558 q 1411 484 1354 558 q 1468 272 1468 410 q 1411 58 1468 133 q 1261 -17 1354 -17 m 1261 54 q 1347 109 1314 54 q 1381 272 1381 164 q 1347 434 1381 381 q 1261 488 1314 488 q 1174 434 1207 488 q 1140 272 1140 381 q 1174 109 1140 164 q 1261 54 1207 54 z "},"↉":{"ha":1140,"x_min":49,"x_max":1072,"o":"m 256 353 q 105 428 161 353 q 49 642 49 503 q 105 853 49 779 q 256 928 161 928 q 406 853 349 928 q 463 642 463 779 q 406 428 463 503 q 256 353 349 353 m 256 424 q 342 478 308 424 q 375 642 375 533 q 342 803 375 750 q 256 857 308 857 q 168 803 201 857 q 135 642 135 750 q 168 478 135 533 q 256 424 201 424 m 278 -17 l 781 928 l 858 928 l 356 -17 l 278 -17 m 879 -17 q 761 13 813 -17 q 678 89 710 43 l 738 135 q 797 76 763 97 q 875 54 832 54 q 951 79 919 54 q 983 151 983 104 q 939 223 983 199 q 815 247 894 247 l 815 304 q 924 332 886 304 q 963 401 963 360 q 935 464 963 440 q 864 488 908 488 q 806 469 833 488 q 754 422 778 450 l 700 469 q 778 534 736 510 q 878 558 821 558 q 944 549 913 558 q 999 520 975 539 q 1036 474 1022 501 q 1050 413 1050 447 q 1024 331 1050 364 q 956 279 997 299 q 1037 234 1001 268 q 1072 146 1072 200 q 1057 78 1072 108 q 1015 27 1042 49 q 953 -6 989 6 q 879 -17 918 -17 z "},"+":{"ha":690,"x_min":47,"x_max":643,"o":"m 300 144 l 300 415 l 47 415 l 47 501 l 300 501 l 300 772 l 390 772 l 390 501 l 643 501 l 643 415 l 390 415 l 390 144 l 300 144 z "},"−":{"ha":690,"x_min":47,"x_max":643,"o":"m 47 415 l 47 501 l 643 501 l 643 415 l 47 415 z "},"×":{"ha":690,"x_min":69,"x_max":621,"o":"m 131 175 l 69 238 l 285 458 l 69 678 l 131 740 l 346 519 l 560 740 l 621 678 l 406 458 l 621 238 l 560 175 l 346 397 l 131 175 z "},"÷":{"ha":690,"x_min":47,"x_max":643,"o":"m 47 415 l 47 501 l 643 501 l 643 415 l 47 415 m 346 133 q 292 154 314 133 q 269 208 269 175 q 292 261 269 240 q 346 282 314 282 q 399 261 378 282 q 421 208 421 240 q 399 154 421 175 q 346 133 378 133 m 346 633 q 292 654 314 633 q 269 708 269 675 q 292 761 269 740 q 346 782 314 782 q 399 761 378 782 q 421 708 421 740 q 399 654 421 675 q 346 633 378 633 z "},"∙":{"ha":697,"x_min":261,"x_max":426,"o":"m 344 365 q 285 390 310 365 q 261 451 261 414 q 285 516 261 492 q 344 540 310 540 q 402 516 378 540 q 426 451 426 492 q 402 390 426 414 q 344 365 378 365 z "},"=":{"ha":690,"x_min":47,"x_max":643,"o":"m 47 564 l 47 650 l 643 650 l 643 564 l 47 564 m 47 268 l 47 354 l 643 354 l 643 268 l 47 268 z "},"<":{"ha":690,"x_min":47,"x_max":643,"o":"m 643 182 l 47 415 l 47 507 l 643 740 l 643 642 l 350 533 l 164 464 l 164 458 l 350 389 l 643 281 l 643 182 z "},">":{"ha":690,"x_min":47,"x_max":643,"o":"m 47 182 l 47 281 l 340 389 l 526 458 l 526 464 l 340 533 l 47 642 l 47 740 l 643 507 l 643 415 l 47 182 z "},"≤":{"ha":690,"x_min":47,"x_max":643,"o":"m 643 213 l 47 425 l 47 528 l 643 740 l 643 642 l 351 540 l 164 479 l 164 474 l 351 413 l 643 311 l 643 213 m 47 0 l 47 86 l 643 86 l 643 0 l 47 0 z "},"≥":{"ha":690,"x_min":47,"x_max":643,"o":"m 47 213 l 47 311 l 339 413 l 526 474 l 526 479 l 339 540 l 47 642 l 47 740 l 643 528 l 643 425 l 47 213 m 47 0 l 47 86 l 643 86 l 643 0 l 47 0 z "},"±":{"ha":690,"x_min":47,"x_max":643,"o":"m 300 176 l 300 422 l 47 422 l 47 508 l 300 508 l 300 772 l 390 772 l 390 508 l 643 508 l 643 422 l 390 422 l 390 176 l 300 176 m 47 0 l 47 86 l 643 86 l 643 0 l 47 0 z "},"^":{"ha":690,"x_min":83,"x_max":607,"o":"m 83 394 l 294 931 l 396 931 l 607 394 l 507 394 l 417 639 l 349 824 l 343 824 l 274 639 l 183 394 l 83 394 z "},"≠":{"ha":690,"x_min":47,"x_max":643,"o":"m 85 90 l 190 267 l 47 267 l 47 353 l 240 353 l 367 564 l 47 564 l 47 650 l 417 650 l 522 826 l 606 826 l 500 650 l 643 650 l 643 564 l 450 564 l 324 353 l 643 353 l 643 267 l 274 267 l 168 90 l 85 90 z "},"~":{"ha":690,"x_min":50,"x_max":640,"o":"m 467 357 q 392 375 425 357 q 331 415 360 393 q 276 456 303 438 q 221 474 250 474 q 164 453 190 474 q 114 389 138 433 l 50 435 q 133 531 88 501 q 224 560 179 560 q 298 542 265 560 q 359 501 331 524 q 414 461 388 479 q 469 443 440 443 q 526 463 500 443 q 576 528 553 483 l 640 481 q 557 385 603 414 q 467 357 511 357 z "},"≈":{"ha":690,"x_min":50,"x_max":640,"o":"m 467 506 q 392 524 425 506 q 331 564 360 542 q 276 604 303 586 q 221 622 250 622 q 164 602 190 622 q 114 538 138 582 l 50 583 q 133 679 88 650 q 224 708 179 708 q 298 690 265 708 q 359 650 331 672 q 414 610 388 628 q 469 592 440 592 q 526 612 500 592 q 576 676 553 632 l 640 629 q 557 534 603 563 q 467 506 511 506 m 467 210 q 392 228 425 210 q 331 268 360 246 q 276 308 303 290 q 221 326 250 326 q 164 306 190 326 q 114 242 138 286 l 50 288 q 133 383 88 354 q 224 413 179 413 q 298 394 265 413 q 359 354 331 376 q 414 314 388 332 q 469 296 440 296 q 526 316 500 296 q 576 381 553 336 l 640 333 q 557 238 603 267 q 467 210 511 210 z "},"¬":{"ha":690,"x_min":47,"x_max":643,"o":"m 551 144 l 551 415 l 47 415 l 47 501 l 643 501 l 643 144 l 551 144 z "},"∞":{"ha":1086,"x_min":56,"x_max":1031,"o":"m 792 204 q 638 249 703 204 q 511 374 574 294 l 506 374 q 464 328 488 353 q 410 281 440 303 q 344 245 381 260 q 265 231 308 231 q 184 248 222 231 q 117 295 146 265 q 72 365 89 325 q 56 450 56 404 q 73 549 56 506 q 120 624 90 593 q 192 671 150 654 q 282 688 233 688 q 359 674 324 688 q 424 640 394 661 q 476 592 453 618 q 518 542 499 567 l 524 542 q 577 605 549 575 q 639 658 606 635 q 710 696 672 682 q 793 710 749 710 q 888 692 844 710 q 963 641 932 674 q 1013 564 994 608 q 1031 467 1031 519 q 1013 358 1031 407 q 963 276 994 310 q 887 223 931 242 q 792 204 843 204 m 276 318 q 381 356 335 318 q 463 446 426 393 q 372 542 418 506 q 274 578 326 578 q 181 545 217 578 q 144 454 144 513 q 183 357 144 396 q 276 318 221 318 m 793 313 q 856 324 828 313 q 902 357 883 336 q 931 405 921 378 q 940 463 940 432 q 899 577 940 533 q 782 621 857 621 q 669 583 722 621 q 565 472 617 544 q 676 353 624 394 q 793 313 728 313 z "},"µ":{"ha":781,"x_min":114,"x_max":743,"o":"m 114 -249 l 114 675 l 228 675 l 228 263 q 256 127 228 172 q 351 82 285 82 q 396 87 374 82 q 440 106 418 92 q 485 147 463 121 q 531 214 507 172 l 531 675 l 646 675 q 640 396 643 538 q 638 132 638 254 q 651 91 638 104 q 688 78 665 78 q 728 86 704 78 l 743 0 q 709 -12 728 -7 q 663 -17 690 -17 q 576 15 604 -17 q 540 114 547 46 l 538 114 q 453 17 501 49 q 350 -14 406 -14 q 276 -1 310 -14 q 219 51 243 11 q 220 -37 219 1 q 222 -108 221 -75 q 225 -175 224 -142 q 229 -249 226 -208 l 114 -249 z "},"∂":{"ha":733,"x_min":56,"x_max":676,"o":"m 308 -17 q 213 2 258 -17 q 132 55 167 21 q 76 138 97 89 q 56 250 56 188 q 76 376 56 318 q 136 474 97 433 q 231 538 175 515 q 357 561 286 561 q 469 535 414 561 q 564 463 524 508 q 565 485 565 474 q 565 510 565 497 q 551 658 565 597 q 513 758 538 719 q 451 815 488 797 q 371 833 415 833 q 215 764 282 833 l 163 835 q 262 903 207 879 q 382 928 317 928 q 597 826 517 928 q 676 513 676 725 q 650 296 676 393 q 575 129 624 199 q 458 22 526 60 q 308 -17 390 -17 m 319 78 q 472 153 410 78 q 554 365 533 228 q 460 447 508 424 q 367 471 413 471 q 214 410 264 471 q 164 257 164 349 q 176 183 164 215 q 210 126 189 150 q 260 90 232 103 q 319 78 288 78 z "},"∫":{"ha":461,"x_min":72,"x_max":426,"o":"m 139 -219 q 72 -210 94 -219 l 86 -124 q 133 -129 101 -129 q 210 -72 193 -129 q 226 93 226 -15 q 217 257 226 169 q 197 435 208 344 q 177 613 186 525 q 168 779 168 701 q 176 904 168 846 q 205 1005 183 963 q 264 1072 226 1047 q 361 1096 301 1096 q 400 1093 382 1096 q 426 1088 418 1090 l 413 1001 q 391 1006 403 1004 q 364 1007 379 1007 q 290 948 307 1007 q 274 782 274 889 q 283 619 274 707 q 302 442 292 532 q 322 263 313 351 q 331 99 331 175 q 323 -28 331 31 q 294 -128 315 -86 q 236 -195 274 -171 q 139 -219 199 -219 z "},"√":{"ha":774,"x_min":57,"x_max":779,"o":"m 390 -132 l 182 463 l 83 418 l 57 481 l 242 563 l 403 82 q 415 38 410 60 q 426 -7 421 15 l 432 -7 q 440 38 436 15 q 449 82 444 60 l 696 1139 l 779 1139 l 478 -132 l 390 -132 z "},"∆":{"ha":817,"x_min":42,"x_max":775,"o":"m 42 0 l 42 69 l 342 911 l 475 911 l 775 69 l 775 0 l 42 0 m 167 99 l 647 99 l 506 515 l 410 807 l 404 807 l 308 515 l 167 99 z "},"Ω":{"ha":942,"x_min":63,"x_max":879,"o":"m 63 0 l 63 94 l 244 94 l 244 100 q 186 167 215 129 q 134 254 157 206 q 97 360 111 303 q 82 488 82 418 q 110 664 82 583 q 188 803 138 744 q 310 895 239 863 q 471 928 382 928 q 631 895 560 928 q 754 803 703 863 q 833 664 806 744 q 861 488 861 583 q 847 360 861 418 q 809 254 832 303 q 756 167 786 206 q 697 100 726 129 l 697 94 l 879 94 l 879 0 l 556 0 l 556 85 q 628 154 594 115 q 688 242 663 193 q 727 349 713 290 q 742 481 742 408 q 723 617 742 554 q 669 727 704 681 q 585 800 635 774 q 471 826 535 826 q 357 800 407 826 q 272 727 307 774 q 219 617 238 681 q 201 481 201 554 q 215 349 201 408 q 254 242 229 290 q 313 154 279 193 q 386 85 347 115 l 386 0 l 63 0 z "},"∑":{"ha":700,"x_min":31,"x_max":696,"o":"m 31 -167 l 31 -93 l 361 360 l 46 813 l 46 886 l 657 886 l 657 788 l 189 788 l 189 782 l 483 361 l 175 -62 l 175 -68 l 696 -68 l 696 -167 l 31 -167 z "},"∏":{"ha":935,"x_min":124,"x_max":813,"o":"m 124 -167 l 124 886 l 813 886 l 813 -167 l 694 -167 l 694 785 l 239 785 l 239 -167 l 124 -167 z "},"ℓ":{"ha":568,"x_min":29,"x_max":558,"o":"m 369 -17 q 219 43 282 -17 q 149 221 156 103 q 113 196 131 208 q 75 171 94 183 l 29 243 q 91 285 61 264 q 149 328 121 306 l 149 704 q 164 842 149 785 q 206 935 179 899 q 271 989 233 972 q 351 1006 308 1006 q 482 951 431 1006 q 533 793 533 897 q 461 538 533 660 q 261 307 389 417 l 261 258 q 297 121 261 161 q 385 81 333 81 q 458 99 428 81 q 513 142 488 118 l 558 71 q 476 11 522 39 q 369 -17 431 -17 m 261 725 l 261 429 q 389 603 343 513 q 435 790 435 693 q 412 890 435 861 q 354 918 389 918 q 289 872 317 918 q 261 725 261 826 z "},"℮":{"ha":1111,"x_min":64,"x_max":1047,"o":"m 556 -17 q 363 20 453 -17 q 207 120 274 57 q 102 268 140 183 q 64 450 64 353 q 102 632 64 547 q 207 780 140 717 q 363 880 274 843 q 556 917 453 917 q 747 880 657 917 q 903 780 836 843 q 1008 632 969 717 q 1047 450 1047 547 l 1047 439 l 250 439 q 244 433 244 439 l 244 178 q 248 163 244 169 q 256 150 251 157 q 390 48 313 85 q 558 11 468 11 q 735 53 653 11 q 875 167 817 96 l 947 167 q 776 33 878 83 q 556 -17 675 -17 m 250 464 l 861 464 q 869 472 869 464 l 869 728 q 856 758 869 744 q 721 854 797 819 q 558 889 644 889 q 391 852 468 889 q 256 753 314 815 q 248 738 251 746 q 244 722 244 731 l 244 472 q 250 464 244 464 z "},"←":{"ha":860,"x_min":36,"x_max":804,"o":"m 415 -21 l 36 347 l 36 353 l 415 721 l 474 657 l 194 397 l 804 397 l 804 303 l 194 303 l 474 43 l 415 -21 z "},"↑":{"ha":860,"x_min":58,"x_max":801,"o":"m 382 -35 l 382 575 l 122 296 l 58 354 l 426 732 l 432 732 l 801 354 l 736 296 l 476 575 l 476 -35 l 382 -35 z "},"→":{"ha":860,"x_min":54,"x_max":821,"o":"m 443 -21 l 383 43 l 663 303 l 54 303 l 54 397 l 663 397 l 383 657 l 443 721 l 821 353 l 821 347 l 443 -21 z "},"↓":{"ha":860,"x_min":58,"x_max":801,"o":"m 426 -35 l 58 344 l 122 403 l 382 124 l 382 732 l 476 732 l 476 124 l 736 403 l 801 344 l 432 -35 l 426 -35 z "},"■":{"ha":1243,"x_min":63,"x_max":1181,"o":"m 63 -83 l 63 1035 l 1181 1035 l 1181 -83 l 63 -83 z "},"◆":{"ha":1243,"x_min":35,"x_max":1208,"o":"m 622 -111 l 35 476 l 622 1063 l 1208 476 l 622 -111 z "},"◉":{"ha":1243,"x_min":46,"x_max":1197,"o":"m 622 -104 q 401 -65 506 -104 q 217 50 296 -25 q 92 233 138 125 q 46 476 46 340 q 92 717 46 610 q 217 899 138 824 q 401 1015 296 974 q 622 1056 506 1056 q 843 1015 739 1056 q 1026 899 947 974 q 1151 717 1106 824 q 1197 476 1197 610 q 1151 233 1197 340 q 1026 50 1106 125 q 843 -65 947 -25 q 622 -104 739 -104 m 622 -26 q 807 7 718 -26 q 963 105 896 40 q 1071 263 1031 169 q 1111 476 1111 357 q 1071 689 1111 596 q 963 847 1031 782 q 807 945 896 911 q 622 979 718 979 q 438 945 526 979 q 282 847 350 911 q 174 689 214 782 q 133 476 133 596 q 174 263 133 357 q 282 105 214 169 q 438 7 350 40 q 622 -26 526 -26 m 622 108 q 485 135 550 108 q 372 209 421 161 q 293 325 322 257 q 264 476 264 393 q 293 626 264 558 q 372 742 322 694 q 485 817 421 790 q 622 843 550 843 q 758 817 693 843 q 872 742 824 790 q 950 626 921 694 q 979 476 979 558 q 950 324 979 392 q 872 208 921 256 q 758 134 824 160 q 622 108 693 108 z "},"❒":{"ha":1243,"x_min":63,"x_max":1181,"o":"m 63 -83 l 63 957 l 154 1035 l 1181 1035 l 1181 8 l 1103 -83 l 63 -83 m 125 -22 l 1072 -22 l 1072 926 l 125 926 l 125 -22 z "},"▲":{"ha":1243,"x_min":71,"x_max":1172,"o":"m 71 -83 l 71 -81 l 619 1063 l 625 1063 l 1172 -81 l 1172 -83 l 71 -83 z "},"△":{"ha":1243,"x_min":71,"x_max":1172,"o":"m 71 -83 l 71 -81 l 619 1063 l 625 1063 l 1172 -81 l 1172 -83 l 71 -83 m 206 -3 l 1038 -3 l 622 885 l 206 -3 z "},"▶":{"ha":1243,"x_min":63,"x_max":1208,"o":"m 63 -75 l 63 1026 l 65 1026 l 1208 479 l 1208 474 l 65 -75 l 63 -75 z "},"▷":{"ha":1243,"x_min":63,"x_max":1208,"o":"m 63 -75 l 63 1026 l 65 1026 l 1208 479 l 1208 474 l 65 -75 l 63 -75 m 144 60 l 1033 476 l 144 892 l 144 60 z "},"▼":{"ha":1243,"x_min":71,"x_max":1172,"o":"m 1172 1035 l 1172 1032 l 625 -111 l 619 -111 l 71 1032 l 71 1035 l 1172 1035 z "},"▽":{"ha":1243,"x_min":71,"x_max":1172,"o":"m 1172 1035 l 1172 1032 l 625 -111 l 619 -111 l 71 1032 l 71 1035 l 1172 1035 m 1038 954 l 206 954 l 622 67 l 1038 954 z "},"◀":{"ha":1243,"x_min":35,"x_max":1181,"o":"m 1181 1026 l 1181 -75 l 1178 -75 l 35 474 l 35 479 l 1178 1026 l 1181 1026 z "},"◁":{"ha":1243,"x_min":35,"x_max":1181,"o":"m 1181 1026 l 1181 -75 l 1178 -75 l 35 474 l 35 479 l 1178 1026 l 1181 1026 m 1099 892 l 210 476 l 1099 60 l 1099 892 z "},"☐":{"ha":1110,"x_min":103,"x_max":1007,"o":"m 103 -14 l 103 861 l 188 932 l 1007 932 l 1007 71 l 933 -14 l 103 -14 m 163 46 l 903 46 l 903 829 l 163 829 l 163 46 z "},"☑":{"ha":1110,"x_min":103,"x_max":1118,"o":"m 485 144 q 399 346 447 251 q 290 529 350 440 l 368 582 q 462 414 419 501 q 532 239 504 326 l 538 239 q 655 543 582 392 q 819 829 728 694 l 163 829 l 163 46 l 903 46 l 903 786 q 731 497 808 654 q 604 158 654 339 l 485 144 m 103 -14 l 103 861 l 188 932 l 893 932 q 967 1023 929 981 q 1044 1104 1006 1065 l 1118 1035 q 1007 919 1061 982 l 1007 71 l 933 -14 l 103 -14 z "},"✓":{"ha":850,"x_min":0,"x_max":856,"o":"m 210 -28 q 117 187 168 88 q 0 382 67 286 l 78 435 q 183 253 136 347 q 261 67 229 160 l 267 67 q 358 314 304 190 q 479 552 413 438 q 622 768 546 667 q 781 950 699 869 l 856 881 q 696 708 774 804 q 550 497 618 611 q 425 255 482 383 q 329 -14 368 126 l 210 -28 z "},"♪":{"ha":699,"x_min":40,"x_max":668,"o":"m 181 -33 q 82 -7 124 -33 q 40 72 40 19 q 56 133 40 104 q 101 185 72 163 q 171 222 131 208 q 260 235 211 235 q 310 230 288 235 q 343 218 333 225 l 343 964 l 413 964 q 424 940 418 950 q 440 919 429 929 q 467 895 450 908 q 510 864 483 882 q 588 799 557 831 q 636 734 618 767 q 661 666 654 701 q 668 592 668 631 q 653 490 668 538 q 624 410 639 442 l 575 428 q 590 490 586 461 q 593 556 593 518 q 548 680 593 622 q 419 764 503 738 l 419 199 q 400 98 419 142 q 348 25 381 54 q 272 -19 315 -4 q 181 -33 228 -33 z "},"◊":{"ha":718,"x_min":78,"x_max":640,"o":"m 307 -14 l 78 458 l 307 931 l 411 931 l 640 458 l 411 -14 l 307 -14 m 357 82 l 363 82 l 449 267 l 539 458 l 449 649 l 363 835 l 357 835 l 269 649 l 179 458 l 269 267 l 357 82 z "},"′":{"ha":346,"x_min":114,"x_max":257,"o":"m 114 625 l 144 958 l 257 957 l 236 831 l 189 624 l 114 625 z "},"″":{"ha":592,"x_min":114,"x_max":503,"o":"m 114 625 l 144 958 l 257 957 l 236 831 l 189 624 l 114 625 m 360 625 l 390 958 l 503 957 l 482 831 l 435 624 l 360 625 z "},"‵":{"ha":346,"x_min":89,"x_max":232,"o":"m 232 625 l 157 624 l 110 831 l 89 957 l 201 958 l 232 625 z "},"ʹ":{"ha":346,"x_min":114,"x_max":257,"o":"m 114 625 l 144 958 l 257 957 l 236 831 l 189 624 l 114 625 z "},"ʻ":{"ha":346,"x_min":79,"x_max":260,"o":"m 167 594 q 102 626 125 594 q 79 719 79 658 q 117 864 79 803 q 226 967 154 925 l 260 913 q 181 838 207 878 q 154 740 154 799 q 167 742 158 742 q 217 724 194 742 q 240 671 240 706 q 219 615 240 635 q 167 594 199 594 z "},"ʼ":{"ha":346,"x_min":88,"x_max":268,"o":"m 119 599 l 88 651 q 166 726 140 686 q 192 825 192 765 q 181 824 188 824 q 129 842 151 824 q 107 893 107 860 q 128 950 107 929 q 181 971 149 971 q 244 938 221 971 q 268 844 268 906 q 230 701 268 761 q 119 599 192 640 z "},"ʾ":{"ha":231,"x_min":42,"x_max":210,"o":"m 42 763 l 42 811 q 120 835 97 811 q 143 897 143 858 q 120 960 143 936 q 42 983 97 983 l 42 1032 q 167 998 125 1035 q 210 897 210 961 q 167 797 210 833 q 42 763 125 760 z "},"ʿ":{"ha":231,"x_min":21,"x_max":189,"o":"m 189 763 q 63 797 106 760 q 21 897 21 833 q 63 998 21 961 q 189 1032 106 1035 l 189 983 q 110 960 133 983 q 88 897 88 936 q 110 835 88 858 q 189 811 133 811 l 189 763 z "},"`":{"ha":753,"x_min":178,"x_max":454,"o":"m 396 796 l 178 1008 l 258 1085 l 454 853 l 396 796 z "},"´":{"ha":753,"x_min":299,"x_max":575,"o":"m 357 796 l 299 853 l 494 1085 l 575 1008 l 357 796 z "},"ˆ":{"ha":753,"x_min":161,"x_max":592,"o":"m 161 833 l 319 1028 l 433 1028 l 592 833 l 543 789 l 379 946 l 374 946 l 210 789 l 161 833 z "},"ˇ":{"ha":753,"x_min":161,"x_max":592,"o":"m 319 797 l 161 992 l 210 1036 l 374 879 l 379 879 l 543 1036 l 592 992 l 433 797 l 319 797 z "},"ˈ":{"ha":158,"x_min":31,"x_max":128,"o":"m 39 740 l 31 1013 l 128 1013 l 119 740 l 39 740 z "},"ˉ":{"ha":385,"x_min":8,"x_max":378,"o":"m 8 835 l 8 914 l 378 914 l 378 835 l 8 835 z "},"ˊ":{"ha":313,"x_min":76,"x_max":353,"o":"m 135 796 l 76 853 l 272 1085 l 353 1008 l 135 796 z "},"ˋ":{"ha":313,"x_min":-44,"x_max":232,"o":"m 174 796 l -44 1008 l 36 1085 l 232 853 l 174 796 z "},"ˌ":{"ha":158,"x_min":31,"x_max":128,"o":"m 31 -369 l 39 -99 l 119 -99 l 128 -369 l 31 -369 z "},"˜":{"ha":753,"x_min":136,"x_max":617,"o":"m 476 801 q 413 819 439 801 q 364 860 386 838 q 322 900 342 882 q 278 918 301 918 q 231 888 246 918 q 213 808 215 857 l 136 813 q 147 888 138 853 q 172 947 156 922 q 215 987 189 972 q 276 1001 240 1001 q 340 983 314 1001 q 389 943 367 965 q 431 903 411 921 q 476 885 451 885 q 522 915 507 885 q 540 994 538 946 l 617 989 q 606 915 615 949 q 581 856 597 881 q 538 816 564 831 q 476 801 513 801 z "},"¨":{"ha":753,"x_min":174,"x_max":579,"o":"m 243 815 q 193 835 213 815 q 174 885 174 856 q 193 934 174 914 q 243 954 213 954 q 292 934 272 954 q 311 885 311 914 q 292 835 311 856 q 243 815 272 815 m 510 815 q 461 835 481 815 q 442 885 442 856 q 461 934 442 914 q 510 954 481 954 q 560 934 540 954 q 579 885 579 914 q 560 835 579 856 q 510 815 540 815 z "},"¯":{"ha":753,"x_min":192,"x_max":561,"o":"m 192 835 l 192 914 l 561 914 l 561 835 l 192 835 z "},"˘":{"ha":753,"x_min":160,"x_max":593,"o":"m 376 793 q 281 811 321 793 q 215 859 240 829 q 176 926 189 889 q 160 1003 163 964 l 231 1014 q 245 962 235 988 q 274 915 256 936 q 317 882 292 894 q 376 869 343 869 q 435 882 410 869 q 479 915 461 894 q 508 962 497 936 q 522 1014 518 988 l 593 1003 q 577 926 590 964 q 538 859 564 889 q 472 811 511 829 q 376 793 432 793 z "},"˚":{"ha":753,"x_min":224,"x_max":529,"o":"m 376 769 q 265 808 306 769 q 224 907 224 847 q 265 1004 224 965 q 376 1043 306 1043 q 488 1004 447 1043 q 529 907 529 965 q 488 808 529 847 q 376 769 447 769 m 376 821 q 433 844 410 821 q 456 907 456 867 q 433 969 456 946 q 376 992 410 992 q 320 969 343 992 q 297 907 297 946 q 320 844 297 867 q 376 821 343 821 z "},"˝":{"ha":753,"x_min":243,"x_max":653,"o":"m 306 789 l 243 818 l 363 1057 l 444 1018 l 306 789 m 515 789 l 451 818 l 572 1057 l 653 1018 l 515 789 z "},"˙":{"ha":753,"x_min":301,"x_max":451,"o":"m 376 814 q 323 835 344 814 q 301 889 301 856 q 323 942 301 921 q 376 964 344 964 q 430 942 408 964 q 451 889 451 921 q 430 835 451 856 q 376 814 408 814 z "},"¸":{"ha":753,"x_min":253,"x_max":493,"o":"m 264 -314 l 253 -258 q 372 -235 340 -251 q 404 -189 404 -219 q 381 -146 404 -161 q 297 -122 357 -131 l 358 4 l 432 4 l 392 -89 q 467 -122 440 -100 q 493 -187 493 -144 q 434 -278 493 -249 q 264 -314 375 -308 z "},"˛":{"ha":753,"x_min":285,"x_max":519,"o":"m 410 -286 q 321 -256 357 -286 q 285 -168 285 -226 q 317 -67 285 -111 q 383 4 349 -22 l 464 4 q 394 -67 419 -29 q 369 -146 369 -106 q 389 -194 369 -178 q 433 -210 408 -210 q 489 -192 464 -210 l 519 -249 q 468 -275 500 -264 q 410 -286 436 -286 z "},"◌":{"ha":813,"x_min":64,"x_max":750,"o":"m 150 135 q 117 148 131 135 q 103 185 103 161 q 117 224 103 210 q 150 238 131 238 q 186 224 172 238 q 200 185 200 210 q 187 148 200 161 q 150 135 174 135 m 111 286 q 78 300 92 286 q 64 338 64 314 q 78 375 64 363 q 111 388 92 388 q 148 375 133 388 q 163 338 163 363 q 149 300 163 314 q 111 286 135 286 m 150 439 q 117 453 131 439 q 103 492 103 467 q 117 529 103 517 q 150 542 131 542 q 186 529 172 542 q 200 492 200 517 q 187 453 200 467 q 150 439 174 439 m 258 21 q 225 34 239 21 q 211 74 211 47 q 225 110 211 97 q 258 122 239 122 q 294 110 279 122 q 308 74 308 97 q 294 34 308 47 q 258 21 281 21 m 258 553 q 225 566 239 553 q 211 603 211 579 q 225 642 211 629 q 258 654 239 654 q 294 642 279 654 q 308 603 308 629 q 294 566 308 579 q 258 553 281 553 m 406 -17 q 372 -3 386 -17 q 358 35 358 10 q 372 72 358 58 q 406 85 386 85 q 442 72 428 85 q 456 35 456 58 q 442 -3 456 10 q 406 -17 428 -17 m 406 589 q 372 603 386 589 q 358 642 358 617 q 372 678 358 665 q 406 692 386 692 q 442 678 428 692 q 456 642 456 665 q 442 603 456 617 q 406 589 428 589 m 553 21 q 519 34 533 21 q 506 74 506 47 q 519 110 506 97 q 553 122 533 122 q 588 110 574 122 q 603 74 603 97 q 590 34 603 47 q 553 21 576 21 m 553 551 q 519 565 533 551 q 506 603 506 579 q 519 641 506 628 q 553 654 533 654 q 588 641 574 654 q 603 603 603 628 q 590 565 603 579 q 553 551 576 551 m 663 135 q 628 148 643 135 q 614 185 614 161 q 628 224 614 210 q 663 238 643 238 q 697 224 683 238 q 711 185 711 210 q 699 148 711 161 q 663 135 686 135 m 700 286 q 665 300 679 286 q 651 338 651 314 q 665 375 651 363 q 700 388 679 388 q 735 375 719 388 q 750 338 750 363 q 736 300 750 314 q 700 286 722 286 m 663 439 q 628 452 643 439 q 614 490 614 465 q 628 527 614 514 q 663 540 643 540 q 697 527 683 540 q 711 490 711 514 q 663 439 711 439 z "},"̀":{"ha":0,"x_min":-199,"x_max":78,"o":"m 19 796 l -199 1008 l -118 1085 l 78 853 l 19 796 z "},"́":{"ha":0,"x_min":-78,"x_max":199,"o":"m -19 796 l -78 853 l 118 1085 l 199 1008 l -19 796 z "},"̂":{"ha":0,"x_min":-215,"x_max":215,"o":"m -215 833 l -57 1028 l 57 1028 l 215 833 l 167 789 l 3 946 l -3 946 l -167 789 l -215 833 z "},"̃":{"ha":0,"x_min":-240,"x_max":240,"o":"m 100 801 q 36 819 63 801 q -12 860 10 838 q -55 900 -35 882 q -99 918 -75 918 q -146 888 -131 918 q -164 808 -161 857 l -240 813 q -230 888 -239 853 q -204 947 -221 922 q -162 987 -187 972 q -100 1001 -136 1001 q -36 983 -62 1001 q 13 943 -10 965 q 55 903 35 921 q 100 885 75 885 q 146 915 131 885 q 164 994 161 946 l 240 989 q 230 915 239 949 q 204 856 221 881 q 162 816 188 831 q 100 801 136 801 z "},"̄":{"ha":0,"x_min":-185,"x_max":185,"o":"m -185 835 l -185 914 l 185 914 l 185 835 l -185 835 z "},"̅":{"ha":0,"x_min":-185,"x_max":185,"o":"m -185 835 l -185 914 l 185 914 l 185 835 l -185 835 z "},"̆":{"ha":0,"x_min":-217,"x_max":217,"o":"m 0 793 q -96 811 -56 793 q -162 859 -136 829 q -201 926 -187 889 q -217 1003 -214 964 l -146 1014 q -131 962 -142 988 q -103 915 -121 936 q -59 882 -85 894 q 0 869 -33 869 q 59 882 33 869 q 103 915 85 894 q 131 962 121 936 q 146 1014 142 988 l 217 1003 q 201 926 214 964 q 161 859 188 889 q 95 811 135 829 q 0 793 56 793 z "},"̇":{"ha":0,"x_min":-75,"x_max":75,"o":"m 0 814 q -53 835 -32 814 q -75 889 -75 856 q -53 942 -75 921 q 0 964 -32 964 q 53 942 32 964 q 75 889 75 921 q 53 835 75 856 q 0 814 32 814 z "},"̈":{"ha":0,"x_min":-203,"x_max":203,"o":"m -133 815 q -183 835 -164 815 q -203 885 -203 856 q -183 934 -203 914 q -133 954 -164 954 q -85 934 -104 954 q -65 885 -65 914 q -85 835 -65 856 q -133 815 -104 815 m 133 815 q 85 835 104 815 q 65 885 65 856 q 85 934 65 914 q 133 954 104 954 q 183 934 164 954 q 203 885 203 914 q 183 835 203 856 q 133 815 164 815 z "},"̉":{"ha":0,"x_min":-94,"x_max":111,"o":"m -44 794 l -57 850 q -1 873 -24 858 q 21 915 21 888 q -94 981 21 975 l -87 1056 q 60 1020 8 1053 q 111 925 111 988 q 98 873 111 894 q 63 835 85 851 q 14 810 42 819 q -44 794 -14 800 z "},"̊":{"ha":0,"x_min":-153,"x_max":153,"o":"m 0 769 q -112 808 -71 769 q -153 907 -153 847 q -112 1004 -153 965 q 0 1043 -71 1043 q 112 1004 71 1043 q 153 907 153 965 q 112 808 153 847 q 0 769 71 769 m 0 821 q 56 844 33 821 q 79 907 79 867 q 56 969 79 946 q 0 992 33 992 q -56 969 -33 992 q -79 907 -79 946 q -56 844 -79 867 q 0 821 -33 821 z "},"̋":{"ha":0,"x_min":-133,"x_max":276,"o":"m -71 789 l -133 818 l -14 1057 l 68 1018 l -71 789 m 139 789 l 75 818 l 196 1057 l 276 1018 l 139 789 z "},"̌":{"ha":0,"x_min":-215,"x_max":215,"o":"m -57 797 l -215 992 l -167 1036 l -3 879 l 3 879 l 167 1036 l 215 992 l 57 797 l -57 797 z "},"̏":{"ha":0,"x_min":-276,"x_max":133,"o":"m -139 789 l -276 1018 l -196 1057 l -75 818 l -139 789 m 71 789 l -68 1018 l 14 1057 l 133 818 l 71 789 z "},"̑":{"ha":0,"x_min":-217,"x_max":217,"o":"m -146 789 l -217 800 q -201 876 -214 839 q -162 944 -187 914 q -96 992 -136 974 q 0 1010 -56 1010 q 95 992 56 1010 q 161 944 135 974 q 201 876 188 914 q 217 800 214 839 l 146 789 q 131 841 142 815 q 103 888 121 867 q 59 921 85 908 q 0 933 33 933 q -59 921 -33 933 q -103 888 -85 908 q -131 841 -121 867 q -146 789 -142 815 z "},"̒":{"ha":0,"x_min":-74,"x_max":64,"o":"m -3 783 q -74 879 -74 783 q -47 971 -74 928 q 39 1042 -21 1014 l 64 997 q 6 954 24 978 q -15 899 -12 931 q -4 900 -11 900 q 35 886 17 900 q 53 844 53 872 q 37 799 53 814 q -3 783 21 783 z "},"̓":{"ha":0,"x_min":-65,"x_max":71,"o":"m -42 781 l -65 825 q 14 925 10 864 q 1 924 10 924 q -37 937 -19 924 q -56 978 -56 950 q -39 1025 -56 1010 q 1 1040 -22 1040 q 71 944 71 1040 q 44 852 71 896 q -42 781 18 808 z "},"̘":{"ha":0,"x_min":-106,"x_max":118,"o":"m 118 -346 l 49 -346 l 49 -246 l -106 -246 l -106 -181 l 49 -181 l 49 -81 l 118 -81 l 118 -346 z "},"̙":{"ha":0,"x_min":-118,"x_max":106,"o":"m 106 -246 l -49 -246 l -49 -346 l -118 -346 l -118 -81 l -49 -81 l -49 -181 l 106 -181 l 106 -246 z "},"̚":{"ha":0,"x_min":-106,"x_max":118,"o":"m 118 796 l 49 796 l 49 926 l -106 926 l -106 992 l 118 992 l 118 796 z "},"̛":{"ha":0,"x_min":-12,"x_max":206,"o":"m -1 603 l -12 660 q 104 774 104 678 q 99 814 104 796 q 85 851 93 832 l 174 893 q 197 842 188 868 q 206 782 206 815 q 190 709 206 740 q 146 656 174 678 q 80 622 118 635 q -1 603 42 608 z "},"̜":{"ha":0,"x_min":-92,"x_max":76,"o":"m 76 -358 q -49 -324 -7 -361 q -92 -224 -92 -287 q -49 -123 -92 -160 q 76 -89 -7 -86 l 76 -137 q -2 -161 21 -137 q -25 -224 -25 -185 q -2 -286 -25 -262 q 76 -310 21 -310 l 76 -358 z "},"̝":{"ha":0,"x_min":-133,"x_max":133,"o":"m 133 -293 l -133 -293 l -133 -228 l -35 -228 l -35 -81 l 35 -81 l 35 -228 l 133 -228 l 133 -293 z "},"̞":{"ha":0,"x_min":-133,"x_max":133,"o":"m 133 -199 l 35 -199 l 35 -346 l -35 -346 l -35 -199 l -133 -199 l -133 -133 l 133 -133 l 133 -199 z "},"̟":{"ha":0,"x_min":-133,"x_max":133,"o":"m 133 -246 l 35 -246 l 35 -346 l -35 -346 l -35 -246 l -133 -246 l -133 -181 l -35 -181 l -35 -81 l 35 -81 l 35 -181 l 133 -181 l 133 -246 z "},"̠":{"ha":0,"x_min":-133,"x_max":133,"o":"m -133 -246 l -133 -181 l 133 -181 l 133 -246 l -133 -246 z "},"̣":{"ha":0,"x_min":-75,"x_max":75,"o":"m 0 -285 q -53 -264 -32 -285 q -75 -210 -75 -243 q -53 -156 -75 -178 q 0 -135 -32 -135 q 53 -156 32 -135 q 75 -210 75 -178 q 53 -264 75 -243 q 0 -285 32 -285 z "},"̤":{"ha":0,"x_min":-203,"x_max":203,"o":"m -133 -279 q -183 -259 -164 -279 q -203 -210 -203 -239 q -183 -160 -203 -181 q -133 -140 -164 -140 q -85 -160 -104 -140 q -65 -210 -65 -181 q -85 -259 -65 -239 q -133 -279 -104 -279 m 133 -279 q 85 -259 104 -279 q 65 -210 65 -239 q 85 -160 65 -181 q 133 -140 104 -140 q 183 -160 164 -140 q 203 -210 203 -181 q 183 -259 203 -239 q 133 -279 164 -279 z "},"̥":{"ha":0,"x_min":-153,"x_max":153,"o":"m 0 -350 q -112 -311 -71 -350 q -153 -212 -153 -272 q -112 -115 -153 -154 q 0 -76 -71 -76 q 112 -115 71 -76 q 153 -212 153 -154 q 112 -311 153 -272 q 0 -350 71 -350 m 0 -299 q 56 -276 33 -299 q 79 -212 79 -253 q 56 -151 79 -174 q 0 -128 33 -128 q -56 -151 -33 -128 q -79 -212 -79 -174 q -56 -276 -79 -253 q 0 -299 -33 -299 z "},"̦":{"ha":0,"x_min":-132,"x_max":108,"o":"m -121 -314 l -132 -258 q -12 -235 -44 -251 q 19 -192 19 -219 q -6 -151 19 -164 q -79 -133 -31 -137 l -54 -81 q 72 -116 36 -92 q 108 -187 108 -140 q 49 -278 108 -249 q -121 -314 -10 -308 z "},"̧":{"ha":0,"x_min":-132,"x_max":108,"o":"m -121 -314 l -132 -258 q -12 -235 -44 -251 q 19 -189 19 -219 q -4 -146 19 -161 q -87 -122 -28 -131 l -26 4 l 47 4 l 7 -89 q 82 -122 56 -100 q 108 -187 108 -144 q 49 -278 108 -249 q -121 -314 -10 -308 z "},"̨":{"ha":0,"x_min":-92,"x_max":143,"o":"m 33 -286 q -56 -256 -19 -286 q -92 -168 -92 -226 q -60 -67 -92 -111 q 7 4 -28 -22 l 88 4 q 18 -67 43 -29 q -7 -146 -7 -106 q 13 -194 -7 -178 q 57 -210 32 -210 q 113 -192 88 -210 l 143 -249 q 92 -275 124 -264 q 33 -286 60 -286 z "},"̩":{"ha":0,"x_min":-49,"x_max":49,"o":"m -49 -369 l -40 -99 l 40 -99 l 49 -369 l -49 -369 z "},"̪":{"ha":0,"x_min":-168,"x_max":168,"o":"m 104 -314 l 104 -179 l -104 -179 l -104 -314 l -168 -314 l -168 -114 l 168 -114 l 168 -314 l 104 -314 z "},"̬":{"ha":0,"x_min":-215,"x_max":215,"o":"m -57 -310 l -215 -115 l -167 -71 l -3 -228 l 3 -228 l 167 -71 l 215 -115 l 57 -310 l -57 -310 z "},"̮":{"ha":0,"x_min":-217,"x_max":217,"o":"m 0 -319 q -96 -301 -56 -319 q -162 -253 -136 -283 q -201 -186 -187 -224 q -217 -110 -214 -149 l -146 -99 q -131 -151 -142 -125 q -103 -197 -121 -176 q -59 -231 -85 -218 q 0 -243 -33 -243 q 59 -231 33 -243 q 103 -197 85 -218 q 131 -151 121 -176 q 146 -99 142 -125 l 217 -110 q 201 -186 214 -149 q 161 -253 188 -224 q 95 -301 135 -283 q 0 -319 56 -319 z "},"̯":{"ha":0,"x_min":-217,"x_max":217,"o":"m -146 -328 l -217 -317 q -201 -240 -214 -278 q -162 -173 -187 -203 q -96 -125 -136 -143 q 0 -107 -56 -107 q 95 -125 56 -107 q 161 -173 135 -143 q 201 -240 188 -203 q 217 -317 214 -278 l 146 -328 q 131 -276 142 -301 q 103 -229 121 -250 q 59 -196 85 -208 q 0 -183 33 -183 q -59 -196 -33 -183 q -103 -229 -85 -208 q -131 -276 -121 -250 q -146 -328 -142 -301 z "},"̰":{"ha":0,"x_min":-240,"x_max":240,"o":"m 100 -308 q 36 -290 63 -308 q -12 -250 10 -272 q -55 -210 -35 -228 q -99 -192 -75 -192 q -146 -222 -131 -192 q -164 -301 -161 -253 l -240 -297 q -230 -222 -239 -257 q -204 -162 -221 -187 q -162 -123 -187 -137 q -100 -108 -136 -108 q -36 -126 -62 -108 q 13 -167 -10 -144 q 55 -207 35 -189 q 100 -225 75 -225 q 146 -194 131 -225 q 164 -115 161 -164 l 240 -121 q 230 -195 239 -161 q 204 -254 221 -229 q 162 -294 188 -279 q 100 -308 136 -308 z "},"̱":{"ha":0,"x_min":-185,"x_max":185,"o":"m -185 -235 l -185 -156 l 185 -156 l 185 -235 l -185 -235 z "},"̴":{"ha":0,"x_min":-240,"x_max":240,"o":"m 100 263 q 36 281 63 263 q -12 321 10 299 q -55 361 -35 343 q -99 379 -75 379 q -146 349 -131 379 q -164 269 -161 318 l -240 274 q -230 349 -239 314 q -204 408 -221 383 q -162 448 -187 433 q -100 463 -136 463 q -36 444 -62 463 q 13 404 -10 426 q 55 364 35 382 q 100 346 75 346 q 146 376 131 346 q 164 456 161 407 l 240 450 q 230 376 239 410 q 204 317 221 342 q 162 277 188 292 q 100 263 136 263 z "},"̹":{"ha":0,"x_min":-76,"x_max":92,"o":"m -76 -358 l -76 -310 q 2 -286 -21 -310 q 25 -224 25 -262 q 2 -161 25 -185 q -76 -137 -21 -137 l -76 -89 q 49 -123 7 -86 q 92 -224 92 -160 q 49 -324 92 -287 q -76 -358 7 -361 z "},"̺":{"ha":0,"x_min":-168,"x_max":168,"o":"m -168 -312 l -168 -114 l -104 -114 l -104 -247 l 104 -247 l 104 -114 l 168 -114 l 168 -312 l -168 -312 z "},"̻":{"ha":0,"x_min":-168,"x_max":168,"o":"m -168 -333 l -168 -107 l 168 -107 l 168 -333 l -168 -333 m -104 -278 l 104 -278 l 104 -161 l -104 -161 l -104 -278 z "},"̼":{"ha":0,"x_min":-233,"x_max":233,"o":"m -233 -317 q -200 -160 -233 -208 q -103 -111 -167 -111 q -40 -129 -67 -111 q -1 -192 -12 -147 l 1 -192 q 40 -129 13 -147 q 103 -111 67 -111 q 200 -160 167 -111 q 233 -317 233 -208 l 167 -325 q 148 -214 167 -242 q 97 -186 129 -186 q 49 -215 65 -186 q 33 -297 33 -244 l 33 -324 l -33 -324 l -33 -297 q -49 -215 -33 -244 q -99 -186 -65 -186 q -149 -214 -131 -186 q -167 -325 -167 -242 l -233 -317 z "},"̽":{"ha":0,"x_min":-117,"x_max":117,"o":"m -71 771 l -117 817 l -46 888 l -117 958 l -71 1006 l 0 935 l 71 1006 l 117 958 l 46 888 l 117 817 l 71 771 l 0 842 l -71 771 z "},"͂":{"ha":0,"x_min":-240,"x_max":240,"o":"m 100 801 q 36 819 63 801 q -12 860 10 838 q -55 900 -35 882 q -99 918 -75 918 q -146 888 -131 918 q -164 808 -161 857 l -240 813 q -230 888 -239 853 q -204 947 -221 922 q -162 987 -187 972 q -100 1001 -136 1001 q -36 983 -62 1001 q 13 943 -10 965 q 55 903 35 921 q 100 885 75 885 q 146 915 131 885 q 164 994 161 946 l 240 989 q 230 915 239 949 q 204 856 221 881 q 162 816 188 831 q 100 801 136 801 z "},"ͅ":{"ha":0,"x_min":-46,"x_max":125,"o":"m 61 -279 q -20 -246 6 -279 q -46 -150 -46 -212 l -46 -86 l 43 -86 q 40 -124 40 -104 q 40 -160 40 -144 q 53 -193 40 -183 q 82 -203 65 -203 q 93 -202 88 -203 q 113 -199 99 -201 l 125 -267 q 98 -276 111 -272 q 61 -279 85 -279 z "},"͡":{"ha":0,"x_min":-631,"x_max":631,"o":"m -597 764 l -631 822 q -334 953 -490 908 q 0 999 -178 999 q 334 953 178 999 q 631 822 490 908 l 597 764 q 308 881 464 844 q 0 918 151 918 q -308 881 -151 918 q -597 764 -464 844 z "}," ":{"ha":281,"x_min":0,"x_max":0,"o":""}," ":{"ha":690,"x_min":0,"x_max":0,"o":""}," ":{"ha":174,"x_min":0,"x_max":0,"o":""},"":{"ha":0,"x_min":0,"x_max":0,"o":""},"fi":{"ha":772,"x_min":42,"x_max":682,"o":"m 133 0 l 133 582 l 42 582 l 42 668 l 133 675 l 133 782 q 181 946 133 886 q 331 1006 229 1006 q 391 999 363 1006 q 443 983 419 993 l 418 896 q 342 913 381 913 q 247 782 247 913 l 247 675 l 390 675 l 390 582 l 247 582 l 247 0 l 133 0 m 544 0 l 544 675 l 658 675 l 658 0 l 544 0 m 603 814 q 547 835 569 814 q 524 888 524 856 q 547 941 524 921 q 603 961 569 961 q 659 941 636 961 q 682 888 682 921 q 659 835 682 856 q 603 814 636 814 z "},"fl":{"ha":760,"x_min":42,"x_max":706,"o":"m 133 0 l 133 582 l 42 582 l 42 668 l 133 675 l 133 782 q 181 946 133 886 q 331 1006 229 1006 q 391 999 363 1006 q 443 983 419 993 l 418 896 q 342 913 381 913 q 247 782 247 913 l 247 675 l 390 675 l 390 582 l 247 582 l 247 0 l 133 0 m 640 -17 q 547 22 575 -17 q 519 136 519 61 l 519 989 l 633 989 l 633 128 q 643 89 633 100 q 665 78 653 78 q 676 78 671 78 q 690 81 681 78 l 706 -6 q 679 -14 694 -11 q 640 -17 664 -17 z "}},"familyName":"Source Sans Pro","ascender":1367,"descender":-379,"underlinePosition":-75,"underlineThickness":50,"boundingBox":{"yMin":-292,"xMin":-454,"yMax":968,"xMax":2159},"resolution":1000,"original_font_information":{"format":0,"copyright":"Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ‘Source’.","fontFamily":"Source Sans Pro","fontSubfamily":"Regular","uniqueID":"2.020;ADBO;SourceSansPro-Regular;ADOBE","fullName":"Source Sans Pro","version":"Version 2.020;PS 2.000;hotconv 1.0.86;makeotf.lib2.5.63406","postScriptName":"SourceSansPro-Regular","trademark":"Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.","manufacturer":"Adobe Systems Incorporated","designer":"Paul D. Hunt","manufacturerURL":"http://www.adobe.com/type","licence":"This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFL. This Font Software is distributed on an ‘AS IS’ BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.","licenceURL":"http://scripts.sil.org/OFL","unknown1":"Slashed zero","unknown2":"Straight l","unknown3":"Alternate a","unknown4":"Alternate g","unknown5":"Serifed I"},"cssFontWeight":"normal","cssFontStyle":"normal"} ================================================ FILE: browser/data/fonts/helvetiker_bold.typeface.js ================================================ if (_typeface_js && _typeface_js.loadFace) _typeface_js.loadFace({"glyphs":{"ο":{"x_min":0,"x_max":764,"ha":863,"o":"m 380 -25 q 105 87 211 -25 q 0 372 0 200 q 104 660 0 545 q 380 775 209 775 q 658 659 552 775 q 764 372 764 544 q 658 87 764 200 q 380 -25 552 -25 m 379 142 q 515 216 466 142 q 557 373 557 280 q 515 530 557 465 q 379 607 466 607 q 245 530 294 607 q 204 373 204 465 q 245 218 204 283 q 379 142 294 142 "},"S":{"x_min":0,"x_max":826,"ha":915,"o":"m 826 306 q 701 55 826 148 q 423 -29 587 -29 q 138 60 255 -29 q 0 318 13 154 l 208 318 q 288 192 216 238 q 437 152 352 152 q 559 181 506 152 q 623 282 623 217 q 466 411 623 372 q 176 487 197 478 q 18 719 18 557 q 136 958 18 869 q 399 1040 244 1040 q 670 956 561 1040 q 791 713 791 864 l 591 713 q 526 826 583 786 q 393 866 469 866 q 277 838 326 866 q 218 742 218 804 q 374 617 218 655 q 667 542 646 552 q 826 306 826 471 "},"¦":{"x_min":0,"x_max":143,"ha":240,"o":"m 143 462 l 0 462 l 0 984 l 143 984 l 143 462 m 143 -242 l 0 -242 l 0 280 l 143 280 l 143 -242 "},"/":{"x_min":196.109375,"x_max":632.5625,"ha":828,"o":"m 632 1040 l 289 -128 l 196 -128 l 538 1040 l 632 1040 "},"Τ":{"x_min":-0.609375,"x_max":808,"ha":878,"o":"m 808 831 l 508 831 l 508 0 l 298 0 l 298 831 l 0 831 l 0 1013 l 808 1013 l 808 831 "},"y":{"x_min":0,"x_max":738.890625,"ha":828,"o":"m 738 749 l 444 -107 q 361 -238 413 -199 q 213 -277 308 -277 q 156 -275 176 -277 q 120 -271 131 -271 l 120 -110 q 147 -113 134 -111 q 179 -116 161 -116 q 247 -91 226 -116 q 269 -17 269 -67 q 206 173 269 -4 q 84 515 162 301 q 0 749 41 632 l 218 749 l 376 207 l 529 749 l 738 749 "},"Π":{"x_min":0,"x_max":809,"ha":922,"o":"m 809 0 l 598 0 l 598 836 l 208 836 l 208 0 l 0 0 l 0 1012 l 809 1012 l 809 0 "},"ΐ":{"x_min":-162,"x_max":364,"ha":364,"o":"m 364 810 l 235 810 l 235 952 l 364 952 l 364 810 m 301 1064 l 86 810 l -12 810 l 123 1064 l 301 1064 m -33 810 l -162 810 l -162 952 l -33 952 l -33 810 m 200 0 l 0 0 l 0 748 l 200 748 l 200 0 "},"g":{"x_min":0,"x_max":724,"ha":839,"o":"m 724 48 q 637 -223 724 -142 q 357 -304 551 -304 q 140 -253 226 -304 q 23 -72 36 -192 l 243 -72 q 290 -127 255 -110 q 368 -144 324 -144 q 504 -82 470 -144 q 530 71 530 -38 l 530 105 q 441 25 496 51 q 319 0 386 0 q 79 115 166 0 q 0 377 0 219 q 77 647 0 534 q 317 775 166 775 q 534 656 456 775 l 534 748 l 724 748 l 724 48 m 368 167 q 492 237 447 167 q 530 382 530 297 q 490 529 530 466 q 364 603 444 603 q 240 532 284 603 q 201 386 201 471 q 240 239 201 300 q 368 167 286 167 "},"²":{"x_min":0,"x_max":463,"ha":560,"o":"m 463 791 q 365 627 463 706 q 151 483 258 555 l 455 483 l 455 382 l 0 382 q 84 565 0 488 q 244 672 97 576 q 331 784 331 727 q 299 850 331 824 q 228 876 268 876 q 159 848 187 876 q 132 762 132 820 l 10 762 q 78 924 10 866 q 228 976 137 976 q 392 925 322 976 q 463 791 463 874 "},"–":{"x_min":0,"x_max":704.171875,"ha":801,"o":"m 704 297 l 0 297 l 0 450 l 704 450 l 704 297 "},"Κ":{"x_min":0,"x_max":899.671875,"ha":969,"o":"m 899 0 l 646 0 l 316 462 l 208 355 l 208 0 l 0 0 l 0 1013 l 208 1013 l 208 596 l 603 1013 l 863 1013 l 460 603 l 899 0 "},"ƒ":{"x_min":-46,"x_max":440,"ha":525,"o":"m 440 609 l 316 609 l 149 -277 l -46 -277 l 121 609 l 14 609 l 14 749 l 121 749 q 159 949 121 894 q 344 1019 208 1019 l 440 1015 l 440 855 l 377 855 q 326 841 338 855 q 314 797 314 827 q 314 773 314 786 q 314 749 314 761 l 440 749 l 440 609 "},"e":{"x_min":0,"x_max":708,"ha":808,"o":"m 708 321 l 207 321 q 254 186 207 236 q 362 141 298 141 q 501 227 453 141 l 700 227 q 566 36 662 104 q 362 -26 477 -26 q 112 72 213 -26 q 0 369 0 182 q 95 683 0 573 q 358 793 191 793 q 619 677 531 793 q 708 321 708 561 m 501 453 q 460 571 501 531 q 353 612 420 612 q 247 570 287 612 q 207 453 207 529 l 501 453 "},"ό":{"x_min":0,"x_max":764,"ha":863,"o":"m 380 -25 q 105 87 211 -25 q 0 372 0 200 q 104 660 0 545 q 380 775 209 775 q 658 659 552 775 q 764 372 764 544 q 658 87 764 200 q 380 -25 552 -25 m 379 142 q 515 216 466 142 q 557 373 557 280 q 515 530 557 465 q 379 607 466 607 q 245 530 294 607 q 204 373 204 465 q 245 218 204 283 q 379 142 294 142 m 593 1039 l 391 823 l 293 823 l 415 1039 l 593 1039 "},"J":{"x_min":0,"x_max":649,"ha":760,"o":"m 649 294 q 573 48 649 125 q 327 -29 497 -29 q 61 82 136 -29 q 0 375 0 173 l 200 375 l 199 309 q 219 194 199 230 q 321 145 249 145 q 418 193 390 145 q 441 307 441 232 l 441 1013 l 649 1013 l 649 294 "},"»":{"x_min":-0.234375,"x_max":526,"ha":624,"o":"m 526 286 l 297 87 l 296 250 l 437 373 l 297 495 l 297 660 l 526 461 l 526 286 m 229 286 l 0 87 l 0 250 l 140 373 l 0 495 l 0 660 l 229 461 l 229 286 "},"©":{"x_min":3,"x_max":1007,"ha":1104,"o":"m 507 -6 q 129 153 269 -6 q 3 506 3 298 q 127 857 3 713 q 502 1017 266 1017 q 880 855 740 1017 q 1007 502 1007 711 q 882 152 1007 295 q 507 -6 743 -6 m 502 934 q 184 800 302 934 q 79 505 79 680 q 184 210 79 331 q 501 76 302 76 q 819 210 701 76 q 925 507 925 331 q 820 800 925 682 q 502 934 704 934 m 758 410 q 676 255 748 313 q 506 197 605 197 q 298 291 374 197 q 229 499 229 377 q 297 713 229 624 q 494 811 372 811 q 666 760 593 811 q 752 616 739 710 l 621 616 q 587 688 621 658 q 509 719 554 719 q 404 658 441 719 q 368 511 368 598 q 403 362 368 427 q 498 298 438 298 q 624 410 606 298 l 758 410 "},"ώ":{"x_min":0,"x_max":945,"ha":1051,"o":"m 566 528 l 372 528 l 372 323 q 372 298 372 311 q 373 271 372 285 q 360 183 373 211 q 292 142 342 142 q 219 222 243 142 q 203 365 203 279 q 241 565 203 461 q 334 748 273 650 l 130 748 q 36 552 68 650 q 0 337 0 444 q 69 96 0 204 q 276 -29 149 -29 q 390 0 337 -29 q 470 78 444 28 q 551 0 495 30 q 668 -29 608 -29 q 874 96 793 -29 q 945 337 945 205 q 910 547 945 444 q 814 748 876 650 l 610 748 q 703 565 671 650 q 742 365 742 462 q 718 189 742 237 q 651 142 694 142 q 577 190 597 142 q 565 289 565 221 l 565 323 l 566 528 m 718 1039 l 516 823 l 417 823 l 540 1039 l 718 1039 "},"^":{"x_min":197.21875,"x_max":630.5625,"ha":828,"o":"m 630 836 l 536 836 l 413 987 l 294 836 l 197 836 l 331 1090 l 493 1090 l 630 836 "},"«":{"x_min":0,"x_max":526.546875,"ha":624,"o":"m 526 87 l 297 286 l 297 461 l 526 660 l 526 495 l 385 373 l 526 250 l 526 87 m 229 87 l 0 286 l 0 461 l 229 660 l 229 495 l 88 373 l 229 250 l 229 87 "},"D":{"x_min":0,"x_max":864,"ha":968,"o":"m 400 1013 q 736 874 608 1013 q 864 523 864 735 q 717 146 864 293 q 340 0 570 0 l 0 0 l 0 1013 l 400 1013 m 398 837 l 206 837 l 206 182 l 372 182 q 584 276 507 182 q 657 504 657 365 q 594 727 657 632 q 398 837 522 837 "},"∙":{"x_min":0,"x_max":207,"ha":304,"o":"m 207 528 l 0 528 l 0 735 l 207 735 l 207 528 "},"ÿ":{"x_min":0,"x_max":47,"ha":125,"o":"m 47 3 q 37 -7 47 -7 q 28 0 30 -7 q 39 -4 32 -4 q 45 3 45 -1 l 37 0 q 28 9 28 0 q 39 19 28 19 l 47 16 l 47 19 l 47 3 m 37 1 q 44 8 44 1 q 37 16 44 16 q 30 8 30 16 q 37 1 30 1 m 26 1 l 23 22 l 14 0 l 3 22 l 3 3 l 0 25 l 13 1 l 22 25 l 26 1 "},"w":{"x_min":0,"x_max":1056.953125,"ha":1150,"o":"m 1056 749 l 848 0 l 647 0 l 527 536 l 412 0 l 211 0 l 0 749 l 202 749 l 325 226 l 429 748 l 633 748 l 740 229 l 864 749 l 1056 749 "},"$":{"x_min":0,"x_max":704,"ha":800,"o":"m 682 693 l 495 693 q 468 782 491 749 q 391 831 441 824 l 391 579 q 633 462 562 534 q 704 259 704 389 q 616 57 704 136 q 391 -22 528 -22 l 391 -156 l 308 -156 l 308 -22 q 76 69 152 -7 q 0 300 0 147 l 183 300 q 215 191 190 230 q 308 128 245 143 l 308 414 q 84 505 157 432 q 12 700 12 578 q 89 902 12 824 q 308 981 166 981 l 308 1069 l 391 1069 l 391 981 q 595 905 521 981 q 682 693 670 829 m 308 599 l 308 831 q 228 796 256 831 q 200 712 200 762 q 225 642 200 668 q 308 599 251 617 m 391 128 q 476 174 449 140 q 504 258 504 207 q 391 388 504 354 l 391 128 "},"\\":{"x_min":-0.03125,"x_max":434.765625,"ha":532,"o":"m 434 -128 l 341 -128 l 0 1039 l 91 1040 l 434 -128 "},"µ":{"x_min":0,"x_max":647,"ha":754,"o":"m 647 0 l 478 0 l 478 68 q 412 9 448 30 q 330 -11 375 -11 q 261 3 296 -11 q 199 43 226 18 l 199 -277 l 0 -277 l 0 749 l 199 749 l 199 358 q 216 221 199 267 q 322 151 244 151 q 435 240 410 151 q 448 401 448 283 l 448 749 l 647 749 l 647 0 "},"Ι":{"x_min":42,"x_max":250,"ha":413,"o":"m 250 0 l 42 0 l 42 1013 l 250 1013 l 250 0 "},"Ύ":{"x_min":0,"x_max":1211.15625,"ha":1289,"o":"m 1211 1012 l 907 376 l 907 0 l 697 0 l 697 376 l 374 1012 l 583 1012 l 802 576 l 1001 1012 l 1211 1012 m 313 1035 l 98 780 l 0 780 l 136 1035 l 313 1035 "},"’":{"x_min":0,"x_max":192,"ha":289,"o":"m 192 834 q 137 692 192 751 q 0 626 83 634 l 0 697 q 101 831 101 723 l 0 831 l 0 1013 l 192 1013 l 192 834 "},"Ν":{"x_min":0,"x_max":833,"ha":946,"o":"m 833 0 l 617 0 l 206 696 l 206 0 l 0 0 l 0 1013 l 216 1013 l 629 315 l 629 1013 l 833 1013 l 833 0 "},"-":{"x_min":27.78125,"x_max":413.890625,"ha":525,"o":"m 413 279 l 27 279 l 27 468 l 413 468 l 413 279 "},"Q":{"x_min":0,"x_max":995.59375,"ha":1096,"o":"m 995 49 l 885 -70 l 762 42 q 641 -12 709 4 q 497 -29 572 -29 q 135 123 271 -29 q 0 504 0 276 q 131 881 0 731 q 497 1040 270 1040 q 859 883 719 1040 q 994 506 994 731 q 966 321 994 413 q 884 152 938 229 l 995 49 m 730 299 q 767 395 755 344 q 779 504 779 446 q 713 743 779 644 q 505 857 638 857 q 284 745 366 857 q 210 501 210 644 q 279 265 210 361 q 492 157 357 157 q 615 181 557 157 l 508 287 l 620 405 l 730 299 "},"ς":{"x_min":0,"x_max":731.78125,"ha":768,"o":"m 731 448 l 547 448 q 485 571 531 533 q 369 610 440 610 q 245 537 292 610 q 204 394 204 473 q 322 186 204 238 q 540 133 430 159 q 659 -15 659 98 q 643 -141 659 -80 q 595 -278 627 -202 l 423 -278 q 458 -186 448 -215 q 474 -88 474 -133 q 352 0 474 -27 q 123 80 181 38 q 0 382 0 170 q 98 660 0 549 q 367 777 202 777 q 622 683 513 777 q 731 448 731 589 "},"M":{"x_min":0,"x_max":1019,"ha":1135,"o":"m 1019 0 l 823 0 l 823 819 l 618 0 l 402 0 l 194 818 l 194 0 l 0 0 l 0 1013 l 309 1012 l 510 241 l 707 1013 l 1019 1013 l 1019 0 "},"Ψ":{"x_min":0,"x_max":995,"ha":1085,"o":"m 995 698 q 924 340 995 437 q 590 200 841 227 l 590 0 l 404 0 l 404 200 q 70 340 152 227 q 0 698 0 437 l 0 1013 l 188 1013 l 188 694 q 212 472 188 525 q 404 383 254 383 l 404 1013 l 590 1013 l 590 383 q 781 472 740 383 q 807 694 807 525 l 807 1013 l 995 1013 l 995 698 "},"C":{"x_min":0,"x_max":970.828125,"ha":1043,"o":"m 970 345 q 802 70 933 169 q 490 -29 672 -29 q 130 130 268 -29 q 0 506 0 281 q 134 885 0 737 q 502 1040 275 1040 q 802 939 668 1040 q 965 679 936 838 l 745 679 q 649 809 716 761 q 495 857 582 857 q 283 747 361 857 q 214 508 214 648 q 282 267 214 367 q 493 154 359 154 q 651 204 584 154 q 752 345 718 255 l 970 345 "},"!":{"x_min":0,"x_max":204,"ha":307,"o":"m 204 739 q 182 515 204 686 q 152 282 167 398 l 52 282 q 13 589 27 473 q 0 739 0 704 l 0 1013 l 204 1013 l 204 739 m 204 0 l 0 0 l 0 203 l 204 203 l 204 0 "},"{":{"x_min":0,"x_max":501.390625,"ha":599,"o":"m 501 -285 q 229 -209 301 -285 q 176 -35 176 -155 q 182 47 176 -8 q 189 126 189 103 q 156 245 189 209 q 0 294 112 294 l 0 438 q 154 485 111 438 q 189 603 189 522 q 186 666 189 636 q 176 783 176 772 q 231 945 176 894 q 501 1015 306 1015 l 501 872 q 370 833 408 872 q 340 737 340 801 q 342 677 340 705 q 353 569 353 579 q 326 451 353 496 q 207 366 291 393 q 327 289 294 346 q 353 164 353 246 q 348 79 353 132 q 344 17 344 26 q 372 -95 344 -58 q 501 -141 408 -141 l 501 -285 "},"X":{"x_min":0,"x_max":894.453125,"ha":999,"o":"m 894 0 l 654 0 l 445 351 l 238 0 l 0 0 l 316 516 l 0 1013 l 238 1013 l 445 659 l 652 1013 l 894 1013 l 577 519 l 894 0 "},"#":{"x_min":0,"x_max":1019.453125,"ha":1117,"o":"m 1019 722 l 969 582 l 776 581 l 717 417 l 919 417 l 868 279 l 668 278 l 566 -6 l 413 -5 l 516 279 l 348 279 l 247 -6 l 94 -6 l 196 278 l 0 279 l 49 417 l 245 417 l 304 581 l 98 582 l 150 722 l 354 721 l 455 1006 l 606 1006 l 507 721 l 673 722 l 776 1006 l 927 1006 l 826 721 l 1019 722 m 627 581 l 454 581 l 394 417 l 567 417 l 627 581 "},"ι":{"x_min":42,"x_max":242,"ha":389,"o":"m 242 0 l 42 0 l 42 749 l 242 749 l 242 0 "},"Ά":{"x_min":0,"x_max":995.828125,"ha":1072,"o":"m 313 1035 l 98 780 l 0 780 l 136 1035 l 313 1035 m 995 0 l 776 0 l 708 208 l 315 208 l 247 0 l 29 0 l 390 1012 l 629 1012 l 995 0 m 652 376 l 509 809 l 369 376 l 652 376 "},")":{"x_min":0,"x_max":389,"ha":486,"o":"m 389 357 q 319 14 389 187 q 145 -293 259 -134 l 0 -293 q 139 22 90 -142 q 189 358 189 187 q 139 689 189 525 q 0 1013 90 853 l 145 1013 q 319 703 258 857 q 389 357 389 528 "},"ε":{"x_min":16.671875,"x_max":652.78125,"ha":742,"o":"m 652 259 q 565 49 652 123 q 340 -25 479 -25 q 102 39 188 -25 q 16 197 16 104 q 45 299 16 249 q 134 390 75 348 q 58 456 86 419 q 25 552 25 502 q 120 717 25 653 q 322 776 208 776 q 537 710 456 776 q 625 508 625 639 l 445 508 q 415 585 445 563 q 327 608 386 608 q 254 590 293 608 q 215 544 215 573 q 252 469 215 490 q 336 453 280 453 q 369 455 347 453 q 400 456 391 456 l 400 308 l 329 308 q 247 291 280 308 q 204 223 204 269 q 255 154 204 172 q 345 143 286 143 q 426 174 398 143 q 454 259 454 206 l 652 259 "},"Δ":{"x_min":0,"x_max":981.953125,"ha":1057,"o":"m 981 0 l 0 0 l 386 1013 l 594 1013 l 981 0 m 715 175 l 490 765 l 266 175 l 715 175 "},"}":{"x_min":0,"x_max":500,"ha":597,"o":"m 500 294 q 348 246 390 294 q 315 128 315 209 q 320 42 315 101 q 326 -48 326 -17 q 270 -214 326 -161 q 0 -285 196 -285 l 0 -141 q 126 -97 90 -141 q 154 8 154 -64 q 150 91 154 37 q 146 157 146 145 q 172 281 146 235 q 294 366 206 339 q 173 451 208 390 q 146 576 146 500 q 150 655 146 603 q 154 731 154 708 q 126 831 154 799 q 0 872 90 872 l 0 1015 q 270 944 196 1015 q 326 777 326 891 q 322 707 326 747 q 313 593 313 612 q 347 482 313 518 q 500 438 390 438 l 500 294 "},"‰":{"x_min":0,"x_max":1681,"ha":1775,"o":"m 861 484 q 1048 404 979 484 q 1111 228 1111 332 q 1048 51 1111 123 q 859 -29 979 -29 q 672 50 740 -29 q 610 227 610 122 q 672 403 610 331 q 861 484 741 484 m 861 120 q 939 151 911 120 q 967 226 967 183 q 942 299 967 270 q 861 333 912 333 q 783 301 811 333 q 756 226 756 269 q 783 151 756 182 q 861 120 810 120 m 904 984 l 316 -28 l 205 -29 l 793 983 l 904 984 m 250 984 q 436 904 366 984 q 499 730 499 832 q 436 552 499 626 q 248 472 366 472 q 62 552 132 472 q 0 728 0 624 q 62 903 0 831 q 250 984 132 984 m 249 835 q 169 801 198 835 q 140 725 140 768 q 167 652 140 683 q 247 621 195 621 q 327 654 298 621 q 357 730 357 687 q 329 803 357 772 q 249 835 301 835 m 1430 484 q 1618 404 1548 484 q 1681 228 1681 332 q 1618 51 1681 123 q 1429 -29 1548 -29 q 1241 50 1309 -29 q 1179 227 1179 122 q 1241 403 1179 331 q 1430 484 1311 484 m 1431 120 q 1509 151 1481 120 q 1537 226 1537 183 q 1511 299 1537 270 q 1431 333 1482 333 q 1352 301 1380 333 q 1325 226 1325 269 q 1352 151 1325 182 q 1431 120 1379 120 "},"a":{"x_min":0,"x_max":700,"ha":786,"o":"m 700 0 l 488 0 q 465 93 469 45 q 365 5 427 37 q 233 -26 303 -26 q 65 37 130 -26 q 0 205 0 101 q 120 409 0 355 q 343 452 168 431 q 465 522 465 468 q 424 588 465 565 q 337 611 384 611 q 250 581 285 611 q 215 503 215 552 l 26 503 q 113 707 26 633 q 328 775 194 775 q 538 723 444 775 q 657 554 657 659 l 657 137 q 666 73 657 101 q 700 33 675 45 l 700 0 m 465 297 l 465 367 q 299 322 358 340 q 193 217 193 287 q 223 150 193 174 q 298 127 254 127 q 417 175 370 127 q 465 297 465 224 "},"—":{"x_min":0,"x_max":941.671875,"ha":1039,"o":"m 941 297 l 0 297 l 0 450 l 941 450 l 941 297 "},"=":{"x_min":29.171875,"x_max":798.609375,"ha":828,"o":"m 798 502 l 29 502 l 29 635 l 798 635 l 798 502 m 798 204 l 29 204 l 29 339 l 798 339 l 798 204 "},"N":{"x_min":0,"x_max":833,"ha":949,"o":"m 833 0 l 617 0 l 206 695 l 206 0 l 0 0 l 0 1013 l 216 1013 l 629 315 l 629 1013 l 833 1013 l 833 0 "},"ρ":{"x_min":0,"x_max":722,"ha":810,"o":"m 364 -17 q 271 0 313 -17 q 194 48 230 16 l 194 -278 l 0 -278 l 0 370 q 87 656 0 548 q 358 775 183 775 q 626 655 524 775 q 722 372 722 541 q 621 95 722 208 q 364 -17 520 -17 m 360 607 q 237 529 280 607 q 201 377 201 463 q 234 229 201 292 q 355 147 277 147 q 467 210 419 147 q 515 374 515 273 q 471 537 515 468 q 360 607 428 607 "},"2":{"x_min":64,"x_max":764,"ha":828,"o":"m 764 685 q 675 452 764 541 q 484 325 637 415 q 307 168 357 250 l 754 168 l 754 0 l 64 0 q 193 301 64 175 q 433 480 202 311 q 564 673 564 576 q 519 780 564 737 q 416 824 475 824 q 318 780 358 824 q 262 633 270 730 l 80 633 q 184 903 80 807 q 415 988 276 988 q 654 907 552 988 q 764 685 764 819 "},"¯":{"x_min":0,"x_max":775,"ha":771,"o":"m 775 958 l 0 958 l 0 1111 l 775 1111 l 775 958 "},"Z":{"x_min":0,"x_max":804.171875,"ha":906,"o":"m 804 836 l 251 182 l 793 182 l 793 0 l 0 0 l 0 176 l 551 830 l 11 830 l 11 1013 l 804 1013 l 804 836 "},"u":{"x_min":0,"x_max":668,"ha":782,"o":"m 668 0 l 474 0 l 474 89 q 363 9 425 37 q 233 -19 301 -19 q 61 53 123 -19 q 0 239 0 126 l 0 749 l 199 749 l 199 296 q 225 193 199 233 q 316 146 257 146 q 424 193 380 146 q 469 304 469 240 l 469 749 l 668 749 l 668 0 "},"k":{"x_min":0,"x_max":688.890625,"ha":771,"o":"m 688 0 l 450 0 l 270 316 l 196 237 l 196 0 l 0 0 l 0 1013 l 196 1013 l 196 483 l 433 748 l 675 748 l 413 469 l 688 0 "},"Η":{"x_min":0,"x_max":837,"ha":950,"o":"m 837 0 l 627 0 l 627 450 l 210 450 l 210 0 l 0 0 l 0 1013 l 210 1013 l 210 635 l 627 635 l 627 1013 l 837 1013 l 837 0 "},"Α":{"x_min":0,"x_max":966.671875,"ha":1043,"o":"m 966 0 l 747 0 l 679 208 l 286 208 l 218 0 l 0 0 l 361 1013 l 600 1013 l 966 0 m 623 376 l 480 809 l 340 376 l 623 376 "},"s":{"x_min":0,"x_max":681,"ha":775,"o":"m 681 229 q 568 33 681 105 q 340 -29 471 -29 q 107 39 202 -29 q 0 245 0 114 l 201 245 q 252 155 201 189 q 358 128 295 128 q 436 144 401 128 q 482 205 482 166 q 363 284 482 255 q 143 348 181 329 q 25 533 25 408 q 129 716 25 647 q 340 778 220 778 q 554 710 465 778 q 658 522 643 643 l 463 522 q 419 596 458 570 q 327 622 380 622 q 255 606 290 622 q 221 556 221 590 q 339 473 221 506 q 561 404 528 420 q 681 229 681 344 "},"B":{"x_min":0,"x_max":835,"ha":938,"o":"m 674 547 q 791 450 747 518 q 835 304 835 383 q 718 75 835 158 q 461 0 612 0 l 0 0 l 0 1013 l 477 1013 q 697 951 609 1013 q 797 754 797 880 q 765 630 797 686 q 674 547 734 575 m 438 621 q 538 646 495 621 q 590 730 590 676 q 537 814 590 785 q 436 838 494 838 l 199 838 l 199 621 l 438 621 m 445 182 q 561 211 513 182 q 618 311 618 247 q 565 410 618 375 q 444 446 512 446 l 199 446 l 199 182 l 445 182 "},"…":{"x_min":0,"x_max":819,"ha":963,"o":"m 206 0 l 0 0 l 0 207 l 206 207 l 206 0 m 512 0 l 306 0 l 306 207 l 512 207 l 512 0 m 819 0 l 613 0 l 613 207 l 819 207 l 819 0 "},"?":{"x_min":1,"x_max":687,"ha":785,"o":"m 687 734 q 621 563 687 634 q 501 454 560 508 q 436 293 436 386 l 251 293 l 251 391 q 363 557 251 462 q 476 724 476 653 q 432 827 476 788 q 332 866 389 866 q 238 827 275 866 q 195 699 195 781 l 1 699 q 110 955 1 861 q 352 1040 210 1040 q 582 963 489 1040 q 687 734 687 878 m 446 0 l 243 0 l 243 203 l 446 203 l 446 0 "},"H":{"x_min":0,"x_max":838,"ha":953,"o":"m 838 0 l 628 0 l 628 450 l 210 450 l 210 0 l 0 0 l 0 1013 l 210 1013 l 210 635 l 628 635 l 628 1013 l 838 1013 l 838 0 "},"ν":{"x_min":0,"x_max":740.28125,"ha":828,"o":"m 740 749 l 473 0 l 266 0 l 0 749 l 222 749 l 373 211 l 529 749 l 740 749 "},"c":{"x_min":0,"x_max":751.390625,"ha":828,"o":"m 751 282 q 625 58 725 142 q 384 -26 526 -26 q 107 84 215 -26 q 0 366 0 195 q 98 651 0 536 q 370 774 204 774 q 616 700 518 774 q 751 486 715 626 l 536 486 q 477 570 516 538 q 380 607 434 607 q 248 533 298 607 q 204 378 204 466 q 242 219 204 285 q 377 139 290 139 q 483 179 438 139 q 543 282 527 220 l 751 282 "},"¶":{"x_min":0,"x_max":566.671875,"ha":678,"o":"m 21 892 l 52 892 l 98 761 l 145 892 l 176 892 l 178 741 l 157 741 l 157 867 l 108 741 l 88 741 l 40 871 l 40 741 l 21 741 l 21 892 m 308 854 l 308 731 q 252 691 308 691 q 227 691 240 691 q 207 696 213 695 l 207 712 l 253 706 q 288 733 288 706 l 288 763 q 244 741 279 741 q 193 797 193 741 q 261 860 193 860 q 287 860 273 860 q 308 854 302 855 m 288 842 l 263 843 q 213 796 213 843 q 248 756 213 756 q 288 796 288 756 l 288 842 m 566 988 l 502 988 l 502 -1 l 439 -1 l 439 988 l 317 988 l 317 -1 l 252 -1 l 252 602 q 81 653 155 602 q 0 805 0 711 q 101 989 0 918 q 309 1053 194 1053 l 566 1053 l 566 988 "},"β":{"x_min":0,"x_max":703,"ha":789,"o":"m 510 539 q 651 429 600 501 q 703 262 703 357 q 617 53 703 136 q 404 -29 532 -29 q 199 51 279 -29 l 199 -278 l 0 -278 l 0 627 q 77 911 0 812 q 343 1021 163 1021 q 551 957 464 1021 q 649 769 649 886 q 613 638 649 697 q 510 539 577 579 m 344 136 q 452 181 408 136 q 497 291 497 227 q 435 409 497 369 q 299 444 381 444 l 299 600 q 407 634 363 600 q 452 731 452 669 q 417 820 452 784 q 329 857 382 857 q 217 775 246 857 q 199 622 199 725 l 199 393 q 221 226 199 284 q 344 136 254 136 "},"Μ":{"x_min":0,"x_max":1019,"ha":1132,"o":"m 1019 0 l 823 0 l 823 818 l 617 0 l 402 0 l 194 818 l 194 0 l 0 0 l 0 1013 l 309 1013 l 509 241 l 708 1013 l 1019 1013 l 1019 0 "},"Ό":{"x_min":0.15625,"x_max":1174,"ha":1271,"o":"m 676 -29 q 312 127 451 -29 q 179 505 179 277 q 311 883 179 733 q 676 1040 449 1040 q 1040 883 901 1040 q 1174 505 1174 733 q 1041 127 1174 277 q 676 -29 903 -29 m 676 154 q 890 266 811 154 q 961 506 961 366 q 891 745 961 648 q 676 857 812 857 q 462 747 541 857 q 392 506 392 648 q 461 266 392 365 q 676 154 540 154 m 314 1034 l 98 779 l 0 779 l 136 1034 l 314 1034 "},"Ή":{"x_min":0,"x_max":1248,"ha":1361,"o":"m 1248 0 l 1038 0 l 1038 450 l 621 450 l 621 0 l 411 0 l 411 1012 l 621 1012 l 621 635 l 1038 635 l 1038 1012 l 1248 1012 l 1248 0 m 313 1035 l 98 780 l 0 780 l 136 1035 l 313 1035 "},"•":{"x_min":-27.78125,"x_max":691.671875,"ha":775,"o":"m 691 508 q 588 252 691 358 q 331 147 486 147 q 77 251 183 147 q -27 508 -27 355 q 75 761 -27 655 q 331 868 179 868 q 585 763 479 868 q 691 508 691 658 "},"¥":{"x_min":0,"x_max":836,"ha":931,"o":"m 195 625 l 0 1013 l 208 1013 l 427 576 l 626 1013 l 836 1013 l 650 625 l 777 625 l 777 472 l 578 472 l 538 389 l 777 389 l 777 236 l 532 236 l 532 0 l 322 0 l 322 236 l 79 236 l 79 389 l 315 389 l 273 472 l 79 472 l 79 625 l 195 625 "},"(":{"x_min":0,"x_max":388.890625,"ha":486,"o":"m 388 -293 l 243 -293 q 70 14 130 -134 q 0 357 0 189 q 69 703 0 526 q 243 1013 129 856 l 388 1013 q 248 695 297 860 q 200 358 200 530 q 248 24 200 187 q 388 -293 297 -138 "},"U":{"x_min":0,"x_max":813,"ha":926,"o":"m 813 362 q 697 79 813 187 q 405 -29 582 -29 q 114 78 229 -29 q 0 362 0 186 l 0 1013 l 210 1013 l 210 387 q 260 226 210 291 q 408 154 315 154 q 554 226 500 154 q 603 387 603 291 l 603 1013 l 813 1013 l 813 362 "},"γ":{"x_min":0.0625,"x_max":729.234375,"ha":815,"o":"m 729 749 l 457 37 l 457 -278 l 257 -278 l 257 37 q 218 155 243 95 q 170 275 194 215 l 0 749 l 207 749 l 363 284 l 522 749 l 729 749 "},"α":{"x_min":-1,"x_max":722,"ha":835,"o":"m 722 0 l 531 0 l 530 101 q 433 8 491 41 q 304 -25 375 -25 q 72 104 157 -25 q -1 372 -1 216 q 72 643 -1 530 q 308 775 158 775 q 433 744 375 775 q 528 656 491 713 l 528 749 l 722 749 l 722 0 m 361 601 q 233 527 277 601 q 196 375 196 464 q 232 224 196 288 q 358 144 277 144 q 487 217 441 144 q 528 370 528 281 q 489 523 528 457 q 361 601 443 601 "},"F":{"x_min":0,"x_max":706.953125,"ha":778,"o":"m 706 837 l 206 837 l 206 606 l 645 606 l 645 431 l 206 431 l 206 0 l 0 0 l 0 1013 l 706 1013 l 706 837 "},"­":{"x_min":0,"x_max":704.171875,"ha":801,"o":"m 704 297 l 0 297 l 0 450 l 704 450 l 704 297 "},":":{"x_min":0,"x_max":207,"ha":304,"o":"m 207 528 l 0 528 l 0 735 l 207 735 l 207 528 m 207 0 l 0 0 l 0 207 l 207 207 l 207 0 "},"Χ":{"x_min":0,"x_max":894.453125,"ha":978,"o":"m 894 0 l 654 0 l 445 351 l 238 0 l 0 0 l 316 516 l 0 1013 l 238 1013 l 445 660 l 652 1013 l 894 1013 l 577 519 l 894 0 "},"*":{"x_min":115,"x_max":713,"ha":828,"o":"m 713 740 l 518 688 l 651 525 l 531 438 l 412 612 l 290 439 l 173 523 l 308 688 l 115 741 l 159 880 l 342 816 l 343 1013 l 482 1013 l 481 816 l 664 880 l 713 740 "},"†":{"x_min":0,"x_max":809,"ha":894,"o":"m 509 804 l 809 804 l 809 621 l 509 621 l 509 0 l 299 0 l 299 621 l 0 621 l 0 804 l 299 804 l 299 1011 l 509 1011 l 509 804 "},"°":{"x_min":-1,"x_max":363,"ha":460,"o":"m 181 808 q 46 862 94 808 q -1 992 -1 917 q 44 1118 -1 1066 q 181 1175 96 1175 q 317 1118 265 1175 q 363 991 363 1066 q 315 862 363 917 q 181 808 267 808 m 181 908 q 240 933 218 908 q 263 992 263 958 q 242 1051 263 1027 q 181 1075 221 1075 q 120 1050 142 1075 q 99 991 99 1026 q 120 933 99 958 q 181 908 142 908 "},"V":{"x_min":0,"x_max":895.828125,"ha":997,"o":"m 895 1013 l 550 0 l 347 0 l 0 1013 l 231 1013 l 447 256 l 666 1013 l 895 1013 "},"Ξ":{"x_min":0,"x_max":751.390625,"ha":800,"o":"m 733 826 l 5 826 l 5 1012 l 733 1012 l 733 826 m 681 432 l 65 432 l 65 617 l 681 617 l 681 432 m 751 0 l 0 0 l 0 183 l 751 183 l 751 0 "}," ":{"x_min":0,"x_max":0,"ha":853},"Ϋ":{"x_min":-0.21875,"x_max":836.171875,"ha":914,"o":"m 610 1046 l 454 1046 l 454 1215 l 610 1215 l 610 1046 m 369 1046 l 212 1046 l 212 1215 l 369 1215 l 369 1046 m 836 1012 l 532 376 l 532 0 l 322 0 l 322 376 l 0 1012 l 208 1012 l 427 576 l 626 1012 l 836 1012 "},"0":{"x_min":51,"x_max":779,"ha":828,"o":"m 415 -26 q 142 129 242 -26 q 51 476 51 271 q 141 825 51 683 q 415 984 242 984 q 687 825 585 984 q 779 476 779 682 q 688 131 779 271 q 415 -26 587 -26 m 415 137 q 529 242 485 137 q 568 477 568 338 q 530 713 568 619 q 415 821 488 821 q 303 718 344 821 q 262 477 262 616 q 301 237 262 337 q 415 137 341 137 "},"”":{"x_min":0,"x_max":469,"ha":567,"o":"m 192 834 q 137 692 192 751 q 0 626 83 634 l 0 697 q 101 831 101 723 l 0 831 l 0 1013 l 192 1013 l 192 834 m 469 834 q 414 692 469 751 q 277 626 360 634 l 277 697 q 379 831 379 723 l 277 831 l 277 1013 l 469 1013 l 469 834 "},"@":{"x_min":0,"x_max":1276,"ha":1374,"o":"m 1115 -52 q 895 -170 1015 -130 q 647 -211 776 -211 q 158 -34 334 -211 q 0 360 0 123 q 179 810 0 621 q 698 1019 377 1019 q 1138 859 981 1019 q 1276 514 1276 720 q 1173 210 1276 335 q 884 75 1062 75 q 784 90 810 75 q 737 186 749 112 q 647 104 698 133 q 532 75 596 75 q 360 144 420 75 q 308 308 308 205 q 398 568 308 451 q 638 696 497 696 q 731 671 690 696 q 805 604 772 647 l 840 673 l 964 673 q 886 373 915 490 q 856 239 856 257 q 876 201 856 214 q 920 188 895 188 q 1084 284 1019 188 q 1150 511 1150 380 q 1051 779 1150 672 q 715 905 934 905 q 272 734 439 905 q 121 363 121 580 q 250 41 121 170 q 647 -103 394 -103 q 863 -67 751 -103 q 1061 26 975 -32 l 1115 -52 m 769 483 q 770 500 770 489 q 733 567 770 539 q 651 596 695 596 q 508 504 566 596 q 457 322 457 422 q 483 215 457 256 q 561 175 509 175 q 671 221 625 175 q 733 333 718 268 l 769 483 "},"Ί":{"x_min":0,"x_max":619,"ha":732,"o":"m 313 1035 l 98 780 l 0 780 l 136 1035 l 313 1035 m 619 0 l 411 0 l 411 1012 l 619 1012 l 619 0 "},"i":{"x_min":14,"x_max":214,"ha":326,"o":"m 214 830 l 14 830 l 14 1013 l 214 1013 l 214 830 m 214 0 l 14 0 l 14 748 l 214 748 l 214 0 "},"Β":{"x_min":0,"x_max":835,"ha":961,"o":"m 675 547 q 791 450 747 518 q 835 304 835 383 q 718 75 835 158 q 461 0 612 0 l 0 0 l 0 1013 l 477 1013 q 697 951 609 1013 q 797 754 797 880 q 766 630 797 686 q 675 547 734 575 m 439 621 q 539 646 496 621 q 590 730 590 676 q 537 814 590 785 q 436 838 494 838 l 199 838 l 199 621 l 439 621 m 445 182 q 561 211 513 182 q 618 311 618 247 q 565 410 618 375 q 444 446 512 446 l 199 446 l 199 182 l 445 182 "},"υ":{"x_min":0,"x_max":656,"ha":767,"o":"m 656 416 q 568 55 656 145 q 326 -25 490 -25 q 59 97 137 -25 q 0 369 0 191 l 0 749 l 200 749 l 200 369 q 216 222 200 268 q 326 142 245 142 q 440 247 411 142 q 456 422 456 304 l 456 749 l 656 749 l 656 416 "},"]":{"x_min":0,"x_max":349,"ha":446,"o":"m 349 -300 l 0 -300 l 0 -154 l 163 -154 l 163 866 l 0 866 l 0 1013 l 349 1013 l 349 -300 "},"m":{"x_min":0,"x_max":1065,"ha":1174,"o":"m 1065 0 l 866 0 l 866 483 q 836 564 866 532 q 759 596 807 596 q 663 555 700 596 q 627 454 627 514 l 627 0 l 433 0 l 433 481 q 403 563 433 531 q 323 596 374 596 q 231 554 265 596 q 197 453 197 513 l 197 0 l 0 0 l 0 748 l 189 748 l 189 665 q 279 745 226 715 q 392 775 333 775 q 509 744 455 775 q 606 659 563 713 q 695 744 640 713 q 814 775 749 775 q 992 702 920 775 q 1065 523 1065 630 l 1065 0 "},"χ":{"x_min":0,"x_max":759.71875,"ha":847,"o":"m 759 -299 l 548 -299 l 379 66 l 215 -299 l 0 -299 l 261 233 l 13 749 l 230 749 l 379 400 l 527 749 l 738 749 l 500 238 l 759 -299 "},"8":{"x_min":57,"x_max":770,"ha":828,"o":"m 625 516 q 733 416 697 477 q 770 284 770 355 q 675 69 770 161 q 415 -29 574 -29 q 145 65 244 -29 q 57 273 57 150 q 93 413 57 350 q 204 516 130 477 q 112 609 142 556 q 83 718 83 662 q 177 905 83 824 q 414 986 272 986 q 650 904 555 986 q 745 715 745 822 q 716 608 745 658 q 625 516 688 558 m 414 590 q 516 624 479 590 q 553 706 553 659 q 516 791 553 755 q 414 828 480 828 q 311 792 348 828 q 275 706 275 757 q 310 624 275 658 q 414 590 345 590 m 413 135 q 527 179 487 135 q 564 279 564 218 q 525 386 564 341 q 411 436 482 436 q 298 387 341 436 q 261 282 261 344 q 300 178 261 222 q 413 135 340 135 "},"ί":{"x_min":42,"x_max":371.171875,"ha":389,"o":"m 242 0 l 42 0 l 42 748 l 242 748 l 242 0 m 371 1039 l 169 823 l 71 823 l 193 1039 l 371 1039 "},"Ζ":{"x_min":0,"x_max":804.171875,"ha":886,"o":"m 804 835 l 251 182 l 793 182 l 793 0 l 0 0 l 0 176 l 551 829 l 11 829 l 11 1012 l 804 1012 l 804 835 "},"R":{"x_min":0,"x_max":836.109375,"ha":947,"o":"m 836 0 l 608 0 q 588 53 596 20 q 581 144 581 86 q 581 179 581 162 q 581 215 581 197 q 553 345 581 306 q 428 393 518 393 l 208 393 l 208 0 l 0 0 l 0 1013 l 491 1013 q 720 944 630 1013 q 819 734 819 869 q 778 584 819 654 q 664 485 738 513 q 757 415 727 463 q 794 231 794 358 l 794 170 q 800 84 794 116 q 836 31 806 51 l 836 0 m 462 838 l 208 838 l 208 572 l 452 572 q 562 604 517 572 q 612 704 612 640 q 568 801 612 765 q 462 838 525 838 "},"o":{"x_min":0,"x_max":764,"ha":871,"o":"m 380 -26 q 105 86 211 -26 q 0 371 0 199 q 104 660 0 545 q 380 775 209 775 q 658 659 552 775 q 764 371 764 544 q 658 86 764 199 q 380 -26 552 -26 m 379 141 q 515 216 466 141 q 557 373 557 280 q 515 530 557 465 q 379 607 466 607 q 245 530 294 607 q 204 373 204 465 q 245 217 204 282 q 379 141 294 141 "},"5":{"x_min":59,"x_max":767,"ha":828,"o":"m 767 319 q 644 59 767 158 q 382 -29 533 -29 q 158 43 247 -29 q 59 264 59 123 l 252 264 q 295 165 252 201 q 400 129 339 129 q 512 172 466 129 q 564 308 564 220 q 514 437 564 387 q 398 488 464 488 q 329 472 361 488 q 271 420 297 456 l 93 428 l 157 958 l 722 958 l 722 790 l 295 790 l 271 593 q 348 635 306 621 q 431 649 389 649 q 663 551 560 649 q 767 319 767 453 "},"7":{"x_min":65.28125,"x_max":762.5,"ha":828,"o":"m 762 808 q 521 435 604 626 q 409 0 438 244 l 205 0 q 313 422 227 234 q 548 789 387 583 l 65 789 l 65 958 l 762 958 l 762 808 "},"K":{"x_min":0,"x_max":900,"ha":996,"o":"m 900 0 l 647 0 l 316 462 l 208 355 l 208 0 l 0 0 l 0 1013 l 208 1013 l 208 595 l 604 1013 l 863 1013 l 461 603 l 900 0 "},",":{"x_min":0,"x_max":206,"ha":303,"o":"m 206 5 q 150 -151 206 -88 q 0 -238 94 -213 l 0 -159 q 84 -100 56 -137 q 111 -2 111 -62 l 0 -2 l 0 205 l 206 205 l 206 5 "},"d":{"x_min":0,"x_max":722,"ha":836,"o":"m 722 0 l 530 0 l 530 101 q 303 -26 449 -26 q 72 103 155 -26 q 0 373 0 214 q 72 642 0 528 q 305 775 156 775 q 433 743 373 775 q 530 656 492 712 l 530 1013 l 722 1013 l 722 0 m 361 600 q 234 523 280 600 q 196 372 196 458 q 233 220 196 286 q 358 143 278 143 q 489 216 442 143 q 530 369 530 280 q 491 522 530 456 q 361 600 443 600 "},"¨":{"x_min":212,"x_max":609,"ha":933,"o":"m 609 1046 l 453 1046 l 453 1216 l 609 1216 l 609 1046 m 369 1046 l 212 1046 l 212 1216 l 369 1216 l 369 1046 "},"E":{"x_min":0,"x_max":761.109375,"ha":824,"o":"m 761 0 l 0 0 l 0 1013 l 734 1013 l 734 837 l 206 837 l 206 621 l 690 621 l 690 446 l 206 446 l 206 186 l 761 186 l 761 0 "},"Y":{"x_min":0,"x_max":836,"ha":931,"o":"m 836 1013 l 532 376 l 532 0 l 322 0 l 322 376 l 0 1013 l 208 1013 l 427 576 l 626 1013 l 836 1013 "},"\"":{"x_min":0,"x_max":357,"ha":454,"o":"m 357 604 l 225 604 l 225 988 l 357 988 l 357 604 m 132 604 l 0 604 l 0 988 l 132 988 l 132 604 "},"‹":{"x_min":35.984375,"x_max":791.671875,"ha":828,"o":"m 791 17 l 36 352 l 35 487 l 791 823 l 791 672 l 229 421 l 791 168 l 791 17 "},"„":{"x_min":0,"x_max":483,"ha":588,"o":"m 206 5 q 150 -151 206 -88 q 0 -238 94 -213 l 0 -159 q 84 -100 56 -137 q 111 -2 111 -62 l 0 -2 l 0 205 l 206 205 l 206 5 m 483 5 q 427 -151 483 -88 q 277 -238 371 -213 l 277 -159 q 361 -100 334 -137 q 388 -2 388 -62 l 277 -2 l 277 205 l 483 205 l 483 5 "},"δ":{"x_min":6,"x_max":732,"ha":835,"o":"m 732 352 q 630 76 732 177 q 354 -25 529 -25 q 101 74 197 -25 q 6 333 6 174 q 89 581 6 480 q 323 690 178 690 q 66 864 201 787 l 66 1013 l 669 1013 l 669 856 l 348 856 q 532 729 461 789 q 673 566 625 651 q 732 352 732 465 m 419 551 q 259 496 321 551 q 198 344 198 441 q 238 208 198 267 q 357 140 283 140 q 484 203 437 140 q 526 344 526 260 q 499 466 526 410 q 419 551 473 521 "},"έ":{"x_min":16.671875,"x_max":652.78125,"ha":742,"o":"m 652 259 q 565 49 652 123 q 340 -25 479 -25 q 102 39 188 -25 q 16 197 16 104 q 45 299 16 250 q 134 390 75 348 q 58 456 86 419 q 25 552 25 502 q 120 717 25 653 q 322 776 208 776 q 537 710 456 776 q 625 508 625 639 l 445 508 q 415 585 445 563 q 327 608 386 608 q 254 590 293 608 q 215 544 215 573 q 252 469 215 490 q 336 453 280 453 q 369 455 347 453 q 400 456 391 456 l 400 308 l 329 308 q 247 291 280 308 q 204 223 204 269 q 255 154 204 172 q 345 143 286 143 q 426 174 398 143 q 454 259 454 206 l 652 259 m 579 1039 l 377 823 l 279 823 l 401 1039 l 579 1039 "},"ω":{"x_min":0,"x_max":945,"ha":1051,"o":"m 565 323 l 565 289 q 577 190 565 221 q 651 142 597 142 q 718 189 694 142 q 742 365 742 237 q 703 565 742 462 q 610 749 671 650 l 814 749 q 910 547 876 650 q 945 337 945 444 q 874 96 945 205 q 668 -29 793 -29 q 551 0 608 -29 q 470 78 495 30 q 390 0 444 28 q 276 -29 337 -29 q 69 96 149 -29 q 0 337 0 204 q 36 553 0 444 q 130 749 68 650 l 334 749 q 241 565 273 650 q 203 365 203 461 q 219 222 203 279 q 292 142 243 142 q 360 183 342 142 q 373 271 373 211 q 372 298 372 285 q 372 323 372 311 l 372 528 l 566 528 l 565 323 "},"´":{"x_min":0,"x_max":132,"ha":299,"o":"m 132 604 l 0 604 l 0 988 l 132 988 l 132 604 "},"±":{"x_min":29,"x_max":798,"ha":828,"o":"m 798 480 l 484 480 l 484 254 l 344 254 l 344 480 l 29 480 l 29 615 l 344 615 l 344 842 l 484 842 l 484 615 l 798 615 l 798 480 m 798 0 l 29 0 l 29 136 l 798 136 l 798 0 "},"|":{"x_min":0,"x_max":143,"ha":240,"o":"m 143 462 l 0 462 l 0 984 l 143 984 l 143 462 m 143 -242 l 0 -242 l 0 280 l 143 280 l 143 -242 "},"ϋ":{"x_min":0,"x_max":656,"ha":767,"o":"m 535 810 l 406 810 l 406 952 l 535 952 l 535 810 m 271 810 l 142 810 l 142 952 l 271 952 l 271 810 m 656 417 q 568 55 656 146 q 326 -25 490 -25 q 59 97 137 -25 q 0 369 0 192 l 0 748 l 200 748 l 200 369 q 216 222 200 268 q 326 142 245 142 q 440 247 411 142 q 456 422 456 304 l 456 748 l 656 748 l 656 417 "},"§":{"x_min":0,"x_max":633,"ha":731,"o":"m 633 469 q 601 356 633 406 q 512 274 569 305 q 570 197 548 242 q 593 105 593 152 q 501 -76 593 -5 q 301 -142 416 -142 q 122 -82 193 -142 q 43 108 43 -15 l 212 108 q 251 27 220 53 q 321 1 283 1 q 389 23 360 1 q 419 83 419 46 q 310 194 419 139 q 108 297 111 295 q 0 476 0 372 q 33 584 0 537 q 120 659 62 626 q 72 720 91 686 q 53 790 53 755 q 133 978 53 908 q 312 1042 207 1042 q 483 984 412 1042 q 574 807 562 921 l 409 807 q 379 875 409 851 q 307 900 349 900 q 244 881 270 900 q 218 829 218 862 q 324 731 218 781 q 524 636 506 647 q 633 469 633 565 m 419 334 q 473 411 473 372 q 451 459 473 436 q 390 502 430 481 l 209 595 q 167 557 182 577 q 153 520 153 537 q 187 461 153 491 q 263 413 212 440 l 419 334 "},"b":{"x_min":0,"x_max":722,"ha":822,"o":"m 416 -26 q 289 6 346 -26 q 192 101 232 39 l 192 0 l 0 0 l 0 1013 l 192 1013 l 192 656 q 286 743 226 712 q 415 775 346 775 q 649 644 564 775 q 722 374 722 533 q 649 106 722 218 q 416 -26 565 -26 m 361 600 q 232 524 279 600 q 192 371 192 459 q 229 221 192 284 q 357 145 275 145 q 487 221 441 145 q 526 374 526 285 q 488 523 526 460 q 361 600 442 600 "},"q":{"x_min":0,"x_max":722,"ha":833,"o":"m 722 -298 l 530 -298 l 530 97 q 306 -25 449 -25 q 73 104 159 -25 q 0 372 0 216 q 72 643 0 529 q 305 775 156 775 q 430 742 371 775 q 530 654 488 709 l 530 750 l 722 750 l 722 -298 m 360 601 q 234 527 278 601 q 197 378 197 466 q 233 225 197 291 q 357 144 277 144 q 488 217 441 144 q 530 370 530 282 q 491 523 530 459 q 360 601 443 601 "},"Ω":{"x_min":-0.03125,"x_max":1008.53125,"ha":1108,"o":"m 1008 0 l 589 0 l 589 199 q 717 368 670 265 q 764 580 764 471 q 698 778 764 706 q 504 855 629 855 q 311 773 380 855 q 243 563 243 691 q 289 360 243 458 q 419 199 336 262 l 419 0 l 0 0 l 0 176 l 202 176 q 77 355 123 251 q 32 569 32 459 q 165 908 32 776 q 505 1040 298 1040 q 844 912 711 1040 q 977 578 977 785 q 931 362 977 467 q 805 176 886 256 l 1008 176 l 1008 0 "},"ύ":{"x_min":0,"x_max":656,"ha":767,"o":"m 656 417 q 568 55 656 146 q 326 -25 490 -25 q 59 97 137 -25 q 0 369 0 192 l 0 748 l 200 748 l 201 369 q 218 222 201 269 q 326 142 245 142 q 440 247 411 142 q 456 422 456 304 l 456 748 l 656 748 l 656 417 m 579 1039 l 378 823 l 279 823 l 401 1039 l 579 1039 "},"z":{"x_min":0,"x_max":663.890625,"ha":753,"o":"m 663 0 l 0 0 l 0 154 l 411 591 l 25 591 l 25 749 l 650 749 l 650 584 l 245 165 l 663 165 l 663 0 "},"™":{"x_min":0,"x_max":951,"ha":1063,"o":"m 405 921 l 255 921 l 255 506 l 149 506 l 149 921 l 0 921 l 0 1013 l 405 1013 l 405 921 m 951 506 l 852 506 l 852 916 l 750 506 l 643 506 l 539 915 l 539 506 l 442 506 l 442 1013 l 595 1012 l 695 625 l 794 1013 l 951 1013 l 951 506 "},"ή":{"x_min":0,"x_max":669,"ha":779,"o":"m 669 -278 l 469 -278 l 469 390 q 448 526 469 473 q 348 606 417 606 q 244 553 288 606 q 201 441 201 501 l 201 0 l 0 0 l 0 749 l 201 749 l 201 665 q 301 744 244 715 q 423 774 359 774 q 606 685 538 774 q 669 484 669 603 l 669 -278 m 495 1039 l 293 823 l 195 823 l 317 1039 l 495 1039 "},"Θ":{"x_min":0,"x_max":993,"ha":1092,"o":"m 497 -29 q 133 127 272 -29 q 0 505 0 277 q 133 883 0 733 q 497 1040 272 1040 q 861 883 722 1040 q 993 505 993 733 q 861 127 993 277 q 497 -29 722 -29 m 497 154 q 711 266 631 154 q 782 506 782 367 q 712 746 782 648 q 497 858 634 858 q 281 746 361 858 q 211 506 211 648 q 280 266 211 365 q 497 154 359 154 m 676 430 l 316 430 l 316 593 l 676 593 l 676 430 "},"®":{"x_min":3,"x_max":1007,"ha":1104,"o":"m 507 -6 q 129 153 269 -6 q 3 506 3 298 q 127 857 3 713 q 502 1017 266 1017 q 880 855 740 1017 q 1007 502 1007 711 q 882 152 1007 295 q 507 -6 743 -6 m 502 934 q 184 800 302 934 q 79 505 79 680 q 184 210 79 331 q 501 76 302 76 q 819 210 701 76 q 925 507 925 331 q 820 800 925 682 q 502 934 704 934 m 782 190 l 639 190 q 627 225 632 202 q 623 285 623 248 l 623 326 q 603 411 623 384 q 527 439 584 439 l 388 439 l 388 190 l 257 190 l 257 829 l 566 829 q 709 787 654 829 q 772 654 772 740 q 746 559 772 604 q 675 497 720 514 q 735 451 714 483 q 756 341 756 419 l 756 299 q 760 244 756 265 q 782 212 764 223 l 782 190 m 546 718 l 388 718 l 388 552 l 541 552 q 612 572 584 552 q 641 635 641 593 q 614 695 641 672 q 546 718 587 718 "},"~":{"x_min":0,"x_max":851,"ha":949,"o":"m 851 968 q 795 750 851 831 q 599 656 730 656 q 406 744 506 656 q 259 832 305 832 q 162 775 193 832 q 139 656 139 730 l 0 656 q 58 871 0 787 q 251 968 124 968 q 442 879 341 968 q 596 791 544 791 q 691 849 663 791 q 712 968 712 892 l 851 968 "},"Ε":{"x_min":0,"x_max":761.546875,"ha":824,"o":"m 761 0 l 0 0 l 0 1012 l 735 1012 l 735 836 l 206 836 l 206 621 l 690 621 l 690 446 l 206 446 l 206 186 l 761 186 l 761 0 "},"³":{"x_min":0,"x_max":467,"ha":564,"o":"m 467 555 q 393 413 467 466 q 229 365 325 365 q 70 413 134 365 q 0 565 0 467 l 123 565 q 163 484 131 512 q 229 461 190 461 q 299 486 269 461 q 329 553 329 512 q 281 627 329 607 q 187 641 248 641 l 187 722 q 268 737 237 722 q 312 804 312 758 q 285 859 312 837 q 224 882 259 882 q 165 858 189 882 q 135 783 140 834 l 12 783 q 86 930 20 878 q 230 976 145 976 q 379 931 314 976 q 444 813 444 887 q 423 744 444 773 q 365 695 402 716 q 439 640 412 676 q 467 555 467 605 "},"[":{"x_min":0,"x_max":347.21875,"ha":444,"o":"m 347 -300 l 0 -300 l 0 1013 l 347 1013 l 347 866 l 188 866 l 188 -154 l 347 -154 l 347 -300 "},"L":{"x_min":0,"x_max":704.171875,"ha":763,"o":"m 704 0 l 0 0 l 0 1013 l 208 1013 l 208 186 l 704 186 l 704 0 "},"σ":{"x_min":0,"x_max":851.3125,"ha":940,"o":"m 851 594 l 712 594 q 761 369 761 485 q 658 83 761 191 q 379 -25 555 -25 q 104 87 208 -25 q 0 372 0 200 q 103 659 0 544 q 378 775 207 775 q 464 762 407 775 q 549 750 521 750 l 851 750 l 851 594 m 379 142 q 515 216 466 142 q 557 373 557 280 q 515 530 557 465 q 379 608 465 608 q 244 530 293 608 q 203 373 203 465 q 244 218 203 283 q 379 142 293 142 "},"ζ":{"x_min":0,"x_max":622,"ha":701,"o":"m 622 -32 q 604 -158 622 -98 q 551 -278 587 -218 l 373 -278 q 426 -180 406 -229 q 446 -80 446 -131 q 421 -22 446 -37 q 354 -8 397 -8 q 316 -9 341 -8 q 280 -11 291 -11 q 75 69 150 -11 q 0 283 0 150 q 87 596 0 437 q 291 856 162 730 l 47 856 l 47 1013 l 592 1013 l 592 904 q 317 660 422 800 q 197 318 197 497 q 306 141 197 169 q 510 123 408 131 q 622 -32 622 102 "},"θ":{"x_min":0,"x_max":714,"ha":817,"o":"m 357 1022 q 633 833 534 1022 q 714 486 714 679 q 634 148 714 288 q 354 -25 536 -25 q 79 147 175 -25 q 0 481 0 288 q 79 831 0 679 q 357 1022 177 1022 m 510 590 q 475 763 510 687 q 351 862 430 862 q 233 763 272 862 q 204 590 204 689 l 510 590 m 510 440 l 204 440 q 233 251 204 337 q 355 131 274 131 q 478 248 434 131 q 510 440 510 337 "},"Ο":{"x_min":0,"x_max":995,"ha":1092,"o":"m 497 -29 q 133 127 272 -29 q 0 505 0 277 q 132 883 0 733 q 497 1040 270 1040 q 861 883 722 1040 q 995 505 995 733 q 862 127 995 277 q 497 -29 724 -29 m 497 154 q 711 266 632 154 q 781 506 781 365 q 711 745 781 647 q 497 857 632 857 q 283 747 361 857 q 213 506 213 647 q 282 266 213 365 q 497 154 361 154 "},"Γ":{"x_min":0,"x_max":703.84375,"ha":742,"o":"m 703 836 l 208 836 l 208 0 l 0 0 l 0 1012 l 703 1012 l 703 836 "}," ":{"x_min":0,"x_max":0,"ha":375},"%":{"x_min":0,"x_max":1111,"ha":1213,"o":"m 861 484 q 1048 404 979 484 q 1111 228 1111 332 q 1048 51 1111 123 q 859 -29 979 -29 q 672 50 740 -29 q 610 227 610 122 q 672 403 610 331 q 861 484 741 484 m 861 120 q 939 151 911 120 q 967 226 967 183 q 942 299 967 270 q 861 333 912 333 q 783 301 811 333 q 756 226 756 269 q 783 151 756 182 q 861 120 810 120 m 904 984 l 316 -28 l 205 -29 l 793 983 l 904 984 m 250 984 q 436 904 366 984 q 499 730 499 832 q 436 552 499 626 q 248 472 366 472 q 62 552 132 472 q 0 728 0 624 q 62 903 0 831 q 250 984 132 984 m 249 835 q 169 801 198 835 q 140 725 140 768 q 167 652 140 683 q 247 621 195 621 q 327 654 298 621 q 357 730 357 687 q 329 803 357 772 q 249 835 301 835 "},"P":{"x_min":0,"x_max":771,"ha":838,"o":"m 208 361 l 208 0 l 0 0 l 0 1013 l 450 1013 q 682 919 593 1013 q 771 682 771 826 q 687 452 771 544 q 466 361 604 361 l 208 361 m 421 837 l 208 837 l 208 544 l 410 544 q 525 579 480 544 q 571 683 571 615 q 527 792 571 747 q 421 837 484 837 "},"Έ":{"x_min":0,"x_max":1172.546875,"ha":1235,"o":"m 1172 0 l 411 0 l 411 1012 l 1146 1012 l 1146 836 l 617 836 l 617 621 l 1101 621 l 1101 446 l 617 446 l 617 186 l 1172 186 l 1172 0 m 313 1035 l 98 780 l 0 780 l 136 1035 l 313 1035 "},"Ώ":{"x_min":0.4375,"x_max":1189.546875,"ha":1289,"o":"m 1189 0 l 770 0 l 770 199 q 897 369 849 263 q 945 580 945 474 q 879 778 945 706 q 685 855 810 855 q 492 773 561 855 q 424 563 424 691 q 470 360 424 458 q 600 199 517 262 l 600 0 l 180 0 l 180 176 l 383 176 q 258 355 304 251 q 213 569 213 459 q 346 908 213 776 q 686 1040 479 1040 q 1025 912 892 1040 q 1158 578 1158 785 q 1112 362 1158 467 q 986 176 1067 256 l 1189 176 l 1189 0 m 314 1092 l 99 837 l 0 837 l 136 1092 l 314 1092 "},"_":{"x_min":61.109375,"x_max":766.671875,"ha":828,"o":"m 766 -333 l 61 -333 l 61 -190 l 766 -190 l 766 -333 "},"Ϊ":{"x_min":-56,"x_max":342,"ha":503,"o":"m 342 1046 l 186 1046 l 186 1215 l 342 1215 l 342 1046 m 101 1046 l -56 1046 l -56 1215 l 101 1215 l 101 1046 m 249 0 l 41 0 l 41 1012 l 249 1012 l 249 0 "},"+":{"x_min":43,"x_max":784,"ha":828,"o":"m 784 353 l 483 353 l 483 0 l 343 0 l 343 353 l 43 353 l 43 489 l 343 489 l 343 840 l 483 840 l 483 489 l 784 489 l 784 353 "},"½":{"x_min":0,"x_max":1090,"ha":1188,"o":"m 1090 380 q 992 230 1090 301 q 779 101 886 165 q 822 94 784 95 q 924 93 859 93 l 951 93 l 973 93 l 992 93 l 1009 93 q 1046 93 1027 93 q 1085 93 1066 93 l 1085 0 l 650 0 l 654 38 q 815 233 665 137 q 965 376 965 330 q 936 436 965 412 q 869 461 908 461 q 806 435 831 461 q 774 354 780 409 l 659 354 q 724 505 659 451 q 870 554 783 554 q 1024 506 958 554 q 1090 380 1090 459 m 868 998 l 268 -28 l 154 -27 l 757 999 l 868 998 m 272 422 l 147 422 l 147 799 l 0 799 l 0 875 q 126 900 91 875 q 170 973 162 926 l 272 973 l 272 422 "},"Ρ":{"x_min":0,"x_max":771,"ha":838,"o":"m 208 361 l 208 0 l 0 0 l 0 1012 l 450 1012 q 682 919 593 1012 q 771 681 771 826 q 687 452 771 544 q 466 361 604 361 l 208 361 m 422 836 l 209 836 l 209 544 l 410 544 q 525 579 480 544 q 571 683 571 614 q 527 791 571 747 q 422 836 484 836 "},"'":{"x_min":0,"x_max":192,"ha":289,"o":"m 192 834 q 137 692 192 751 q 0 626 82 632 l 0 697 q 101 830 101 726 l 0 830 l 0 1013 l 192 1013 l 192 834 "},"ª":{"x_min":0,"x_max":350,"ha":393,"o":"m 350 625 l 245 625 q 237 648 241 636 q 233 672 233 661 q 117 611 192 611 q 33 643 66 611 q 0 727 0 675 q 116 846 0 828 q 233 886 233 864 q 211 919 233 907 q 168 931 190 931 q 108 877 108 931 l 14 877 q 56 977 14 942 q 165 1013 98 1013 q 270 987 224 1013 q 329 903 329 955 l 329 694 q 332 661 329 675 q 350 641 336 648 l 350 625 m 233 774 l 233 809 q 151 786 180 796 q 97 733 97 768 q 111 700 97 712 q 149 689 126 689 q 210 713 187 689 q 233 774 233 737 "},"΅":{"x_min":57,"x_max":584,"ha":753,"o":"m 584 810 l 455 810 l 455 952 l 584 952 l 584 810 m 521 1064 l 305 810 l 207 810 l 343 1064 l 521 1064 m 186 810 l 57 810 l 57 952 l 186 952 l 186 810 "},"T":{"x_min":0,"x_max":809,"ha":894,"o":"m 809 831 l 509 831 l 509 0 l 299 0 l 299 831 l 0 831 l 0 1013 l 809 1013 l 809 831 "},"Φ":{"x_min":0,"x_max":949,"ha":1032,"o":"m 566 0 l 385 0 l 385 121 q 111 230 222 121 q 0 508 0 340 q 112 775 0 669 q 385 892 219 875 l 385 1013 l 566 1013 l 566 892 q 836 776 732 875 q 949 507 949 671 q 838 231 949 341 q 566 121 728 121 l 566 0 m 566 285 q 701 352 650 285 q 753 508 753 419 q 703 658 753 597 q 566 729 653 720 l 566 285 m 385 285 l 385 729 q 245 661 297 717 q 193 516 193 604 q 246 356 193 427 q 385 285 300 285 "},"j":{"x_min":-45.828125,"x_max":242,"ha":361,"o":"m 242 830 l 42 830 l 42 1013 l 242 1013 l 242 830 m 242 -119 q 180 -267 242 -221 q 20 -308 127 -308 l -45 -308 l -45 -140 l -24 -140 q 25 -130 8 -140 q 42 -88 42 -120 l 42 748 l 242 748 l 242 -119 "},"Σ":{"x_min":0,"x_max":772.21875,"ha":849,"o":"m 772 0 l 0 0 l 0 140 l 368 526 l 18 862 l 18 1012 l 740 1012 l 740 836 l 315 836 l 619 523 l 298 175 l 772 175 l 772 0 "},"1":{"x_min":197.609375,"x_max":628,"ha":828,"o":"m 628 0 l 434 0 l 434 674 l 197 674 l 197 810 q 373 837 318 810 q 468 984 450 876 l 628 984 l 628 0 "},"›":{"x_min":36.109375,"x_max":792,"ha":828,"o":"m 792 352 l 36 17 l 36 168 l 594 420 l 36 672 l 36 823 l 792 487 l 792 352 "},"<":{"x_min":35.984375,"x_max":791.671875,"ha":828,"o":"m 791 17 l 36 352 l 35 487 l 791 823 l 791 672 l 229 421 l 791 168 l 791 17 "},"£":{"x_min":0,"x_max":716.546875,"ha":814,"o":"m 716 38 q 603 -9 658 5 q 502 -24 548 -24 q 398 -10 451 -24 q 239 25 266 25 q 161 12 200 25 q 77 -29 122 0 l 0 113 q 110 211 81 174 q 151 315 151 259 q 117 440 151 365 l 0 440 l 0 515 l 73 515 q 35 610 52 560 q 15 710 15 671 q 119 910 15 831 q 349 984 216 984 q 570 910 480 984 q 693 668 674 826 l 501 668 q 455 791 501 746 q 353 830 414 830 q 256 795 298 830 q 215 705 215 760 q 249 583 215 655 q 283 515 266 548 l 479 515 l 479 440 l 309 440 q 316 394 313 413 q 319 355 319 374 q 287 241 319 291 q 188 135 263 205 q 262 160 225 152 q 332 168 298 168 q 455 151 368 168 q 523 143 500 143 q 588 152 558 143 q 654 189 617 162 l 716 38 "},"t":{"x_min":0,"x_max":412,"ha":511,"o":"m 412 -6 q 349 -8 391 -6 q 287 -11 307 -11 q 137 38 177 -11 q 97 203 97 87 l 97 609 l 0 609 l 0 749 l 97 749 l 97 951 l 297 951 l 297 749 l 412 749 l 412 609 l 297 609 l 297 191 q 315 152 297 162 q 366 143 334 143 q 389 143 378 143 q 412 143 400 143 l 412 -6 "},"¬":{"x_min":0,"x_max":704,"ha":801,"o":"m 704 93 l 551 93 l 551 297 l 0 297 l 0 450 l 704 450 l 704 93 "},"λ":{"x_min":0,"x_max":701.390625,"ha":775,"o":"m 701 0 l 491 0 l 345 444 l 195 0 l 0 0 l 238 697 l 131 1013 l 334 1013 l 701 0 "},"W":{"x_min":0,"x_max":1291.671875,"ha":1399,"o":"m 1291 1013 l 1002 0 l 802 0 l 645 777 l 490 0 l 288 0 l 0 1013 l 215 1013 l 388 298 l 534 1012 l 757 1013 l 904 299 l 1076 1013 l 1291 1013 "},">":{"x_min":36.109375,"x_max":792,"ha":828,"o":"m 792 352 l 36 17 l 36 168 l 594 420 l 36 672 l 36 823 l 792 487 l 792 352 "},"v":{"x_min":0,"x_max":740.28125,"ha":828,"o":"m 740 749 l 473 0 l 266 0 l 0 749 l 222 749 l 373 211 l 529 749 l 740 749 "},"τ":{"x_min":0.28125,"x_max":618.734375,"ha":699,"o":"m 618 593 l 409 593 l 409 0 l 210 0 l 210 593 l 0 593 l 0 749 l 618 749 l 618 593 "},"ξ":{"x_min":0,"x_max":640,"ha":715,"o":"m 640 -14 q 619 -157 640 -84 q 563 -299 599 -230 l 399 -299 q 442 -194 433 -223 q 468 -85 468 -126 q 440 -25 468 -41 q 368 -10 412 -10 q 333 -11 355 -10 q 302 -13 311 -13 q 91 60 179 -13 q 0 259 0 138 q 56 426 0 354 q 201 530 109 493 q 106 594 144 553 q 65 699 65 642 q 94 787 65 747 q 169 856 123 828 l 22 856 l 22 1013 l 597 1013 l 597 856 l 497 857 q 345 840 398 857 q 257 736 257 812 q 366 614 257 642 q 552 602 416 602 l 552 446 l 513 446 q 313 425 379 446 q 199 284 199 389 q 312 162 199 184 q 524 136 418 148 q 640 -14 640 105 "},"&":{"x_min":-1,"x_max":910.109375,"ha":1007,"o":"m 910 -1 l 676 -1 l 607 83 q 291 -47 439 -47 q 50 100 135 -47 q -1 273 -1 190 q 51 431 -1 357 q 218 568 104 505 q 151 661 169 629 q 120 769 120 717 q 201 951 120 885 q 382 1013 276 1013 q 555 957 485 1013 q 635 789 635 894 q 584 644 635 709 q 468 539 548 597 l 615 359 q 664 527 654 440 l 844 527 q 725 223 824 359 l 910 -1 m 461 787 q 436 848 461 826 q 381 870 412 870 q 325 849 349 870 q 301 792 301 829 q 324 719 301 757 q 372 660 335 703 q 430 714 405 680 q 461 787 461 753 m 500 214 l 318 441 q 198 286 198 363 q 225 204 198 248 q 347 135 268 135 q 425 153 388 135 q 500 214 462 172 "},"Λ":{"x_min":0,"x_max":894.453125,"ha":974,"o":"m 894 0 l 666 0 l 447 757 l 225 0 l 0 0 l 344 1013 l 547 1013 l 894 0 "},"I":{"x_min":41,"x_max":249,"ha":365,"o":"m 249 0 l 41 0 l 41 1013 l 249 1013 l 249 0 "},"G":{"x_min":0,"x_max":971,"ha":1057,"o":"m 971 -1 l 829 -1 l 805 118 q 479 -29 670 -29 q 126 133 261 -29 q 0 509 0 286 q 130 884 0 737 q 493 1040 268 1040 q 790 948 659 1040 q 961 698 920 857 l 736 698 q 643 813 709 769 q 500 857 578 857 q 285 746 364 857 q 213 504 213 644 q 285 263 213 361 q 505 154 365 154 q 667 217 598 154 q 761 374 736 280 l 548 374 l 548 548 l 971 548 l 971 -1 "},"ΰ":{"x_min":0,"x_max":655,"ha":767,"o":"m 583 810 l 454 810 l 454 952 l 583 952 l 583 810 m 186 810 l 57 809 l 57 952 l 186 952 l 186 810 m 516 1039 l 315 823 l 216 823 l 338 1039 l 516 1039 m 655 417 q 567 55 655 146 q 326 -25 489 -25 q 59 97 137 -25 q 0 369 0 192 l 0 748 l 200 748 l 201 369 q 218 222 201 269 q 326 142 245 142 q 439 247 410 142 q 455 422 455 304 l 455 748 l 655 748 l 655 417 "},"`":{"x_min":0,"x_max":190,"ha":288,"o":"m 190 654 l 0 654 l 0 830 q 55 970 0 909 q 190 1040 110 1031 l 190 969 q 111 922 134 952 q 88 836 88 892 l 190 836 l 190 654 "},"·":{"x_min":0,"x_max":207,"ha":304,"o":"m 207 528 l 0 528 l 0 735 l 207 735 l 207 528 "},"Υ":{"x_min":-0.21875,"x_max":836.171875,"ha":914,"o":"m 836 1013 l 532 376 l 532 0 l 322 0 l 322 376 l 0 1013 l 208 1013 l 427 576 l 626 1013 l 836 1013 "},"r":{"x_min":0,"x_max":431.9375,"ha":513,"o":"m 431 564 q 269 536 320 564 q 200 395 200 498 l 200 0 l 0 0 l 0 748 l 183 748 l 183 618 q 285 731 224 694 q 431 768 345 768 l 431 564 "},"x":{"x_min":0,"x_max":738.890625,"ha":826,"o":"m 738 0 l 504 0 l 366 238 l 230 0 l 0 0 l 252 382 l 11 749 l 238 749 l 372 522 l 502 749 l 725 749 l 488 384 l 738 0 "},"μ":{"x_min":0,"x_max":647,"ha":754,"o":"m 647 0 l 477 0 l 477 68 q 411 9 448 30 q 330 -11 374 -11 q 261 3 295 -11 q 199 43 226 18 l 199 -278 l 0 -278 l 0 749 l 199 749 l 199 358 q 216 222 199 268 q 322 152 244 152 q 435 240 410 152 q 448 401 448 283 l 448 749 l 647 749 l 647 0 "},"h":{"x_min":0,"x_max":669,"ha":782,"o":"m 669 0 l 469 0 l 469 390 q 449 526 469 472 q 353 607 420 607 q 248 554 295 607 q 201 441 201 501 l 201 0 l 0 0 l 0 1013 l 201 1013 l 201 665 q 303 743 245 715 q 425 772 362 772 q 609 684 542 772 q 669 484 669 605 l 669 0 "},".":{"x_min":0,"x_max":206,"ha":303,"o":"m 206 0 l 0 0 l 0 207 l 206 207 l 206 0 "},"φ":{"x_min":-1,"x_max":921,"ha":990,"o":"m 542 -278 l 367 -278 l 367 -22 q 99 92 200 -22 q -1 376 -1 206 q 72 627 -1 520 q 288 769 151 742 l 288 581 q 222 495 243 550 q 202 378 202 439 q 240 228 202 291 q 367 145 285 157 l 367 776 l 515 776 q 807 667 694 776 q 921 379 921 558 q 815 93 921 209 q 542 -22 709 -22 l 542 -278 m 542 145 q 672 225 625 145 q 713 381 713 291 q 671 536 713 470 q 542 611 624 611 l 542 145 "},";":{"x_min":0,"x_max":208,"ha":306,"o":"m 208 528 l 0 528 l 0 735 l 208 735 l 208 528 m 208 6 q 152 -151 208 -89 q 0 -238 96 -212 l 0 -158 q 87 -100 61 -136 q 113 0 113 -65 l 0 0 l 0 207 l 208 207 l 208 6 "},"f":{"x_min":0,"x_max":424,"ha":525,"o":"m 424 609 l 300 609 l 300 0 l 107 0 l 107 609 l 0 609 l 0 749 l 107 749 q 145 949 107 894 q 328 1019 193 1019 l 424 1015 l 424 855 l 362 855 q 312 841 324 855 q 300 797 300 827 q 300 773 300 786 q 300 749 300 761 l 424 749 l 424 609 "},"“":{"x_min":0,"x_max":468,"ha":567,"o":"m 190 631 l 0 631 l 0 807 q 55 947 0 885 q 190 1017 110 1010 l 190 947 q 88 813 88 921 l 190 813 l 190 631 m 468 631 l 278 631 l 278 807 q 333 947 278 885 q 468 1017 388 1010 l 468 947 q 366 813 366 921 l 468 813 l 468 631 "},"A":{"x_min":0,"x_max":966.671875,"ha":1069,"o":"m 966 0 l 747 0 l 679 208 l 286 208 l 218 0 l 0 0 l 361 1013 l 600 1013 l 966 0 m 623 376 l 480 810 l 340 376 l 623 376 "},"6":{"x_min":57,"x_max":771,"ha":828,"o":"m 744 734 l 544 734 q 500 802 533 776 q 425 828 466 828 q 315 769 359 828 q 264 571 264 701 q 451 638 343 638 q 691 537 602 638 q 771 315 771 449 q 683 79 771 176 q 420 -29 586 -29 q 134 123 227 -29 q 57 455 57 250 q 184 865 57 721 q 452 988 293 988 q 657 916 570 988 q 744 734 744 845 m 426 128 q 538 178 498 128 q 578 300 578 229 q 538 422 578 372 q 415 479 493 479 q 303 430 342 479 q 264 313 264 381 q 308 184 264 240 q 426 128 352 128 "},"‘":{"x_min":0,"x_max":190,"ha":289,"o":"m 190 631 l 0 631 l 0 807 q 55 947 0 885 q 190 1017 110 1010 l 190 947 q 88 813 88 921 l 190 813 l 190 631 "},"ϊ":{"x_min":-55,"x_max":337,"ha":389,"o":"m 337 810 l 208 810 l 208 952 l 337 952 l 337 810 m 74 810 l -55 810 l -55 952 l 74 952 l 74 810 m 242 0 l 42 0 l 42 748 l 242 748 l 242 0 "},"π":{"x_min":0.5,"x_max":838.890625,"ha":938,"o":"m 838 593 l 750 593 l 750 0 l 549 0 l 549 593 l 287 593 l 287 0 l 88 0 l 88 593 l 0 593 l 0 749 l 838 749 l 838 593 "},"ά":{"x_min":-1,"x_max":722,"ha":835,"o":"m 722 0 l 531 0 l 530 101 q 433 8 491 41 q 304 -25 375 -25 q 72 104 157 -25 q -1 372 -1 216 q 72 643 -1 530 q 308 775 158 775 q 433 744 375 775 q 528 656 491 713 l 528 749 l 722 749 l 722 0 m 361 601 q 233 527 277 601 q 196 375 196 464 q 232 224 196 288 q 358 144 277 144 q 487 217 441 144 q 528 370 528 281 q 489 523 528 457 q 361 601 443 601 m 579 1039 l 377 823 l 279 823 l 401 1039 l 579 1039 "},"O":{"x_min":0,"x_max":994,"ha":1094,"o":"m 497 -29 q 133 127 272 -29 q 0 505 0 277 q 131 883 0 733 q 497 1040 270 1040 q 860 883 721 1040 q 994 505 994 733 q 862 127 994 277 q 497 -29 723 -29 m 497 154 q 710 266 631 154 q 780 506 780 365 q 710 745 780 647 q 497 857 631 857 q 283 747 361 857 q 213 506 213 647 q 282 266 213 365 q 497 154 361 154 "},"n":{"x_min":0,"x_max":669,"ha":782,"o":"m 669 0 l 469 0 l 469 452 q 442 553 469 513 q 352 601 412 601 q 245 553 290 601 q 200 441 200 505 l 200 0 l 0 0 l 0 748 l 194 748 l 194 659 q 289 744 230 713 q 416 775 349 775 q 600 700 531 775 q 669 509 669 626 l 669 0 "},"3":{"x_min":61,"x_max":767,"ha":828,"o":"m 767 290 q 653 51 767 143 q 402 -32 548 -32 q 168 48 262 -32 q 61 300 61 140 l 250 300 q 298 173 250 219 q 405 132 343 132 q 514 169 471 132 q 563 282 563 211 q 491 405 563 369 q 343 432 439 432 l 343 568 q 472 592 425 568 q 534 701 534 626 q 493 793 534 758 q 398 829 453 829 q 306 789 344 829 q 268 669 268 749 l 80 669 q 182 909 80 823 q 410 986 274 986 q 633 916 540 986 q 735 719 735 840 q 703 608 735 656 q 615 522 672 561 q 727 427 687 486 q 767 290 767 369 "},"9":{"x_min":58,"x_max":769,"ha":828,"o":"m 769 492 q 646 90 769 232 q 384 -33 539 -33 q 187 35 271 -33 q 83 224 98 107 l 282 224 q 323 154 286 182 q 404 127 359 127 q 513 182 471 127 q 563 384 563 248 q 475 335 532 355 q 372 315 418 315 q 137 416 224 315 q 58 642 58 507 q 144 877 58 781 q 407 984 239 984 q 694 827 602 984 q 769 492 769 699 m 416 476 q 525 521 488 476 q 563 632 563 566 q 521 764 563 709 q 403 826 474 826 q 297 773 337 826 q 258 649 258 720 q 295 530 258 577 q 416 476 339 476 "},"l":{"x_min":41,"x_max":240,"ha":363,"o":"m 240 0 l 41 0 l 41 1013 l 240 1013 l 240 0 "},"¤":{"x_min":40.265625,"x_max":727.203125,"ha":825,"o":"m 727 792 l 594 659 q 620 552 620 609 q 598 459 620 504 l 725 331 l 620 224 l 491 352 q 382 331 443 331 q 273 352 322 331 l 144 224 l 40 330 l 167 459 q 147 552 147 501 q 172 658 147 608 l 40 794 l 147 898 l 283 759 q 383 776 330 776 q 482 759 434 776 l 620 898 l 727 792 m 383 644 q 308 617 334 644 q 283 551 283 590 q 309 489 283 517 q 381 462 335 462 q 456 488 430 462 q 482 554 482 515 q 455 616 482 588 q 383 644 429 644 "},"κ":{"x_min":0,"x_max":691.84375,"ha":779,"o":"m 691 0 l 479 0 l 284 343 l 196 252 l 196 0 l 0 0 l 0 749 l 196 749 l 196 490 l 440 749 l 677 749 l 416 479 l 691 0 "},"4":{"x_min":53,"x_max":775.21875,"ha":828,"o":"m 775 213 l 660 213 l 660 0 l 470 0 l 470 213 l 53 213 l 53 384 l 416 958 l 660 958 l 660 370 l 775 370 l 775 213 m 474 364 l 474 786 l 204 363 l 474 364 "},"p":{"x_min":0,"x_max":722,"ha":824,"o":"m 415 -26 q 287 4 346 -26 q 192 92 228 34 l 192 -298 l 0 -298 l 0 750 l 192 750 l 192 647 q 289 740 230 706 q 416 775 347 775 q 649 645 566 775 q 722 375 722 534 q 649 106 722 218 q 415 -26 564 -26 m 363 603 q 232 529 278 603 q 192 375 192 465 q 230 222 192 286 q 360 146 276 146 q 487 221 441 146 q 526 371 526 285 q 488 523 526 458 q 363 603 443 603 "},"‡":{"x_min":0,"x_max":809,"ha":894,"o":"m 299 621 l 0 621 l 0 804 l 299 804 l 299 1011 l 509 1011 l 509 804 l 809 804 l 809 621 l 509 621 l 509 387 l 809 387 l 809 205 l 509 205 l 509 0 l 299 0 l 299 205 l 0 205 l 0 387 l 299 387 l 299 621 "},"ψ":{"x_min":0,"x_max":875,"ha":979,"o":"m 522 142 q 657 274 620 163 q 671 352 671 316 l 671 748 l 875 748 l 875 402 q 806 134 875 240 q 525 -22 719 -1 l 525 -278 l 349 -278 l 349 -22 q 65 135 152 -1 q 0 402 0 238 l 0 748 l 204 748 l 204 352 q 231 240 204 295 q 353 142 272 159 l 353 922 l 524 922 l 522 142 "},"η":{"x_min":0,"x_max":669,"ha":779,"o":"m 669 -278 l 469 -278 l 469 390 q 448 526 469 473 q 348 606 417 606 q 244 553 288 606 q 201 441 201 501 l 201 0 l 0 0 l 0 749 l 201 749 l 201 665 q 301 744 244 715 q 423 774 359 774 q 606 685 538 774 q 669 484 669 603 l 669 -278 "}},"cssFontWeight":"bold","ascender":1216,"underlinePosition":-100,"cssFontStyle":"normal","boundingBox":{"yMin":-333,"xMin":-162,"yMax":1216,"xMax":1681},"resolution":1000,"original_font_information":{"postscript_name":"Helvetiker-Bold","version_string":"Version 1.00 2004 initial release","vendor_url":"http://www.magenta.gr","full_font_name":"Helvetiker Bold","font_family_name":"Helvetiker","copyright":"Copyright (c) Magenta ltd, 2004.","description":"","trademark":"","designer":"","designer_url":"","unique_font_identifier":"Magenta ltd:Helvetiker Bold:22-10-104","license_url":"http://www.ellak.gr/fonts/MgOpen/license.html","license_description":"Copyright (c) 2004 by MAGENTA Ltd. All Rights Reserved.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license (\"Fonts\") and associated documentation files (the \"Font Software\"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: \r\n\r\nThe above copyright and this permission notice shall be included in all copies of one or more of the Font Software typefaces.\r\n\r\nThe Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing the word \"MgOpen\", or if the modifications are accepted for inclusion in the Font Software itself by the each appointed Administrator.\r\n\r\nThis License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the \"MgOpen\" name.\r\n\r\nThe Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. \r\n\r\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL MAGENTA OR PERSONS OR BODIES IN CHARGE OF ADMINISTRATION AND MAINTENANCE OF THE FONT SOFTWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.","manufacturer_name":"Magenta ltd","font_sub_family_name":"Bold"},"descender":-334,"familyName":"Helvetiker","lineHeight":1549,"underlineThickness":50}); ================================================ FILE: browser/data/fonts/helvetiker_regular.typeface.js ================================================ if (_typeface_js && _typeface_js.loadFace) _typeface_js.loadFace({"glyphs":{"ο":{"x_min":0,"x_max":712,"ha":815,"o":"m 356 -25 q 96 88 192 -25 q 0 368 0 201 q 92 642 0 533 q 356 761 192 761 q 617 644 517 761 q 712 368 712 533 q 619 91 712 201 q 356 -25 520 -25 m 356 85 q 527 175 465 85 q 583 369 583 255 q 528 562 583 484 q 356 651 466 651 q 189 560 250 651 q 135 369 135 481 q 187 177 135 257 q 356 85 250 85 "},"S":{"x_min":0,"x_max":788,"ha":890,"o":"m 788 291 q 662 54 788 144 q 397 -26 550 -26 q 116 68 226 -26 q 0 337 0 168 l 131 337 q 200 152 131 220 q 384 85 269 85 q 557 129 479 85 q 650 270 650 183 q 490 429 650 379 q 194 513 341 470 q 33 739 33 584 q 142 964 33 881 q 388 1041 242 1041 q 644 957 543 1041 q 756 716 756 867 l 625 716 q 561 874 625 816 q 395 933 497 933 q 243 891 309 933 q 164 759 164 841 q 325 609 164 656 q 625 526 475 568 q 788 291 788 454 "},"¦":{"x_min":343,"x_max":449,"ha":792,"o":"m 449 462 l 343 462 l 343 986 l 449 986 l 449 462 m 449 -242 l 343 -242 l 343 280 l 449 280 l 449 -242 "},"/":{"x_min":183.25,"x_max":608.328125,"ha":792,"o":"m 608 1041 l 266 -129 l 183 -129 l 520 1041 l 608 1041 "},"Τ":{"x_min":-0.4375,"x_max":777.453125,"ha":839,"o":"m 777 893 l 458 893 l 458 0 l 319 0 l 319 892 l 0 892 l 0 1013 l 777 1013 l 777 893 "},"y":{"x_min":0,"x_max":684.78125,"ha":771,"o":"m 684 738 l 388 -83 q 311 -216 356 -167 q 173 -279 252 -279 q 97 -266 133 -279 l 97 -149 q 132 -155 109 -151 q 168 -160 155 -160 q 240 -114 213 -160 q 274 -26 248 -98 l 0 738 l 137 737 l 341 139 l 548 737 l 684 738 "},"Π":{"x_min":0,"x_max":803,"ha":917,"o":"m 803 0 l 667 0 l 667 886 l 140 886 l 140 0 l 0 0 l 0 1012 l 803 1012 l 803 0 "},"ΐ":{"x_min":-111,"x_max":339,"ha":361,"o":"m 339 800 l 229 800 l 229 925 l 339 925 l 339 800 m -1 800 l -111 800 l -111 925 l -1 925 l -1 800 m 284 3 q 233 -10 258 -5 q 182 -15 207 -15 q 85 26 119 -15 q 42 200 42 79 l 42 737 l 167 737 l 168 215 q 172 141 168 157 q 226 101 183 101 q 248 103 239 101 q 284 112 257 104 l 284 3 m 302 1040 l 113 819 l 30 819 l 165 1040 l 302 1040 "},"g":{"x_min":0,"x_max":686,"ha":838,"o":"m 686 34 q 586 -213 686 -121 q 331 -306 487 -306 q 131 -252 216 -306 q 31 -84 31 -190 l 155 -84 q 228 -174 166 -138 q 345 -207 284 -207 q 514 -109 454 -207 q 564 89 564 -27 q 461 6 521 36 q 335 -23 401 -23 q 88 100 184 -23 q 0 370 0 215 q 87 634 0 522 q 330 758 183 758 q 457 728 398 758 q 564 644 515 699 l 564 737 l 686 737 l 686 34 m 582 367 q 529 560 582 481 q 358 652 468 652 q 189 561 250 652 q 135 369 135 482 q 189 176 135 255 q 361 85 251 85 q 529 176 468 85 q 582 367 582 255 "},"²":{"x_min":0,"x_max":442,"ha":539,"o":"m 442 383 l 0 383 q 91 566 0 492 q 260 668 176 617 q 354 798 354 727 q 315 875 354 845 q 227 905 277 905 q 136 869 173 905 q 99 761 99 833 l 14 761 q 82 922 14 864 q 232 974 141 974 q 379 926 316 974 q 442 797 442 878 q 351 635 442 704 q 183 539 321 611 q 92 455 92 491 l 442 455 l 442 383 "},"–":{"x_min":0,"x_max":705.5625,"ha":803,"o":"m 705 334 l 0 334 l 0 410 l 705 410 l 705 334 "},"Κ":{"x_min":0,"x_max":819.5625,"ha":893,"o":"m 819 0 l 650 0 l 294 509 l 139 356 l 139 0 l 0 0 l 0 1013 l 139 1013 l 139 526 l 626 1013 l 809 1013 l 395 600 l 819 0 "},"ƒ":{"x_min":-46.265625,"x_max":392,"ha":513,"o":"m 392 651 l 259 651 l 79 -279 l -46 -278 l 134 651 l 14 651 l 14 751 l 135 751 q 151 948 135 900 q 304 1041 185 1041 q 334 1040 319 1041 q 392 1034 348 1039 l 392 922 q 337 931 360 931 q 271 883 287 931 q 260 793 260 853 l 260 751 l 392 751 l 392 651 "},"e":{"x_min":0,"x_max":714,"ha":813,"o":"m 714 326 l 140 326 q 200 157 140 227 q 359 87 260 87 q 488 130 431 87 q 561 245 545 174 l 697 245 q 577 48 670 123 q 358 -26 484 -26 q 97 85 195 -26 q 0 363 0 197 q 94 642 0 529 q 358 765 195 765 q 626 627 529 765 q 714 326 714 503 m 576 429 q 507 583 564 522 q 355 650 445 650 q 206 583 266 650 q 140 429 152 522 l 576 429 "},"ό":{"x_min":0,"x_max":712,"ha":815,"o":"m 356 -25 q 94 91 194 -25 q 0 368 0 202 q 92 642 0 533 q 356 761 192 761 q 617 644 517 761 q 712 368 712 533 q 619 91 712 201 q 356 -25 520 -25 m 356 85 q 527 175 465 85 q 583 369 583 255 q 528 562 583 484 q 356 651 466 651 q 189 560 250 651 q 135 369 135 481 q 187 177 135 257 q 356 85 250 85 m 576 1040 l 387 819 l 303 819 l 438 1040 l 576 1040 "},"J":{"x_min":0,"x_max":588,"ha":699,"o":"m 588 279 q 287 -26 588 -26 q 58 73 126 -26 q 0 327 0 158 l 133 327 q 160 172 133 227 q 288 96 198 96 q 426 171 391 96 q 449 336 449 219 l 449 1013 l 588 1013 l 588 279 "},"»":{"x_min":-1,"x_max":503,"ha":601,"o":"m 503 302 l 280 136 l 281 256 l 429 373 l 281 486 l 280 608 l 503 440 l 503 302 m 221 302 l 0 136 l 0 255 l 145 372 l 0 486 l -1 608 l 221 440 l 221 302 "},"©":{"x_min":-3,"x_max":1008,"ha":1106,"o":"m 502 -7 q 123 151 263 -7 q -3 501 -3 294 q 123 851 -3 706 q 502 1011 263 1011 q 881 851 739 1011 q 1008 501 1008 708 q 883 151 1008 292 q 502 -7 744 -7 m 502 60 q 830 197 709 60 q 940 501 940 322 q 831 805 940 681 q 502 944 709 944 q 174 805 296 944 q 65 501 65 680 q 173 197 65 320 q 502 60 294 60 m 741 394 q 661 246 731 302 q 496 190 591 190 q 294 285 369 190 q 228 497 228 370 q 295 714 228 625 q 499 813 370 813 q 656 762 588 813 q 733 625 724 711 l 634 625 q 589 704 629 673 q 498 735 550 735 q 377 666 421 735 q 334 504 334 597 q 374 340 334 408 q 490 272 415 272 q 589 304 549 272 q 638 394 628 337 l 741 394 "},"ώ":{"x_min":0,"x_max":922,"ha":1030,"o":"m 687 1040 l 498 819 l 415 819 l 549 1040 l 687 1040 m 922 339 q 856 97 922 203 q 650 -26 780 -26 q 538 9 587 -26 q 461 103 489 44 q 387 12 436 46 q 277 -22 339 -22 q 69 97 147 -22 q 0 338 0 202 q 45 551 0 444 q 161 737 84 643 l 302 737 q 175 552 219 647 q 124 336 124 446 q 155 179 124 248 q 275 88 197 88 q 375 163 341 88 q 400 294 400 219 l 400 572 l 524 572 l 524 294 q 561 135 524 192 q 643 88 591 88 q 762 182 719 88 q 797 341 797 257 q 745 555 797 450 q 619 737 705 637 l 760 737 q 874 551 835 640 q 922 339 922 444 "},"^":{"x_min":193.0625,"x_max":598.609375,"ha":792,"o":"m 598 772 l 515 772 l 395 931 l 277 772 l 193 772 l 326 1013 l 462 1013 l 598 772 "},"«":{"x_min":0,"x_max":507.203125,"ha":604,"o":"m 506 136 l 284 302 l 284 440 l 506 608 l 507 485 l 360 371 l 506 255 l 506 136 m 222 136 l 0 302 l 0 440 l 222 608 l 221 486 l 73 373 l 222 256 l 222 136 "},"D":{"x_min":0,"x_max":828,"ha":935,"o":"m 389 1013 q 714 867 593 1013 q 828 521 828 729 q 712 161 828 309 q 382 0 587 0 l 0 0 l 0 1013 l 389 1013 m 376 124 q 607 247 523 124 q 681 510 681 355 q 607 771 681 662 q 376 896 522 896 l 139 896 l 139 124 l 376 124 "},"∙":{"x_min":0,"x_max":142,"ha":239,"o":"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 "},"ÿ":{"x_min":0,"x_max":47,"ha":125,"o":"m 47 3 q 37 -7 47 -7 q 28 0 30 -7 q 39 -4 32 -4 q 45 3 45 -1 l 37 0 q 28 9 28 0 q 39 19 28 19 l 47 16 l 47 19 l 47 3 m 37 1 q 44 8 44 1 q 37 16 44 16 q 30 8 30 16 q 37 1 30 1 m 26 1 l 23 22 l 14 0 l 3 22 l 3 3 l 0 25 l 13 1 l 22 25 l 26 1 "},"w":{"x_min":0,"x_max":1009.71875,"ha":1100,"o":"m 1009 738 l 783 0 l 658 0 l 501 567 l 345 0 l 222 0 l 0 738 l 130 738 l 284 174 l 432 737 l 576 738 l 721 173 l 881 737 l 1009 738 "},"$":{"x_min":0,"x_max":700,"ha":793,"o":"m 664 717 l 542 717 q 490 825 531 785 q 381 872 450 865 l 381 551 q 620 446 540 522 q 700 241 700 370 q 618 45 700 116 q 381 -25 536 -25 l 381 -152 l 307 -152 l 307 -25 q 81 62 162 -25 q 0 297 0 149 l 124 297 q 169 146 124 204 q 307 81 215 89 l 307 441 q 80 536 148 469 q 13 725 13 603 q 96 910 13 839 q 307 982 180 982 l 307 1077 l 381 1077 l 381 982 q 574 917 494 982 q 664 717 664 845 m 307 565 l 307 872 q 187 831 233 872 q 142 724 142 791 q 180 618 142 656 q 307 565 218 580 m 381 76 q 562 237 562 96 q 517 361 562 313 q 381 423 472 409 l 381 76 "},"\\":{"x_min":-0.015625,"x_max":425.0625,"ha":522,"o":"m 425 -129 l 337 -129 l 0 1041 l 83 1041 l 425 -129 "},"µ":{"x_min":0,"x_max":697.21875,"ha":747,"o":"m 697 -4 q 629 -14 658 -14 q 498 97 513 -14 q 422 9 470 41 q 313 -23 374 -23 q 207 4 258 -23 q 119 81 156 32 l 119 -278 l 0 -278 l 0 738 l 124 738 l 124 343 q 165 173 124 246 q 308 83 216 83 q 452 178 402 83 q 493 359 493 255 l 493 738 l 617 738 l 617 214 q 623 136 617 160 q 673 92 637 92 q 697 96 684 92 l 697 -4 "},"Ι":{"x_min":42,"x_max":181,"ha":297,"o":"m 181 0 l 42 0 l 42 1013 l 181 1013 l 181 0 "},"Ύ":{"x_min":0,"x_max":1144.5,"ha":1214,"o":"m 1144 1012 l 807 416 l 807 0 l 667 0 l 667 416 l 325 1012 l 465 1012 l 736 533 l 1004 1012 l 1144 1012 m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 "},"’":{"x_min":0,"x_max":139,"ha":236,"o":"m 139 851 q 102 737 139 784 q 0 669 65 690 l 0 734 q 59 787 42 741 q 72 873 72 821 l 0 873 l 0 1013 l 139 1013 l 139 851 "},"Ν":{"x_min":0,"x_max":801,"ha":915,"o":"m 801 0 l 651 0 l 131 822 l 131 0 l 0 0 l 0 1013 l 151 1013 l 670 191 l 670 1013 l 801 1013 l 801 0 "},"-":{"x_min":8.71875,"x_max":350.390625,"ha":478,"o":"m 350 317 l 8 317 l 8 428 l 350 428 l 350 317 "},"Q":{"x_min":0,"x_max":968,"ha":1072,"o":"m 954 5 l 887 -79 l 744 35 q 622 -11 687 2 q 483 -26 556 -26 q 127 130 262 -26 q 0 504 0 279 q 127 880 0 728 q 484 1041 262 1041 q 841 884 708 1041 q 968 507 968 735 q 933 293 968 398 q 832 104 899 188 l 954 5 m 723 191 q 802 330 777 248 q 828 499 828 412 q 744 790 828 673 q 483 922 650 922 q 228 791 322 922 q 142 505 142 673 q 227 221 142 337 q 487 91 323 91 q 632 123 566 91 l 520 215 l 587 301 l 723 191 "},"ς":{"x_min":1,"x_max":676.28125,"ha":740,"o":"m 676 460 l 551 460 q 498 595 542 546 q 365 651 448 651 q 199 578 263 651 q 136 401 136 505 q 266 178 136 241 q 508 106 387 142 q 640 -50 640 62 q 625 -158 640 -105 q 583 -278 611 -211 l 465 -278 q 498 -182 490 -211 q 515 -80 515 -126 q 381 12 515 -15 q 134 91 197 51 q 1 388 1 179 q 100 651 1 542 q 354 761 199 761 q 587 680 498 761 q 676 460 676 599 "},"M":{"x_min":0,"x_max":954,"ha":1067,"o":"m 954 0 l 819 0 l 819 869 l 537 0 l 405 0 l 128 866 l 128 0 l 0 0 l 0 1013 l 200 1013 l 472 160 l 757 1013 l 954 1013 l 954 0 "},"Ψ":{"x_min":0,"x_max":1006,"ha":1094,"o":"m 1006 678 q 914 319 1006 429 q 571 200 814 200 l 571 0 l 433 0 l 433 200 q 92 319 194 200 q 0 678 0 429 l 0 1013 l 139 1013 l 139 679 q 191 417 139 492 q 433 326 255 326 l 433 1013 l 571 1013 l 571 326 l 580 326 q 813 423 747 326 q 868 679 868 502 l 868 1013 l 1006 1013 l 1006 678 "},"C":{"x_min":0,"x_max":886,"ha":944,"o":"m 886 379 q 760 87 886 201 q 455 -26 634 -26 q 112 136 236 -26 q 0 509 0 283 q 118 882 0 737 q 469 1041 245 1041 q 748 955 630 1041 q 879 708 879 859 l 745 708 q 649 862 724 805 q 473 920 573 920 q 219 791 312 920 q 136 509 136 675 q 217 229 136 344 q 470 99 311 99 q 672 179 591 99 q 753 379 753 259 l 886 379 "},"!":{"x_min":0,"x_max":138,"ha":236,"o":"m 138 684 q 116 409 138 629 q 105 244 105 299 l 33 244 q 16 465 33 313 q 0 684 0 616 l 0 1013 l 138 1013 l 138 684 m 138 0 l 0 0 l 0 151 l 138 151 l 138 0 "},"{":{"x_min":0,"x_max":480.5625,"ha":578,"o":"m 480 -286 q 237 -213 303 -286 q 187 -45 187 -159 q 194 48 187 -15 q 201 141 201 112 q 164 264 201 225 q 0 314 118 314 l 0 417 q 164 471 119 417 q 201 605 201 514 q 199 665 201 644 q 193 772 193 769 q 241 941 193 887 q 480 1015 308 1015 l 480 915 q 336 866 375 915 q 306 742 306 828 q 310 662 306 717 q 314 577 314 606 q 288 452 314 500 q 176 365 256 391 q 289 275 257 337 q 314 143 314 226 q 313 84 314 107 q 310 -11 310 -5 q 339 -131 310 -94 q 480 -182 377 -182 l 480 -286 "},"X":{"x_min":-0.015625,"x_max":854.15625,"ha":940,"o":"m 854 0 l 683 0 l 423 409 l 166 0 l 0 0 l 347 519 l 18 1013 l 186 1013 l 428 637 l 675 1013 l 836 1013 l 504 520 l 854 0 "},"#":{"x_min":0,"x_max":963.890625,"ha":1061,"o":"m 963 690 l 927 590 l 719 590 l 655 410 l 876 410 l 840 310 l 618 310 l 508 -3 l 393 -2 l 506 309 l 329 310 l 215 -2 l 102 -3 l 212 310 l 0 310 l 36 410 l 248 409 l 312 590 l 86 590 l 120 690 l 347 690 l 459 1006 l 573 1006 l 462 690 l 640 690 l 751 1006 l 865 1006 l 754 690 l 963 690 m 606 590 l 425 590 l 362 410 l 543 410 l 606 590 "},"ι":{"x_min":42,"x_max":284,"ha":361,"o":"m 284 3 q 233 -10 258 -5 q 182 -15 207 -15 q 85 26 119 -15 q 42 200 42 79 l 42 738 l 167 738 l 168 215 q 172 141 168 157 q 226 101 183 101 q 248 103 239 101 q 284 112 257 104 l 284 3 "},"Ά":{"x_min":0,"x_max":906.953125,"ha":982,"o":"m 283 1040 l 88 799 l 5 799 l 145 1040 l 283 1040 m 906 0 l 756 0 l 650 303 l 251 303 l 143 0 l 0 0 l 376 1012 l 529 1012 l 906 0 m 609 421 l 452 866 l 293 421 l 609 421 "},")":{"x_min":0,"x_max":318,"ha":415,"o":"m 318 365 q 257 25 318 191 q 87 -290 197 -141 l 0 -290 q 140 21 93 -128 q 193 360 193 189 q 141 704 193 537 q 0 1024 97 850 l 87 1024 q 257 706 197 871 q 318 365 318 542 "},"ε":{"x_min":0,"x_max":634.71875,"ha":714,"o":"m 634 234 q 527 38 634 110 q 300 -25 433 -25 q 98 29 183 -25 q 0 204 0 93 q 37 314 0 265 q 128 390 67 353 q 56 460 82 419 q 26 555 26 505 q 114 712 26 654 q 295 763 191 763 q 499 700 416 763 q 589 515 589 631 l 478 515 q 419 618 464 580 q 307 657 374 657 q 207 630 253 657 q 151 547 151 598 q 238 445 151 469 q 389 434 280 434 l 389 331 l 349 331 q 206 315 255 331 q 125 210 125 287 q 183 107 125 145 q 302 76 233 76 q 436 117 379 76 q 509 234 493 159 l 634 234 "},"Δ":{"x_min":0,"x_max":952.78125,"ha":1028,"o":"m 952 0 l 0 0 l 400 1013 l 551 1013 l 952 0 m 762 124 l 476 867 l 187 124 l 762 124 "},"}":{"x_min":0,"x_max":481,"ha":578,"o":"m 481 314 q 318 262 364 314 q 282 136 282 222 q 284 65 282 97 q 293 -58 293 -48 q 241 -217 293 -166 q 0 -286 174 -286 l 0 -182 q 143 -130 105 -182 q 171 -2 171 -93 q 168 81 171 22 q 165 144 165 140 q 188 275 165 229 q 306 365 220 339 q 191 455 224 391 q 165 588 165 505 q 168 681 165 624 q 171 742 171 737 q 141 865 171 827 q 0 915 102 915 l 0 1015 q 243 942 176 1015 q 293 773 293 888 q 287 675 293 741 q 282 590 282 608 q 318 466 282 505 q 481 417 364 417 l 481 314 "},"‰":{"x_min":-3,"x_max":1672,"ha":1821,"o":"m 846 0 q 664 76 732 0 q 603 244 603 145 q 662 412 603 344 q 846 489 729 489 q 1027 412 959 489 q 1089 244 1089 343 q 1029 76 1089 144 q 846 0 962 0 m 845 103 q 945 143 910 103 q 981 243 981 184 q 947 340 981 301 q 845 385 910 385 q 745 342 782 385 q 709 243 709 300 q 742 147 709 186 q 845 103 781 103 m 888 986 l 284 -25 l 199 -25 l 803 986 l 888 986 m 241 468 q 58 545 126 468 q -3 715 -3 615 q 56 881 -3 813 q 238 958 124 958 q 421 881 353 958 q 483 712 483 813 q 423 544 483 612 q 241 468 356 468 m 241 855 q 137 811 175 855 q 100 710 100 768 q 136 612 100 653 q 240 572 172 572 q 344 614 306 572 q 382 713 382 656 q 347 810 382 771 q 241 855 308 855 m 1428 0 q 1246 76 1314 0 q 1185 244 1185 145 q 1244 412 1185 344 q 1428 489 1311 489 q 1610 412 1542 489 q 1672 244 1672 343 q 1612 76 1672 144 q 1428 0 1545 0 m 1427 103 q 1528 143 1492 103 q 1564 243 1564 184 q 1530 340 1564 301 q 1427 385 1492 385 q 1327 342 1364 385 q 1291 243 1291 300 q 1324 147 1291 186 q 1427 103 1363 103 "},"a":{"x_min":0,"x_max":698.609375,"ha":794,"o":"m 698 0 q 661 -12 679 -7 q 615 -17 643 -17 q 536 12 564 -17 q 500 96 508 41 q 384 6 456 37 q 236 -25 312 -25 q 65 31 130 -25 q 0 194 0 88 q 118 390 0 334 q 328 435 180 420 q 488 483 476 451 q 495 523 495 504 q 442 619 495 584 q 325 654 389 654 q 209 617 257 654 q 152 513 161 580 l 33 513 q 123 705 33 633 q 332 772 207 772 q 528 712 448 772 q 617 531 617 645 l 617 163 q 624 108 617 126 q 664 90 632 90 l 698 94 l 698 0 m 491 262 l 491 372 q 272 329 350 347 q 128 201 128 294 q 166 113 128 144 q 264 83 205 83 q 414 130 346 83 q 491 262 491 183 "},"—":{"x_min":0,"x_max":941.671875,"ha":1039,"o":"m 941 334 l 0 334 l 0 410 l 941 410 l 941 334 "},"=":{"x_min":8.71875,"x_max":780.953125,"ha":792,"o":"m 780 510 l 8 510 l 8 606 l 780 606 l 780 510 m 780 235 l 8 235 l 8 332 l 780 332 l 780 235 "},"N":{"x_min":0,"x_max":801,"ha":914,"o":"m 801 0 l 651 0 l 131 823 l 131 0 l 0 0 l 0 1013 l 151 1013 l 670 193 l 670 1013 l 801 1013 l 801 0 "},"ρ":{"x_min":0,"x_max":712,"ha":797,"o":"m 712 369 q 620 94 712 207 q 362 -26 521 -26 q 230 2 292 -26 q 119 83 167 30 l 119 -278 l 0 -278 l 0 362 q 91 643 0 531 q 355 764 190 764 q 617 647 517 764 q 712 369 712 536 m 583 366 q 530 559 583 480 q 359 651 469 651 q 190 562 252 651 q 135 370 135 483 q 189 176 135 257 q 359 85 250 85 q 528 175 466 85 q 583 366 583 254 "},"2":{"x_min":59,"x_max":731,"ha":792,"o":"m 731 0 l 59 0 q 197 314 59 188 q 457 487 199 315 q 598 691 598 580 q 543 819 598 772 q 411 867 488 867 q 272 811 328 867 q 209 630 209 747 l 81 630 q 182 901 81 805 q 408 986 271 986 q 629 909 536 986 q 731 694 731 826 q 613 449 731 541 q 378 316 495 383 q 201 122 235 234 l 731 122 l 731 0 "},"¯":{"x_min":0,"x_max":941.671875,"ha":938,"o":"m 941 1033 l 0 1033 l 0 1109 l 941 1109 l 941 1033 "},"Z":{"x_min":0,"x_max":779,"ha":849,"o":"m 779 0 l 0 0 l 0 113 l 621 896 l 40 896 l 40 1013 l 779 1013 l 778 887 l 171 124 l 779 124 l 779 0 "},"u":{"x_min":0,"x_max":617,"ha":729,"o":"m 617 0 l 499 0 l 499 110 q 391 10 460 45 q 246 -25 322 -25 q 61 58 127 -25 q 0 258 0 136 l 0 738 l 125 738 l 125 284 q 156 148 125 202 q 273 82 197 82 q 433 165 369 82 q 493 340 493 243 l 493 738 l 617 738 l 617 0 "},"k":{"x_min":0,"x_max":612.484375,"ha":697,"o":"m 612 738 l 338 465 l 608 0 l 469 0 l 251 382 l 121 251 l 121 0 l 0 0 l 0 1013 l 121 1013 l 121 402 l 456 738 l 612 738 "},"Η":{"x_min":0,"x_max":803,"ha":917,"o":"m 803 0 l 667 0 l 667 475 l 140 475 l 140 0 l 0 0 l 0 1013 l 140 1013 l 140 599 l 667 599 l 667 1013 l 803 1013 l 803 0 "},"Α":{"x_min":0,"x_max":906.953125,"ha":985,"o":"m 906 0 l 756 0 l 650 303 l 251 303 l 143 0 l 0 0 l 376 1013 l 529 1013 l 906 0 m 609 421 l 452 866 l 293 421 l 609 421 "},"s":{"x_min":0,"x_max":604,"ha":697,"o":"m 604 217 q 501 36 604 104 q 292 -23 411 -23 q 86 43 166 -23 q 0 238 0 114 l 121 237 q 175 122 121 164 q 300 85 223 85 q 415 112 363 85 q 479 207 479 147 q 361 309 479 276 q 140 372 141 370 q 21 544 21 426 q 111 708 21 647 q 298 761 190 761 q 492 705 413 761 q 583 531 583 643 l 462 531 q 412 625 462 594 q 298 657 363 657 q 199 636 242 657 q 143 558 143 608 q 262 454 143 486 q 484 394 479 397 q 604 217 604 341 "},"B":{"x_min":0,"x_max":778,"ha":876,"o":"m 580 546 q 724 469 670 535 q 778 311 778 403 q 673 83 778 171 q 432 0 575 0 l 0 0 l 0 1013 l 411 1013 q 629 957 541 1013 q 732 768 732 892 q 691 633 732 693 q 580 546 650 572 m 393 899 l 139 899 l 139 588 l 379 588 q 521 624 462 588 q 592 744 592 667 q 531 859 592 819 q 393 899 471 899 m 419 124 q 566 169 504 124 q 635 303 635 219 q 559 436 635 389 q 402 477 494 477 l 139 477 l 139 124 l 419 124 "},"…":{"x_min":0,"x_max":614,"ha":708,"o":"m 142 0 l 0 0 l 0 151 l 142 151 l 142 0 m 378 0 l 236 0 l 236 151 l 378 151 l 378 0 m 614 0 l 472 0 l 472 151 l 614 151 l 614 0 "},"?":{"x_min":0,"x_max":607,"ha":704,"o":"m 607 777 q 543 599 607 674 q 422 474 482 537 q 357 272 357 391 l 236 272 q 297 487 236 395 q 411 619 298 490 q 474 762 474 691 q 422 885 474 838 q 301 933 371 933 q 179 880 228 933 q 124 706 124 819 l 0 706 q 94 963 0 872 q 302 1044 177 1044 q 511 973 423 1044 q 607 777 607 895 m 370 0 l 230 0 l 230 151 l 370 151 l 370 0 "},"H":{"x_min":0,"x_max":803,"ha":915,"o":"m 803 0 l 667 0 l 667 475 l 140 475 l 140 0 l 0 0 l 0 1013 l 140 1013 l 140 599 l 667 599 l 667 1013 l 803 1013 l 803 0 "},"ν":{"x_min":0,"x_max":675,"ha":761,"o":"m 675 738 l 404 0 l 272 0 l 0 738 l 133 738 l 340 147 l 541 738 l 675 738 "},"c":{"x_min":1,"x_max":701.390625,"ha":775,"o":"m 701 264 q 584 53 681 133 q 353 -26 487 -26 q 91 91 188 -26 q 1 370 1 201 q 92 645 1 537 q 353 761 190 761 q 572 688 479 761 q 690 493 666 615 l 556 493 q 487 606 545 562 q 356 650 428 650 q 186 563 246 650 q 134 372 134 487 q 188 179 134 258 q 359 88 250 88 q 492 136 437 88 q 566 264 548 185 l 701 264 "},"¶":{"x_min":0,"x_max":566.671875,"ha":678,"o":"m 21 892 l 52 892 l 98 761 l 145 892 l 176 892 l 178 741 l 157 741 l 157 867 l 108 741 l 88 741 l 40 871 l 40 741 l 21 741 l 21 892 m 308 854 l 308 731 q 252 691 308 691 q 227 691 240 691 q 207 696 213 695 l 207 712 l 253 706 q 288 733 288 706 l 288 763 q 244 741 279 741 q 193 797 193 741 q 261 860 193 860 q 287 860 273 860 q 308 854 302 855 m 288 842 l 263 843 q 213 796 213 843 q 248 756 213 756 q 288 796 288 756 l 288 842 m 566 988 l 502 988 l 502 -1 l 439 -1 l 439 988 l 317 988 l 317 -1 l 252 -1 l 252 602 q 81 653 155 602 q 0 805 0 711 q 101 989 0 918 q 309 1053 194 1053 l 566 1053 l 566 988 "},"β":{"x_min":0,"x_max":660,"ha":745,"o":"m 471 550 q 610 450 561 522 q 660 280 660 378 q 578 64 660 151 q 367 -22 497 -22 q 239 5 299 -22 q 126 82 178 32 l 126 -278 l 0 -278 l 0 593 q 54 903 0 801 q 318 1042 127 1042 q 519 964 436 1042 q 603 771 603 887 q 567 644 603 701 q 471 550 532 586 m 337 79 q 476 138 418 79 q 535 279 535 198 q 427 437 535 386 q 226 477 344 477 l 226 583 q 398 620 329 583 q 486 762 486 668 q 435 884 486 833 q 312 935 384 935 q 169 861 219 935 q 126 698 126 797 l 126 362 q 170 169 126 242 q 337 79 224 79 "},"Μ":{"x_min":0,"x_max":954,"ha":1068,"o":"m 954 0 l 819 0 l 819 868 l 537 0 l 405 0 l 128 865 l 128 0 l 0 0 l 0 1013 l 199 1013 l 472 158 l 758 1013 l 954 1013 l 954 0 "},"Ό":{"x_min":0.109375,"x_max":1120,"ha":1217,"o":"m 1120 505 q 994 132 1120 282 q 642 -29 861 -29 q 290 130 422 -29 q 167 505 167 280 q 294 883 167 730 q 650 1046 430 1046 q 999 882 868 1046 q 1120 505 1120 730 m 977 504 q 896 784 977 669 q 644 915 804 915 q 391 785 484 915 q 307 504 307 669 q 391 224 307 339 q 644 95 486 95 q 894 224 803 95 q 977 504 977 339 m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 "},"Ή":{"x_min":0,"x_max":1158,"ha":1275,"o":"m 1158 0 l 1022 0 l 1022 475 l 496 475 l 496 0 l 356 0 l 356 1012 l 496 1012 l 496 599 l 1022 599 l 1022 1012 l 1158 1012 l 1158 0 m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 "},"•":{"x_min":0,"x_max":663.890625,"ha":775,"o":"m 663 529 q 566 293 663 391 q 331 196 469 196 q 97 294 194 196 q 0 529 0 393 q 96 763 0 665 q 331 861 193 861 q 566 763 469 861 q 663 529 663 665 "},"¥":{"x_min":0.1875,"x_max":819.546875,"ha":886,"o":"m 563 561 l 697 561 l 696 487 l 520 487 l 482 416 l 482 380 l 697 380 l 695 308 l 482 308 l 482 0 l 342 0 l 342 308 l 125 308 l 125 380 l 342 380 l 342 417 l 303 487 l 125 487 l 125 561 l 258 561 l 0 1013 l 140 1013 l 411 533 l 679 1013 l 819 1013 l 563 561 "},"(":{"x_min":0,"x_max":318.0625,"ha":415,"o":"m 318 -290 l 230 -290 q 61 23 122 -142 q 0 365 0 190 q 62 712 0 540 q 230 1024 119 869 l 318 1024 q 175 705 219 853 q 125 360 125 542 q 176 22 125 187 q 318 -290 223 -127 "},"U":{"x_min":0,"x_max":796,"ha":904,"o":"m 796 393 q 681 93 796 212 q 386 -25 566 -25 q 101 95 208 -25 q 0 393 0 211 l 0 1013 l 138 1013 l 138 391 q 204 191 138 270 q 394 107 276 107 q 586 191 512 107 q 656 391 656 270 l 656 1013 l 796 1013 l 796 393 "},"γ":{"x_min":0.5,"x_max":744.953125,"ha":822,"o":"m 744 737 l 463 54 l 463 -278 l 338 -278 l 338 54 l 154 495 q 104 597 124 569 q 13 651 67 651 l 0 651 l 0 751 l 39 753 q 168 711 121 753 q 242 594 207 676 l 403 208 l 617 737 l 744 737 "},"α":{"x_min":0,"x_max":765.5625,"ha":809,"o":"m 765 -4 q 698 -14 726 -14 q 564 97 586 -14 q 466 7 525 40 q 337 -26 407 -26 q 88 98 186 -26 q 0 369 0 212 q 88 637 0 525 q 337 760 184 760 q 465 728 407 760 q 563 637 524 696 l 563 739 l 685 739 l 685 222 q 693 141 685 168 q 748 94 708 94 q 765 96 760 94 l 765 -4 m 584 371 q 531 562 584 485 q 360 653 470 653 q 192 566 254 653 q 135 379 135 489 q 186 181 135 261 q 358 84 247 84 q 528 176 465 84 q 584 371 584 260 "},"F":{"x_min":0,"x_max":683.328125,"ha":717,"o":"m 683 888 l 140 888 l 140 583 l 613 583 l 613 458 l 140 458 l 140 0 l 0 0 l 0 1013 l 683 1013 l 683 888 "},"­":{"x_min":0,"x_max":705.5625,"ha":803,"o":"m 705 334 l 0 334 l 0 410 l 705 410 l 705 334 "},":":{"x_min":0,"x_max":142,"ha":239,"o":"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 m 142 0 l 0 0 l 0 151 l 142 151 l 142 0 "},"Χ":{"x_min":0,"x_max":854.171875,"ha":935,"o":"m 854 0 l 683 0 l 423 409 l 166 0 l 0 0 l 347 519 l 18 1013 l 186 1013 l 427 637 l 675 1013 l 836 1013 l 504 521 l 854 0 "},"*":{"x_min":116,"x_max":674,"ha":792,"o":"m 674 768 l 475 713 l 610 544 l 517 477 l 394 652 l 272 478 l 178 544 l 314 713 l 116 766 l 153 876 l 341 812 l 342 1013 l 446 1013 l 446 811 l 635 874 l 674 768 "},"†":{"x_min":0,"x_max":777,"ha":835,"o":"m 458 804 l 777 804 l 777 683 l 458 683 l 458 0 l 319 0 l 319 681 l 0 683 l 0 804 l 319 804 l 319 1015 l 458 1013 l 458 804 "},"°":{"x_min":0,"x_max":347,"ha":444,"o":"m 173 802 q 43 856 91 802 q 0 977 0 905 q 45 1101 0 1049 q 173 1153 90 1153 q 303 1098 255 1153 q 347 977 347 1049 q 303 856 347 905 q 173 802 256 802 m 173 884 q 238 910 214 884 q 262 973 262 937 q 239 1038 262 1012 q 173 1064 217 1064 q 108 1037 132 1064 q 85 973 85 1010 q 108 910 85 937 q 173 884 132 884 "},"V":{"x_min":0,"x_max":862.71875,"ha":940,"o":"m 862 1013 l 505 0 l 361 0 l 0 1013 l 143 1013 l 434 165 l 718 1012 l 862 1013 "},"Ξ":{"x_min":0,"x_max":734.71875,"ha":763,"o":"m 723 889 l 9 889 l 9 1013 l 723 1013 l 723 889 m 673 463 l 61 463 l 61 589 l 673 589 l 673 463 m 734 0 l 0 0 l 0 124 l 734 124 l 734 0 "}," ":{"x_min":0,"x_max":0,"ha":853},"Ϋ":{"x_min":0.328125,"x_max":819.515625,"ha":889,"o":"m 588 1046 l 460 1046 l 460 1189 l 588 1189 l 588 1046 m 360 1046 l 232 1046 l 232 1189 l 360 1189 l 360 1046 m 819 1012 l 482 416 l 482 0 l 342 0 l 342 416 l 0 1012 l 140 1012 l 411 533 l 679 1012 l 819 1012 "},"0":{"x_min":73,"x_max":715,"ha":792,"o":"m 394 -29 q 153 129 242 -29 q 73 479 73 272 q 152 829 73 687 q 394 989 241 989 q 634 829 545 989 q 715 479 715 684 q 635 129 715 270 q 394 -29 546 -29 m 394 89 q 546 211 489 89 q 598 479 598 322 q 548 748 598 640 q 394 871 491 871 q 241 748 298 871 q 190 479 190 637 q 239 211 190 319 q 394 89 296 89 "},"”":{"x_min":0,"x_max":347,"ha":454,"o":"m 139 851 q 102 737 139 784 q 0 669 65 690 l 0 734 q 59 787 42 741 q 72 873 72 821 l 0 873 l 0 1013 l 139 1013 l 139 851 m 347 851 q 310 737 347 784 q 208 669 273 690 l 208 734 q 267 787 250 741 q 280 873 280 821 l 208 873 l 208 1013 l 347 1013 l 347 851 "},"@":{"x_min":0,"x_max":1260,"ha":1357,"o":"m 1098 -45 q 877 -160 1001 -117 q 633 -203 752 -203 q 155 -29 327 -203 q 0 360 0 127 q 176 802 0 616 q 687 1008 372 1008 q 1123 854 969 1008 q 1260 517 1260 718 q 1155 216 1260 341 q 868 82 1044 82 q 772 106 801 82 q 737 202 737 135 q 647 113 700 144 q 527 82 594 82 q 367 147 420 82 q 314 312 314 212 q 401 565 314 452 q 639 690 498 690 q 810 588 760 690 l 849 668 l 938 668 q 877 441 900 532 q 833 226 833 268 q 853 182 833 198 q 902 167 873 167 q 1088 272 1012 167 q 1159 512 1159 372 q 1051 793 1159 681 q 687 925 925 925 q 248 747 415 925 q 97 361 97 586 q 226 26 97 159 q 627 -122 370 -122 q 856 -87 737 -122 q 1061 8 976 -53 l 1098 -45 m 786 488 q 738 580 777 545 q 643 615 700 615 q 483 517 548 615 q 425 322 425 430 q 457 203 425 250 q 552 156 490 156 q 722 273 665 156 q 786 488 738 309 "},"Ί":{"x_min":0,"x_max":499,"ha":613,"o":"m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 m 499 0 l 360 0 l 360 1012 l 499 1012 l 499 0 "},"i":{"x_min":14,"x_max":136,"ha":275,"o":"m 136 873 l 14 873 l 14 1013 l 136 1013 l 136 873 m 136 0 l 14 0 l 14 737 l 136 737 l 136 0 "},"Β":{"x_min":0,"x_max":778,"ha":877,"o":"m 580 545 q 724 468 671 534 q 778 310 778 402 q 673 83 778 170 q 432 0 575 0 l 0 0 l 0 1013 l 411 1013 q 629 957 541 1013 q 732 768 732 891 q 691 632 732 692 q 580 545 650 571 m 393 899 l 139 899 l 139 587 l 379 587 q 521 623 462 587 q 592 744 592 666 q 531 859 592 819 q 393 899 471 899 m 419 124 q 566 169 504 124 q 635 302 635 219 q 559 435 635 388 q 402 476 494 476 l 139 476 l 139 124 l 419 124 "},"υ":{"x_min":0,"x_max":617,"ha":725,"o":"m 617 352 q 540 94 617 199 q 308 -24 455 -24 q 76 94 161 -24 q 0 352 0 199 l 0 739 l 126 739 l 126 355 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 355 492 257 l 492 739 l 617 739 l 617 352 "},"]":{"x_min":0,"x_max":275,"ha":372,"o":"m 275 -281 l 0 -281 l 0 -187 l 151 -187 l 151 920 l 0 920 l 0 1013 l 275 1013 l 275 -281 "},"m":{"x_min":0,"x_max":1019,"ha":1128,"o":"m 1019 0 l 897 0 l 897 454 q 860 591 897 536 q 739 660 816 660 q 613 586 659 660 q 573 436 573 522 l 573 0 l 447 0 l 447 455 q 412 591 447 535 q 294 657 372 657 q 165 586 213 657 q 122 437 122 521 l 122 0 l 0 0 l 0 738 l 117 738 l 117 640 q 202 730 150 697 q 316 763 254 763 q 437 730 381 763 q 525 642 494 697 q 621 731 559 700 q 753 763 682 763 q 943 694 867 763 q 1019 512 1019 625 l 1019 0 "},"χ":{"x_min":8.328125,"x_max":780.5625,"ha":815,"o":"m 780 -278 q 715 -294 747 -294 q 616 -257 663 -294 q 548 -175 576 -227 l 379 133 l 143 -277 l 9 -277 l 313 254 l 163 522 q 127 586 131 580 q 36 640 91 640 q 8 637 27 640 l 8 752 l 52 757 q 162 719 113 757 q 236 627 200 690 l 383 372 l 594 737 l 726 737 l 448 250 l 625 -69 q 670 -153 647 -110 q 743 -188 695 -188 q 780 -184 759 -188 l 780 -278 "},"8":{"x_min":55,"x_max":736,"ha":792,"o":"m 571 527 q 694 424 652 491 q 736 280 736 358 q 648 71 736 158 q 395 -26 551 -26 q 142 69 238 -26 q 55 279 55 157 q 96 425 55 359 q 220 527 138 491 q 120 615 153 562 q 88 726 88 668 q 171 904 88 827 q 395 986 261 986 q 618 905 529 986 q 702 727 702 830 q 670 616 702 667 q 571 527 638 565 m 394 565 q 519 610 475 565 q 563 717 563 655 q 521 823 563 781 q 392 872 474 872 q 265 824 312 872 q 224 720 224 783 q 265 613 224 656 q 394 565 312 565 m 395 91 q 545 150 488 91 q 597 280 597 204 q 546 408 597 355 q 395 465 492 465 q 244 408 299 465 q 194 280 194 356 q 244 150 194 203 q 395 91 299 91 "},"ί":{"x_min":42,"x_max":326.71875,"ha":361,"o":"m 284 3 q 233 -10 258 -5 q 182 -15 207 -15 q 85 26 119 -15 q 42 200 42 79 l 42 737 l 167 737 l 168 215 q 172 141 168 157 q 226 101 183 101 q 248 102 239 101 q 284 112 257 104 l 284 3 m 326 1040 l 137 819 l 54 819 l 189 1040 l 326 1040 "},"Ζ":{"x_min":0,"x_max":779.171875,"ha":850,"o":"m 779 0 l 0 0 l 0 113 l 620 896 l 40 896 l 40 1013 l 779 1013 l 779 887 l 170 124 l 779 124 l 779 0 "},"R":{"x_min":0,"x_max":781.953125,"ha":907,"o":"m 781 0 l 623 0 q 587 242 590 52 q 407 433 585 433 l 138 433 l 138 0 l 0 0 l 0 1013 l 396 1013 q 636 946 539 1013 q 749 731 749 868 q 711 597 749 659 q 608 502 674 534 q 718 370 696 474 q 729 207 722 352 q 781 26 736 62 l 781 0 m 373 551 q 533 594 465 551 q 614 731 614 645 q 532 859 614 815 q 373 896 465 896 l 138 896 l 138 551 l 373 551 "},"o":{"x_min":0,"x_max":713,"ha":821,"o":"m 357 -25 q 94 91 194 -25 q 0 368 0 202 q 93 642 0 533 q 357 761 193 761 q 618 644 518 761 q 713 368 713 533 q 619 91 713 201 q 357 -25 521 -25 m 357 85 q 528 175 465 85 q 584 369 584 255 q 529 562 584 484 q 357 651 467 651 q 189 560 250 651 q 135 369 135 481 q 187 177 135 257 q 357 85 250 85 "},"5":{"x_min":54.171875,"x_max":738,"ha":792,"o":"m 738 314 q 626 60 738 153 q 382 -23 526 -23 q 155 47 248 -23 q 54 256 54 125 l 183 256 q 259 132 204 174 q 382 91 314 91 q 533 149 471 91 q 602 314 602 213 q 538 469 602 411 q 386 528 475 528 q 284 506 332 528 q 197 439 237 484 l 81 439 l 159 958 l 684 958 l 684 840 l 254 840 l 214 579 q 306 627 258 612 q 407 643 354 643 q 636 552 540 643 q 738 314 738 457 "},"7":{"x_min":58.71875,"x_max":730.953125,"ha":792,"o":"m 730 839 q 469 448 560 641 q 335 0 378 255 l 192 0 q 328 441 235 252 q 593 830 421 630 l 58 830 l 58 958 l 730 958 l 730 839 "},"K":{"x_min":0,"x_max":819.46875,"ha":906,"o":"m 819 0 l 649 0 l 294 509 l 139 355 l 139 0 l 0 0 l 0 1013 l 139 1013 l 139 526 l 626 1013 l 809 1013 l 395 600 l 819 0 "},",":{"x_min":0,"x_max":142,"ha":239,"o":"m 142 -12 q 105 -132 142 -82 q 0 -205 68 -182 l 0 -138 q 57 -82 40 -124 q 70 0 70 -51 l 0 0 l 0 151 l 142 151 l 142 -12 "},"d":{"x_min":0,"x_max":683,"ha":796,"o":"m 683 0 l 564 0 l 564 93 q 456 6 516 38 q 327 -25 395 -25 q 87 100 181 -25 q 0 365 0 215 q 90 639 0 525 q 343 763 187 763 q 564 647 486 763 l 564 1013 l 683 1013 l 683 0 m 582 373 q 529 562 582 484 q 361 653 468 653 q 190 561 253 653 q 135 365 135 479 q 189 175 135 254 q 358 85 251 85 q 529 178 468 85 q 582 373 582 258 "},"¨":{"x_min":-109,"x_max":247,"ha":232,"o":"m 247 1046 l 119 1046 l 119 1189 l 247 1189 l 247 1046 m 19 1046 l -109 1046 l -109 1189 l 19 1189 l 19 1046 "},"E":{"x_min":0,"x_max":736.109375,"ha":789,"o":"m 736 0 l 0 0 l 0 1013 l 725 1013 l 725 889 l 139 889 l 139 585 l 677 585 l 677 467 l 139 467 l 139 125 l 736 125 l 736 0 "},"Y":{"x_min":0,"x_max":820,"ha":886,"o":"m 820 1013 l 482 416 l 482 0 l 342 0 l 342 416 l 0 1013 l 140 1013 l 411 534 l 679 1012 l 820 1013 "},"\"":{"x_min":0,"x_max":299,"ha":396,"o":"m 299 606 l 203 606 l 203 988 l 299 988 l 299 606 m 96 606 l 0 606 l 0 988 l 96 988 l 96 606 "},"‹":{"x_min":17.984375,"x_max":773.609375,"ha":792,"o":"m 773 40 l 18 376 l 17 465 l 773 799 l 773 692 l 159 420 l 773 149 l 773 40 "},"„":{"x_min":0,"x_max":364,"ha":467,"o":"m 141 -12 q 104 -132 141 -82 q 0 -205 67 -182 l 0 -138 q 56 -82 40 -124 q 69 0 69 -51 l 0 0 l 0 151 l 141 151 l 141 -12 m 364 -12 q 327 -132 364 -82 q 222 -205 290 -182 l 222 -138 q 279 -82 262 -124 q 292 0 292 -51 l 222 0 l 222 151 l 364 151 l 364 -12 "},"δ":{"x_min":1,"x_max":710,"ha":810,"o":"m 710 360 q 616 87 710 196 q 356 -28 518 -28 q 99 82 197 -28 q 1 356 1 192 q 100 606 1 509 q 355 703 199 703 q 180 829 288 754 q 70 903 124 866 l 70 1012 l 643 1012 l 643 901 l 258 901 q 462 763 422 794 q 636 592 577 677 q 710 360 710 485 m 584 365 q 552 501 584 447 q 451 602 521 555 q 372 611 411 611 q 197 541 258 611 q 136 355 136 472 q 190 171 136 245 q 358 85 252 85 q 528 173 465 85 q 584 365 584 252 "},"έ":{"x_min":0,"x_max":634.71875,"ha":714,"o":"m 634 234 q 527 38 634 110 q 300 -25 433 -25 q 98 29 183 -25 q 0 204 0 93 q 37 313 0 265 q 128 390 67 352 q 56 459 82 419 q 26 555 26 505 q 114 712 26 654 q 295 763 191 763 q 499 700 416 763 q 589 515 589 631 l 478 515 q 419 618 464 580 q 307 657 374 657 q 207 630 253 657 q 151 547 151 598 q 238 445 151 469 q 389 434 280 434 l 389 331 l 349 331 q 206 315 255 331 q 125 210 125 287 q 183 107 125 145 q 302 76 233 76 q 436 117 379 76 q 509 234 493 159 l 634 234 m 520 1040 l 331 819 l 248 819 l 383 1040 l 520 1040 "},"ω":{"x_min":0,"x_max":922,"ha":1031,"o":"m 922 339 q 856 97 922 203 q 650 -26 780 -26 q 538 9 587 -26 q 461 103 489 44 q 387 12 436 46 q 277 -22 339 -22 q 69 97 147 -22 q 0 339 0 203 q 45 551 0 444 q 161 738 84 643 l 302 738 q 175 553 219 647 q 124 336 124 446 q 155 179 124 249 q 275 88 197 88 q 375 163 341 88 q 400 294 400 219 l 400 572 l 524 572 l 524 294 q 561 135 524 192 q 643 88 591 88 q 762 182 719 88 q 797 342 797 257 q 745 556 797 450 q 619 738 705 638 l 760 738 q 874 551 835 640 q 922 339 922 444 "},"´":{"x_min":0,"x_max":96,"ha":251,"o":"m 96 606 l 0 606 l 0 988 l 96 988 l 96 606 "},"±":{"x_min":11,"x_max":781,"ha":792,"o":"m 781 490 l 446 490 l 446 255 l 349 255 l 349 490 l 11 490 l 11 586 l 349 586 l 349 819 l 446 819 l 446 586 l 781 586 l 781 490 m 781 21 l 11 21 l 11 115 l 781 115 l 781 21 "},"|":{"x_min":343,"x_max":449,"ha":792,"o":"m 449 462 l 343 462 l 343 986 l 449 986 l 449 462 m 449 -242 l 343 -242 l 343 280 l 449 280 l 449 -242 "},"ϋ":{"x_min":0,"x_max":617,"ha":725,"o":"m 482 800 l 372 800 l 372 925 l 482 925 l 482 800 m 239 800 l 129 800 l 129 925 l 239 925 l 239 800 m 617 352 q 540 93 617 199 q 308 -24 455 -24 q 76 93 161 -24 q 0 352 0 199 l 0 738 l 126 738 l 126 354 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 354 492 257 l 492 738 l 617 738 l 617 352 "},"§":{"x_min":0,"x_max":593,"ha":690,"o":"m 593 425 q 554 312 593 369 q 467 233 516 254 q 537 83 537 172 q 459 -74 537 -12 q 288 -133 387 -133 q 115 -69 184 -133 q 47 96 47 -6 l 166 96 q 199 7 166 40 q 288 -26 232 -26 q 371 -5 332 -26 q 420 60 420 21 q 311 201 420 139 q 108 309 210 255 q 0 490 0 383 q 33 602 0 551 q 124 687 66 654 q 75 743 93 712 q 58 812 58 773 q 133 984 58 920 q 300 1043 201 1043 q 458 987 394 1043 q 529 814 529 925 l 411 814 q 370 908 404 877 q 289 939 336 939 q 213 911 246 939 q 180 841 180 883 q 286 720 180 779 q 484 612 480 615 q 593 425 593 534 m 467 409 q 355 544 467 473 q 196 630 228 612 q 146 587 162 609 q 124 525 124 558 q 239 387 124 462 q 398 298 369 315 q 448 345 429 316 q 467 409 467 375 "},"b":{"x_min":0,"x_max":685,"ha":783,"o":"m 685 372 q 597 99 685 213 q 347 -25 501 -25 q 219 5 277 -25 q 121 93 161 36 l 121 0 l 0 0 l 0 1013 l 121 1013 l 121 634 q 214 723 157 692 q 341 754 272 754 q 591 637 493 754 q 685 372 685 526 m 554 356 q 499 550 554 470 q 328 644 437 644 q 162 556 223 644 q 108 369 108 478 q 160 176 108 256 q 330 83 221 83 q 498 169 435 83 q 554 356 554 245 "},"q":{"x_min":0,"x_max":683,"ha":876,"o":"m 683 -278 l 564 -278 l 564 97 q 474 8 533 39 q 345 -23 415 -23 q 91 93 188 -23 q 0 364 0 203 q 87 635 0 522 q 337 760 184 760 q 466 727 408 760 q 564 637 523 695 l 564 737 l 683 737 l 683 -278 m 582 375 q 527 564 582 488 q 358 652 466 652 q 190 565 253 652 q 135 377 135 488 q 189 179 135 261 q 361 84 251 84 q 530 179 469 84 q 582 375 582 260 "},"Ω":{"x_min":-0.171875,"x_max":969.5625,"ha":1068,"o":"m 969 0 l 555 0 l 555 123 q 744 308 675 194 q 814 558 814 423 q 726 812 814 709 q 484 922 633 922 q 244 820 334 922 q 154 567 154 719 q 223 316 154 433 q 412 123 292 199 l 412 0 l 0 0 l 0 124 l 217 124 q 68 327 122 210 q 15 572 15 444 q 144 911 15 781 q 484 1041 274 1041 q 822 909 691 1041 q 953 569 953 777 q 899 326 953 443 q 750 124 846 210 l 969 124 l 969 0 "},"ύ":{"x_min":0,"x_max":617,"ha":725,"o":"m 617 352 q 540 93 617 199 q 308 -24 455 -24 q 76 93 161 -24 q 0 352 0 199 l 0 738 l 126 738 l 126 354 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 354 492 257 l 492 738 l 617 738 l 617 352 m 535 1040 l 346 819 l 262 819 l 397 1040 l 535 1040 "},"z":{"x_min":-0.015625,"x_max":613.890625,"ha":697,"o":"m 613 0 l 0 0 l 0 100 l 433 630 l 20 630 l 20 738 l 594 738 l 593 636 l 163 110 l 613 110 l 613 0 "},"™":{"x_min":0,"x_max":894,"ha":1000,"o":"m 389 951 l 229 951 l 229 503 l 160 503 l 160 951 l 0 951 l 0 1011 l 389 1011 l 389 951 m 894 503 l 827 503 l 827 939 l 685 503 l 620 503 l 481 937 l 481 503 l 417 503 l 417 1011 l 517 1011 l 653 580 l 796 1010 l 894 1011 l 894 503 "},"ή":{"x_min":0.78125,"x_max":697,"ha":810,"o":"m 697 -278 l 572 -278 l 572 454 q 540 587 572 536 q 425 650 501 650 q 271 579 337 650 q 206 420 206 509 l 206 0 l 81 0 l 81 489 q 73 588 81 562 q 0 644 56 644 l 0 741 q 68 755 38 755 q 158 721 124 755 q 200 630 193 687 q 297 726 234 692 q 434 761 359 761 q 620 692 544 761 q 697 516 697 624 l 697 -278 m 479 1040 l 290 819 l 207 819 l 341 1040 l 479 1040 "},"Θ":{"x_min":0,"x_max":960,"ha":1056,"o":"m 960 507 q 833 129 960 280 q 476 -32 698 -32 q 123 129 255 -32 q 0 507 0 280 q 123 883 0 732 q 476 1045 255 1045 q 832 883 696 1045 q 960 507 960 732 m 817 500 q 733 789 817 669 q 476 924 639 924 q 223 792 317 924 q 142 507 142 675 q 222 222 142 339 q 476 89 315 89 q 730 218 636 89 q 817 500 817 334 m 716 449 l 243 449 l 243 571 l 716 571 l 716 449 "},"®":{"x_min":-3,"x_max":1008,"ha":1106,"o":"m 503 532 q 614 562 566 532 q 672 658 672 598 q 614 747 672 716 q 503 772 569 772 l 338 772 l 338 532 l 503 532 m 502 -7 q 123 151 263 -7 q -3 501 -3 294 q 123 851 -3 706 q 502 1011 263 1011 q 881 851 739 1011 q 1008 501 1008 708 q 883 151 1008 292 q 502 -7 744 -7 m 502 60 q 830 197 709 60 q 940 501 940 322 q 831 805 940 681 q 502 944 709 944 q 174 805 296 944 q 65 501 65 680 q 173 197 65 320 q 502 60 294 60 m 788 146 l 678 146 q 653 316 655 183 q 527 449 652 449 l 338 449 l 338 146 l 241 146 l 241 854 l 518 854 q 688 808 621 854 q 766 658 766 755 q 739 563 766 607 q 668 497 713 519 q 751 331 747 472 q 788 164 756 190 l 788 146 "},"~":{"x_min":0,"x_max":833,"ha":931,"o":"m 833 958 q 778 753 833 831 q 594 665 716 665 q 402 761 502 665 q 240 857 302 857 q 131 795 166 857 q 104 665 104 745 l 0 665 q 54 867 0 789 q 237 958 116 958 q 429 861 331 958 q 594 765 527 765 q 704 827 670 765 q 729 958 729 874 l 833 958 "},"Ε":{"x_min":0,"x_max":736.21875,"ha":778,"o":"m 736 0 l 0 0 l 0 1013 l 725 1013 l 725 889 l 139 889 l 139 585 l 677 585 l 677 467 l 139 467 l 139 125 l 736 125 l 736 0 "},"³":{"x_min":0,"x_max":450,"ha":547,"o":"m 450 552 q 379 413 450 464 q 220 366 313 366 q 69 414 130 366 q 0 567 0 470 l 85 567 q 126 470 85 504 q 225 437 168 437 q 320 467 280 437 q 360 552 360 498 q 318 632 360 608 q 213 657 276 657 q 195 657 203 657 q 176 657 181 657 l 176 722 q 279 733 249 722 q 334 815 334 752 q 300 881 334 856 q 220 907 267 907 q 133 875 169 907 q 97 781 97 844 l 15 781 q 78 926 15 875 q 220 972 135 972 q 364 930 303 972 q 426 817 426 888 q 344 697 426 733 q 421 642 392 681 q 450 552 450 603 "},"[":{"x_min":0,"x_max":273.609375,"ha":371,"o":"m 273 -281 l 0 -281 l 0 1013 l 273 1013 l 273 920 l 124 920 l 124 -187 l 273 -187 l 273 -281 "},"L":{"x_min":0,"x_max":645.828125,"ha":696,"o":"m 645 0 l 0 0 l 0 1013 l 140 1013 l 140 126 l 645 126 l 645 0 "},"σ":{"x_min":0,"x_max":803.390625,"ha":894,"o":"m 803 628 l 633 628 q 713 368 713 512 q 618 93 713 204 q 357 -25 518 -25 q 94 91 194 -25 q 0 368 0 201 q 94 644 0 533 q 356 761 194 761 q 481 750 398 761 q 608 739 564 739 l 803 739 l 803 628 m 360 85 q 529 180 467 85 q 584 374 584 262 q 527 566 584 490 q 352 651 463 651 q 187 559 247 651 q 135 368 135 478 q 189 175 135 254 q 360 85 251 85 "},"ζ":{"x_min":0,"x_max":573,"ha":642,"o":"m 573 -40 q 553 -162 573 -97 q 510 -278 543 -193 l 400 -278 q 441 -187 428 -219 q 462 -90 462 -132 q 378 -14 462 -14 q 108 45 197 -14 q 0 290 0 117 q 108 631 0 462 q 353 901 194 767 l 55 901 l 55 1012 l 561 1012 l 561 924 q 261 669 382 831 q 128 301 128 489 q 243 117 128 149 q 458 98 350 108 q 573 -40 573 80 "},"θ":{"x_min":0,"x_max":674,"ha":778,"o":"m 674 496 q 601 160 674 304 q 336 -26 508 -26 q 73 153 165 -26 q 0 485 0 296 q 72 840 0 683 q 343 1045 166 1045 q 605 844 516 1045 q 674 496 674 692 m 546 579 q 498 798 546 691 q 336 935 437 935 q 178 798 237 935 q 126 579 137 701 l 546 579 m 546 475 l 126 475 q 170 233 126 348 q 338 80 230 80 q 504 233 447 80 q 546 475 546 346 "},"Ο":{"x_min":0,"x_max":958,"ha":1054,"o":"m 485 1042 q 834 883 703 1042 q 958 511 958 735 q 834 136 958 287 q 481 -26 701 -26 q 126 130 261 -26 q 0 504 0 279 q 127 880 0 729 q 485 1042 263 1042 m 480 98 q 731 225 638 98 q 815 504 815 340 q 733 783 815 670 q 480 913 640 913 q 226 785 321 913 q 142 504 142 671 q 226 224 142 339 q 480 98 319 98 "},"Γ":{"x_min":0,"x_max":705.28125,"ha":749,"o":"m 705 886 l 140 886 l 140 0 l 0 0 l 0 1012 l 705 1012 l 705 886 "}," ":{"x_min":0,"x_max":0,"ha":375},"%":{"x_min":-3,"x_max":1089,"ha":1186,"o":"m 845 0 q 663 76 731 0 q 602 244 602 145 q 661 412 602 344 q 845 489 728 489 q 1027 412 959 489 q 1089 244 1089 343 q 1029 76 1089 144 q 845 0 962 0 m 844 103 q 945 143 909 103 q 981 243 981 184 q 947 340 981 301 q 844 385 909 385 q 744 342 781 385 q 708 243 708 300 q 741 147 708 186 q 844 103 780 103 m 888 986 l 284 -25 l 199 -25 l 803 986 l 888 986 m 241 468 q 58 545 126 468 q -3 715 -3 615 q 56 881 -3 813 q 238 958 124 958 q 421 881 353 958 q 483 712 483 813 q 423 544 483 612 q 241 468 356 468 m 241 855 q 137 811 175 855 q 100 710 100 768 q 136 612 100 653 q 240 572 172 572 q 344 614 306 572 q 382 713 382 656 q 347 810 382 771 q 241 855 308 855 "},"P":{"x_min":0,"x_max":726,"ha":806,"o":"m 424 1013 q 640 931 555 1013 q 726 719 726 850 q 637 506 726 587 q 413 426 548 426 l 140 426 l 140 0 l 0 0 l 0 1013 l 424 1013 m 379 889 l 140 889 l 140 548 l 372 548 q 522 589 459 548 q 593 720 593 637 q 528 845 593 801 q 379 889 463 889 "},"Έ":{"x_min":0,"x_max":1078.21875,"ha":1118,"o":"m 1078 0 l 342 0 l 342 1013 l 1067 1013 l 1067 889 l 481 889 l 481 585 l 1019 585 l 1019 467 l 481 467 l 481 125 l 1078 125 l 1078 0 m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 "},"Ώ":{"x_min":0.125,"x_max":1136.546875,"ha":1235,"o":"m 1136 0 l 722 0 l 722 123 q 911 309 842 194 q 981 558 981 423 q 893 813 981 710 q 651 923 800 923 q 411 821 501 923 q 321 568 321 720 q 390 316 321 433 q 579 123 459 200 l 579 0 l 166 0 l 166 124 l 384 124 q 235 327 289 210 q 182 572 182 444 q 311 912 182 782 q 651 1042 441 1042 q 989 910 858 1042 q 1120 569 1120 778 q 1066 326 1120 443 q 917 124 1013 210 l 1136 124 l 1136 0 m 277 1040 l 83 800 l 0 800 l 140 1041 l 277 1040 "},"_":{"x_min":0,"x_max":705.5625,"ha":803,"o":"m 705 -334 l 0 -334 l 0 -234 l 705 -234 l 705 -334 "},"Ϊ":{"x_min":-110,"x_max":246,"ha":275,"o":"m 246 1046 l 118 1046 l 118 1189 l 246 1189 l 246 1046 m 18 1046 l -110 1046 l -110 1189 l 18 1189 l 18 1046 m 136 0 l 0 0 l 0 1012 l 136 1012 l 136 0 "},"+":{"x_min":23,"x_max":768,"ha":792,"o":"m 768 372 l 444 372 l 444 0 l 347 0 l 347 372 l 23 372 l 23 468 l 347 468 l 347 840 l 444 840 l 444 468 l 768 468 l 768 372 "},"½":{"x_min":0,"x_max":1050,"ha":1149,"o":"m 1050 0 l 625 0 q 712 178 625 108 q 878 277 722 187 q 967 385 967 328 q 932 456 967 429 q 850 484 897 484 q 759 450 798 484 q 721 352 721 416 l 640 352 q 706 502 640 448 q 851 551 766 551 q 987 509 931 551 q 1050 385 1050 462 q 976 251 1050 301 q 829 179 902 215 q 717 68 740 133 l 1050 68 l 1050 0 m 834 985 l 215 -28 l 130 -28 l 750 984 l 834 985 m 224 422 l 142 422 l 142 811 l 0 811 l 0 867 q 104 889 62 867 q 164 973 157 916 l 224 973 l 224 422 "},"Ρ":{"x_min":0,"x_max":720,"ha":783,"o":"m 424 1013 q 637 933 554 1013 q 720 723 720 853 q 633 508 720 591 q 413 426 546 426 l 140 426 l 140 0 l 0 0 l 0 1013 l 424 1013 m 378 889 l 140 889 l 140 548 l 371 548 q 521 589 458 548 q 592 720 592 637 q 527 845 592 801 q 378 889 463 889 "},"'":{"x_min":0,"x_max":139,"ha":236,"o":"m 139 851 q 102 737 139 784 q 0 669 65 690 l 0 734 q 59 787 42 741 q 72 873 72 821 l 0 873 l 0 1013 l 139 1013 l 139 851 "},"ª":{"x_min":0,"x_max":350,"ha":397,"o":"m 350 625 q 307 616 328 616 q 266 631 281 616 q 247 673 251 645 q 190 628 225 644 q 116 613 156 613 q 32 641 64 613 q 0 722 0 669 q 72 826 0 800 q 247 866 159 846 l 247 887 q 220 934 247 916 q 162 953 194 953 q 104 934 129 953 q 76 882 80 915 l 16 882 q 60 976 16 941 q 166 1011 104 1011 q 266 979 224 1011 q 308 891 308 948 l 308 706 q 311 679 308 688 q 331 670 315 670 l 350 672 l 350 625 m 247 757 l 247 811 q 136 790 175 798 q 64 726 64 773 q 83 682 64 697 q 132 667 103 667 q 207 690 174 667 q 247 757 247 718 "},"΅":{"x_min":0,"x_max":450,"ha":553,"o":"m 450 800 l 340 800 l 340 925 l 450 925 l 450 800 m 406 1040 l 212 800 l 129 800 l 269 1040 l 406 1040 m 110 800 l 0 800 l 0 925 l 110 925 l 110 800 "},"T":{"x_min":0,"x_max":777,"ha":835,"o":"m 777 894 l 458 894 l 458 0 l 319 0 l 319 894 l 0 894 l 0 1013 l 777 1013 l 777 894 "},"Φ":{"x_min":0,"x_max":915,"ha":997,"o":"m 527 0 l 389 0 l 389 122 q 110 231 220 122 q 0 509 0 340 q 110 785 0 677 q 389 893 220 893 l 389 1013 l 527 1013 l 527 893 q 804 786 693 893 q 915 509 915 679 q 805 231 915 341 q 527 122 696 122 l 527 0 m 527 226 q 712 310 641 226 q 779 507 779 389 q 712 705 779 627 q 527 787 641 787 l 527 226 m 389 226 l 389 787 q 205 698 275 775 q 136 505 136 620 q 206 308 136 391 q 389 226 276 226 "},"⁋":{"x_min":0,"x_max":0,"ha":694},"j":{"x_min":-77.78125,"x_max":167,"ha":349,"o":"m 167 871 l 42 871 l 42 1013 l 167 1013 l 167 871 m 167 -80 q 121 -231 167 -184 q -26 -278 76 -278 l -77 -278 l -77 -164 l -41 -164 q 26 -143 11 -164 q 42 -65 42 -122 l 42 737 l 167 737 l 167 -80 "},"Σ":{"x_min":0,"x_max":756.953125,"ha":819,"o":"m 756 0 l 0 0 l 0 107 l 395 523 l 22 904 l 22 1013 l 745 1013 l 745 889 l 209 889 l 566 523 l 187 125 l 756 125 l 756 0 "},"1":{"x_min":215.671875,"x_max":574,"ha":792,"o":"m 574 0 l 442 0 l 442 697 l 215 697 l 215 796 q 386 833 330 796 q 475 986 447 875 l 574 986 l 574 0 "},"›":{"x_min":18.0625,"x_max":774,"ha":792,"o":"m 774 376 l 18 40 l 18 149 l 631 421 l 18 692 l 18 799 l 774 465 l 774 376 "},"<":{"x_min":17.984375,"x_max":773.609375,"ha":792,"o":"m 773 40 l 18 376 l 17 465 l 773 799 l 773 692 l 159 420 l 773 149 l 773 40 "},"£":{"x_min":0,"x_max":704.484375,"ha":801,"o":"m 704 41 q 623 -10 664 5 q 543 -26 583 -26 q 359 15 501 -26 q 243 36 288 36 q 158 23 197 36 q 73 -21 119 10 l 6 76 q 125 195 90 150 q 175 331 175 262 q 147 443 175 383 l 0 443 l 0 512 l 108 512 q 43 734 43 623 q 120 929 43 854 q 358 1010 204 1010 q 579 936 487 1010 q 678 729 678 857 l 678 684 l 552 684 q 504 838 552 780 q 362 896 457 896 q 216 852 263 896 q 176 747 176 815 q 199 627 176 697 q 248 512 217 574 l 468 512 l 468 443 l 279 443 q 297 356 297 398 q 230 194 297 279 q 153 107 211 170 q 227 133 190 125 q 293 142 264 142 q 410 119 339 142 q 516 96 482 96 q 579 105 550 96 q 648 142 608 115 l 704 41 "},"t":{"x_min":0,"x_max":367,"ha":458,"o":"m 367 0 q 312 -5 339 -2 q 262 -8 284 -8 q 145 28 183 -8 q 108 143 108 64 l 108 638 l 0 638 l 0 738 l 108 738 l 108 944 l 232 944 l 232 738 l 367 738 l 367 638 l 232 638 l 232 185 q 248 121 232 140 q 307 102 264 102 q 345 104 330 102 q 367 107 360 107 l 367 0 "},"¬":{"x_min":0,"x_max":706,"ha":803,"o":"m 706 411 l 706 158 l 630 158 l 630 335 l 0 335 l 0 411 l 706 411 "},"λ":{"x_min":0,"x_max":750,"ha":803,"o":"m 750 -7 q 679 -15 716 -15 q 538 59 591 -15 q 466 214 512 97 l 336 551 l 126 0 l 0 0 l 270 705 q 223 837 247 770 q 116 899 190 899 q 90 898 100 899 l 90 1004 q 152 1011 125 1011 q 298 938 244 1011 q 373 783 326 901 l 605 192 q 649 115 629 136 q 716 95 669 95 l 736 95 q 750 97 745 97 l 750 -7 "},"W":{"x_min":0,"x_max":1263.890625,"ha":1351,"o":"m 1263 1013 l 995 0 l 859 0 l 627 837 l 405 0 l 265 0 l 0 1013 l 136 1013 l 342 202 l 556 1013 l 701 1013 l 921 207 l 1133 1012 l 1263 1013 "},">":{"x_min":18.0625,"x_max":774,"ha":792,"o":"m 774 376 l 18 40 l 18 149 l 631 421 l 18 692 l 18 799 l 774 465 l 774 376 "},"v":{"x_min":0,"x_max":675.15625,"ha":761,"o":"m 675 738 l 404 0 l 272 0 l 0 738 l 133 737 l 340 147 l 541 737 l 675 738 "},"τ":{"x_min":0.28125,"x_max":644.5,"ha":703,"o":"m 644 628 l 382 628 l 382 179 q 388 120 382 137 q 436 91 401 91 q 474 94 447 91 q 504 97 501 97 l 504 0 q 454 -9 482 -5 q 401 -14 426 -14 q 278 67 308 -14 q 260 233 260 118 l 260 628 l 0 628 l 0 739 l 644 739 l 644 628 "},"ξ":{"x_min":0,"x_max":624.9375,"ha":699,"o":"m 624 -37 q 608 -153 624 -96 q 563 -278 593 -211 l 454 -278 q 491 -183 486 -200 q 511 -83 511 -126 q 484 -23 511 -44 q 370 1 452 1 q 323 0 354 1 q 283 -1 293 -1 q 84 76 169 -1 q 0 266 0 154 q 56 431 0 358 q 197 538 108 498 q 94 613 134 562 q 54 730 54 665 q 77 823 54 780 q 143 901 101 867 l 27 901 l 27 1012 l 576 1012 l 576 901 l 380 901 q 244 863 303 901 q 178 745 178 820 q 312 600 178 636 q 532 582 380 582 l 532 479 q 276 455 361 479 q 118 281 118 410 q 165 173 118 217 q 274 120 208 133 q 494 101 384 110 q 624 -37 624 76 "},"&":{"x_min":-3,"x_max":894.25,"ha":992,"o":"m 894 0 l 725 0 l 624 123 q 471 0 553 40 q 306 -41 390 -41 q 168 -7 231 -41 q 62 92 105 26 q 14 187 31 139 q -3 276 -3 235 q 55 433 -3 358 q 248 581 114 508 q 170 689 196 640 q 137 817 137 751 q 214 985 137 922 q 384 1041 284 1041 q 548 988 483 1041 q 622 824 622 928 q 563 666 622 739 q 431 556 516 608 l 621 326 q 649 407 639 361 q 663 493 653 426 l 781 493 q 703 229 781 352 l 894 0 m 504 818 q 468 908 504 877 q 384 940 433 940 q 293 907 331 940 q 255 818 255 875 q 289 714 255 767 q 363 628 313 678 q 477 729 446 682 q 504 818 504 771 m 556 209 l 314 499 q 179 395 223 449 q 135 283 135 341 q 146 222 135 253 q 183 158 158 192 q 333 80 241 80 q 556 209 448 80 "},"Λ":{"x_min":0,"x_max":862.5,"ha":942,"o":"m 862 0 l 719 0 l 426 847 l 143 0 l 0 0 l 356 1013 l 501 1013 l 862 0 "},"I":{"x_min":41,"x_max":180,"ha":293,"o":"m 180 0 l 41 0 l 41 1013 l 180 1013 l 180 0 "},"G":{"x_min":0,"x_max":921,"ha":1011,"o":"m 921 0 l 832 0 l 801 136 q 655 15 741 58 q 470 -28 568 -28 q 126 133 259 -28 q 0 499 0 284 q 125 881 0 731 q 486 1043 259 1043 q 763 957 647 1043 q 905 709 890 864 l 772 709 q 668 866 747 807 q 486 926 589 926 q 228 795 322 926 q 142 507 142 677 q 228 224 142 342 q 483 94 323 94 q 712 195 625 94 q 796 435 796 291 l 477 435 l 477 549 l 921 549 l 921 0 "},"ΰ":{"x_min":0,"x_max":617,"ha":725,"o":"m 524 800 l 414 800 l 414 925 l 524 925 l 524 800 m 183 800 l 73 800 l 73 925 l 183 925 l 183 800 m 617 352 q 540 93 617 199 q 308 -24 455 -24 q 76 93 161 -24 q 0 352 0 199 l 0 738 l 126 738 l 126 354 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 354 492 257 l 492 738 l 617 738 l 617 352 m 489 1040 l 300 819 l 216 819 l 351 1040 l 489 1040 "},"`":{"x_min":0,"x_max":138.890625,"ha":236,"o":"m 138 699 l 0 699 l 0 861 q 36 974 0 929 q 138 1041 72 1020 l 138 977 q 82 931 95 969 q 69 839 69 893 l 138 839 l 138 699 "},"·":{"x_min":0,"x_max":142,"ha":239,"o":"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 "},"Υ":{"x_min":0.328125,"x_max":819.515625,"ha":889,"o":"m 819 1013 l 482 416 l 482 0 l 342 0 l 342 416 l 0 1013 l 140 1013 l 411 533 l 679 1013 l 819 1013 "},"r":{"x_min":0,"x_max":355.5625,"ha":432,"o":"m 355 621 l 343 621 q 179 569 236 621 q 122 411 122 518 l 122 0 l 0 0 l 0 737 l 117 737 l 117 604 q 204 719 146 686 q 355 753 262 753 l 355 621 "},"x":{"x_min":0,"x_max":675,"ha":764,"o":"m 675 0 l 525 0 l 331 286 l 144 0 l 0 0 l 256 379 l 12 738 l 157 737 l 336 473 l 516 738 l 661 738 l 412 380 l 675 0 "},"μ":{"x_min":0,"x_max":696.609375,"ha":747,"o":"m 696 -4 q 628 -14 657 -14 q 498 97 513 -14 q 422 8 470 41 q 313 -24 374 -24 q 207 3 258 -24 q 120 80 157 31 l 120 -278 l 0 -278 l 0 738 l 124 738 l 124 343 q 165 172 124 246 q 308 82 216 82 q 451 177 402 82 q 492 358 492 254 l 492 738 l 616 738 l 616 214 q 623 136 616 160 q 673 92 636 92 q 696 95 684 92 l 696 -4 "},"h":{"x_min":0,"x_max":615,"ha":724,"o":"m 615 472 l 615 0 l 490 0 l 490 454 q 456 590 490 535 q 338 654 416 654 q 186 588 251 654 q 122 436 122 522 l 122 0 l 0 0 l 0 1013 l 122 1013 l 122 633 q 218 727 149 694 q 362 760 287 760 q 552 676 484 760 q 615 472 615 600 "},".":{"x_min":0,"x_max":142,"ha":239,"o":"m 142 0 l 0 0 l 0 151 l 142 151 l 142 0 "},"φ":{"x_min":-2,"x_max":878,"ha":974,"o":"m 496 -279 l 378 -279 l 378 -17 q 101 88 204 -17 q -2 367 -2 194 q 68 626 -2 510 q 283 758 151 758 l 283 646 q 167 537 209 626 q 133 373 133 462 q 192 177 133 254 q 378 93 259 93 l 378 758 q 445 764 426 763 q 476 765 464 765 q 765 659 653 765 q 878 377 878 553 q 771 96 878 209 q 496 -17 665 -17 l 496 -279 m 496 93 l 514 93 q 687 183 623 93 q 746 380 746 265 q 691 569 746 491 q 522 658 629 658 l 496 656 l 496 93 "},";":{"x_min":0,"x_max":142,"ha":239,"o":"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 m 142 -12 q 105 -132 142 -82 q 0 -206 68 -182 l 0 -138 q 58 -82 43 -123 q 68 0 68 -56 l 0 0 l 0 151 l 142 151 l 142 -12 "},"f":{"x_min":0,"x_max":378,"ha":472,"o":"m 378 638 l 246 638 l 246 0 l 121 0 l 121 638 l 0 638 l 0 738 l 121 738 q 137 935 121 887 q 290 1028 171 1028 q 320 1027 305 1028 q 378 1021 334 1026 l 378 908 q 323 918 346 918 q 257 870 273 918 q 246 780 246 840 l 246 738 l 378 738 l 378 638 "},"“":{"x_min":1,"x_max":348.21875,"ha":454,"o":"m 140 670 l 1 670 l 1 830 q 37 943 1 897 q 140 1011 74 990 l 140 947 q 82 900 97 940 q 68 810 68 861 l 140 810 l 140 670 m 348 670 l 209 670 l 209 830 q 245 943 209 897 q 348 1011 282 990 l 348 947 q 290 900 305 940 q 276 810 276 861 l 348 810 l 348 670 "},"A":{"x_min":0.03125,"x_max":906.953125,"ha":1008,"o":"m 906 0 l 756 0 l 648 303 l 251 303 l 142 0 l 0 0 l 376 1013 l 529 1013 l 906 0 m 610 421 l 452 867 l 293 421 l 610 421 "},"6":{"x_min":53,"x_max":739,"ha":792,"o":"m 739 312 q 633 62 739 162 q 400 -31 534 -31 q 162 78 257 -31 q 53 439 53 206 q 178 859 53 712 q 441 986 284 986 q 643 912 559 986 q 732 713 732 833 l 601 713 q 544 830 594 786 q 426 875 494 875 q 268 793 331 875 q 193 517 193 697 q 301 597 240 570 q 427 624 362 624 q 643 540 552 624 q 739 312 739 451 m 603 298 q 540 461 603 400 q 404 516 484 516 q 268 461 323 516 q 207 300 207 401 q 269 137 207 198 q 405 83 325 83 q 541 137 486 83 q 603 298 603 197 "},"‘":{"x_min":1,"x_max":139.890625,"ha":236,"o":"m 139 670 l 1 670 l 1 830 q 37 943 1 897 q 139 1011 74 990 l 139 947 q 82 900 97 940 q 68 810 68 861 l 139 810 l 139 670 "},"ϊ":{"x_min":-70,"x_max":283,"ha":361,"o":"m 283 800 l 173 800 l 173 925 l 283 925 l 283 800 m 40 800 l -70 800 l -70 925 l 40 925 l 40 800 m 283 3 q 232 -10 257 -5 q 181 -15 206 -15 q 84 26 118 -15 q 41 200 41 79 l 41 737 l 166 737 l 167 215 q 171 141 167 157 q 225 101 182 101 q 247 103 238 101 q 283 112 256 104 l 283 3 "},"π":{"x_min":-0.21875,"x_max":773.21875,"ha":857,"o":"m 773 -7 l 707 -11 q 575 40 607 -11 q 552 174 552 77 l 552 226 l 552 626 l 222 626 l 222 0 l 97 0 l 97 626 l 0 626 l 0 737 l 773 737 l 773 626 l 676 626 l 676 171 q 695 103 676 117 q 773 90 714 90 l 773 -7 "},"ά":{"x_min":0,"x_max":765.5625,"ha":809,"o":"m 765 -4 q 698 -14 726 -14 q 564 97 586 -14 q 466 7 525 40 q 337 -26 407 -26 q 88 98 186 -26 q 0 369 0 212 q 88 637 0 525 q 337 760 184 760 q 465 727 407 760 q 563 637 524 695 l 563 738 l 685 738 l 685 222 q 693 141 685 168 q 748 94 708 94 q 765 95 760 94 l 765 -4 m 584 371 q 531 562 584 485 q 360 653 470 653 q 192 566 254 653 q 135 379 135 489 q 186 181 135 261 q 358 84 247 84 q 528 176 465 84 q 584 371 584 260 m 604 1040 l 415 819 l 332 819 l 466 1040 l 604 1040 "},"O":{"x_min":0,"x_max":958,"ha":1057,"o":"m 485 1041 q 834 882 702 1041 q 958 512 958 734 q 834 136 958 287 q 481 -26 702 -26 q 126 130 261 -26 q 0 504 0 279 q 127 880 0 728 q 485 1041 263 1041 m 480 98 q 731 225 638 98 q 815 504 815 340 q 733 783 815 669 q 480 912 640 912 q 226 784 321 912 q 142 504 142 670 q 226 224 142 339 q 480 98 319 98 "},"n":{"x_min":0,"x_max":615,"ha":724,"o":"m 615 463 l 615 0 l 490 0 l 490 454 q 453 592 490 537 q 331 656 410 656 q 178 585 240 656 q 117 421 117 514 l 117 0 l 0 0 l 0 738 l 117 738 l 117 630 q 218 728 150 693 q 359 764 286 764 q 552 675 484 764 q 615 463 615 593 "},"3":{"x_min":54,"x_max":737,"ha":792,"o":"m 737 284 q 635 55 737 141 q 399 -25 541 -25 q 156 52 248 -25 q 54 308 54 140 l 185 308 q 245 147 185 202 q 395 96 302 96 q 539 140 484 96 q 602 280 602 190 q 510 429 602 390 q 324 454 451 454 l 324 565 q 487 584 441 565 q 565 719 565 617 q 515 835 565 791 q 395 879 466 879 q 255 824 307 879 q 203 661 203 769 l 78 661 q 166 909 78 822 q 387 992 250 992 q 603 921 513 992 q 701 723 701 844 q 669 607 701 656 q 578 524 637 558 q 696 434 655 499 q 737 284 737 369 "},"9":{"x_min":53,"x_max":739,"ha":792,"o":"m 739 524 q 619 94 739 241 q 362 -32 516 -32 q 150 47 242 -32 q 59 244 59 126 l 191 244 q 246 129 191 176 q 373 82 301 82 q 526 161 466 82 q 597 440 597 255 q 363 334 501 334 q 130 432 216 334 q 53 650 53 521 q 134 880 53 786 q 383 986 226 986 q 659 841 566 986 q 739 524 739 719 m 388 449 q 535 514 480 449 q 585 658 585 573 q 535 805 585 744 q 388 873 480 873 q 242 809 294 873 q 191 658 191 745 q 239 514 191 572 q 388 449 292 449 "},"l":{"x_min":41,"x_max":166,"ha":279,"o":"m 166 0 l 41 0 l 41 1013 l 166 1013 l 166 0 "},"¤":{"x_min":40.09375,"x_max":728.796875,"ha":825,"o":"m 728 304 l 649 224 l 512 363 q 383 331 458 331 q 256 363 310 331 l 119 224 l 40 304 l 177 441 q 150 553 150 493 q 184 673 150 621 l 40 818 l 119 898 l 267 749 q 321 766 291 759 q 384 773 351 773 q 447 766 417 773 q 501 749 477 759 l 649 898 l 728 818 l 585 675 q 612 618 604 648 q 621 553 621 587 q 591 441 621 491 l 728 304 m 384 682 q 280 643 318 682 q 243 551 243 604 q 279 461 243 499 q 383 423 316 423 q 487 461 449 423 q 525 553 525 500 q 490 641 525 605 q 384 682 451 682 "},"κ":{"x_min":0,"x_max":632.328125,"ha":679,"o":"m 632 0 l 482 0 l 225 384 l 124 288 l 124 0 l 0 0 l 0 738 l 124 738 l 124 446 l 433 738 l 596 738 l 312 466 l 632 0 "},"4":{"x_min":48,"x_max":742.453125,"ha":792,"o":"m 742 243 l 602 243 l 602 0 l 476 0 l 476 243 l 48 243 l 48 368 l 476 958 l 602 958 l 602 354 l 742 354 l 742 243 m 476 354 l 476 792 l 162 354 l 476 354 "},"p":{"x_min":0,"x_max":685,"ha":786,"o":"m 685 364 q 598 96 685 205 q 350 -23 504 -23 q 121 89 205 -23 l 121 -278 l 0 -278 l 0 738 l 121 738 l 121 633 q 220 726 159 691 q 351 761 280 761 q 598 636 504 761 q 685 364 685 522 m 557 371 q 501 560 557 481 q 330 651 437 651 q 162 559 223 651 q 108 366 108 479 q 162 177 108 254 q 333 87 224 87 q 502 178 441 87 q 557 371 557 258 "},"‡":{"x_min":0,"x_max":777,"ha":835,"o":"m 458 238 l 458 0 l 319 0 l 319 238 l 0 238 l 0 360 l 319 360 l 319 681 l 0 683 l 0 804 l 319 804 l 319 1015 l 458 1013 l 458 804 l 777 804 l 777 683 l 458 683 l 458 360 l 777 360 l 777 238 l 458 238 "},"ψ":{"x_min":0,"x_max":808,"ha":907,"o":"m 465 -278 l 341 -278 l 341 -15 q 87 102 180 -15 q 0 378 0 210 l 0 739 l 133 739 l 133 379 q 182 195 133 275 q 341 98 242 98 l 341 922 l 465 922 l 465 98 q 623 195 563 98 q 675 382 675 278 l 675 742 l 808 742 l 808 381 q 720 104 808 213 q 466 -13 627 -13 l 465 -278 "},"η":{"x_min":0.78125,"x_max":697,"ha":810,"o":"m 697 -278 l 572 -278 l 572 454 q 540 587 572 536 q 425 650 501 650 q 271 579 337 650 q 206 420 206 509 l 206 0 l 81 0 l 81 489 q 73 588 81 562 q 0 644 56 644 l 0 741 q 68 755 38 755 q 158 720 124 755 q 200 630 193 686 q 297 726 234 692 q 434 761 359 761 q 620 692 544 761 q 697 516 697 624 l 697 -278 "}},"cssFontWeight":"normal","ascender":1189,"underlinePosition":-100,"cssFontStyle":"normal","boundingBox":{"yMin":-334,"xMin":-111,"yMax":1189,"xMax":1672},"resolution":1000,"original_font_information":{"postscript_name":"Helvetiker-Regular","version_string":"Version 1.00 2004 initial release","vendor_url":"http://www.magenta.gr/","full_font_name":"Helvetiker","font_family_name":"Helvetiker","copyright":"Copyright (c) Μagenta ltd, 2004","description":"","trademark":"","designer":"","designer_url":"","unique_font_identifier":"Μagenta ltd:Helvetiker:22-10-104","license_url":"http://www.ellak.gr/fonts/MgOpen/license.html","license_description":"Copyright (c) 2004 by MAGENTA Ltd. All Rights Reserved.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license (\"Fonts\") and associated documentation files (the \"Font Software\"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: \r\n\r\nThe above copyright and this permission notice shall be included in all copies of one or more of the Font Software typefaces.\r\n\r\nThe Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing the word \"MgOpen\", or if the modifications are accepted for inclusion in the Font Software itself by the each appointed Administrator.\r\n\r\nThis License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the \"MgOpen\" name.\r\n\r\nThe Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. \r\n\r\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL MAGENTA OR PERSONS OR BODIES IN CHARGE OF ADMINISTRATION AND MAINTENANCE OF THE FONT SOFTWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.","manufacturer_name":"Μagenta ltd","font_sub_family_name":"Regular"},"descender":-334,"familyName":"Helvetiker","lineHeight":1522,"underlineThickness":50}); ================================================ FILE: browser/data/graphs/create-360.json ================================================ {"abs_t":176.425,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"three_scene","x":782,"y":224,"uid":"00UK6F2YJ1Jm","dyn_in":[{"type":0,"name":"0","dt":21,"array":true,"uid":"DDzcOXqI6iRM","dynamic":true,"index":0,"is_connected":true},{"type":0,"name":"1","dt":21,"array":true,"uid":"GB53e2RyZLcu","dynamic":true,"index":1}]},{"plugin":"graph","x":1008,"y":282,"uid":"bq2VD7NF4DmB","open":false,"state":{"always_update":true,"input_sids":{"WLWdrkwS3gFf":"z1KxOMnrGYf2"},"output_sids":{}},"title":"Camera Render","graph":{"uid":"uWGVHqS8Cqa7","parent_uid":"root","open":true,"nodes":[{"plugin":"three_webgl_renderer","x":676,"y":281,"uid":"qsf10FaUcxDW","open":false,"state":{"always_update":true}},{"plugin":"graph","x":424,"y":230,"uid":"Hroayz0vSwXM","open":false,"state":{"always_update":true,"input_sids":{},"output_sids":{"liwCEB5q22Mo":"8GpdZjiiiEQa"}},"title":"VR camera","graph":{"uid":"MFeJA4KxD3yv","parent_uid":"uWGVHqS8Cqa7","open":true,"nodes":[{"plugin":"three_vr_camera","x":974,"y":275,"uid":"03wW6bFqTLmA","open":false,"state":{"position":{"x":0,"y":0,"z":0},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1211,"y":294,"uid":"liwCEB5q22Mo","title":"camera","dyn_in":[{"name":"output","dt":6,"def":null,"uid":"uyyGR7LQwSEh","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"slider_float_generator","x":413,"y":185,"uid":"9wO11fjxyGFe","state":{"val":0,"min":-1,"max":1},"title":"Position X"},{"plugin":"slider_float_generator","x":413,"y":286,"uid":"m6yYmoa0DoBh","state":{"val":0,"min":-1,"max":1},"title":"Position Y"},{"plugin":"slider_float_generator","x":414,"y":387,"uid":"8KDkHtpbA7mU","state":{"val":0,"min":-2,"max":2},"title":"Position Z"},{"plugin":"vector","x":736,"y":283,"uid":"7r9opmp4EOfQ","open":false,"title":"Camera position"},{"plugin":"const_float_generator","x":772,"y":183,"uid":"mVMM95SpIE2X","state":{"val":90},"title":"FOV"}],"conns":[{"src_nuid":"03wW6bFqTLmA","dst_nuid":"liwCEB5q22Mo","src_slot":"camera","dst_slot":0,"uid":"h0Ri0uUMV2uy","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"9wO11fjxyGFe","dst_nuid":"7r9opmp4EOfQ","src_slot":"value","dst_slot":"x","uid":"tehTyxVKXZcW","src_connected":true,"dst_connected":true},{"src_nuid":"m6yYmoa0DoBh","dst_nuid":"7r9opmp4EOfQ","src_slot":"value","dst_slot":"y","uid":"BKT8KTHDLuKn","src_connected":true,"dst_connected":true},{"src_nuid":"8KDkHtpbA7mU","dst_nuid":"7r9opmp4EOfQ","src_slot":"value","dst_slot":"z","uid":"A6FEN4IZufRp","src_connected":true,"dst_connected":true},{"src_nuid":"7r9opmp4EOfQ","dst_nuid":"03wW6bFqTLmA","src_slot":"vector","dst_slot":"position","uid":"LJqOmoC8BPDd","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"camera","dt":6,"index":0,"uid":"8GpdZjiiiEQa","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"input_proxy","x":469,"y":345,"uid":"WLWdrkwS3gFf","title":"scene","dyn_out":[{"name":"input","dt":11,"uid":"i6ENeLxOTwVB","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]}],"conns":[{"src_nuid":"Hroayz0vSwXM","dst_nuid":"qsf10FaUcxDW","src_slot":0,"dst_slot":"camera","uid":"FarsJBXPrmI9","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"WLWdrkwS3gFf","dst_nuid":"qsf10FaUcxDW","src_slot":0,"dst_slot":"scene","uid":"Ce7Hq5KgXSaD","src_connected":true,"dst_connected":true,"src_dyn":true}]},"dyn_in":[{"name":"scene","dt":11,"index":0,"uid":"z1KxOMnrGYf2","dynamic":true,"type":0,"is_connected":true}]},{"plugin":"graph","x":570,"y":130,"uid":"wnpYpbex33Dg","open":false,"state":{"always_update":true,"input_sids":{"SD9yM79tQagg":"lOz0fKTfMesH"},"output_sids":{"gvKr4YJkDYuY":"mh0rTKkFm0nD"}},"title":"360 photo","graph":{"uid":"bGS6n5sMMRQQ","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1252,"y":373,"uid":"GwM8FP5MBSmp","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1438,"y":405,"uid":"gvKr4YJkDYuY","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_material","x":974,"y":130,"uid":"WhHdndkrhvgM"},{"plugin":"const_float_generator","x":723,"y":214,"uid":"FhGU4AVerbsG","state":{"val":1},"title":"Side"},{"plugin":"three_uv_modifier","x":553,"y":87,"uid":"M4Vd8umeJT4D"},{"plugin":"const_float_generator","x":297,"y":197,"uid":"k37EVAuHVpru","state":{"val":-1},"title":"X repeat photo"},{"plugin":"input_proxy","x":321,"y":122,"uid":"SD9yM79tQagg","title":"texture","dyn_out":[{"name":"input","dt":2,"uid":"q2TtZnBOutlf","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_geometry_sphere","x":939,"y":467,"uid":"njf8DxW9mDNM"},{"plugin":"const_float_generator","x":670,"y":421,"uid":"VMPPPeAxneNP","state":{"val":30},"title":"Radius"},{"plugin":"const_float_generator","x":676,"y":502,"uid":"CCkHwQSXU2wb","state":{"val":40},"title":"Width Segments"},{"plugin":"const_float_generator","x":678,"y":584,"uid":"t9GQgsE6qKcv","state":{"val":40},"title":"Height Segments"},{"plugin":"toggle_button","x":724,"y":292,"uid":"tDNLkWwrWMgK","state":{"enabled":false},"title":"Fog"}],"conns":[{"src_nuid":"GwM8FP5MBSmp","dst_nuid":"gvKr4YJkDYuY","src_slot":"object3d","dst_slot":0,"uid":"5CBzvmnuqW5K","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"WhHdndkrhvgM","dst_nuid":"GwM8FP5MBSmp","src_slot":"material","dst_slot":"material","uid":"zpMuEXUxsz6Y","src_connected":true,"dst_connected":true},{"src_nuid":"FhGU4AVerbsG","dst_nuid":"WhHdndkrhvgM","src_slot":"value","dst_slot":"side","uid":"95yfrvTKjaFg","src_connected":true,"dst_connected":true},{"src_nuid":"M4Vd8umeJT4D","dst_nuid":"WhHdndkrhvgM","src_slot":"texture","dst_slot":"texture","uid":"4jcu4Q2REXGL","src_connected":true,"dst_connected":true},{"src_nuid":"k37EVAuHVpru","dst_nuid":"M4Vd8umeJT4D","src_slot":"value","dst_slot":"u repeat","uid":"guYrCuvu7LrP","src_connected":true,"dst_connected":true},{"src_nuid":"SD9yM79tQagg","dst_nuid":"M4Vd8umeJT4D","src_slot":0,"dst_slot":"texture","uid":"pA4PHmjSZsyt","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"VMPPPeAxneNP","dst_nuid":"njf8DxW9mDNM","src_slot":"value","dst_slot":"radius","uid":"CcKEu3vaJj28","src_connected":true,"dst_connected":true},{"src_nuid":"CCkHwQSXU2wb","dst_nuid":"njf8DxW9mDNM","src_slot":"value","dst_slot":"widthSegments","uid":"MvbBCGVMmLAp","src_connected":true,"dst_connected":true},{"src_nuid":"t9GQgsE6qKcv","dst_nuid":"njf8DxW9mDNM","src_slot":"value","dst_slot":"heightSegments","uid":"mUs8e8U3CPQp","src_connected":true,"dst_connected":true},{"src_nuid":"njf8DxW9mDNM","dst_nuid":"GwM8FP5MBSmp","src_slot":"geometry","dst_slot":"geometry","uid":"AXtfFzpYuLTW","src_connected":true,"dst_connected":true},{"src_nuid":"tDNLkWwrWMgK","dst_nuid":"WhHdndkrhvgM","src_slot":"bool","dst_slot":"fog","uid":"aXfSUJK7Gdhm","src_connected":true,"dst_connected":true}]},"dyn_in":[{"name":"texture","dt":2,"index":0,"uid":"lOz0fKTfMesH","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"url_texture_generator","x":333,"y":131,"uid":"7KLN6RS39D5P","state":{"url":"/data/image/40ccadce098f8bf871aabbf66b94997890e94cad.png"}}],"conns":[{"src_nuid":"00UK6F2YJ1Jm","dst_nuid":"bq2VD7NF4DmB","src_slot":"scene","dst_slot":0,"uid":"OhE7E2jFDGuE","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"7KLN6RS39D5P","dst_nuid":"wnpYpbex33Dg","src_slot":"texture","dst_slot":0,"uid":"jaypKy3vmxK5","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"wnpYpbex33Dg","dst_nuid":"00UK6F2YJ1Jm","src_slot":0,"dst_slot":0,"uid":"xJc4PnPU9a43","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true}]}} ================================================ FILE: browser/data/graphs/default.json ================================================ {"abs_t":0.0,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":1351,"y":399,"uid":"GKCJDXV2557h","open":false,"state":{"always_update":true,"input_sids":{"FMcyzwxMutQ2":"lbU7hDvbnKfg"},"output_sids":{}},"title":"Camera","graph":{"uid":"CM3ZPJd42DXF","parent_uid":"root","open":true,"nodes":[{"plugin":"input_proxy","x":366,"y":441,"uid":"FMcyzwxMutQ2","title":"scene","dyn_out":[{"name":"input","dt":11,"uid":"uGHXM4cdeVb3","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_webgl_renderer","x":992,"y":257,"uid":"cNNpqQUaRrXL","state":{"always_update":true}},{"plugin":"graph","x":330,"y":298,"uid":"RtQdDec2QYjV","state":{"always_update":true,"input_sids":{},"output_sids":{"YaKvTqujhzz4":"8GpdZjiiiEQa"}},"title":"VR camera","graph":{"uid":"TaKt97xAYuU9","parent_uid":"CM3ZPJd42DXF","open":true,"nodes":[{"plugin":"three_vr_camera","x":536,"y":212,"uid":"pyUEv2XXrbau","state":{"position":{"x":0.0,"y":0.0,"z":3},"quaternion":{"_x":0.0,"_y":0.0,"_z":0.0,"_w":1}}},{"plugin":"output_proxy","x":787,"y":213,"uid":"YaKvTqujhzz4","title":"camera","dyn_in":[{"name":"output","dt":6,"def":null,"uid":"uyyGR7LQwSEh","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]}],"conns":[{"src_nuid":"pyUEv2XXrbau","dst_nuid":"YaKvTqujhzz4","src_slot":"camera","dst_slot":0,"uid":"wwcTdM5ynNXx","dst_dyn":true}]},"dyn_out":[{"name":"camera","dt":6,"index":0,"uid":"8GpdZjiiiEQa","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"three_gaze_clicker","x":530,"y":383,"uid":"GapUv39SvFCK","state":{}},{"plugin":"toggle_button","x":791,"y":376,"uid":"9S76s344PzLC","open":false,"state":{"enabled":true},"title":"Shadows on"}],"conns":[{"src_nuid":"RtQdDec2QYjV","dst_nuid":"cNNpqQUaRrXL","src_slot":0,"dst_slot":"camera","uid":"KVhCVJEf3aDx","src_dyn":true},{"src_nuid":"RtQdDec2QYjV","dst_nuid":"GapUv39SvFCK","src_slot":0,"dst_slot":"camera","uid":"SEaBb88BvVBk","src_dyn":true},{"src_nuid":"FMcyzwxMutQ2","dst_nuid":"GapUv39SvFCK","src_slot":0,"dst_slot":"scene","uid":"yfun7WkqrWqV","src_dyn":true},{"src_nuid":"GapUv39SvFCK","dst_nuid":"cNNpqQUaRrXL","src_slot":"scene","dst_slot":"scene","uid":"zbCDXdmCu3Fv"},{"src_nuid":"9S76s344PzLC","dst_nuid":"cNNpqQUaRrXL","src_slot":"bool","dst_slot":"shadowsEnabled","uid":"b6Ew8t87ynjL"}]},"dyn_in":[{"name":"scene","dt":11,"index":0,"uid":"lbU7hDvbnKfg","dynamic":true,"type":0,"is_connected":true}]},{"plugin":"graph","x":899,"y":279,"uid":"gGw2wjkkNcZr","open":false,"state":{"always_update":true,"input_sids":{},"output_sids":{"sEjMwSPqVFKn":"W3smJjpMU8x6","5UWkvGtKHZMQ":"YLQ7aDrGGMXS"}},"title":"Sky","graph":{"uid":"QNf3hjswwyQa","parent_uid":"root","open":true,"nodes":[{"plugin":"three_environment_settings","x":898,"y":559,"uid":"6aMajKkzBEsn","state":{},"title":"Fog settings"},{"plugin":"color_picker","x":337,"y":74,"uid":"bWparLDbpKqm","state":{"hue":0.47191067415730337,"sat":0.23600000000000002,"lum":1},"title":"Sky and Fog Color"},{"plugin":"slider_float_generator","x":627,"y":464,"uid":"ezsRLhD3nuhr","state":{"val":0.1,"min":0.1,"max":40},"title":"Fog near"},{"plugin":"slider_float_generator","x":624,"y":574,"uid":"3zQdeStvZKD6","state":{"val":76.62,"min":1,"max":200},"title":"Fog far"},{"plugin":"entity","x":600,"y":198,"uid":"GnP3EqDAZDjd","state":{"always_update":true,"input_sids":{"dCCgUsUnptyR":"J6FCvd7jCCh9","rD2fSL9cxhD6":"dUVuVcE5KHpv"},"output_sids":{"487z7QL3NTHK":"mh0rTKkFm0nD"}},"title":"Sky settings","graph":{"uid":"gnk7PdzWSt3r","parent_uid":"QNf3hjswwyQa","open":true,"nodes":[{"plugin":"three_mesh","x":967,"y":294,"uid":"tm5ux6DBsr84","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1166,"y":295,"uid":"487z7QL3NTHK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_material","x":747,"y":62,"uid":"38HMD9C2Hs8F","state":{}},{"plugin":"const_float_generator","x":470,"y":234,"uid":"Zs34XH5J7MBC","open":false,"state":{"val":1},"title":"Side"},{"plugin":"toggle_button","x":431,"y":172,"uid":"29rXv8RLWtYB","open":false,"state":{"enabled":false},"title":"Fog On/Off"},{"plugin":"const_float_generator","x":356,"y":365,"uid":"sraW5fMgyEY7","open":false,"state":{"val":750},"title":"Size"},{"plugin":"const_float_generator","x":356,"y":438,"uid":"ryKFQHDbH5PU","open":false,"state":{"val":40},"title":"Detail"},{"plugin":"three_geometry_sphere","x":623,"y":412,"uid":"aqM9Hz4WzmUq","open":false},{"plugin":"input_proxy","x":452,"y":82,"uid":"dCCgUsUnptyR","title":"Texture","dyn_out":[{"name":"input","dt":2,"uid":"tJGWHfug2jGf","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":447,"y":133,"uid":"rD2fSL9cxhD6","title":"Color","dyn_out":[{"name":"input","dt":3,"uid":"C2fAuEx8Qj2S","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]}],"conns":[{"src_nuid":"tm5ux6DBsr84","dst_nuid":"487z7QL3NTHK","src_slot":"object3d","dst_slot":0,"uid":"2zNpdYsheZyx","dst_dyn":true},{"src_nuid":"38HMD9C2Hs8F","dst_nuid":"tm5ux6DBsr84","src_slot":"material","dst_slot":"material","uid":"PKyCn2K7daKD"},{"src_nuid":"sraW5fMgyEY7","dst_nuid":"aqM9Hz4WzmUq","src_slot":"value","dst_slot":"radius","uid":"Yp6t2CrYsebS"},{"src_nuid":"ryKFQHDbH5PU","dst_nuid":"aqM9Hz4WzmUq","src_slot":"value","dst_slot":"widthSegments","uid":"cg4YngDgNUjM"},{"src_nuid":"ryKFQHDbH5PU","dst_nuid":"aqM9Hz4WzmUq","src_slot":"value","dst_slot":"heightSegments","uid":"wJ9aXwNZYuU7"},{"src_nuid":"dCCgUsUnptyR","dst_nuid":"38HMD9C2Hs8F","src_slot":0,"dst_slot":"texture","uid":"R22pNG6aMubg","src_dyn":true},{"src_nuid":"29rXv8RLWtYB","dst_nuid":"38HMD9C2Hs8F","src_slot":"bool","dst_slot":"fog","uid":"CpQ8buBcCG3b"},{"src_nuid":"aqM9Hz4WzmUq","dst_nuid":"tm5ux6DBsr84","src_slot":"geometry","dst_slot":"geometry","uid":"mq8gFbK4FVAv"},{"src_nuid":"Zs34XH5J7MBC","dst_nuid":"38HMD9C2Hs8F","src_slot":"value","dst_slot":"side","uid":"7JnWV5UTFfwn"},{"src_nuid":"rD2fSL9cxhD6","dst_nuid":"38HMD9C2Hs8F","src_slot":0,"dst_slot":"color","uid":"8VvqHuQJNkLg","src_dyn":true}]},"dyn_in":[{"name":"Color","dt":3,"index":0,"uid":"dUVuVcE5KHpv","dynamic":true,"type":0,"is_connected":true},{"name":"Texture","dt":2,"index":1,"uid":"J6FCvd7jCCh9","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"url_texture_generator","x":334,"y":575,"uid":"YmLMVW2QfK9Z","state":{"url":"/data/image/e1450576b103ce792bba386c0301d0124f20da15.png"},"title":"Sky texture"},{"plugin":"output_proxy","x":1145,"y":420,"uid":"sEjMwSPqVFKn","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"Ls8p63cchBbJ","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"annotation","x":881,"y":260,"uid":"5FKAhCQV8JnF","state":{"text":"Connect the Sky texture\ninto the texture slot\nif you want a texture instead \nof color for your sky. \n\nUse the Fog near & Far \nto adjust the distance\n fog effect","width":160,"height":144},"title":"Sky & Fog"},{"plugin":"output_proxy","x":1141,"y":556,"uid":"5UWkvGtKHZMQ","title":"environment","dyn_in":[{"name":"output","dt":23,"def":null,"uid":"Yy89wKzOcZo4","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]}],"conns":[{"src_nuid":"ezsRLhD3nuhr","dst_nuid":"6aMajKkzBEsn","src_slot":"value","dst_slot":"fog near","uid":"j6AZF6fwswAQ"},{"src_nuid":"3zQdeStvZKD6","dst_nuid":"6aMajKkzBEsn","src_slot":"value","dst_slot":"fog far","uid":"QECKtUeMeRzf"},{"src_nuid":"GnP3EqDAZDjd","dst_nuid":"sEjMwSPqVFKn","src_slot":0,"dst_slot":0,"uid":"tyTEy6kYyZms","src_dyn":true,"dst_dyn":true},{"src_nuid":"6aMajKkzBEsn","dst_nuid":"5UWkvGtKHZMQ","src_slot":"environment","dst_slot":0,"uid":"R88M83x4nTbj","dst_dyn":true},{"src_nuid":"YmLMVW2QfK9Z","dst_nuid":"GnP3EqDAZDjd","src_slot":"texture","dst_slot":1,"uid":"t3Yfm2muaxM6","dst_dyn":true},{"src_nuid":"bWparLDbpKqm","dst_nuid":"GnP3EqDAZDjd","src_slot":"color","dst_slot":0,"uid":"uchABqWHc4Ht","dst_dyn":true},{"src_nuid":"bWparLDbpKqm","dst_nuid":"6aMajKkzBEsn","src_slot":"color","dst_slot":"fog color","uid":"xmfjjGeK359d"}]},"dyn_out":[{"name":"environment","dt":23,"index":0,"uid":"YLQ7aDrGGMXS","dynamic":true,"type":1,"is_connected":true},{"name":"object3d","dt":21,"index":1,"uid":"W3smJjpMU8x6","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"entity","x":893,"y":471,"uid":"3USmS2Z9TjT4","state":{"always_update":true,"input_sids":{},"output_sids":{"bzAtN4u4hmgG":"Ys30r7aVEks1"}},"title":"Backgound pillars","graph":{"uid":"DfsTtHhphd24","parent_uid":"root","open":true,"nodes":[{"plugin":"three_loader_model","x":907,"y":297,"uid":"A4dZ9RRevLuB","state":{"url":"/data/edelblut/assets/scene/Withoutrock/Withoutrock.obj"}},{"plugin":"three_mesh","x":1132,"y":266,"uid":"A3KKYCgwsfxc","state":{"position":{"x":-0.7388736918693957,"y":-3.5663631225742254,"z":-1.8983084867173656},"scale":{"x":0.16758118521039947,"y":0.16758118521039947,"z":0.16758118521039947},"quaternion":{"_x":0,"_y":0.8232873197514973,"_z":0,"_w":0.5676248665592408}}},{"plugin":"output_proxy","x":1295,"y":265,"uid":"bzAtN4u4hmgG","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_material_phong","x":732,"y":418,"uid":"RuqDaQzXUqWe","open":false,"state":{}},{"plugin":"url_texture_generator","x":507,"y":419,"uid":"3UaQcKp33bqs","state":{"url":"/data/image/404ff6790d55c6604147416956c5454cbbcf56cb.png"}},{"plugin":"toggle_button","x":930,"y":484,"uid":"SaYKJ38CfxF9","state":{"enabled":false},"title":"Cast Shadows"},{"plugin":"toggle_button","x":928,"y":570,"uid":"d3EJg6RwZGVX","state":{"enabled":true},"title":"Receive Shadows"},{"plugin":"const_float_generator","x":727,"y":508,"uid":"SZ5HYKtEU2Qe","state":{"val":0},"title":"Shine"}],"conns":[{"src_nuid":"A3KKYCgwsfxc","dst_nuid":"bzAtN4u4hmgG","src_slot":"object3d","dst_slot":0,"uid":"PpEWqha4gbED","dst_dyn":true},{"src_nuid":"RuqDaQzXUqWe","dst_nuid":"A3KKYCgwsfxc","src_slot":"material","dst_slot":"material","uid":"WrME6Y2n7mUt"},{"src_nuid":"3UaQcKp33bqs","dst_nuid":"RuqDaQzXUqWe","src_slot":"texture","dst_slot":"texture","uid":"s7jjupzafByx"},{"src_nuid":"A4dZ9RRevLuB","dst_nuid":"A3KKYCgwsfxc","src_slot":"geometry","dst_slot":"geometry","uid":"7xv9VShmbhFZ"},{"src_nuid":"SaYKJ38CfxF9","dst_nuid":"A3KKYCgwsfxc","src_slot":"bool","dst_slot":"castShadow","uid":"z7sNzDbbPnyV"},{"src_nuid":"d3EJg6RwZGVX","dst_nuid":"A3KKYCgwsfxc","src_slot":"bool","dst_slot":"receiveShadow","uid":"mKfBMScCy7Gb"},{"src_nuid":"SZ5HYKtEU2Qe","dst_nuid":"RuqDaQzXUqWe","src_slot":"value","dst_slot":"shininess","uid":"WefRLvcSTwGH"}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"three_scene","x":1182,"y":401,"uid":"qwBLZESbz9QG","title":"Scene 1","dyn_in":[{"type":0,"name":"0","dt":21,"array":true,"uid":"DDzcOXqI6iRM","dynamic":true,"index":0,"is_connected":true},{"type":0,"name":"1","dt":21,"array":true,"uid":"gH5pmBKZK4lm","dynamic":true,"index":1,"is_connected":true},{"type":0,"name":"2","dt":21,"array":true,"uid":"ExPIjji5rvFO","dynamic":true,"index":2,"is_connected":true},{"type":0,"name":"3","dt":21,"array":true,"uid":"hddJID3FkB4R","dynamic":true,"index":3,"is_connected":true},{"type":0,"name":"4","dt":21,"array":true,"uid":"uwvnEM7yqjQ6","dynamic":true,"index":4}]},{"plugin":"entity","x":887,"y":381,"uid":"95z94xDTMQTL","state":{"always_update":true,"input_sids":{"RqPVBpez7TpG":"4gkNUaXKYNKw"},"output_sids":{"sCjDHfaR5eff":"Ys30r7aVEks1"}},"title":"Clouds","graph":{"uid":"d6MXjfBhKsp2","parent_uid":"root","open":true,"nodes":[{"plugin":"three_loader_model","x":321,"y":234,"uid":"8uWqxGJad5pV","state":{"url":"/data/edelblut/assets/scene/C_01/C_01.obj"}},{"plugin":"three_mesh","x":687,"y":203,"uid":"2475atgxu4qa","state":{"position":{"x":0,"y":7.0659139885435245,"z":0},"scale":{"x":0.10623163703322665,"y":0.10623163703322665,"z":0.10623163703322665},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":883,"y":205,"uid":"sCjDHfaR5eff","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":302,"y":366,"uid":"RqPVBpez7TpG","title":"Rotate","dyn_out":[{"name":"input","dt":0,"uid":"M55DSdUurwVz","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"vector","x":455,"y":360,"uid":"MrLVC4XfqqaV","open":false}],"conns":[{"src_nuid":"8uWqxGJad5pV","dst_nuid":"2475atgxu4qa","src_slot":"geometry","dst_slot":"geometry","uid":"3BWYgsYsbSWg"},{"src_nuid":"2475atgxu4qa","dst_nuid":"sCjDHfaR5eff","src_slot":"object3d","dst_slot":0,"uid":"X6vcAn96L6B8","dst_dyn":true},{"src_nuid":"8uWqxGJad5pV","dst_nuid":"2475atgxu4qa","src_slot":"materials","dst_slot":"material","uid":"edK9N6FaBxkm"},{"src_nuid":"MrLVC4XfqqaV","dst_nuid":"2475atgxu4qa","src_slot":"vector","dst_slot":"rotation","uid":"AaQ3PsGEMhAZ"},{"src_nuid":"RqPVBpez7TpG","dst_nuid":"MrLVC4XfqqaV","src_slot":0,"dst_slot":"y","uid":"sfcSycseQ5As","src_dyn":true}]},"dyn_in":[{"name":"Rotate","dt":0,"index":0,"uid":"4gkNUaXKYNKw","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"entity","x":895,"y":324,"uid":"434UYP5QRpYc","open":false,"state":{"always_update":true,"input_sids":{},"output_sids":{"p4Z37zgTVqBy":"tyqbqNA94pKm"}},"title":"Lighting","graph":{"uid":"bNc9yEHShDGz","parent_uid":"root","open":true,"nodes":[{"plugin":"three_directional_light","x":983,"y":150,"uid":"F7fd7yqdDxZU","state":{"position":{"x":-9.288166274248708,"y":3.1784032347933744,"z":-4.282165062828277},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0.4341264123549172,"_w":0.9008519623644322}},"title":"Directional Light"},{"plugin":"three_hemisphere_light","x":1271,"y":534,"uid":"bS8hhEw3wWED","state":{"position":{"x":2.0581831733658964,"y":3.768965627596401,"z":0.7217360648666267},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}},"title":"Hemisphere Light"},{"plugin":"color_picker","x":720,"y":239,"uid":"EhddnUnBCJEu","state":{"hue":0.8314540449438202,"sat":0.14606741573033707,"lum":0.9833333333333333},"title":"D Light Color"},{"plugin":"slider_float_generator","x":723,"y":127,"uid":"VmM4sugZzDKH","state":{"val":0.74,"min":0,"max":1},"title":"D Intensity"},{"plugin":"color_picker","x":727,"y":645,"uid":"e8EZx5buQ7kQ","state":{"hue":0.8426897752808988,"sat":0,"lum":1},"title":"Sky Color"},{"plugin":"slider_float_generator","x":722,"y":521,"uid":"WCP6dXVNYfv9","state":{"val":0.8,"min":0,"max":1},"title":"Hemi Intensity"},{"plugin":"color_picker","x":954,"y":647,"uid":"pNs2VjqPx3xh","state":{"hue":0.8876326966292135,"sat":1,"lum":0},"title":"Ground Color"},{"plugin":"annotation","x":1208,"y":160,"uid":"NhZDfCTjQJXj","state":{"text":"There are two lights in this patch. \n\nDirectional Light\nThis is what casts the shadows, so adjust this light and its intensity and position to shape your shadows. But it is quite heavy on your GPU so use it with care. Its icon has a line indicating its direction.\n\nHemisphere Light\nThis light imitates ambient and surface bounced light, so it has a colour emitted from the sky and one bounced from the ground. You can set both of these and overall intensity.","width":222,"height":255},"title":"Lighting Patch"},{"plugin":"inputs_to_array","x":1740,"y":361,"uid":"kPLZRQ8FSyTA","open":false,"title":"Lights Array","dyn_in":[{"name":"0","dt":21,"array":true,"uid":"9JzPXguyL43x","dynamic":true,"type":0,"index":0,"is_connected":true},{"type":0,"name":"1","dt":21,"array":true,"uid":"H4BtMFq7rwyS","dynamic":true,"index":1,"is_connected":true},{"type":0,"name":"2","dt":21,"array":true,"uid":"pezuTz2wPd68","dynamic":true,"index":2}]},{"plugin":"output_proxy","x":1930,"y":363,"uid":"p4Z37zgTVqBy","title":"lights","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"mPMEnQ86J3zZ","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true,"array":true}]}],"conns":[{"src_nuid":"EhddnUnBCJEu","dst_nuid":"F7fd7yqdDxZU","src_slot":"color","dst_slot":"color","uid":"5ggxCcjw3BzV"},{"src_nuid":"VmM4sugZzDKH","dst_nuid":"F7fd7yqdDxZU","src_slot":"value","dst_slot":"intensity","uid":"rHawTeYg7BAa"},{"src_nuid":"e8EZx5buQ7kQ","dst_nuid":"bS8hhEw3wWED","src_slot":"color","dst_slot":"color","uid":"qTpantVRZ3h9"},{"src_nuid":"WCP6dXVNYfv9","dst_nuid":"bS8hhEw3wWED","src_slot":"value","dst_slot":"intensity","uid":"mjweqcu8q7L8"},{"src_nuid":"pNs2VjqPx3xh","dst_nuid":"bS8hhEw3wWED","src_slot":"color","dst_slot":"groundColor","uid":"3cHd7SmzNpb4"},{"src_nuid":"F7fd7yqdDxZU","dst_nuid":"kPLZRQ8FSyTA","src_slot":"object3d","dst_slot":0,"uid":"YwxaUuRYZ62q","dst_dyn":true},{"src_nuid":"bS8hhEw3wWED","dst_nuid":"kPLZRQ8FSyTA","src_slot":"object3d","dst_slot":1,"uid":"3ETJtAXfbcZ3","dst_dyn":true},{"src_nuid":"kPLZRQ8FSyTA","dst_nuid":"p4Z37zgTVqBy","src_slot":"array","dst_slot":0,"uid":"ELNUNCyD3x4p","dst_dyn":true}]},"dyn_out":[{"name":"lights","dt":21,"index":0,"uid":"tyqbqNA94pKm","dynamic":true,"type":1,"array":true,"is_connected":true}]},{"plugin":"graph","x":710,"y":407,"uid":"FHqdKXKGuJug","open":false,"state":{"always_update":true,"input_sids":{"pn9v8mdVDRJb":"1"},"output_sids":{"vwP6masnnFRp":"0"}},"title":"Rotate","graph":{"uid":"ytgWgLWhuNS8","parent_uid":"root","open":true,"nodes":[{"plugin":"delta_t_generator","x":234,"y":203,"uid":"tGD2KcPbwLGN"},{"plugin":"multiply_modulator","x":359,"y":193,"uid":"YVQxnXrkpP2Z"},{"plugin":"output_proxy","x":885,"y":248,"uid":"vwP6masnnFRp","title":"time","dyn_in":[{"name":"input","dt":0,"uid":"0","index":0,"type":0,"connected":true,"is_connected":true,"dynamic":true}]},{"plugin":"input_proxy","x":250,"y":262,"uid":"pn9v8mdVDRJb","title":"Speed","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_read","x":376,"y":310,"uid":"SNqTeYk32aaC","title":"float","dyn_out":[{"name":"value","dt":0,"uid":"0","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_write","x":793,"y":166,"uid":"NxT3ndDyJ5Hr","title":"float","dyn_in":[{"name":"value","dt":0,"uid":"0","index":0,"type":0,"is_connected":true,"dynamic":true}]},{"plugin":"add_modulator","x":484,"y":223,"uid":"Gf45aL7qWMus"},{"plugin":"if_else_modulator","x":656,"y":248,"uid":"84aScYek7xJT"},{"plugin":"const_float_generator","x":488,"y":351,"uid":"hTab5GpVgXPc","state":{"val":0},"title":"Reset"},{"plugin":"initialise_generator","x":520,"y":160,"uid":"apCMNRgfgNK4"}],"conns":[{"src_nuid":"tGD2KcPbwLGN","dst_nuid":"YVQxnXrkpP2Z","src_slot":"seconds","dst_slot":"a","uid":"j88Js4gqWqQW"},{"src_nuid":"pn9v8mdVDRJb","dst_nuid":"YVQxnXrkpP2Z","src_slot":0,"dst_slot":"b","uid":"G9fvCKApsd9F","src_dyn":true},{"src_nuid":"apCMNRgfgNK4","dst_nuid":"84aScYek7xJT","src_slot":"bool","dst_slot":"condition","uid":"g5NjwSU2EzKR"},{"src_nuid":"SNqTeYk32aaC","dst_nuid":"Gf45aL7qWMus","src_slot":0,"dst_slot":"b","uid":"Zx9XyXs43LfG","src_dyn":true},{"src_nuid":"YVQxnXrkpP2Z","dst_nuid":"Gf45aL7qWMus","src_slot":"result","dst_slot":"a","uid":"xZAtRsCpuGWr"},{"src_nuid":"Gf45aL7qWMus","dst_nuid":"84aScYek7xJT","src_slot":"result","dst_slot":"false value","uid":"nQfMs49dYa9v"},{"src_nuid":"hTab5GpVgXPc","dst_nuid":"84aScYek7xJT","src_slot":"value","dst_slot":"true value","uid":"ApdLWBjJjJgM"},{"src_nuid":"84aScYek7xJT","dst_nuid":"NxT3ndDyJ5Hr","src_slot":"value","dst_slot":0,"uid":"2SLvN9TECtZ2","dst_dyn":true},{"src_nuid":"84aScYek7xJT","dst_nuid":"vwP6masnnFRp","src_slot":"value","dst_slot":0,"uid":"Nk4kMQd2DVa5","dst_dyn":true,"offset":1}],"variables":[{"id":"float","dt":0}]},"dyn_in":[{"name":"Speed","dt":0,"uid":"1","index":0,"type":0,"is_connected":true,"dynamic":true}],"dyn_out":[{"name":"time","dt":0,"uid":"0","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"slider_float_generator","x":495,"y":407,"uid":"GkJ3XpU3AzWN","state":{"val":-0.0229,"min":-0.2,"max":0.2},"title":"Speed"}],"conns":[{"src_nuid":"qwBLZESbz9QG","dst_nuid":"GKCJDXV2557h","src_slot":"scene","dst_slot":0,"uid":"NCLRk7ftfsE2","dst_dyn":true},{"src_nuid":"gGw2wjkkNcZr","dst_nuid":"qwBLZESbz9QG","src_slot":1,"dst_slot":0,"uid":"4bVD5cnGZkRg","src_dyn":true,"dst_dyn":true},{"src_nuid":"gGw2wjkkNcZr","dst_nuid":"qwBLZESbz9QG","src_slot":0,"dst_slot":"environment","uid":"7m6CDLVweULX","src_dyn":true},{"src_nuid":"GkJ3XpU3AzWN","dst_nuid":"FHqdKXKGuJug","src_slot":"value","dst_slot":0,"uid":"gE7Kpr3s4ze3","dst_dyn":true},{"src_nuid":"FHqdKXKGuJug","dst_nuid":"95z94xDTMQTL","src_slot":0,"dst_slot":0,"uid":"tJyzuWzCETKD","src_dyn":true,"dst_dyn":true},{"src_nuid":"434UYP5QRpYc","dst_nuid":"qwBLZESbz9QG","src_slot":0,"dst_slot":1,"uid":"EXwRgPYfypxy","src_dyn":true,"dst_dyn":true},{"src_nuid":"95z94xDTMQTL","dst_nuid":"qwBLZESbz9QG","src_slot":0,"dst_slot":2,"uid":"jqRHcD5RyHUG","src_dyn":true,"dst_dyn":true},{"src_nuid":"3USmS2Z9TjT4","dst_nuid":"qwBLZESbz9QG","src_slot":0,"dst_slot":3,"uid":"8Q6nvHSZhrNM","src_dyn":true,"dst_dyn":true}]}} ================================================ FILE: browser/data/graphs/example.json ================================================ {"abs_t":290.686,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"three_scene","x":839,"y":198,"uid":"u2O8M5ItNlW5","dyn_in":[{"type":0,"name":"0","dt":21,"array":true,"uid":"DDzcOXqI6iRM","dynamic":true,"index":0,"is_connected":true},{"type":0,"name":"1","dt":21,"array":true,"uid":"gH5pmBKZK4lm","dynamic":true,"index":1,"is_connected":true},{"type":0,"name":"2","dt":21,"array":true,"uid":"ExPIjji5rvFO","dynamic":true,"index":2,"is_connected":true},{"type":0,"name":"3","dt":21,"array":true,"uid":"hddJID3FkB4R","dynamic":true,"index":3,"is_connected":true},{"type":0,"name":"4","dt":21,"array":true,"uid":"uSr941HZ6MvG","dynamic":true,"index":4,"is_connected":true},{"type":0,"name":"5","dt":21,"array":true,"uid":"oIEkIRoSmV9S","dynamic":true,"index":5,"is_connected":true}]},{"plugin":"graph","x":538,"y":162,"uid":"d9slZ3PC0CIC","open":false,"state":{"always_update":true,"input_sids":{},"output_sids":{"xfsyKARw231b":"tjoeHNDBhUcN"}},"title":"Environment settings","graph":{"uid":"362z87EM3leu","parent_uid":"root","open":true,"nodes":[{"plugin":"three_environment_settings","x":572,"y":469,"uid":"DU82zgpxCApv","title":"Environment settings"},{"plugin":"output_proxy","x":980,"y":512,"uid":"xfsyKARw231b","title":"environment","dyn_in":[{"name":"output","dt":23,"def":null,"uid":"Yy89wKzOcZo4","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"color_picker","x":216,"y":254,"uid":"9lwgQEWjB9z7","state":{"hue":0.4438202247191011,"sat":0.449438202247191,"lum":0.7916666666666666}},{"plugin":"slider_float_generator","x":168,"y":565,"uid":"I4FcCKaQ1VsZ","open":false,"state":{"val":5.287,"min":0.1,"max":40},"title":"Fog near"},{"plugin":"slider_float_generator","x":168,"y":689,"uid":"o2XmpYbvT21H","open":false,"state":{"val":18.706,"min":1,"max":40},"title":"Fog far"}],"conns":[{"src_nuid":"DU82zgpxCApv","dst_nuid":"xfsyKARw231b","src_slot":"environment","dst_slot":0,"uid":"y43ylTEng2A3","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"9lwgQEWjB9z7","dst_nuid":"DU82zgpxCApv","src_slot":"color","dst_slot":"fog color","uid":"OpoOwp04Ujs1","src_connected":true,"dst_connected":true},{"src_nuid":"I4FcCKaQ1VsZ","dst_nuid":"DU82zgpxCApv","src_slot":"value","dst_slot":"fog near","uid":"fbCsW7oq7D90","src_connected":true,"dst_connected":true},{"src_nuid":"o2XmpYbvT21H","dst_nuid":"DU82zgpxCApv","src_slot":"value","dst_slot":"fog far","uid":"ba0BcdDsYNux","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"environment","dt":23,"index":0,"uid":"tjoeHNDBhUcN","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":514,"y":214,"uid":"nvHKHIESiXU4","open":false,"state":{"always_update":true,"input_sids":{},"output_sids":{"CVIoBh0ZtDmi":"547odbJKrTzG"}},"title":"Point light 1","graph":{"uid":"SY5HtB97QwvQ","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":1012,"y":374,"uid":"CVIoBh0ZtDmi","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"vSy6Gj4JSPYs","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_point_light","x":730,"y":371,"uid":"VD3yMohWpRUe","open":false,"state":{"position":{"x":-2.9420035670141815,"y":1.3598567240571549,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"const_float_generator","x":304,"y":295,"uid":"EJ710G4QTm3r","state":{"val":1},"title":"Intensity"},{"plugin":"color_picker","x":276,"y":449,"uid":"Q61YriArv6Pm","state":{"hue":0,"sat":0,"lum":1}}],"conns":[{"src_nuid":"VD3yMohWpRUe","dst_nuid":"CVIoBh0ZtDmi","src_slot":"object3d","dst_slot":0,"uid":"7hWfc0RsxJyE","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"EJ710G4QTm3r","dst_nuid":"VD3yMohWpRUe","src_slot":"value","dst_slot":"intensity","uid":"LWyX9S0LB0Kg","src_connected":true,"dst_connected":true},{"src_nuid":"Q61YriArv6Pm","dst_nuid":"VD3yMohWpRUe","src_slot":"color","dst_slot":"color","uid":"CZE6N3hYAMh3","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"547odbJKrTzG","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":510,"y":375,"uid":"5zkZJ1kVzShg","open":false,"state":{"always_update":true,"input_sids":{},"output_sids":{"0uogYZhTulp7":"mh0rTKkFm0nD"}},"title":"Floor","graph":{"uid":"Hzr5rg9SHgsb","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":936,"y":221,"uid":"GxMrrSaA44wq","open":false,"state":{"position":{"x":0,"y":-1.089785197190713,"z":0.001939648920875864},"scale":{"x":16.260185647641777,"y":16.260185647641777,"z":16.260185647641777},"quaternion":{"_x":-0.7077357707678449,"_y":0,"_z":0,"_w":0.7064772456816478}}},{"plugin":"output_proxy","x":1105,"y":223,"uid":"0uogYZhTulp7","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":153,"y":180,"uid":"EtDika07Vgah","state":{"url":"/data/image/3968db2bdad274fc19d8283eb73c4691b14ac0b1.png"},"title":"Box texture"},{"plugin":"three_material_phong","x":665,"y":280,"uid":"IJzf3S2ECiJe","open":false},{"plugin":"three_geometry_plane","x":751,"y":172,"uid":"tr9n2eRfks8M","open":false},{"plugin":"three_uv_modifier","x":459,"y":279,"uid":"yFbNFt740ntr","open":false},{"plugin":"const_float_generator","x":215,"y":386,"uid":"4zFrJc6lCSIw","state":{"val":40},"title":"Repeat"}],"conns":[{"src_nuid":"GxMrrSaA44wq","dst_nuid":"0uogYZhTulp7","src_slot":"object3d","dst_slot":0,"uid":"lJTzbafg9t8D","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"IJzf3S2ECiJe","dst_nuid":"GxMrrSaA44wq","src_slot":"material","dst_slot":"material","uid":"RpKIcJTsYoCQ","src_connected":true,"dst_connected":true},{"src_nuid":"tr9n2eRfks8M","dst_nuid":"GxMrrSaA44wq","src_slot":"geometry","dst_slot":"geometry","uid":"0XCswCxPk54c","src_connected":true,"dst_connected":true},{"src_nuid":"EtDika07Vgah","dst_nuid":"yFbNFt740ntr","src_slot":"texture","dst_slot":"texture","uid":"zc3YwBYvy48H","src_connected":true,"dst_connected":true},{"src_nuid":"yFbNFt740ntr","dst_nuid":"IJzf3S2ECiJe","src_slot":"texture","dst_slot":"texture","uid":"MDQEpZLF6BgA","src_connected":true,"dst_connected":true},{"src_nuid":"4zFrJc6lCSIw","dst_nuid":"yFbNFt740ntr","src_slot":"value","dst_slot":"u repeat","uid":"QmYbjbM2eBox","src_connected":true,"dst_connected":true},{"src_nuid":"4zFrJc6lCSIw","dst_nuid":"yFbNFt740ntr","src_slot":"value","dst_slot":"v repeat","uid":"3Udkt5dADKZd","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":529,"y":434,"uid":"OFAU6PiJpRKz","open":false,"state":{"always_update":true,"input_sids":{},"output_sids":{"2hsWszsB1Oqx":"mh0rTKkFm0nD"}},"title":"Sky sphere","graph":{"uid":"d0ts6LaG0Ito","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":967,"y":294,"uid":"teRtCbrPh2hp","open":false,"state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1166,"y":295,"uid":"2hsWszsB1Oqx","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":194,"y":63,"uid":"CN1HiUFJop0r","state":{"url":"/data/image/7cbc45195c04d1595c43be42418755520068c72e.png"},"title":"Texture"},{"plugin":"three_material","x":656,"y":156,"uid":"GULXMKCn1srD","open":false},{"plugin":"const_float_generator","x":470,"y":234,"uid":"Q6dO15gKNxXy","open":false,"state":{"val":1},"title":"Side"},{"plugin":"toggle_button","x":431,"y":172,"uid":"yIJ9nHl2KjnJ","open":false,"state":{"enabled":false},"title":"Fog On/Off"},{"plugin":"const_float_generator","x":356,"y":372,"uid":"V3r2F4N05quW","open":false,"state":{"val":40},"title":"Size"},{"plugin":"const_float_generator","x":356,"y":438,"uid":"iaDi4g88cvfk","open":false,"state":{"val":40},"title":"Detail"},{"plugin":"three_geometry_sphere","x":558,"y":402,"uid":"AGL6UFkir1c7","open":false}],"conns":[{"src_nuid":"teRtCbrPh2hp","dst_nuid":"2hsWszsB1Oqx","src_slot":"object3d","dst_slot":0,"uid":"Sr1R9KE4EAZz","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"CN1HiUFJop0r","dst_nuid":"GULXMKCn1srD","src_slot":"texture","dst_slot":"texture","uid":"CTWt2medCPTN","src_connected":true,"dst_connected":true},{"src_nuid":"GULXMKCn1srD","dst_nuid":"teRtCbrPh2hp","src_slot":"material","dst_slot":"material","uid":"i2XtF3ECWcGl","src_connected":true,"dst_connected":true},{"src_nuid":"Q6dO15gKNxXy","dst_nuid":"GULXMKCn1srD","src_slot":"value","dst_slot":"side","uid":"MGvYD4B6ny36","src_connected":true,"dst_connected":true},{"src_nuid":"yIJ9nHl2KjnJ","dst_nuid":"GULXMKCn1srD","src_slot":"bool","dst_slot":"fog","uid":"HctMlUo1nDt6","src_connected":true,"dst_connected":true},{"src_nuid":"V3r2F4N05quW","dst_nuid":"AGL6UFkir1c7","src_slot":"value","dst_slot":"radius","uid":"9ofh4uafnCh4","src_connected":true,"dst_connected":true},{"src_nuid":"iaDi4g88cvfk","dst_nuid":"AGL6UFkir1c7","src_slot":"value","dst_slot":"widthSegments","uid":"LSP6NcEmgITg","src_connected":true,"dst_connected":true},{"src_nuid":"iaDi4g88cvfk","dst_nuid":"AGL6UFkir1c7","src_slot":"value","dst_slot":"heightSegments","uid":"GL4VE82BuHl7","src_connected":true,"dst_connected":true},{"src_nuid":"AGL6UFkir1c7","dst_nuid":"teRtCbrPh2hp","src_slot":"geometry","dst_slot":"geometry","uid":"fNK1vxh3Jx44","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":490,"y":267,"uid":"T6PXHoQNqdKa","open":false,"state":{"always_update":true,"input_sids":{},"output_sids":{"f2swnVnJFdoy":"547odbJKrTzG"}},"title":"Point light 2","graph":{"uid":"qjCrT5ZjfFq7","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":1012,"y":374,"uid":"f2swnVnJFdoy","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"vSy6Gj4JSPYs","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_point_light","x":730,"y":371,"uid":"zhn71BezVLqg","open":false,"state":{"position":{"x":2.9928296822160516,"y":1.034341986571219,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"const_float_generator","x":304,"y":295,"uid":"F4J3NYEA4O6Y","state":{"val":1},"title":"Intensity"},{"plugin":"color_picker","x":276,"y":449,"uid":"8wyhZxwYzyha","state":{"hue":0,"sat":0,"lum":1}}],"conns":[{"src_nuid":"zhn71BezVLqg","dst_nuid":"f2swnVnJFdoy","src_slot":"object3d","dst_slot":0,"uid":"CtaQMxmUCxIX","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"F4J3NYEA4O6Y","dst_nuid":"zhn71BezVLqg","src_slot":"value","dst_slot":"intensity","uid":"kORsBJuO0gRj","src_connected":true,"dst_connected":true},{"src_nuid":"8wyhZxwYzyha","dst_nuid":"zhn71BezVLqg","src_slot":"color","dst_slot":"color","uid":"6PAHvh9N4Iv9","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"547odbJKrTzG","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":357,"y":320,"uid":"FwHyeUHfyCWa","open":false,"state":{"always_update":true,"input_sids":{},"output_sids":{"DLpjPNqdvYFP":"Ys30r7aVEks1"}},"title":"Moving Parrot","graph":{"uid":"mXOiKSZQYmCb","parent_uid":"root","open":true,"nodes":[{"plugin":"three_loader_model","x":321,"y":234,"uid":"1YaYrgLqosSj","state":{"url":"/data/vizor/assets/scene/parrot/parrot.js"}},{"plugin":"three_mesh","x":805,"y":220,"uid":"A5bh9JCEz6cE","state":{"position":{"x":0.9997309954641862,"y":1,"z":0.02319346261745574},"scale":{"x":0.0094948370835134,"y":0.0094948370835134,"z":0.0094948370835134},"quaternion":{"_x":0,"_y":-0.01159751128074042,"_z":0,"_w":0.9999327466045369}}},{"plugin":"output_proxy","x":1318,"y":193,"uid":"DLpjPNqdvYFP","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"vector","x":546,"y":389,"uid":"0tkMqV609qjj","open":false,"title":"Position"},{"plugin":"const_float_generator","x":336,"y":390,"uid":"lSlb995jsuHn","open":false,"state":{"val":1}},{"plugin":"three_clickable_object","x":1038,"y":183,"uid":"78bj4lQY7Fr8"},{"plugin":"clock_generator","x":17,"y":500,"uid":"X1VWMq3nnojI"},{"plugin":"sin_modulator","x":404,"y":524,"uid":"7as5xOleqpl2","open":false},{"plugin":"cos_modulator","x":396,"y":452,"uid":"HnpTPrL3B4nj","open":false},{"plugin":"vector","x":571,"y":607,"uid":"tuNn9sWhTc9t","open":false,"title":"Rotation"},{"plugin":"multiply_modulator","x":556,"y":492,"uid":"yrfAjMnsRw2E","open":false},{"plugin":"const_float_generator","x":571,"y":448,"uid":"UXBKLkYamPwA","open":false,"state":{"val":-1}},{"plugin":"multiply_modulator","x":263,"y":526,"uid":"gpFMlOzMWUpr","open":false,"title":"Mul"},{"plugin":"slider_float_generator","x":31,"y":618,"uid":"NrUjXwJwHUIz","state":{"val":0.173,"min":0,"max":1},"title":"Speed"}],"conns":[{"src_nuid":"1YaYrgLqosSj","dst_nuid":"A5bh9JCEz6cE","src_slot":"geometry","dst_slot":"geometry","uid":"DWVhucMuPjiU","src_connected":true,"dst_connected":true},{"src_nuid":"1YaYrgLqosSj","dst_nuid":"A5bh9JCEz6cE","src_slot":"materials","dst_slot":"material","uid":"jtjMX4Dkc2QR","src_connected":true,"dst_connected":true},{"src_nuid":"0tkMqV609qjj","dst_nuid":"A5bh9JCEz6cE","src_slot":"vector","dst_slot":"position","uid":"DimfWNiOfi3T","src_connected":true,"dst_connected":true},{"src_nuid":"A5bh9JCEz6cE","dst_nuid":"78bj4lQY7Fr8","src_slot":"object3d","dst_slot":"object3d","uid":"5dj57P3BUrjt","src_connected":true,"dst_connected":true},{"src_nuid":"78bj4lQY7Fr8","dst_nuid":"DLpjPNqdvYFP","src_slot":"object3d","dst_slot":0,"uid":"qetiqafLBohK","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"lSlb995jsuHn","dst_nuid":"0tkMqV609qjj","src_slot":"value","dst_slot":"y","uid":"56Yn78vGA5qK","src_connected":true,"dst_connected":true},{"src_nuid":"HnpTPrL3B4nj","dst_nuid":"0tkMqV609qjj","src_slot":"result","dst_slot":"x","uid":"2h2aX3PzymGg","src_connected":true,"dst_connected":true},{"src_nuid":"7as5xOleqpl2","dst_nuid":"0tkMqV609qjj","src_slot":"result","dst_slot":"z","uid":"eHSrf7en4Xn7","src_connected":true,"dst_connected":true},{"src_nuid":"tuNn9sWhTc9t","dst_nuid":"A5bh9JCEz6cE","src_slot":"vector","dst_slot":"rotation","uid":"8jdrqfeAVSOe","src_connected":true,"dst_connected":true},{"src_nuid":"UXBKLkYamPwA","dst_nuid":"yrfAjMnsRw2E","src_slot":"value","dst_slot":"b","uid":"kUnafpwwZz9j","src_connected":true,"dst_connected":true},{"src_nuid":"yrfAjMnsRw2E","dst_nuid":"tuNn9sWhTc9t","src_slot":"result","dst_slot":"y","uid":"OXpRNJqVOBby","src_connected":true,"dst_connected":true},{"src_nuid":"X1VWMq3nnojI","dst_nuid":"gpFMlOzMWUpr","src_slot":"seconds","dst_slot":"a","uid":"NWR2vrgmAJ1v","src_connected":true,"dst_connected":true},{"src_nuid":"gpFMlOzMWUpr","dst_nuid":"7as5xOleqpl2","src_slot":"result","dst_slot":"value","uid":"BhI48L9Q1z94","src_connected":true,"dst_connected":true},{"src_nuid":"gpFMlOzMWUpr","dst_nuid":"HnpTPrL3B4nj","src_slot":"result","dst_slot":"value","uid":"dGr3ItTyHlNE","src_connected":true,"dst_connected":true},{"src_nuid":"NrUjXwJwHUIz","dst_nuid":"gpFMlOzMWUpr","src_slot":"value","dst_slot":"b","uid":"7JAtwjTNZo9c","src_connected":true,"dst_connected":true},{"src_nuid":"gpFMlOzMWUpr","dst_nuid":"yrfAjMnsRw2E","src_slot":"result","dst_slot":"a","uid":"827dowg8o18h","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":1300,"y":275,"uid":"v7uRMObeuSEB","state":{"always_update":true,"input_sids":{"GdrbhHgi6N3c":"lbU7hDvbnKfg"},"output_sids":{}},"title":"Render Camera","graph":{"uid":"OTzr4pyyxpVM","parent_uid":"root","open":true,"nodes":[{"plugin":"input_proxy","x":375,"y":433,"uid":"GdrbhHgi6N3c","title":"scene","dyn_out":[{"name":"input","dt":11,"uid":"uGHXM4cdeVb3","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_webgl_renderer","x":986,"y":227,"uid":"IUSawWm4OIJv","state":{"always_update":true}},{"plugin":"graph","x":417,"y":171,"uid":"whqQDLkepl25","state":{"always_update":true,"input_sids":{},"output_sids":{"QqxhOUB8HgX5":"8GpdZjiiiEQa"}},"title":"VR camera","graph":{"uid":"xvFZowQd0GaE","parent_uid":"OTzr4pyyxpVM","open":true,"nodes":[{"plugin":"three_vr_camera","x":966,"y":211,"uid":"ycnC8d9yfubZ","open":false},{"plugin":"output_proxy","x":1217,"y":212,"uid":"QqxhOUB8HgX5","title":"camera","dyn_in":[{"name":"output","dt":6,"def":null,"uid":"uyyGR7LQwSEh","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"slider_float_generator","x":412,"y":169,"uid":"7gyWBF6a5O17","state":{"val":0,"min":-10,"max":10},"title":"Position X"},{"plugin":"slider_float_generator","x":413,"y":282,"uid":"VqSAxJqipKya","state":{"val":0.8,"min":-10,"max":10},"title":"Position Y"},{"plugin":"slider_float_generator","x":413,"y":397,"uid":"Qfr9wlTnJTZF","state":{"val":2,"min":-10,"max":10},"title":"Position Z"},{"plugin":"vector","x":736,"y":283,"uid":"DXh5SJN2sJr3","open":false,"title":"Camera position"},{"plugin":"const_float_generator","x":776,"y":140,"uid":"bpunNmtoY3YY","open":false,"state":{"val":90},"title":"FOV"}],"conns":[{"src_nuid":"ycnC8d9yfubZ","dst_nuid":"QqxhOUB8HgX5","src_slot":"camera","dst_slot":0,"uid":"QotGit84R5fd","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"7gyWBF6a5O17","dst_nuid":"DXh5SJN2sJr3","src_slot":"value","dst_slot":"x","uid":"c5sFOb7XSeHU","src_connected":true,"dst_connected":true},{"src_nuid":"VqSAxJqipKya","dst_nuid":"DXh5SJN2sJr3","src_slot":"value","dst_slot":"y","uid":"D4LPhCoA50hI","src_connected":true,"dst_connected":true},{"src_nuid":"Qfr9wlTnJTZF","dst_nuid":"DXh5SJN2sJr3","src_slot":"value","dst_slot":"z","uid":"BNIqeWngtFnI","src_connected":true,"dst_connected":true},{"src_nuid":"DXh5SJN2sJr3","dst_nuid":"ycnC8d9yfubZ","src_slot":"vector","dst_slot":"position","uid":"jZWc0J7Ohz0N","src_connected":true,"dst_connected":true},{"src_nuid":"bpunNmtoY3YY","dst_nuid":"ycnC8d9yfubZ","src_slot":"value","dst_slot":"rotation","uid":"LWxwIKR4GTIH","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"camera","dt":6,"index":0,"uid":"8GpdZjiiiEQa","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"three_gaze_clicker","x":713,"y":330,"uid":"uwBeesbFPJuG"},{"plugin":"slider_float_generator","x":434,"y":621,"uid":"8Pm6DErrYkwu","state":{"val":0.0294,"min":0,"max":0.1}}],"conns":[{"src_nuid":"whqQDLkepl25","dst_nuid":"IUSawWm4OIJv","src_slot":0,"dst_slot":"camera","uid":"nGdPFMJnnc5g","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"whqQDLkepl25","dst_nuid":"uwBeesbFPJuG","src_slot":0,"dst_slot":"camera","uid":"Et6ts7p7groj","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"uwBeesbFPJuG","dst_nuid":"IUSawWm4OIJv","src_slot":"scene","dst_slot":"scene","uid":"hiyzVZpalEv3","src_connected":true,"dst_connected":true},{"src_nuid":"GdrbhHgi6N3c","dst_nuid":"uwBeesbFPJuG","src_slot":0,"dst_slot":"scene","uid":"4VkmpjZZ39ll","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"8Pm6DErrYkwu","dst_nuid":"uwBeesbFPJuG","src_slot":"value","dst_slot":"show icon","uid":"Kz1g3E67Q2kH","src_connected":true,"dst_connected":true}]},"dyn_in":[{"name":"scene","dt":11,"index":0,"uid":"lbU7hDvbnKfg","dynamic":true,"type":0,"is_connected":true}]},{"plugin":"graph","x":504,"y":488,"uid":"xixCbaXdrdry","open":false,"state":{"always_update":true,"input_sids":{},"output_sids":{"6C46hhI3kAm1":"uD2ummgGvwHj"}},"title":"Click Counter","graph":{"uid":"zZb0QXSHr2cV","parent_uid":"root","open":true,"nodes":[{"plugin":"graph","x":1149,"y":134,"uid":"ckX1aarGba6U","open":false,"state":{"always_update":true,"input_sids":{"3W0JYbSnoPaO":"3ghUS8wkMr1K"},"output_sids":{"wlSFhZfM8ySX":"KQIJHdC6kfHo"}},"title":"Text","graph":{"uid":"AGTL1D3AygTT","parent_uid":"zZb0QXSHr2cV","open":true,"nodes":[{"plugin":"graph","x":854,"y":294,"uid":"MJo7Ljhoq3nm","state":{"always_update":true,"input_sids":{"zeZlFSkP2VPF":"sRlAkgcKhKMQ","wDPZsmMm66Fz":"S2nnu4FGbdIz","Xmz8pkVRq1Hc":"GQQJWiOcNgy4"},"output_sids":{"EneRwquXck5z":"mh0rTKkFm0nD"}},"title":"Text","graph":{"uid":"o8rrHRs3pjhw","parent_uid":"AGTL1D3AygTT","open":true,"nodes":[{"plugin":"three_mesh","x":1070,"y":391,"uid":"u82lrOOlQGI0","state":{"position":{"x":1,"y":1,"z":-1},"scale":{"x":3.1907156068563065,"y":3.1907156068563065,"z":3.1907156068563065},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1269,"y":390,"uid":"EneRwquXck5z","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"const_float_generator","x":507,"y":622,"uid":"img3rC5bwvzb","open":false,"state":{"val":2},"title":"Segments"},{"plugin":"three_geometry_plane","x":683,"y":587,"uid":"cwWILrVjWEyA","open":false},{"plugin":"const_float_generator","x":472,"y":562,"uid":"3ifKWXdIe5IH","open":false,"state":{"val":1},"title":"Width & Height"},{"plugin":"input_proxy","x":146,"y":391,"uid":"zeZlFSkP2VPF","title":"font style","dyn_out":[{"name":"input","dt":15,"uid":"mbrd65kMPyo2","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":170,"y":126,"uid":"wDPZsmMm66Fz","title":"text","dyn_out":[{"name":"input","dt":15,"uid":"EHC1du1l07AS","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"texture_from_text_generator","x":336,"y":195,"uid":"dVxxxW2g40Mm","open":false},{"plugin":"const_float_generator","x":447,"y":455,"uid":"jTvfpsIavepM","state":{"val":2}},{"plugin":"three_material_phong","x":730,"y":96,"uid":"wCLpWt6lDWlI"},{"plugin":"toggle_button","x":411,"y":381,"uid":"awh2N4iJCffj","open":false,"state":{"enabled":true}},{"plugin":"const_float_generator","x":141,"y":242,"uid":"xJpx97i0b696","open":false,"state":{"val":1024},"title":"Size"},{"plugin":"const_float_generator","x":156,"y":282,"uid":"6uRFi5fgOd0Y","state":{"val":512},"title":"X"},{"plugin":"const_float_generator","x":157,"y":351,"uid":"ExwcOBe7NxDX","state":{"val":256},"title":"Y"},{"plugin":"input_proxy","x":169,"y":38,"uid":"Xmz8pkVRq1Hc","title":"color","dyn_out":[{"name":"input","dt":3,"uid":"cG7DlCEla0O3","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"vector","x":764,"y":647,"uid":"voB3zBf8Hhh4"},{"plugin":"const_float_generator","x":484,"y":730,"uid":"KKiWw4tY0TeJ","open":false,"state":{"val":1}},{"plugin":"const_float_generator","x":411,"y":663,"uid":"30DTqlmJW9Ta","open":false,"state":{"val":1}},{"plugin":"const_float_generator","x":483,"y":777,"uid":"tMuM3DJupA8q","state":{"val":-1}}],"conns":[{"src_nuid":"u82lrOOlQGI0","dst_nuid":"EneRwquXck5z","src_slot":"object3d","dst_slot":0,"uid":"syc2Sx7joJaK","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"cwWILrVjWEyA","dst_nuid":"u82lrOOlQGI0","src_slot":"geometry","dst_slot":"geometry","uid":"g8Od5n9IyVSD","src_connected":true,"dst_connected":true},{"src_nuid":"3ifKWXdIe5IH","dst_nuid":"cwWILrVjWEyA","src_slot":"value","dst_slot":"width","uid":"ehTlcrpjnWRQ","src_connected":true,"dst_connected":true},{"src_nuid":"3ifKWXdIe5IH","dst_nuid":"cwWILrVjWEyA","src_slot":"value","dst_slot":"height","uid":"QdRPR9LzrjDB","src_connected":true,"dst_connected":true},{"src_nuid":"img3rC5bwvzb","dst_nuid":"cwWILrVjWEyA","src_slot":"value","dst_slot":"widthSegments","uid":"7WmaKc7BQMSf","src_connected":true,"dst_connected":true},{"src_nuid":"img3rC5bwvzb","dst_nuid":"cwWILrVjWEyA","src_slot":"value","dst_slot":"heightSegments","uid":"1yOmFaatA5Cq","src_connected":true,"dst_connected":true},{"src_nuid":"wDPZsmMm66Fz","dst_nuid":"dVxxxW2g40Mm","src_slot":0,"dst_slot":"text","uid":"OIWRa8UcUOmc","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"zeZlFSkP2VPF","dst_nuid":"dVxxxW2g40Mm","src_slot":0,"dst_slot":"font style","uid":"JOfXyYh6jd8T","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"dVxxxW2g40Mm","dst_nuid":"wCLpWt6lDWlI","src_slot":"texture","dst_slot":"texture","uid":"AA1ejjPCQEim","src_connected":true,"dst_connected":true},{"src_nuid":"jTvfpsIavepM","dst_nuid":"wCLpWt6lDWlI","src_slot":"value","dst_slot":"side","uid":"2ljsYfsAKHun","src_connected":true,"dst_connected":true},{"src_nuid":"wCLpWt6lDWlI","dst_nuid":"u82lrOOlQGI0","src_slot":"material","dst_slot":"material","uid":"EmJg2BgTwHR5","src_connected":true,"dst_connected":true},{"src_nuid":"xJpx97i0b696","dst_nuid":"dVxxxW2g40Mm","src_slot":"value","dst_slot":"width","uid":"qdoqldW6MPoX","src_connected":true,"dst_connected":true},{"src_nuid":"xJpx97i0b696","dst_nuid":"dVxxxW2g40Mm","src_slot":"value","dst_slot":"height","uid":"dsngDxDtlsyT","src_connected":true,"dst_connected":true},{"src_nuid":"6uRFi5fgOd0Y","dst_nuid":"dVxxxW2g40Mm","src_slot":"value","dst_slot":"x","uid":"n5xsDfAHTgGJ","src_connected":true,"dst_connected":true},{"src_nuid":"ExwcOBe7NxDX","dst_nuid":"dVxxxW2g40Mm","src_slot":"value","dst_slot":"y","uid":"5ofSEKsXIz5O","src_connected":true,"dst_connected":true},{"src_nuid":"awh2N4iJCffj","dst_nuid":"wCLpWt6lDWlI","src_slot":"bool","dst_slot":"transparent","uid":"vHbnbILokzv9","src_connected":true,"dst_connected":true},{"src_nuid":"Xmz8pkVRq1Hc","dst_nuid":"wCLpWt6lDWlI","src_slot":0,"dst_slot":"color","uid":"gRMQwq2b2FbA","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"voB3zBf8Hhh4","dst_nuid":"u82lrOOlQGI0","src_slot":"vector","dst_slot":"position","uid":"VXzaasra1zJb","src_connected":true,"dst_connected":true},{"src_nuid":"KKiWw4tY0TeJ","dst_nuid":"voB3zBf8Hhh4","src_slot":"value","dst_slot":"y","uid":"BARYxtu0H3vC","src_connected":true,"dst_connected":true},{"src_nuid":"30DTqlmJW9Ta","dst_nuid":"voB3zBf8Hhh4","src_slot":"value","dst_slot":"x","uid":"gZ2Yt3v2tQLp","src_connected":true,"dst_connected":true},{"src_nuid":"tMuM3DJupA8q","dst_nuid":"voB3zBf8Hhh4","src_slot":"value","dst_slot":"z","uid":"IzPqSAogAI3O","src_connected":true,"dst_connected":true}]},"dyn_in":[{"name":"color","dt":3,"index":0,"uid":"GQQJWiOcNgy4","dynamic":true,"type":0,"is_connected":true},{"name":"text","dt":15,"index":1,"uid":"S2nnu4FGbdIz","dynamic":true,"type":0,"is_connected":true},{"name":"font style","dt":15,"index":2,"uid":"sRlAkgcKhKMQ","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"const_text_generator","x":556,"y":484,"uid":"AzxNwijTsPSw","state":{"text":"bold 64px arial","width":88.18181799999999,"height":11.181818},"title":"Font Style"},{"plugin":"output_proxy","x":1139,"y":354,"uid":"wlSFhZfM8ySX","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"IJEKqUWOR4PP","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":597,"y":388,"uid":"3W0JYbSnoPaO","title":"text","dyn_out":[{"name":"input","dt":15,"uid":"i10LW7KHRslc","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"color_picker","x":534,"y":124,"uid":"4NkJzDMWUwnI","state":{"hue":0.6899417491441362,"sat":0.6415189250131671,"lum":0.5150568644205729}}],"conns":[{"src_nuid":"AzxNwijTsPSw","dst_nuid":"MJo7Ljhoq3nm","src_slot":"text","dst_slot":2,"uid":"mXzlhyWiqs6E","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"MJo7Ljhoq3nm","dst_nuid":"wlSFhZfM8ySX","src_slot":0,"dst_slot":0,"uid":"G9zqdywxMkPX","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"3W0JYbSnoPaO","dst_nuid":"MJo7Ljhoq3nm","src_slot":0,"dst_slot":1,"uid":"xvyW5OeKcLY6","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"4NkJzDMWUwnI","dst_nuid":"MJo7Ljhoq3nm","src_slot":"color","dst_slot":0,"uid":"Ega0AIhNR5MN","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_in":[{"name":"text","dt":15,"index":0,"uid":"3ghUS8wkMr1K","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"KQIJHdC6kfHo","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"output_proxy","x":1348,"y":135,"uid":"6C46hhI3kAm1","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"BuOO1EFA8VVD","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"if_else_modulator","x":593,"y":522,"uid":"DFvfkPUVz3YB"},{"plugin":"variable_local_read","x":655,"y":718,"uid":"4Bd3oyFHYwVq","title":"clickCount","dyn_out":[{"name":"value","dt":0,"uid":"hAy6cFgLAsOi","dynamic":true,"type":1,"index":0,"is_connected":true}]},{"plugin":"variable_local_write","x":1038,"y":587,"uid":"pMjF7VJrtcS9","title":"clickCount","dyn_in":[{"name":"value","dt":0,"uid":"hQ6chP5rc6Sq","dynamic":true,"type":0,"index":0,"is_connected":true}]},{"plugin":"const_float_generator","x":408,"y":612,"uid":"pn7f3ymI8gTs","state":{"val":1}},{"plugin":"add_modulator","x":850,"y":668,"uid":"OkSsat6JvGOb"},{"plugin":"variable_local_read","x":631,"y":169,"uid":"YEcAoAmIGZob","title":"clickCount","dyn_out":[{"name":"value","dt":0,"uid":"hAy6cFgLAsOi","dynamic":true,"type":1,"index":0,"is_connected":true}]},{"plugin":"format_string_float","x":812,"y":192,"uid":"ExJW8DkkTzZP","open":false},{"plugin":"const_float_generator","x":635,"y":222,"uid":"p4M5gGdaZRIm","open":false,"state":{"val":0}},{"plugin":"string_concatenate_modulator","x":975,"y":147,"uid":"DtSfH4d0THVe","open":false},{"plugin":"const_text_generator","x":829,"y":97,"uid":"A5MOlmaMaUnQ","state":{"text":"Score: ","width":99.18181799999999,"height":22.181818}},{"plugin":"const_text_generator","x":51,"y":547,"uid":"p4KdWP4lbhX8","state":{"text":"objectClicked","width":105.18181799999999,"height":28.181818}},{"plugin":"runtime_event_read","x":242,"y":513,"uid":"DUcbYlrgKLQT"}],"conns":[{"src_nuid":"ckX1aarGba6U","dst_nuid":"6C46hhI3kAm1","src_slot":0,"dst_slot":0,"uid":"8LViumoNgMEO","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"pn7f3ymI8gTs","dst_nuid":"DFvfkPUVz3YB","src_slot":"value","dst_slot":"true value","uid":"UszczKRVvxwu","src_connected":true,"dst_connected":true},{"src_nuid":"DFvfkPUVz3YB","dst_nuid":"OkSsat6JvGOb","src_slot":"value","dst_slot":"a","uid":"mkOADmONAkgU","src_connected":true,"dst_connected":true},{"src_nuid":"4Bd3oyFHYwVq","dst_nuid":"OkSsat6JvGOb","src_slot":0,"dst_slot":"b","uid":"l5odg9hsrkwb","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"OkSsat6JvGOb","dst_nuid":"pMjF7VJrtcS9","src_slot":"result","dst_slot":0,"uid":"XNTihuP4TW2U","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"YEcAoAmIGZob","dst_nuid":"ExJW8DkkTzZP","src_slot":0,"dst_slot":"float","uid":"WFjpnFsR94Sj","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"p4M5gGdaZRIm","dst_nuid":"ExJW8DkkTzZP","src_slot":"value","dst_slot":"decimals","uid":"oPS6gziXjIJA","src_connected":true,"dst_connected":true},{"src_nuid":"ExJW8DkkTzZP","dst_nuid":"DtSfH4d0THVe","src_slot":"text","dst_slot":"b","uid":"4dlrnGhhYe9k","src_connected":true,"dst_connected":true},{"src_nuid":"DtSfH4d0THVe","dst_nuid":"ckX1aarGba6U","src_slot":"result","dst_slot":0,"uid":"AioyICVLCPNi","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"A5MOlmaMaUnQ","dst_nuid":"DtSfH4d0THVe","src_slot":"text","dst_slot":"a","uid":"2tsmeJg7oqbd","src_connected":true,"dst_connected":true},{"src_nuid":"DUcbYlrgKLQT","dst_nuid":"DFvfkPUVz3YB","src_slot":"triggered","dst_slot":"condition","uid":"Dmi0sRSHvvT9","src_connected":true,"dst_connected":true},{"src_nuid":"p4KdWP4lbhX8","dst_nuid":"DUcbYlrgKLQT","src_slot":"text","dst_slot":"eventName","uid":"lj4rYONjgBGb","src_connected":true,"dst_connected":true}],"variables":[{"id":"clickCounter","dt":8},{"id":"clickCount","dt":0}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"uD2ummgGvwHj","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":526,"y":1162,"uid":"bYEEfQW4ojAQ","state":{"always_update":true,"input_sids":{},"output_sids":{}},"title":"Audio","graph":{"uid":"ANXBsabAj0qy","parent_uid":"root","open":true,"nodes":[{"plugin":"toggle_button","x":472,"y":265,"uid":"Tz4KLQmiQf1l","state":{"enabled":true}},{"plugin":"url_audio_generator","x":479,"y":165,"uid":"OYvQy9pZHk2n","state":{"url":""}},{"plugin":"audio_player","x":751,"y":203,"uid":"H3rbtojbulWM"}],"conns":[{"src_nuid":"Tz4KLQmiQf1l","dst_nuid":"H3rbtojbulWM","src_slot":"bool","dst_slot":"play","uid":"cruSavaMwSe5","src_connected":true,"dst_connected":true},{"src_nuid":"OYvQy9pZHk2n","dst_nuid":"H3rbtojbulWM","src_slot":"audio","dst_slot":"audio","uid":"f32WW7H3BOXx","src_connected":true,"dst_connected":true}]}}],"conns":[{"src_nuid":"d9slZ3PC0CIC","dst_nuid":"u2O8M5ItNlW5","src_slot":0,"dst_slot":"environment","uid":"rzc7AKK9kBoJ","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"nvHKHIESiXU4","dst_nuid":"u2O8M5ItNlW5","src_slot":0,"dst_slot":0,"uid":"n6HvJBWbhUTp","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"OFAU6PiJpRKz","dst_nuid":"u2O8M5ItNlW5","src_slot":0,"dst_slot":4,"uid":"5kcE6nOcoLZR","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"5zkZJ1kVzShg","dst_nuid":"u2O8M5ItNlW5","src_slot":0,"dst_slot":3,"uid":"j7QD3FQVfiTJ","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"T6PXHoQNqdKa","dst_nuid":"u2O8M5ItNlW5","src_slot":0,"dst_slot":1,"uid":"4dPQlNzWSEeP","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"FwHyeUHfyCWa","dst_nuid":"u2O8M5ItNlW5","src_slot":0,"dst_slot":2,"uid":"vZyxj037ATPU","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"u2O8M5ItNlW5","dst_nuid":"v7uRMObeuSEB","src_slot":"scene","dst_slot":0,"uid":"9qnXXGGVlcGW","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"xixCbaXdrdry","dst_nuid":"u2O8M5ItNlW5","src_slot":0,"dst_slot":5,"uid":"GjblljfnLNxV","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true}]}} ================================================ FILE: browser/data/video/attribution.txt ================================================ Copyright Stefan Mylleager. ================================================ FILE: browser/embed.html ================================================

embed

================================================ FILE: browser/help/introduction.html ================================================ Vizor Create





Editing graphs:


Right click on canvas to insert plugins or use the search box.

Drag connections from inputs and outputs to connect them.

Press Play to run your graph.

Hold shift to delete connections from slots.

Press backspace to delete selected nodes.

Double click to add Patches to the graph.

Click and drag on the canvas to select plugins.

Collapse plugins by clicking on their header icon.

Hotkeys:


On Mac, the command key is used instead of control.

CTRL-C, CTRL-V, CTRL-X Copy, Paste, Cut

CTRL-A Select all

CTRL-B Hide/show left pane

CTRL-L Hide/show console.

Space Play/Stop

Tab Show/Hide graph

Backspace/Delete Delete selected plugins

q or / Search

f Fullscreen

Enter 'Commit': Deselect all, place

1 Input proxy

2 Graph

3 Slider

4 Float value input

5 Float debug

6 Multiply number

7 XYZ to Vector

8 Boolean toggle

9 Knob

0 Output proxy

Source code:


The source code can be found from our GitHub page. Please report any issues to the GitHub issues page.

Video:


Videos are .ogv files. Converting works with ffmpeg using these arguments:

ffmpeg -i inputfile.mpg -an -vcodec libtheora -vb 1024k -s 256x256 -aspect 1:1 output.ogv

Audio:


Audio player plays standard .ogg files which can be converted with eg. Audacity.

Plugin API


Plugin API documentation.

Attributions


Attributions

Terms of Service & Privacy policy

Terms of Service & Privacy
================================================ FILE: browser/help/plugin_api.html ================================================ Vizor Patches - Plugin development
The Patches plugin API has moved to https://github.com/vizorvr/vizor/wiki/Plugin-Development-and-API
================================================ FILE: browser/help/style.css ================================================ body { margin: 0 auto; font-family: Verdana; line-height: 1.2; max-width: 960px; padding: 30px; margin-left: auto; margin-right: auto; background-color: #cacaca !important; } code { white-space: pre; font-weight: bold; } h1, h2, h3, h4 { color: #111111; font-weight: 400; } h1, h2, h3, h4, h5, p { margin-bottom: 24px; padding: 0; } h1 { font-size: 48px; color: #333; } h2 { font-size: 36px; margin: 24px 0 6px; } h3 { font-size: 24px; margin-bottom: 5px; } h4 { font-size: 21px; } h5 { font-size: 18px; } a { color: #0099ff; margin: 0; padding: 0; vertical-align: baseline; } a:hover { text-decoration: none; color: #ff6600; } ul, ol { padding: 0; margin: 0; } li { line-height: 24px; } li ul, li ul { margin-left: 24px; } p, ul, ol { font-size: 16px; line-height: 24px; max-width: 960px; } pre { padding: 0px 24px; max-width: 800px; white-space: pre-wrap; } code { font-family: Consolas, Monaco, Andale Mono, monospace; line-height: 1.5; font-size: 13px; } aside { display: block; float: right; width: 390px; } blockquote { border-left:.5em solid #eee; padding: 0 2em; margin-left:0; max-width: 476px; } blockquote cite { font-size:14px; line-height:20px; color:#bfbfbf; } blockquote cite:before { content: '\2014 \00A0'; } blockquote p { color: #666; max-width: 460px; } hr { width: 960px; text-align: left; margin: 10px auto 10px 0; color: #999; } table { border-collapse: collapse; } th { padding-bottom: 4px; border-bottom: 4px double #888; } td { padding-right: 40px; padding-top: 4px; padding-bottom: 4px; border-bottom: 1px solid #aaa; } td:nth-last-child(1) { padding-right: 0px; } .highlight { color: #444; background-color: #ddd; border: 1; font-family: times; padding: 3px; } ================================================ FILE: browser/no_webgl.html ================================================ Vizor - No WebGL found

Vizor is a visual programming platform for WebVR, WebGL and other HTML5 APIs


Unfortunately you need WebGL enabled browser to view our editor. Try it on your home computer with Chrome or Firefox!

Vizor is open source and licensed under the MIT license. The source code is released at https://github.com/vizorvr/vizor
================================================ FILE: browser/patchTemplates/360photo.hbs ================================================ { "nodes": [{ "plugin": "threesixty_photo_entity", "x": 772, "y": 672, "uid": "3C9Em6xdrgEM", "state": { "always_update": true, "input_sids": {}, "output_sids": { "DYZgrPjpJgXJ": "mh0rTKkFm0nD" } }, "title": "{{name}}", "graph": { "uid": "9DJ4ZqszKFMU", "parent_uid": "root", "open": true, "nodes": [{ "plugin": "three_mesh", "x": 1252, "y": 373, "uid": "3rgf6r3xbYSA", "state": { "position": { "x": 0, "y": 0, "z": 0 }, "scale": { "x": 1, "y": 1, "z": 1 }, "quaternion": { "_x": 0, "_y": 0, "_z": 0, "_w": 1 } } }, { "plugin": "output_proxy", "x": 1438, "y": 405, "uid": "DYZgrPjpJgXJ", "title": "object3d", "dyn_in": [{ "name": "output", "dt": 21, "def": null, "uid": "bEdPpC9C6Rh1", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true }] }, { "plugin": "three_material", "x": 974, "y": 130, "uid": "TD7n9my6NX9Z", "state": {} }, { "plugin": "const_float_generator", "x": 723, "y": 214, "uid": "wqrVfMSYYqwN", "state": { "val": 1 }, "title": "Side" }, { "plugin": "three_uv_modifier", "x": 553, "y": 87, "uid": "NsYvEbNxsUR5", "state": {} }, { "plugin": "const_float_generator", "x": 297, "y": 197, "uid": "W8QSRNB4kueG", "state": { "val": -1 }, "title": "X repeat photo" }, { "plugin": "three_geometry_sphere", "x": 939, "y": 467, "uid": "UQ9hvSqLBWRh" }, { "plugin": "const_float_generator", "x": 675, "y": 421, "uid": "VGntdzyvgDQP", "state": { "val": 30 }, "title": "Radius" }, { "plugin": "const_float_generator", "x": 676, "y": 502, "uid": "gFaz858pqbTt", "state": { "val": 40 }, "title": "Width Segments" }, { "plugin": "const_float_generator", "x": 674, "y": 584, "uid": "AbeR7zbHJYMg", "state": { "val": 40 }, "title": "Height Segments" }, { "plugin": "toggle_button", "x": 724, "y": 292, "uid": "N7d3TBFVFfDU", "state": { "enabled": false }, "title": "Fog" }, { "plugin": "slider_float_generator", "x": 301, "y": 298, "uid": "Tbsrebx2e3nd", "state": { "val": 0.25, "min": 0, "max": 1 } }, { "plugin": "photosphere_orientation_reader", "x": 671, "y": 380, "uid": "3C3g2scg5WLj", "open": false, "state": {} }, { "plugin": "url_texture_generator", "x": 239, "y": 544, "uid": "vtErWjYsRPJc", "state": { "url": "{{url}}" } }], "conns": [{ "src_nuid": "3rgf6r3xbYSA", "dst_nuid": "DYZgrPjpJgXJ", "src_slot": "object3d", "dst_slot": 0, "uid": "Lb5jAPDD6xmp", "dst_dyn": true }, { "src_nuid": "TD7n9my6NX9Z", "dst_nuid": "3rgf6r3xbYSA", "src_slot": "material", "dst_slot": "material", "uid": "WsBWYJ7TBCuS" }, { "src_nuid": "wqrVfMSYYqwN", "dst_nuid": "TD7n9my6NX9Z", "src_slot": "value", "dst_slot": "side", "uid": "EEP2DepqwGyK" }, { "src_nuid": "NsYvEbNxsUR5", "dst_nuid": "TD7n9my6NX9Z", "src_slot": "texture", "dst_slot": "texture", "uid": "bkBZEsb5vUtw" }, { "src_nuid": "W8QSRNB4kueG", "dst_nuid": "NsYvEbNxsUR5", "src_slot": "value", "dst_slot": "u repeat", "uid": "94jAD2Wpg6jf" }, { "src_nuid": "VGntdzyvgDQP", "dst_nuid": "UQ9hvSqLBWRh", "src_slot": "value", "dst_slot": "radius", "uid": "APbNVtDhPS4x" }, { "src_nuid": "gFaz858pqbTt", "dst_nuid": "UQ9hvSqLBWRh", "src_slot": "value", "dst_slot": "widthSegments", "uid": "3MyuJH2NXjad" }, { "src_nuid": "AbeR7zbHJYMg", "dst_nuid": "UQ9hvSqLBWRh", "src_slot": "value", "dst_slot": "heightSegments", "uid": "wL9VJtsZbVVm" }, { "src_nuid": "UQ9hvSqLBWRh", "dst_nuid": "3rgf6r3xbYSA", "src_slot": "geometry", "dst_slot": "geometry", "uid": "RknMhhgac8KN" }, { "src_nuid": "N7d3TBFVFfDU", "dst_nuid": "TD7n9my6NX9Z", "src_slot": "bool", "dst_slot": "fog", "uid": "ftAP7yb4aeuw" }, { "src_nuid": "Tbsrebx2e3nd", "dst_nuid": "NsYvEbNxsUR5", "src_slot": "value", "dst_slot": "u offset", "uid": "K9vxt2VJ55xc" }, { "src_nuid": "3C3g2scg5WLj", "dst_nuid": "3rgf6r3xbYSA", "src_slot": "rotation", "dst_slot": "rotation", "uid": "Swcu4favYStt" }, { "src_nuid": "vtErWjYsRPJc", "dst_nuid": "NsYvEbNxsUR5", "src_slot": "texture", "dst_slot": "texture", "uid": "ve4CHkAZ9RB9" }, { "src_nuid": "vtErWjYsRPJc", "dst_nuid": "3C3g2scg5WLj", "src_slot": "texture", "dst_slot": "texture", "uid": "TNxCvSAe4bKp" }] }, "dyn_out": [{ "name": "object3d", "dt": 21, "index": 0, "uid": "mh0rTKkFm0nD", "dynamic": true, "type": 1, "is_connected": false }] }], "conns": [], "x1": 822, "y1": 722, "x2": 977, "y2": 781 } ================================================ FILE: browser/patchTemplates/audio.hbs ================================================ { "nodes": [{ "plugin": "graph", "x": 691, "y": 874, "uid": "L76H5Gvb5fXN", "state": { "always_update": true, "input_sids": {}, "output_sids": {} }, "title": "{{name}}", "graph": { "uid": "L24mFTGX3vQS", "parent_uid": "root", "open": true, "nodes": [{ "plugin": "audio_source_player", "x": 1188, "y": 94, "uid": "AEtyS7yXsWGf" }, { "plugin": "audio_buffer_source_modulator", "x": 853, "y": 139, "uid": "sEfEATyGM7Df" }, { "plugin": "toggle_button", "x": 537, "y": 360, "uid": "Cxvgc66nBF6Y", "state": { "enabled": false }, "title": "Loop" }, { "plugin": "annotation", "x": 1162, "y": 176, "uid": "htXMzL88a8EZ", "state": { "text": "Here we use WebAudio to play sound. Please note different browsers treat .MP3 and .OGG files differently.", "width": 150, "height": 70 } }, { "plugin": "url_audio_buffer_generator", "x": 485, "y": 164, "uid": "nfpDHJd4Ehg8", "state": { "url": "{{url}}" }, "title": "Load audio file" }, { "plugin": "toggle_button", "x": 537, "y": 269, "uid": "FmpwrDgExqBZ", "state": { "enabled": true }, "title": "Play" }], "conns": [{ "src_nuid": "Cxvgc66nBF6Y", "dst_nuid": "sEfEATyGM7Df", "src_slot": "bool", "dst_slot": "loop", "uid": "U64Qcq7KyAV4" }, { "src_nuid": "sEfEATyGM7Df", "dst_nuid": "AEtyS7yXsWGf", "src_slot": "source", "dst_slot": "source", "uid": "EtUCEKPAJVQv" }, { "src_nuid": "nfpDHJd4Ehg8", "dst_nuid": "sEfEATyGM7Df", "src_slot": "buffer", "dst_slot": "buffer", "uid": "EjYPeP9HBqeB" }, { "src_nuid": "FmpwrDgExqBZ", "dst_nuid": "sEfEATyGM7Df", "src_slot": "bool", "dst_slot": "play", "uid": "gukdZxYgWtmX" }] } }], "conns": [] } ================================================ FILE: browser/patchTemplates/scene.hbs ================================================ { "nodes": [ { "plugin": "entity", "x": 273, "y": 548, "uid": "3KbAxkHKuq90", "open": false, "state": { "always_update": true, "input_sids": {}, "output_sids": { "S2TweIhjn1vD": "Ys30r7aVEks1" } }, "title": "{{name}}", "graph": { "uid": "WWubrtgQmEwp", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "output_proxy", "x": 883, "y": 205, "uid": "S2TweIhjn1vD", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "UW8xhKSPhTFp", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "three_loader_scene", "x": 446, "y": 116, "uid": "kTkQLcbSMN4G", "state": { "position": { "x": 0, "y": 0, "z": 0 }, "scale": { "x": 0.00909090909090909, "y": 0.00909090909090909, "z": 0.00909090909090909 }, "quaternion": { "_x": 0, "_y": 0, "_z": 0, "_w": 1 }, "url": "{{url}}" } } ], "conns": [ { "src_nuid": "kTkQLcbSMN4G", "dst_nuid": "S2TweIhjn1vD", "src_slot": 0, "dst_slot": 0, "uid": "fEHjnSgovTSk", "src_connected": true, "dst_connected": true, "dst_dyn": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "Ys30r7aVEks1", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } ================================================ FILE: browser/patchTemplates/texture-plane.hbs ================================================ { "nodes": [ { "plugin": "entity", "x": 50, "y": 501, "uid": "lSaWUPbjt5on", "state": { "always_update": true, "input_sids": {}, "output_sids": { "aDPpmJxeYrvd": "mh0rTKkFm0nD" } }, "title": "{{name}}", "graph": { "uid": "nQMH4yQ6MgdG", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_mesh", "x": 1002, "y": 194, "uid": "P6Etq7Awqeli", "state": { "position": { "x": 0, "y": 0.5, "z": 0 }, "scale": { "x": 1, "y": 1, "z": 1 }, "quaternion": { "_x": 0, "_y": 0, "_z": 0, "_w": 1 } } }, { "plugin": "output_proxy", "x": 1233, "y": 197, "uid": "aDPpmJxeYrvd", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "bEdPpC9C6Rh1", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "three_geometry_plane", "x": 627, "y": 97, "uid": "xeLvzijpadE6" }, { "plugin": "three_material", "x": 634, "y": 277, "uid": "RkRPeA8c0KZg", "open": false }, { "plugin": "url_texture_generator", "x": 329, "y": 282, "uid": "ft7D2KfJixmo", "state": { "url": "{{scaled.url}}" } }, { "plugin": "const_float_generator", "x": 404, "y": 124, "uid": "ZuRQbYI3DQjB", "state": { "val": 1 }, "title": "Width & Height" }, { "plugin": "const_float_generator", "x": 402, "y": 442, "uid": "dPw7g3tZqn1u", "state": { "val": 2 }, "title": "Sides" }, { "plugin": "vector", "x": 762, "y": 337, "uid": "jyuUsyRpaRbo", "open": false, "title": "Position Vector" }, { "plugin": "const_float_generator", "x": 639, "y": 339, "uid": "5WDYLQCFTuZN", "state": { "val": 0.5 }, "title": "Y" } ], "conns": [ { "src_nuid": "P6Etq7Awqeli", "dst_nuid": "aDPpmJxeYrvd", "src_slot": 0, "dst_slot": 0, "uid": "MpWiwxN76xak", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "xeLvzijpadE6", "dst_nuid": "P6Etq7Awqeli", "src_slot": 0, "dst_slot": 1, "uid": "X7VxXu21TVo6", "src_connected": true, "dst_connected": true }, { "src_nuid": "RkRPeA8c0KZg", "dst_nuid": "P6Etq7Awqeli", "src_slot": 0, "dst_slot": 2, "uid": "f9aGv5XSujSw", "src_connected": true, "dst_connected": true }, { "src_nuid": "ft7D2KfJixmo", "dst_nuid": "RkRPeA8c0KZg", "src_slot": 0, "dst_slot": 0, "uid": "TsEIhffs6qaj", "src_connected": true, "dst_connected": true }, { "src_nuid": "ZuRQbYI3DQjB", "dst_nuid": "xeLvzijpadE6", "src_slot": 0, "dst_slot": 1, "uid": "OnAuEC4QwK8m", "src_connected": true, "dst_connected": true }, { "src_nuid": "ZuRQbYI3DQjB", "dst_nuid": "xeLvzijpadE6", "src_slot": 0, "dst_slot": 0, "uid": "vaonuZUykmiW", "src_connected": true, "dst_connected": true }, { "src_nuid": "dPw7g3tZqn1u", "dst_nuid": "RkRPeA8c0KZg", "src_slot": 0, "dst_slot": 8, "uid": "NR8Qk6Y3YxLa", "src_connected": true, "dst_connected": true }, { "src_nuid": "jyuUsyRpaRbo", "dst_nuid": "P6Etq7Awqeli", "src_slot": 0, "dst_slot": 3, "uid": "ayzVrzOk35Zx", "src_connected": true, "dst_connected": true }, { "src_nuid": "5WDYLQCFTuZN", "dst_nuid": "jyuUsyRpaRbo", "src_slot": 0, "dst_slot": 1, "uid": "PZx8jE8uwdwj", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "mh0rTKkFm0nD", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } ================================================ FILE: browser/patchTemplates/video-plane.hbs ================================================ { "abs_t": 367.574, "active_graph": "root", "graph_uid": "TXDgBc0JJtS3", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 256, "y": 373, "uid": "5zkZJ1kVzShg", "open": false, "state": { "always_update": true, "input_sids": {}, "output_sids": { "0uogYZhTulp7": "mh0rTKkFm0nD" } }, "title": "Video Player", "graph": { "uid": "Hzr5rg9SHgsb", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_mesh", "x": 936, "y": 319, "uid": "GxMrrSaA44wq", "open": false, "state": { "position": { "x": 0, "y": -0.01311748567091614, "z": 0.000023347093529794483 }, "scale": { "x": 16.260185647641777, "y": 16.260185647641777, "z": 16.260185647641777 }, "quaternion": { "_x": -0.7077357707678449, "_y": 0, "_z": 0, "_w": 0.7064772456816478 } } }, { "plugin": "output_proxy", "x": 1105, "y": 321, "uid": "0uogYZhTulp7", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "bEdPpC9C6Rh1", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "three_geometry_plane", "x": 751, "y": 270, "uid": "tr9n2eRfks8M", "open": false }, { "plugin": "video_player", "x": 488, "y": 443, "uid": "DKiwCxqBvTWY", "open": false }, { "plugin": "url_video_generator", "x": 213, "y": 383, "uid": "fzrkMl5UU1Ai", "state": { "url": "{{url}}" } }, { "plugin": "three_material", "x": 727, "y": 443, "uid": "HmBLJ6OJLRNE", "open": false }, { "plugin": "toggle_button", "x": 234, "y": 475, "uid": "py9oPpuzeuqs", "open": false, "state": { "enabled": true } } ], "conns": [ { "src_nuid": "GxMrrSaA44wq", "dst_nuid": "0uogYZhTulp7", "src_slot": 0, "dst_slot": 0, "uid": "lJTzbafg9t8D", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "tr9n2eRfks8M", "dst_nuid": "GxMrrSaA44wq", "src_slot": 0, "dst_slot": 1, "uid": "0XCswCxPk54c", "src_connected": true, "dst_connected": true }, { "src_nuid": "DKiwCxqBvTWY", "dst_nuid": "HmBLJ6OJLRNE", "src_slot": 0, "dst_slot": 0, "uid": "41pe2v5jS54Y", "src_connected": true, "dst_connected": true }, { "src_nuid": "HmBLJ6OJLRNE", "dst_nuid": "GxMrrSaA44wq", "src_slot": 0, "dst_slot": 2, "uid": "hXT3U5U8SycZ", "src_connected": true, "dst_connected": true }, { "src_nuid": "fzrkMl5UU1Ai", "dst_nuid": "DKiwCxqBvTWY", "src_slot": 0, "dst_slot": 0, "uid": "Sp4C04pxormC", "src_connected": true, "dst_connected": true }, { "src_nuid": "py9oPpuzeuqs", "dst_nuid": "DKiwCxqBvTWY", "src_slot": 0, "dst_slot": 1, "uid": "Jm6TxkfqY1az", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "mh0rTKkFm0nD", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } } ================================================ FILE: browser/patches/3d_plain_scene_loader.json ================================================ { "abs_t": 94.896, "active_graph": 0, "graph_uid": 19, "root": { "node_uid": 66, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 760, "y": 471, "uid": 65, "dsid": 1, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "39": 0 }, "output_sids": {} }, "title": "Plain scene loader", "graph": { "node_uid": 40, "uid": 17, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 654, "y": 89, "uid": 0, "dsid": 7, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "1": 0, "2": 1, "10": 2, "21": 5, "23": 6 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 27, "uid": 18, "parent_uid": 17, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 866, "y": 16, "uid": 0 }, { "plugin": "input_proxy", "x": 11, "y": 308, "uid": 1, "dsid": 14, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 759, "y": 89, "uid": 2, "dsid": 14, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "scale_matrix", "x": 639, "y": 215, "uid": 7 }, { "plugin": "vector", "x": 514, "y": 216, "uid": 8 }, { "plugin": "divide_modulator", "x": 405, "y": 236, "uid": 9 }, { "plugin": "input_proxy", "x": 297, "y": 206, "uid": 10, "dsid": 14, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "max_modulator", "x": 320, "y": 307, "uid": 11 }, { "plugin": "vector_magnitude", "x": 220, "y": 355, "uid": 12 }, { "plugin": "vector_magnitude", "x": 221, "y": 288, "uid": 13 }, { "plugin": "scene_get_bounding_box", "x": 89, "y": 307, "uid": 14 }, { "plugin": "input_proxy", "x": 646, "y": 277, "uid": 21, "dsid": 13, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 674, "y": 61, "uid": 23, "dsid": 10, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "concatenate_matrix_modulator", "x": 746, "y": 215, "uid": 26 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 12, "src_slot": 1, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 } ] }, "dyn_in": [ { "name": "scene", "dt": 11, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 5, "index": 3, "type": 0, "is_connected": false }, { "name": "material", "dt": 12, "uid": 6, "index": 4, "type": 0, "is_connected": false } ] }, { "plugin": "url_scene_generator", "x": 511, "y": 89, "uid": 37, "state": { "url": "/data/scene/ladybug/scene.json" } }, { "plugin": "const_float_generator", "x": 521, "y": 186, "uid": 38, "state": { "val": 1 } }, { "plugin": "input_proxy", "x": 406, "y": 135, "uid": 39, "dsid": 1, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "input", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 37, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 38, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 39, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "camera", "dt": 6, "uid": 0, "index": 0, "type": 0 } ] } ], "conns": [] } } ================================================ FILE: browser/patches/3d_plain_scene_loader_with_camera_and_light_out.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 7, "root": { "node_uid": 7, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 368, "y": 250, "uid": 5, "dsid": 2, "state": { "enabled": true, "input_sids": { "69": 0, "70": 1 }, "output_sids": {} }, "title": "Scene controls", "graph": { "node_uid": 72, "uid": 2, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 784, "y": 104, "uid": 0, "dsid": 7, "state": { "enabled": true, "input_sids": { "1": 0, "2": 1, "10": 2, "21": 5, "23": 6 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 26, "uid": 3, "parent_uid": 2, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 849, "y": 16, "uid": 0 }, { "plugin": "input_proxy", "x": 11, "y": 308, "uid": 1, "dsid": 15, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 707, "y": 122, "uid": 2, "dsid": 15, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "scale_matrix", "x": 648, "y": 205, "uid": 7 }, { "plugin": "vector", "x": 514, "y": 216, "uid": 8 }, { "plugin": "divide_modulator", "x": 400, "y": 235, "uid": 9 }, { "plugin": "input_proxy", "x": 280, "y": 204, "uid": 10, "dsid": 15, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "max_modulator", "x": 320, "y": 307, "uid": 11 }, { "plugin": "vector_magnitude", "x": 220, "y": 355, "uid": 12 }, { "plugin": "vector_magnitude", "x": 221, "y": 288, "uid": 13 }, { "plugin": "scene_get_bounding_box", "x": 89, "y": 307, "uid": 14 }, { "plugin": "input_proxy", "x": 647, "y": 265, "uid": 21, "dsid": 14, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 605, "y": 72, "uid": 23, "dsid": 11, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "concatenate_matrix_modulator", "x": 743, "y": 204, "uid": 25 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 12, "src_slot": 1, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 21, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 } ] }, "dyn_in": [ { "name": "scene", "dt": 11, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 6, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "url_scene_generator", "x": 629, "y": 124, "uid": 1, "state": { "url": "/data/scene/ladybug/scene.json" } }, { "plugin": "slider_float_generator", "x": 186, "y": 34, "uid": 6, "state": { "val": 1.7, "min": 0, "max": 10 }, "title": "Mesh scale" }, { "plugin": "graph", "x": 420, "y": 137, "uid": 19, "dsid": 8, "state": { "enabled": true, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 4, "parent_uid": 2, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 303, "y": 53, "uid": 2, "dsid": 16, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 92, "y": 53, "uid": 3 }, { "plugin": "input_proxy", "x": 23, "y": 11, "uid": 13, "dsid": 16, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 23, "y": 73, "uid": 14, "dsid": 16, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 23, "y": 135, "uid": 15, "dsid": 16, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 204, "y": 53, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 186, "y": 113, "uid": 20, "state": { "val": 0, "min": -10, "max": 10 }, "title": "x position" }, { "plugin": "slider_float_generator", "x": 186, "y": 192, "uid": 21, "state": { "val": 0, "min": -10, "max": 10 }, "title": "y position" }, { "plugin": "slider_float_generator", "x": 186, "y": 271, "uid": 22, "state": { "val": -2.6, "min": -10, "max": 10 }, "title": "z position" }, { "plugin": "graph", "x": 588, "y": 313, "uid": 47, "dsid": 20, "state": { "enabled": true, "input_sids": { "15": 3, "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16, "47": 18, "49": 19 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 51, "uid": 5, "parent_uid": 2, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "material_texture_modulator", "x": 1252, "y": 68, "uid": 7 }, { "plugin": "output_proxy", "x": 1361, "y": 68, "uid": 9, "dsid": 35, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 1173, "y": 143, "uid": 15, "dsid": 35, "state": { "slot_id": 0 }, "title": "Image", "dyn_out": [ { "name": "output", "dt": 2, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 29, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 29, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 29, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 29, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 29, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 564, "y": 212, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 454, "y": 148, "uid": 32, "dsid": 3, "state": { "enabled": true, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 6, "parent_uid": 5, "open": true, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 27, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 27, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 361, "y": 242, "uid": 34, "dsid": 23, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 323, "y": 161, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 30, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 30, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 30, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 61, "y": 99, "uid": 44, "dsid": 19, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 40, "y": 52, "uid": 47, "dsid": 14, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "output", "dt": 13, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 158, "y": 22, "uid": 48 }, { "plugin": "input_proxy", "x": 54, "y": 0, "uid": 49, "dsid": 11, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "toggle_button", "x": 574, "y": 276, "uid": 50, "state": { "enabled": true }, "title": "Depth write" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 47, "dst_nuid": 48, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 44, "dst_nuid": 48, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 48, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 49, "dst_nuid": 48, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 50, "dst_nuid": 27, "src_slot": 0, "dst_slot": 2 } ] }, "dyn_in": [ { "name": "Image", "dt": 2, "uid": 3, "index": 0, "type": 0, "is_connected": true }, { "name": "hue", "dt": 0, "uid": 4, "index": 1, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 2, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 3, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 4, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 5, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 6, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 7, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 8, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 9, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 10, "type": 0, "is_connected": false }, { "name": "light", "dt": 13, "uid": 18, "index": 11, "type": 0, "is_connected": true }, { "name": "light index", "dt": 0, "uid": 19, "index": 12, "type": 0 } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 233, "y": 365, "uid": 49, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 305, "y": 367, "uid": 50, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 384, "y": 367, "uid": 51, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 465, "y": 367, "uid": 52, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 129, "y": 432, "uid": 53, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 129, "y": 488, "uid": 54, "state": { "val": 0.10000000000000003 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 274, "y": 432, "uid": 55, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 366, "y": 432, "uid": 56, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 454, "y": 432, "uid": 57, "state": { "val": 0 }, "title": "Ambient Lum" }, { "plugin": "input_proxy", "x": 505, "y": 553, "uid": 69, "dsid": 7, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "output", "dt": 13, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 681, "y": 36, "uid": 70, "dsid": 7, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "url_texture_generator", "x": 113, "y": 365, "uid": 71, "state": { "url": "" } } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 20, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 21, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 22, "dst_nuid": 19, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 49, "dst_nuid": 47, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 50, "dst_nuid": 47, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 51, "dst_nuid": 47, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 52, "dst_nuid": 47, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 53, "dst_nuid": 47, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 54, "dst_nuid": 47, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 57, "dst_nuid": 47, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 56, "dst_nuid": 47, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 55, "dst_nuid": 47, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 47, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 69, "dst_nuid": 47, "src_slot": 0, "dst_slot": 11, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 70, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 71, "dst_nuid": 47, "src_slot": 0, "dst_slot": 0, "dst_dyn": true } ] }, "dyn_in": [ { "name": "light", "dt": 13, "uid": 0, "index": 0, "type": 0, "is_connected": false }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0, "is_connected": true } ] }, { "plugin": "register_global_read", "x": 273, "y": 310, "uid": 6, "dsid": 1, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "value", "dt": 6, "desc": "", "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true } ] }, "registers": [ { "id": "camera", "dt": 6 } ] } ================================================ FILE: browser/patches/3d_scene_loader_with_camera_and_transforms.json ================================================ { "abs_t": 26.752, "active_graph": 1, "graph_uid": 5, "root": { "node_uid": 1, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 376, "y": 455, "uid": 0, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": {} }, "title": "Scene controls", "graph": { "node_uid": 23, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 643, "y": 86, "uid": 0, "dsid": 7, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "1": 0, "2": 1, "10": 2, "21": 5, "23": 6 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 26, "uid": 2, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 868, "y": 16, "uid": 0 }, { "plugin": "input_proxy", "x": 11, "y": 308, "uid": 1, "dsid": 8, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 765, "y": 90, "uid": 2, "dsid": 8, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "scale_matrix", "x": 648, "y": 205, "uid": 7 }, { "plugin": "vector", "x": 514, "y": 216, "uid": 8 }, { "plugin": "divide_modulator", "x": 400, "y": 235, "uid": 9 }, { "plugin": "input_proxy", "x": 280, "y": 204, "uid": 10, "dsid": 8, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "max_modulator", "x": 320, "y": 307, "uid": 11 }, { "plugin": "vector_magnitude", "x": 220, "y": 355, "uid": 12 }, { "plugin": "vector_magnitude", "x": 221, "y": 288, "uid": 13 }, { "plugin": "scene_get_bounding_box", "x": 89, "y": 307, "uid": 14 }, { "plugin": "input_proxy", "x": 647, "y": 265, "uid": 21, "dsid": 7, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 666, "y": 76, "uid": 23, "dsid": 4, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "concatenate_matrix_modulator", "x": 764, "y": 205, "uid": 25 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 12, "src_slot": 1, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 21, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 } ] }, "dyn_in": [ { "name": "scene", "dt": 11, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 6, "index": 4, "type": 0 } ] }, { "plugin": "url_scene_generator", "x": 429, "y": 105, "uid": 1, "state": { "url": "/data/scene/ladybug/scene.json" } }, { "plugin": "graph", "x": 444, "y": 219, "uid": 2, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "0": 0, "1": 1, "2": 2 }, "output_sids": { "3": 3 } }, "title": "Camera", "graph": { "node_uid": 17, "uid": 3, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 133, "y": 210, "uid": 0, "dsid": 16, "state": { "slot_id": 0 }, "title": "rotation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 123, "y": 122, "uid": 1, "dsid": 16, "state": { "slot_id": 0 }, "title": "elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 15, "y": 44, "uid": 2, "dsid": 16, "state": { "slot_id": 0 }, "title": "dolly", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 566, "y": 100, "uid": 3, "dsid": 16, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "input", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "perspective_camera", "x": 448, "y": 100, "uid": 4 }, { "plugin": "vector", "x": 214, "y": 52, "uid": 5 }, { "plugin": "rotation_xyz_matrix", "x": 218, "y": 170, "uid": 6 }, { "plugin": "vector_transform", "x": 340, "y": 100, "uid": 7 }, { "plugin": "negate_modulator", "x": 107, "y": 55, "uid": 16 } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 7, "dst_nuid": 4, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 0, "dst_nuid": 6, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "rotation", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "elevation", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "dolly", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 24, "y": 104, "uid": 3, "state": { "val": 0, "min": -180, "max": 180 }, "title": "Camera Rotation" }, { "plugin": "slider_float_generator", "x": 24, "y": 191, "uid": 4, "state": { "val": 1.2, "min": -20, "max": 20 }, "title": "Camera Elevation" }, { "plugin": "slider_float_generator", "x": 24, "y": 279, "uid": 5, "state": { "val": 5.1, "min": 0, "max": 10 }, "title": "Camera Dolly" }, { "plugin": "slider_float_generator", "x": 429, "y": 16, "uid": 6, "state": { "val": 3.5, "min": 0, "max": 10 }, "title": "Mesh scale" }, { "plugin": "graph", "x": 466, "y": 344, "uid": 19, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 4, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 303, "y": 53, "uid": 2, "dsid": 9, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 92, "y": 53, "uid": 3 }, { "plugin": "input_proxy", "x": 23, "y": 11, "uid": 13, "dsid": 9, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 23, "y": 73, "uid": 14, "dsid": 9, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 23, "y": 135, "uid": 15, "dsid": 9, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 204, "y": 53, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 222, "y": 104, "uid": 20, "state": { "val": 0, "min": -10, "max": 10 }, "title": "x position" }, { "plugin": "slider_float_generator", "x": 222, "y": 191, "uid": 21, "state": { "val": 0, "min": -10, "max": 10 }, "title": "y position" }, { "plugin": "slider_float_generator", "x": 222, "y": 280, "uid": 22, "state": { "val": 0, "min": "-10", "max": "10" }, "title": "z position" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 20, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 21, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 22, "dst_nuid": 19, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_dyn": true, "dst_dyn": true } ] } } ], "conns": [] } } ================================================ FILE: browser/patches/3d_scene_loader_with_mousecontrol.json ================================================ { "abs_t": 41.681, "active_graph": 3, "graph_uid": 8, "root": { "node_uid": 2, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 380, "y": 374, "uid": 1, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": {} }, "title": "Scene", "graph": { "node_uid": 29, "uid": 3, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 879, "y": 14, "uid": 0, "dsid": 7, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "58": 0, "59": 1, "61": 2, "62": 3, "63": 4, "64": 5, "75": 6 }, "output_sids": {} }, "title": "Scene Loader", "graph": { "node_uid": 77, "uid": 4, "parent_uid": 3, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 1866, "y": 3, "uid": 0 }, { "plugin": "perspective_camera", "x": 1726, "y": 157, "uid": 2 }, { "plugin": "vector", "x": 1512, "y": 171, "uid": 3 }, { "plugin": "vector_transform", "x": 1629, "y": 217, "uid": 4 }, { "plugin": "rotation_xyz_matrix", "x": 1315, "y": 414, "uid": 5 }, { "plugin": "mouse_position_generator", "x": 13, "y": 558, "uid": 10 }, { "plugin": "multiply_modulator", "x": 1038, "y": 453, "uid": 11 }, { "plugin": "const_float_generator", "x": 944, "y": 539, "uid": 12, "state": { "val": -360 }, "title": "Rotation range" }, { "plugin": "multiply_modulator", "x": 859, "y": 881, "uid": 13 }, { "plugin": "const_float_generator", "x": 737, "y": 929, "uid": 14, "state": { "val": -10 }, "title": "Elev. sensitivity" }, { "plugin": "subtract_modulator", "x": 659, "y": 841, "uid": 18 }, { "plugin": "const_float_generator", "x": 527, "y": 928, "uid": 19, "state": { "val": 0.5 }, "title": "Elevation bias" }, { "plugin": "mouse_button_generator", "x": 235, "y": 669, "uid": 20 }, { "plugin": "sample_and_hold_modulator", "x": 515, "y": 841, "uid": 22, "state": { "value": 0.48518518518518516 } }, { "plugin": "sample_and_hold_modulator", "x": 526, "y": 538, "uid": 23, "state": { "value": 0.46458333333333335 } }, { "plugin": "clock_generator", "x": 13, "y": 390, "uid": 24 }, { "plugin": "multiply_modulator", "x": 119, "y": 335, "uid": 25 }, { "plugin": "const_float_generator", "x": 13, "y": 321, "uid": 26, "state": { "val": 0 }, "title": "Zero" }, { "plugin": "add_modulator", "x": 660, "y": 473, "uid": 27 }, { "plugin": "lowpass_filter_modulator", "x": 1142, "y": 489, "uid": 28 }, { "plugin": "const_float_generator", "x": 731, "y": 536, "uid": 29, "state": { "val": 0.95 }, "title": "LP filt. amt." }, { "plugin": "annotation", "x": 505, "y": 293, "uid": 30, "state": { "text": "Because the sample & hold plugin doesn't emit values more then once after it stops sampling, and since the lowpass filter would stall without continous input, we add a clock-driven, zeroed out float value to the output to 'drive' the lowpass filter, so that the kinetic rotation continues even when mouse input is blocked.", "width": 231, "height": 120 } }, { "plugin": "mouse_wheel_generator", "x": 823, "y": 88, "uid": 31 }, { "plugin": "multiply_modulator", "x": 976, "y": 88, "uid": 33 }, { "plugin": "clamped_accumulate_modulator", "x": 1111, "y": 135, "uid": 34, "state": { "value": 1 }, "title": "Clamped acc." }, { "plugin": "const_float_generator", "x": 993, "y": 265, "uid": 35, "state": { "val": 20 }, "title": "Max. dolly" }, { "plugin": "lowpass_filter_modulator", "x": 1317, "y": 272, "uid": 36 }, { "plugin": "add_modulator", "x": 1232, "y": 207, "uid": 37 }, { "plugin": "const_float_generator", "x": 982, "y": 201, "uid": 38, "state": { "val": 1 }, "title": "Min. dolly" }, { "plugin": "scale_matrix", "x": 1247, "y": 840, "uid": 39 }, { "plugin": "vector", "x": 1106, "y": 1012, "uid": 40 }, { "plugin": "scene_get_bounding_box", "x": 572, "y": 1080, "uid": 41 }, { "plugin": "max_modulator", "x": 799, "y": 1082, "uid": 42 }, { "plugin": "divide_modulator", "x": 1008, "y": 1084, "uid": 43 }, { "plugin": "vector_magnitude", "x": 701, "y": 1061, "uid": 45 }, { "plugin": "vector_magnitude", "x": 700, "y": 1131, "uid": 46 }, { "plugin": "annotation", "x": 1107, "y": 1106, "uid": 47, "state": { "text": "Scale the scene such that the most distant vertex in local space is 'Mesh scale' units away from the world origin.", "width": 162, "height": 61 } }, { "plugin": "annotation", "x": 530, "y": 87, "uid": 48, "state": { "text": "Mouse z movement rotates the current scene and mouse y controls elevation. Mouse control can be en- or disabled by clicking the webgl canvas, so the camera can be frozen, while playing with the settings.", "width": 260, "height": 63 } }, { "plugin": "annotation", "x": 516, "y": 684, "uid": 49, "state": { "text": "Use sample and hold to either pass through the mouse coordinates or freeze the flow depending on the state of the toggle driven by left mouse click.\n\nUse clock driven lowpass (via the add) to give kinetic scrolling, even after the toggle has disabled.", "width": 217, "height": 110 } }, { "plugin": "annotation", "x": 1234, "y": 113, "uid": 50, "state": { "text": "This add is here to make this lowpass filter clock driven as well.", "width": 156, "height": 37 } }, { "plugin": "concatenate_matrix_modulator", "x": 1622, "y": 726, "uid": 51 }, { "plugin": "translation_matrix", "x": 1493, "y": 947, "uid": 52 }, { "plugin": "vector", "x": 1352, "y": 946, "uid": 53 }, { "plugin": "negate_modulator", "x": 743, "y": 841, "uid": 56 }, { "plugin": "annotation", "x": 854, "y": 334, "uid": 57, "state": { "text": "Use the delta of the x mouse movement and accumulate it. By hooking the delta plugins reset slot up to the toggle trigger, we can avoid an unpleasant jump when the user reactivates rotation by clicking the canvas (for comparison, the elevation does jump).", "width": 294, "height": 72 } }, { "plugin": "input_proxy", "x": 900, "y": 1084, "uid": 58, "dsid": 21, "state": { "slot_id": 0 }, "title": "Mesh Scale", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 1252, "y": 906, "uid": 59, "dsid": 21, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 1252, "y": 966, "uid": 61, "dsid": 21, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 1253, "y": 1027, "uid": 62, "dsid": 21, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 301, "y": 100, "uid": 63, "dsid": 21, "state": { "slot_id": 0 }, "title": "Scene", "dyn_out": [ { "name": "output", "dt": 11, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 823, "y": 143, "uid": 64, "dsid": 19, "state": { "slot_id": 0 }, "title": "Mouse sensitivity", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector", "x": 1604, "y": 416, "uid": 65 }, { "plugin": "const_float_generator", "x": 1473, "y": 456, "uid": 66, "state": { "val": 0 } }, { "plugin": "const_float_generator", "x": 1477, "y": 393, "uid": 67, "state": { "val": 0.1 } }, { "plugin": "const_float_generator", "x": 1486, "y": 520, "uid": 70, "state": { "val": 0.5 } }, { "plugin": "add_modulator", "x": 947, "y": 454, "uid": 71 }, { "plugin": "const_float_generator", "x": 795, "y": 604, "uid": 72, "state": { "val": 0.5 }, "title": "Offset" }, { "plugin": "input_proxy", "x": 1437, "y": 115, "uid": 75, "dsid": 6, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "negate_modulator", "x": 1418, "y": 208, "uid": 76 } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 51, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 3, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 22, "src_slot": 1, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 23, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 28, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 56, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 18, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 22, "dst_nuid": 18, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 18, "dst_nuid": 56, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 23, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 24, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 26, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 25, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 25, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 29, "dst_nuid": 28, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 29, "dst_nuid": 36, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 31, "dst_nuid": 33, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 33, "dst_nuid": 34, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 35, "dst_nuid": 34, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 38, "dst_nuid": 34, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 34, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 37, "dst_nuid": 36, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 40, "dst_nuid": 39, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 43, "dst_nuid": 40, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 43, "dst_nuid": 40, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 43, "dst_nuid": 40, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 41, "dst_nuid": 45, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 41, "dst_nuid": 46, "src_slot": 1, "dst_slot": 0 }, { "src_nuid": 45, "dst_nuid": 42, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 46, "dst_nuid": 42, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 42, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 53, "dst_nuid": 52, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 58, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 59, "dst_nuid": 53, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 61, "dst_nuid": 53, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 62, "dst_nuid": 53, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 63, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 63, "dst_nuid": 41, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 64, "dst_nuid": 33, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 52, "dst_nuid": 51, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 65, "dst_nuid": 2, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 66, "dst_nuid": 65, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 66, "dst_nuid": 65, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 67, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 70, "dst_nuid": 65, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 71, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 71, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 72, "dst_nuid": 71, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 20, "dst_nuid": 23, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 75, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 36, "dst_nuid": 76, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 76, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 28, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 39, "dst_nuid": 51, "src_slot": 0, "dst_slot": 0 } ] }, "dyn_in": [ { "name": "Mesh Scale", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "X", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true }, { "name": "Scene", "dt": 11, "uid": 4, "index": 4, "type": 0, "is_connected": true }, { "name": "Mouse sensitivity", "dt": 0, "uid": 5, "index": 5, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 6, "index": 6, "type": 0, "is_connected": true } ] }, { "plugin": "slider_float_generator", "x": 18, "y": 96, "uid": 1, "state": { "val": 1, "min": 1, "max": 10 }, "title": "Mesh scale" }, { "plugin": "slider_float_generator", "x": 416, "y": 10, "uid": 2, "state": { "val": 0, "min": -10, "max": 10 }, "title": "Mesh X" }, { "plugin": "slider_float_generator", "x": 415, "y": 79, "uid": 3, "state": { "val": 0, "min": -10, "max": 10 }, "title": "Mesh Y" }, { "plugin": "slider_float_generator", "x": 417, "y": 149, "uid": 4, "state": { "val": 0, "min": -10, "max": 10 }, "title": "Mesh Z" }, { "plugin": "url_scene_generator", "x": 737, "y": 14, "uid": 5, "state": { "url": "/data/scene/ladybug/scene.json" }, "title": "Load Scene" }, { "plugin": "slider_float_generator", "x": 210, "y": 7, "uid": 6, "state": { "val": 0.9, "min": 0, "max": 1 }, "title": "Mouse sensitivity" }, { "plugin": "graph", "x": 680, "y": 227, "uid": 19, "dsid": 18, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 47, "uid": 6, "parent_uid": 3, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "output_proxy", "x": 1250, "y": 71, "uid": 9, "dsid": 28, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 22, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 22, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 22, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 22, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 22, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 574, "y": 162, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 470, "y": 149, "uid": 32, "dsid": 3, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 7, "parent_uid": 6, "open": true, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 20, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 20, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 426, "y": 241, "uid": 34, "dsid": 16, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 362, "y": 146, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 23, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 23, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 23, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 58, "y": 70, "uid": 44, "dsid": 12, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 44, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "hue", "dt": 0, "uid": 4, "index": 0, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 1, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 2, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 3, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 4, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 5, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 6, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 7, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 8, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 9, "type": 0, "is_connected": false } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 301, "y": 238, "uid": 20, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 374, "y": 238, "uid": 21, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 453, "y": 238, "uid": 22, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 534, "y": 238, "uid": 23, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 455, "y": 304, "uid": 24, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 374, "y": 304, "uid": 25, "state": { "val": 0 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 333, "y": 376, "uid": 26, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 425, "y": 376, "uid": 27, "state": { "val": 0.9600000000000004 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 513, "y": 376, "uid": 28, "state": { "val": 0 }, "title": "Ambient Lum" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 20, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 21, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 22, "dst_nuid": 19, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 23, "dst_nuid": 19, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 24, "dst_nuid": 19, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 25, "dst_nuid": 19, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 28, "dst_nuid": 19, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 27, "dst_nuid": 19, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 26, "dst_nuid": 19, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 0, "src_slot": 0, "dst_slot": 6, "src_dyn": true, "dst_dyn": true } ] } } ], "conns": [] } } ================================================ FILE: browser/patches/3d_scene_material_light_transforms.json ================================================ { "abs_t": 27.443, "active_graph": 0, "graph_uid": 13, "root": { "node_uid": 7, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 795, "y": 390, "uid": 6, "dsid": 1, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "104": 0 }, "output_sids": {} }, "title": "Scene 1", "graph": { "node_uid": 105, "uid": 4, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 1459, "y": 113, "uid": 0, "dsid": 7, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "1": 0, "2": 1, "10": 2, "21": 5, "23": 6 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 26, "uid": 5, "parent_uid": 4, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 868, "y": 16, "uid": 0 }, { "plugin": "input_proxy", "x": 11, "y": 308, "uid": 1, "dsid": 21, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 788, "y": 63, "uid": 2, "dsid": 21, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "scale_matrix", "x": 648, "y": 205, "uid": 7 }, { "plugin": "vector", "x": 514, "y": 216, "uid": 8 }, { "plugin": "divide_modulator", "x": 400, "y": 235, "uid": 9 }, { "plugin": "input_proxy", "x": 280, "y": 204, "uid": 10, "dsid": 21, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "max_modulator", "x": 320, "y": 307, "uid": 11 }, { "plugin": "vector_magnitude", "x": 220, "y": 355, "uid": 12 }, { "plugin": "vector_magnitude", "x": 221, "y": 288, "uid": 13 }, { "plugin": "scene_get_bounding_box", "x": 89, "y": 307, "uid": 14 }, { "plugin": "input_proxy", "x": 647, "y": 265, "uid": 21, "dsid": 20, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 569, "y": 434, "uid": 23, "dsid": 17, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "concatenate_matrix_modulator", "x": 763, "y": 184, "uid": 25 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 12, "src_slot": 1, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 21, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 } ] }, "dyn_in": [ { "name": "scene", "dt": 11, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 6, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "url_scene_generator", "x": 198, "y": 50, "uid": 1, "state": { "url": "/data/scene/ladybug/scene.json" } }, { "plugin": "slider_float_generator", "x": 328, "y": 30, "uid": 6, "state": { "val": 1.6666666666666665, "min": 0, "max": 10 }, "title": "Mesh scale" }, { "plugin": "graph", "x": 463, "y": 570, "uid": 69, "open": false, "dsid": 14, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 1, "14": 2, "15": 3, "16": 4, "17": 5, "18": 6, "19": 7, "22": 8, "23": 9, "24": 10, "26": 11, "28": 13 }, "output_sids": { "27": 12 } }, "title": "Light chain", "graph": { "node_uid": 29, "uid": 6, "parent_uid": 4, "open": true, "nodes": [ { "plugin": "light_type_modulator", "x": 692, "y": 216, "uid": 0 }, { "plugin": "light_position_modulator", "x": 604, "y": 215, "uid": 2 }, { "plugin": "light_diffuse_color_modulator", "x": 200, "y": 217, "uid": 3 }, { "plugin": "light_direction_modulator", "x": 521, "y": 215, "uid": 4 }, { "plugin": "light_intensity_modulator", "x": 430, "y": 219, "uid": 5 }, { "plugin": "light_specular_color_modulator", "x": 309, "y": 219, "uid": 6 }, { "plugin": "vector", "x": 494, "y": 380, "uid": 7 }, { "plugin": "input_proxy", "x": 609, "y": 401, "uid": 13, "dsid": 21, "state": { "slot_id": 0 }, "title": "light type", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 413, "y": 532, "uid": 14, "dsid": 21, "state": { "slot_id": 0 }, "title": "Pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 581, "uid": 15, "dsid": 22, "state": { "slot_id": 0 }, "title": "Pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 627, "uid": 16, "dsid": 23, "state": { "slot_id": 0 }, "title": "Pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 350, "y": 358, "uid": 17, "dsid": 21, "state": { "slot_id": 0 }, "title": "intensity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 196, "y": 340, "uid": 18, "dsid": 21, "state": { "slot_id": 0 }, "title": "specular color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 80, "y": 347, "uid": 19, "dsid": 22, "state": { "slot_id": 0 }, "title": "diffuse color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector_normalize", "x": 361, "y": 452, "uid": 20 }, { "plugin": "vector", "x": 248, "y": 461, "uid": 21 }, { "plugin": "input_proxy", "x": 146, "y": 479, "uid": 22, "dsid": 22, "state": { "slot_id": 0 }, "title": "Dir x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 528, "uid": 23, "dsid": 23, "state": { "slot_id": 0 }, "title": "Dir y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 574, "uid": 24, "dsid": 24, "state": { "slot_id": 0 }, "title": "Dir z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 777, "y": 133, "uid": 25 }, { "plugin": "input_proxy", "x": 681, "y": 135, "uid": 26, "dsid": 20, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 900, "y": 133, "uid": 27, "dsid": 20, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 569, "y": 134, "uid": 28, "dsid": 20, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 21, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 22, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 25, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 26, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 28, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "light type", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Pos x", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Pos y", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true }, { "name": "Pos z", "dt": 0, "uid": 4, "index": 3, "type": 0, "is_connected": true }, { "name": "intensity", "dt": 0, "uid": 5, "index": 4, "type": 0, "is_connected": true }, { "name": "specular color", "dt": 3, "uid": 6, "index": 5, "type": 0, "is_connected": true }, { "name": "diffuse color", "dt": 3, "uid": 7, "index": 6, "type": 0, "is_connected": true }, { "name": "Dir x", "dt": 0, "uid": 8, "index": 7, "type": 0, "is_connected": true }, { "name": "Dir y", "dt": 0, "uid": 9, "index": 8, "type": 0, "is_connected": true }, { "name": "Dir z", "dt": 0, "uid": 10, "index": 9, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 11, "index": 10, "type": 0 }, { "name": "light index", "dt": 0, "uid": 13, "index": 11, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 12, "index": 0, "type": 1 } ] }, { "plugin": "light_type_generator", "x": 28, "y": 575, "uid": 70, "state": { "type": 0 } }, { "plugin": "slider_float_generator", "x": 269, "y": 577, "uid": 71, "state": { "val": 0.5333333333333333, "min": 0, "max": 2 }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 69, "y": 648, "uid": 72, "state": { "val": -0.08, "min": -2, "max": 2 }, "title": "Light position X" }, { "plugin": "slider_float_generator", "x": 69, "y": 714, "uid": 73, "state": { "val": -0.28, "min": -2, "max": 2 }, "title": "Light position Y" }, { "plugin": "slider_float_generator", "x": 69, "y": 782, "uid": 74, "state": { "val": 1.16, "min": -2, "max": 2 }, "title": "Light position Z" }, { "plugin": "slider_float_generator", "x": 267, "y": 649, "uid": 75, "open": false, "state": { "val": -0.44, "min": -2, "max": 2 }, "title": "Light direction X" }, { "plugin": "slider_float_generator", "x": 267, "y": 718, "uid": 76, "open": false, "state": { "val": -1.04, "min": -2, "max": 2 }, "title": "Light direction Y" }, { "plugin": "slider_float_generator", "x": 267, "y": 783, "uid": 77, "open": false, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light direction z" }, { "plugin": "color_picker", "x": 71, "y": 863, "uid": 78, "state": { "hue": 0, "sat": 0, "lum": 0.95 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 257, "y": 864, "uid": 79, "state": { "hue": 0, "sat": 0, "lum": 0.97 }, "title": "Specular color" }, { "plugin": "const_float_generator", "x": 165, "y": 575, "uid": 80, "state": { "val": 1 }, "title": "Light index" }, { "plugin": "graph", "x": 619, "y": 349, "uid": 81, "open": false, "dsid": 18, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 47, "uid": 7, "parent_uid": 4, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "output_proxy", "x": 1250, "y": 71, "uid": 9, "dsid": 36, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 30, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 30, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 30, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 30, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 30, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 564, "y": 287, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 470, "y": 149, "uid": 32, "dsid": 3, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 8, "parent_uid": 7, "open": true, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 28, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 28, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 426, "y": 241, "uid": 34, "dsid": 24, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 362, "y": 146, "uid": 36, "state": { "enabled": true }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 31, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 31, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 31, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 58, "y": 70, "uid": 44, "dsid": 20, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 44, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "hue", "dt": 0, "uid": 4, "index": 0, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 1, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 2, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 3, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 4, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 5, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 6, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 7, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 8, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 9, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 298, "y": 345, "uid": 82, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 378, "y": 349, "uid": 83, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 457, "y": 349, "uid": 84, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 538, "y": 349, "uid": 85, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 459, "y": 415, "uid": 86, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 378, "y": 415, "uid": 87, "state": { "val": 0.09999999999999999 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 337, "y": 487, "uid": 88, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 429, "y": 487, "uid": 89, "state": { "val": 0 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 517, "y": 487, "uid": 90, "state": { "val": 0.04 }, "title": "Ambient Lum" }, { "plugin": "graph", "x": 1163, "y": 333, "uid": 91, "open": false, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "Rotate", "graph": { "node_uid": 21, "uid": 9, "parent_uid": 4, "open": true, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 367, "y": 174, "uid": 0 }, { "plugin": "output_proxy", "x": 485, "y": 174, "uid": 1, "dsid": 11, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 80, "uid": 8, "dsid": 11, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 170, "uid": 9, "dsid": 11, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 46, "y": 257, "uid": 10, "dsid": 11, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 40, "y": 386, "uid": 11, "state": { "val": 180 } }, { "plugin": "const_float_generator", "x": 15, "y": 317, "uid": 12, "state": { "val": 360 } }, { "plugin": "multiply_modulator", "x": 165, "y": 80, "uid": 15 }, { "plugin": "subtract_modulator", "x": 260, "y": 105, "uid": 16 }, { "plugin": "multiply_modulator", "x": 165, "y": 170, "uid": 17 }, { "plugin": "subtract_modulator", "x": 260, "y": 195, "uid": 18 }, { "plugin": "multiply_modulator", "x": 163, "y": 257, "uid": 19 }, { "plugin": "subtract_modulator", "x": 258, "y": 282, "uid": 20 } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 17, "dst_nuid": 18, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 12, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 12, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 11, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 18, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 11, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 16, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 18, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 20, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2 } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 872, "y": 324, "uid": 92, "state": { "val": 0.09000000000000002 }, "title": "Rotate X" }, { "plugin": "knob_float_generator", "x": 872, "y": 397, "uid": 93, "state": { "val": 0.009999999999999941 }, "title": "Rotate Y" }, { "plugin": "knob_float_generator", "x": 872, "y": 471, "uid": 94, "state": { "val": 0 }, "title": "Rotate Z" }, { "plugin": "graph", "x": 1161, "y": 396, "uid": 95, "open": false, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 10, "parent_uid": 4, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 189, "y": 49, "uid": 0 }, { "plugin": "output_proxy", "x": 278, "y": 49, "uid": 2, "dsid": 10, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 73, "y": 49, "uid": 3 }, { "plugin": "input_proxy", "x": 7, "y": 9, "uid": 13, "dsid": 10, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 69, "uid": 14, "dsid": 10, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 132, "uid": 15, "dsid": 10, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 1162, "y": 365, "uid": 96, "open": false, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 11, "parent_uid": 4, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 291, "y": 50, "uid": 2, "dsid": 12, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 74, "y": 50, "uid": 3 }, { "plugin": "input_proxy", "x": 8, "y": 10, "uid": 13, "dsid": 12, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 70, "uid": 14, "dsid": 12, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 129, "uid": 15, "dsid": 12, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 191, "y": 50, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 959, "y": 328, "uid": 97, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position X" }, { "plugin": "slider_float_generator", "x": 959, "y": 389, "uid": 98, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Y" }, { "plugin": "slider_float_generator", "x": 959, "y": 451, "uid": 99, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Z" }, { "plugin": "const_float_generator", "x": 871, "y": 549, "uid": 100, "state": { "val": 1 }, "title": "Scale X" }, { "plugin": "const_float_generator", "x": 870, "y": 608, "uid": 101, "state": { "val": 1 }, "title": "Scale Y" }, { "plugin": "const_float_generator", "x": 868, "y": 668, "uid": 102, "state": { "val": 1 }, "title": "Scale Z" }, { "plugin": "graph", "x": 1274, "y": 320, "uid": 103, "open": false, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 12, "parent_uid": 4, "open": true, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 274, "y": 13, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 92, "y": 13, "uid": 1 }, { "plugin": "output_proxy", "x": 394, "y": 13, "uid": 2, "dsid": 10, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 197, "y": 14, "uid": 3, "dsid": 10, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 13, "uid": 4, "dsid": 10, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 71, "uid": 5, "dsid": 10, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 1036, "y": 65, "uid": 104, "dsid": 6, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "input", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 70, "dst_nuid": 69, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 71, "dst_nuid": 69, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 72, "dst_nuid": 69, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 73, "dst_nuid": 69, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 74, "dst_nuid": 69, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 75, "dst_nuid": 69, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 76, "dst_nuid": 69, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 77, "dst_nuid": 69, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 78, "dst_nuid": 69, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 79, "dst_nuid": 69, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 80, "dst_nuid": 69, "src_slot": 0, "dst_slot": 11, "dst_dyn": true }, { "src_nuid": 82, "dst_nuid": 81, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 83, "dst_nuid": 81, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 84, "dst_nuid": 81, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 85, "dst_nuid": 81, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 86, "dst_nuid": 81, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 87, "dst_nuid": 81, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 90, "dst_nuid": 81, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 89, "dst_nuid": 81, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 88, "dst_nuid": 81, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 69, "dst_nuid": 81, "src_slot": 0, "dst_slot": 9, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 81, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 92, "dst_nuid": 91, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 93, "dst_nuid": 91, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 94, "dst_nuid": 91, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 97, "dst_nuid": 96, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 98, "dst_nuid": 96, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 99, "dst_nuid": 96, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 100, "dst_nuid": 95, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 101, "dst_nuid": 95, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 102, "dst_nuid": 95, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 96, "dst_nuid": 103, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 91, "dst_nuid": 103, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 95, "dst_nuid": 103, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 103, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 104, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "camera", "dt": 6, "uid": 0, "index": 0, "type": 0, "is_connected": false } ] } ], "conns": [] } } ================================================ FILE: browser/patches/3d_scene_with_camera_material_lights.json ================================================ { "abs_t": 420.018, "active_graph": 0, "graph_uid": 11, "root": { "node_uid": 1, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 408, "y": 212, "uid": 0, "state": { "enabled": true, "always_update": true, "rt_width": "512", "rt_height": "512", "rt_filter": "9729", "input_sids": {}, "output_sids": {} }, "title": "3D scene", "graph": { "node_uid": 109, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 1428, "y": 227, "uid": 0, "open": false, "dsid": 7, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "1": 0, "2": 1, "10": 2, "21": 5, "23": 6 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 26, "uid": 2, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 868, "y": 16, "uid": 0 }, { "plugin": "input_proxy", "x": 11, "y": 308, "uid": 1, "dsid": 18, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 788, "y": 63, "uid": 2, "dsid": 18, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "scale_matrix", "x": 648, "y": 205, "uid": 7 }, { "plugin": "vector", "x": 514, "y": 216, "uid": 8 }, { "plugin": "divide_modulator", "x": 400, "y": 235, "uid": 9 }, { "plugin": "input_proxy", "x": 280, "y": 204, "uid": 10, "dsid": 18, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "max_modulator", "x": 320, "y": 307, "uid": 11 }, { "plugin": "vector_magnitude", "x": 220, "y": 355, "uid": 12 }, { "plugin": "vector_magnitude", "x": 221, "y": 288, "uid": 13 }, { "plugin": "scene_get_bounding_box", "x": 89, "y": 307, "uid": 14 }, { "plugin": "input_proxy", "x": 647, "y": 265, "uid": 21, "dsid": 17, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 569, "y": 434, "uid": 23, "dsid": 14, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "concatenate_matrix_modulator", "x": 763, "y": 184, "uid": 25 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 12, "src_slot": 1, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 21, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 } ] }, "dyn_in": [ { "name": "scene", "dt": 11, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 6, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "url_scene_generator", "x": 87, "y": 46, "uid": 1, "state": { "url": "/data/scene/ladybug/scene.json" } }, { "plugin": "slider_float_generator", "x": 1319, "y": 281, "uid": 6, "open": false, "state": { "val": 1, "min": 0, "max": 10 }, "title": "Mesh scale" }, { "plugin": "graph", "x": 551, "y": 807, "uid": 69, "open": false, "dsid": 14, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "13": 1, "14": 2, "15": 3, "16": 4, "17": 5, "18": 6, "19": 7, "22": 8, "23": 9, "24": 10, "26": 11, "28": 13 }, "output_sids": { "27": 12 } }, "title": "Light chain", "graph": { "node_uid": 29, "uid": 3, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "light_type_modulator", "x": 692, "y": 216, "uid": 0 }, { "plugin": "light_position_modulator", "x": 604, "y": 215, "uid": 2 }, { "plugin": "light_diffuse_color_modulator", "x": 200, "y": 217, "uid": 3 }, { "plugin": "light_direction_modulator", "x": 521, "y": 215, "uid": 4 }, { "plugin": "light_intensity_modulator", "x": 430, "y": 219, "uid": 5 }, { "plugin": "light_specular_color_modulator", "x": 309, "y": 219, "uid": 6 }, { "plugin": "vector", "x": 494, "y": 380, "uid": 7 }, { "plugin": "input_proxy", "x": 609, "y": 401, "uid": 13, "dsid": 18, "state": { "slot_id": 0 }, "title": "light type", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 413, "y": 532, "uid": 14, "dsid": 18, "state": { "slot_id": 0 }, "title": "Pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 581, "uid": 15, "dsid": 19, "state": { "slot_id": 0 }, "title": "Pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 627, "uid": 16, "dsid": 20, "state": { "slot_id": 0 }, "title": "Pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 350, "y": 358, "uid": 17, "dsid": 18, "state": { "slot_id": 0 }, "title": "intensity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 196, "y": 340, "uid": 18, "dsid": 18, "state": { "slot_id": 0 }, "title": "specular color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 80, "y": 347, "uid": 19, "dsid": 19, "state": { "slot_id": 0 }, "title": "diffuse color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector_normalize", "x": 361, "y": 452, "uid": 20 }, { "plugin": "vector", "x": 248, "y": 461, "uid": 21 }, { "plugin": "input_proxy", "x": 146, "y": 479, "uid": 22, "dsid": 19, "state": { "slot_id": 0 }, "title": "Dir x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 528, "uid": 23, "dsid": 20, "state": { "slot_id": 0 }, "title": "Dir y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 574, "uid": 24, "dsid": 21, "state": { "slot_id": 0 }, "title": "Dir z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 777, "y": 133, "uid": 25 }, { "plugin": "input_proxy", "x": 681, "y": 135, "uid": 26, "dsid": 17, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 900, "y": 133, "uid": 27, "dsid": 17, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 569, "y": 134, "uid": 28, "dsid": 17, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 21, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 22, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 25, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 26, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 28, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "light type", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Pos x", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Pos y", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true }, { "name": "Pos z", "dt": 0, "uid": 4, "index": 3, "type": 0, "is_connected": true }, { "name": "intensity", "dt": 0, "uid": 5, "index": 4, "type": 0, "is_connected": true }, { "name": "specular color", "dt": 3, "uid": 6, "index": 5, "type": 0, "is_connected": true }, { "name": "diffuse color", "dt": 3, "uid": 7, "index": 6, "type": 0, "is_connected": true }, { "name": "Dir x", "dt": 0, "uid": 8, "index": 7, "type": 0, "is_connected": true }, { "name": "Dir y", "dt": 0, "uid": 9, "index": 8, "type": 0, "is_connected": true }, { "name": "Dir z", "dt": 0, "uid": 10, "index": 9, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 11, "index": 10, "type": 0 }, { "name": "light index", "dt": 0, "uid": 13, "index": 11, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 12, "index": 0, "type": 1 } ] }, { "plugin": "light_type_generator", "x": 418, "y": 799, "uid": 70, "state": { "type": 0 } }, { "plugin": "slider_float_generator", "x": 78, "y": 715, "uid": 71, "state": { "val": 1.06, "min": 0, "max": 2 }, "title": "Light intensity" }, { "plugin": "slider_float_generator", "x": 77, "y": 783, "uid": 72, "state": { "val": -1, "min": -5, "max": 5 }, "title": "Light position X" }, { "plugin": "slider_float_generator", "x": 77, "y": 849, "uid": 73, "state": { "val": -4, "min": -5, "max": 5 }, "title": "Light position Y" }, { "plugin": "slider_float_generator", "x": 77, "y": 917, "uid": 74, "state": { "val": 0.33333333333333304, "min": -5, "max": 5 }, "title": "Light position Z" }, { "plugin": "slider_float_generator", "x": 417, "y": 843, "uid": 75, "open": false, "state": { "val": -0.44, "min": -2, "max": 2 }, "title": "Light direction X" }, { "plugin": "slider_float_generator", "x": 417, "y": 864, "uid": 76, "open": false, "state": { "val": -1.04, "min": -2, "max": 2 }, "title": "Light direction Y" }, { "plugin": "slider_float_generator", "x": 417, "y": 889, "uid": 77, "open": false, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light direction z" }, { "plugin": "color_picker", "x": 79, "y": 998, "uid": 78, "state": { "hue": 0, "sat": 0, "lum": 0.95 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 265, "y": 999, "uid": 79, "state": { "hue": 0, "sat": 0, "lum": 0.97 }, "title": "Specular color" }, { "plugin": "const_float_generator", "x": 421, "y": 778, "uid": 80, "open": false, "state": { "val": 1 }, "title": "Light index" }, { "plugin": "graph", "x": 748, "y": 802, "uid": 81, "open": false, "dsid": 18, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 47, "uid": 4, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "output_proxy", "x": 1250, "y": 71, "uid": 9, "dsid": 33, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 27, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 27, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 27, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 27, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 27, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 564, "y": 287, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 470, "y": 149, "uid": 32, "dsid": 3, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 5, "parent_uid": 4, "open": true, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 25, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 25, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 426, "y": 241, "uid": 34, "dsid": 21, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 362, "y": 146, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 28, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 28, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 28, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 58, "y": 70, "uid": 44, "dsid": 17, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 44, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "hue", "dt": 0, "uid": 4, "index": 0, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 1, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 2, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 3, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 4, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 5, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 6, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 7, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 8, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 9, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 87, "y": 348, "uid": 82, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 160, "y": 348, "uid": 83, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 239, "y": 348, "uid": 84, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 320, "y": 348, "uid": 85, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 86, "y": 475, "uid": 86, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 299, "y": 717, "uid": 87, "state": { "val": 0.2599999999999999 }, "title": "Material shinyness" }, { "plugin": "knob_float_generator", "x": 212, "y": 410, "uid": 88, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 305, "y": 410, "uid": 89, "state": { "val": 0 }, "title": "Ambient Saturation" }, { "plugin": "knob_float_generator", "x": 87, "y": 410, "uid": 90, "state": { "val": 0.04 }, "title": "Ambient luminosity" }, { "plugin": "graph", "x": 824, "y": 147, "uid": 91, "open": false, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "Rotate", "graph": { "node_uid": 21, "uid": 6, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 367, "y": 174, "uid": 0 }, { "plugin": "output_proxy", "x": 485, "y": 174, "uid": 1, "dsid": 8, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 80, "uid": 8, "dsid": 8, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 170, "uid": 9, "dsid": 8, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 46, "y": 257, "uid": 10, "dsid": 8, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 40, "y": 386, "uid": 11, "state": { "val": 180 } }, { "plugin": "const_float_generator", "x": 15, "y": 317, "uid": 12, "state": { "val": 360 } }, { "plugin": "multiply_modulator", "x": 165, "y": 80, "uid": 15 }, { "plugin": "subtract_modulator", "x": 260, "y": 105, "uid": 16 }, { "plugin": "multiply_modulator", "x": 165, "y": 170, "uid": 17 }, { "plugin": "subtract_modulator", "x": 260, "y": 195, "uid": 18 }, { "plugin": "multiply_modulator", "x": 163, "y": 257, "uid": 19 }, { "plugin": "subtract_modulator", "x": 258, "y": 282, "uid": 20 } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 17, "dst_nuid": 18, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 12, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 12, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 11, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 18, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 11, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 16, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 18, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 20, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2 } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 509, "y": 138, "uid": 92, "state": { "val": 0 }, "title": "Rotate X" }, { "plugin": "knob_float_generator", "x": 509, "y": 211, "uid": 93, "state": { "val": 0 }, "title": "Rotate Y" }, { "plugin": "knob_float_generator", "x": 509, "y": 285, "uid": 94, "state": { "val": 0 }, "title": "Rotate Z" }, { "plugin": "graph", "x": 620, "y": 365, "uid": 95, "open": false, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 7, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 189, "y": 49, "uid": 0 }, { "plugin": "output_proxy", "x": 278, "y": 49, "uid": 2, "dsid": 7, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 73, "y": 49, "uid": 3 }, { "plugin": "input_proxy", "x": 7, "y": 9, "uid": 13, "dsid": 7, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 69, "uid": 14, "dsid": 7, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 132, "uid": 15, "dsid": 7, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 823, "y": 179, "uid": 96, "open": false, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 8, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 291, "y": 50, "uid": 2, "dsid": 9, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 74, "y": 50, "uid": 3 }, { "plugin": "input_proxy", "x": 8, "y": 10, "uid": 13, "dsid": 9, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 70, "uid": 14, "dsid": 9, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 129, "uid": 15, "dsid": 9, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 191, "y": 50, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 596, "y": 142, "uid": 97, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position X" }, { "plugin": "slider_float_generator", "x": 596, "y": 203, "uid": 98, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Y" }, { "plugin": "slider_float_generator", "x": 596, "y": 265, "uid": 99, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Z" }, { "plugin": "const_float_generator", "x": 508, "y": 363, "uid": 100, "state": { "val": 1 }, "title": "Scale" }, { "plugin": "graph", "x": 926, "y": 150, "uid": 103, "open": false, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 9, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 274, "y": 13, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 92, "y": 13, "uid": 1 }, { "plugin": "output_proxy", "x": 394, "y": 13, "uid": 2, "dsid": 7, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 197, "y": 14, "uid": 3, "dsid": 7, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 13, "uid": 4, "dsid": 7, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 71, "uid": 5, "dsid": 7, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 340, "y": 204, "uid": 104, "open": false, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "10": 0, "11": 1, "12": 2 }, "output_sids": { "24": 3 } }, "title": "Orbit camera", "graph": { "node_uid": 30, "uid": 10, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 173, "y": 58, "uid": 10, "dsid": 5, "state": { "slot_id": 0 }, "title": "rotation", "dyn_out": [ { "name": "input", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 32, "y": 122, "uid": 11, "dsid": 5, "state": { "slot_id": 0 }, "title": "elevation", "dyn_out": [ { "name": "input", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 26, "y": 180, "uid": 12, "dsid": 5, "state": { "slot_id": 0 }, "title": "distance", "dyn_out": [ { "name": "input", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "cos_modulator", "x": 355, "y": 60, "uid": 13 }, { "plugin": "sin_modulator", "x": 376, "y": 118, "uid": 14 }, { "plugin": "multiply_modulator", "x": 487, "y": 55, "uid": 15 }, { "plugin": "multiply_modulator", "x": 596, "y": 132, "uid": 16 }, { "plugin": "sin_modulator", "x": 364, "y": 242, "uid": 17 }, { "plugin": "multiply_modulator", "x": 491, "y": 220, "uid": 18 }, { "plugin": "multiply_modulator", "x": 586, "y": 263, "uid": 19 }, { "plugin": "cos_modulator", "x": 379, "y": 332, "uid": 20 }, { "plugin": "multiply_modulator", "x": 474, "y": 372, "uid": 21 }, { "plugin": "perspective_camera", "x": 805, "y": 213, "uid": 22 }, { "plugin": "vector", "x": 692, "y": 279, "uid": 23 }, { "plugin": "output_proxy", "x": 925, "y": 213, "uid": 24, "dsid": 5, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "output", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "def": null, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "pi_generator", "x": 97, "y": 294, "uid": 25 }, { "plugin": "multiply_modulator", "x": 257, "y": 58, "uid": 26 }, { "plugin": "multiply_modulator", "x": 257, "y": 145, "uid": 27 }, { "plugin": "subtract_modulator", "x": 149, "y": 117, "uid": 28 }, { "plugin": "const_float_generator", "x": 34, "y": 52, "uid": 29, "state": { "val": 1 } } ], "conns": [ { "src_nuid": 13, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 15, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 12, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 18, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 17, "dst_nuid": 18, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 18, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 12, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 2 }, { "src_nuid": 16, "dst_nuid": 23, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 23, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 21, "dst_nuid": 23, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 23, "dst_nuid": 22, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 22, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 2 }, { "src_nuid": 25, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 26, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 26, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 25, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 27, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 27, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 11, "dst_nuid": 28, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 29, "dst_nuid": 28, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 } ] }, "dyn_in": [ { "name": "rotation", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "elevation", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "distance", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 83, "y": 119, "uid": 105, "state": { "val": -0.5, "min": -1, "max": 1 }, "title": "Rotation" }, { "plugin": "slider_float_generator", "x": 83, "y": 187, "uid": 106, "state": { "val": 0.65, "min": 0.05, "max": 0.95 }, "title": "Elevation" }, { "plugin": "slider_float_generator", "x": 83, "y": 257, "uid": 107, "state": { "val": 3.4, "min": 0.1, "max": 10 }, "title": "Distance" }, { "plugin": "annotation", "x": 79, "y": 635, "uid": 108, "state": { "text": "Control the lights setup here.", "width": 196.18181824684143, "height": 34.18181824684143 }, "title": "Info" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 70, "dst_nuid": 69, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 71, "dst_nuid": 69, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 72, "dst_nuid": 69, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 73, "dst_nuid": 69, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 74, "dst_nuid": 69, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 75, "dst_nuid": 69, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 76, "dst_nuid": 69, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 77, "dst_nuid": 69, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 78, "dst_nuid": 69, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 79, "dst_nuid": 69, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 80, "dst_nuid": 69, "src_slot": 0, "dst_slot": 11, "dst_dyn": true }, { "src_nuid": 82, "dst_nuid": 81, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 83, "dst_nuid": 81, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 84, "dst_nuid": 81, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 85, "dst_nuid": 81, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 86, "dst_nuid": 81, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 87, "dst_nuid": 81, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 90, "dst_nuid": 81, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 89, "dst_nuid": 81, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 88, "dst_nuid": 81, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 69, "dst_nuid": 81, "src_slot": 0, "dst_slot": 9, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 92, "dst_nuid": 91, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 93, "dst_nuid": 91, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 94, "dst_nuid": 91, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 97, "dst_nuid": 96, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 98, "dst_nuid": 96, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 99, "dst_nuid": 96, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 100, "dst_nuid": 95, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 96, "dst_nuid": 103, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 91, "dst_nuid": 103, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 95, "dst_nuid": 103, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 103, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 105, "dst_nuid": 104, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 106, "dst_nuid": 104, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 107, "dst_nuid": 104, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 104, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 81, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 100, "dst_nuid": 95, "src_slot": 0, "dst_slot": 1, "dst_dyn": true, "offset": 1 }, { "src_nuid": 100, "dst_nuid": 95, "src_slot": 0, "dst_slot": 2, "dst_dyn": true, "offset": 2 } ] } } ], "conns": [] } } ================================================ FILE: browser/patches/3d_scene_with_material_lights_transforms_camera_input.json ================================================ { "abs_t": 221.846, "active_graph": 0, "graph_uid": 12, "root": { "node_uid": 1, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 624, "y": 178, "uid": 0, "dsid": 1, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "104": 0 }, "output_sids": {} }, "title": "Scene controls", "graph": { "node_uid": 105, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 1241, "y": 135, "uid": 0, "dsid": 7, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "1": 0, "2": 1, "10": 2, "21": 5, "23": 6 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 26, "uid": 2, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 868, "y": 16, "uid": 0 }, { "plugin": "input_proxy", "x": 11, "y": 308, "uid": 1, "dsid": 15, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 788, "y": 63, "uid": 2, "dsid": 15, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "scale_matrix", "x": 648, "y": 205, "uid": 7 }, { "plugin": "vector", "x": 514, "y": 216, "uid": 8 }, { "plugin": "divide_modulator", "x": 400, "y": 235, "uid": 9 }, { "plugin": "input_proxy", "x": 280, "y": 204, "uid": 10, "dsid": 15, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "max_modulator", "x": 320, "y": 307, "uid": 11 }, { "plugin": "vector_magnitude", "x": 220, "y": 355, "uid": 12 }, { "plugin": "vector_magnitude", "x": 221, "y": 288, "uid": 13 }, { "plugin": "scene_get_bounding_box", "x": 89, "y": 307, "uid": 14 }, { "plugin": "input_proxy", "x": 647, "y": 265, "uid": 21, "dsid": 14, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 569, "y": 434, "uid": 23, "dsid": 11, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "concatenate_matrix_modulator", "x": 763, "y": 184, "uid": 25 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 12, "src_slot": 1, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 21, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 } ] }, "dyn_in": [ { "name": "scene", "dt": 11, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 6, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "url_scene_generator", "x": 69, "y": 53, "uid": 1, "state": { "url": "/data/scene/ladybug/scene.json" } }, { "plugin": "slider_float_generator", "x": 433, "y": 55, "uid": 6, "state": { "val": 1.6, "min": 0, "max": 10 }, "title": "Mesh scale" }, { "plugin": "graph", "x": 477, "y": 576, "uid": 69, "open": false, "dsid": 14, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 1, "14": 2, "15": 3, "16": 4, "17": 5, "18": 6, "19": 7, "22": 8, "23": 9, "24": 10, "26": 11, "28": 13 }, "output_sids": { "27": 12 } }, "title": "Light chain", "graph": { "node_uid": 29, "uid": 5, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "light_type_modulator", "x": 692, "y": 216, "uid": 0 }, { "plugin": "light_position_modulator", "x": 604, "y": 215, "uid": 2 }, { "plugin": "light_diffuse_color_modulator", "x": 200, "y": 217, "uid": 3 }, { "plugin": "light_direction_modulator", "x": 521, "y": 215, "uid": 4 }, { "plugin": "light_intensity_modulator", "x": 430, "y": 219, "uid": 5 }, { "plugin": "light_specular_color_modulator", "x": 309, "y": 219, "uid": 6 }, { "plugin": "vector", "x": 494, "y": 380, "uid": 7 }, { "plugin": "input_proxy", "x": 609, "y": 401, "uid": 13, "dsid": 15, "state": { "slot_id": 0 }, "title": "light type", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 413, "y": 532, "uid": 14, "dsid": 15, "state": { "slot_id": 0 }, "title": "Pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 581, "uid": 15, "dsid": 16, "state": { "slot_id": 0 }, "title": "Pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 627, "uid": 16, "dsid": 17, "state": { "slot_id": 0 }, "title": "Pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 350, "y": 358, "uid": 17, "dsid": 15, "state": { "slot_id": 0 }, "title": "intensity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 196, "y": 340, "uid": 18, "dsid": 15, "state": { "slot_id": 0 }, "title": "specular color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 80, "y": 347, "uid": 19, "dsid": 16, "state": { "slot_id": 0 }, "title": "diffuse color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector_normalize", "x": 361, "y": 452, "uid": 20 }, { "plugin": "vector", "x": 248, "y": 461, "uid": 21 }, { "plugin": "input_proxy", "x": 146, "y": 479, "uid": 22, "dsid": 16, "state": { "slot_id": 0 }, "title": "Dir x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 528, "uid": 23, "dsid": 17, "state": { "slot_id": 0 }, "title": "Dir y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 574, "uid": 24, "dsid": 18, "state": { "slot_id": 0 }, "title": "Dir z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 777, "y": 133, "uid": 25 }, { "plugin": "input_proxy", "x": 681, "y": 135, "uid": 26, "dsid": 14, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 900, "y": 133, "uid": 27, "dsid": 14, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 569, "y": 134, "uid": 28, "dsid": 14, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 21, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 22, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 25, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 26, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 28, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "light type", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Pos x", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Pos y", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true }, { "name": "Pos z", "dt": 0, "uid": 4, "index": 3, "type": 0, "is_connected": true }, { "name": "intensity", "dt": 0, "uid": 5, "index": 4, "type": 0, "is_connected": true }, { "name": "specular color", "dt": 3, "uid": 6, "index": 5, "type": 0, "is_connected": true }, { "name": "diffuse color", "dt": 3, "uid": 7, "index": 6, "type": 0, "is_connected": true }, { "name": "Dir x", "dt": 0, "uid": 8, "index": 7, "type": 0, "is_connected": true }, { "name": "Dir y", "dt": 0, "uid": 9, "index": 8, "type": 0, "is_connected": true }, { "name": "Dir z", "dt": 0, "uid": 10, "index": 9, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 11, "index": 10, "type": 0 }, { "name": "light index", "dt": 0, "uid": 13, "index": 11, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 12, "index": 0, "type": 1 } ] }, { "plugin": "light_type_generator", "x": 28, "y": 575, "uid": 70, "state": { "type": 0 } }, { "plugin": "slider_float_generator", "x": 272, "y": 578, "uid": 71, "state": { "val": 1.06, "min": 0, "max": 2 }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 69, "y": 648, "uid": 72, "state": { "val": -0.08, "min": -2, "max": 2 }, "title": "Light position X" }, { "plugin": "slider_float_generator", "x": 69, "y": 714, "uid": 73, "state": { "val": -0.28, "min": -2, "max": 2 }, "title": "Light position Y" }, { "plugin": "slider_float_generator", "x": 69, "y": 782, "uid": 74, "state": { "val": 1.16, "min": -2, "max": 2 }, "title": "Light position Z" }, { "plugin": "slider_float_generator", "x": 267, "y": 649, "uid": 75, "state": { "val": -0.44, "min": -2, "max": 2 }, "title": "Light direction X" }, { "plugin": "slider_float_generator", "x": 267, "y": 718, "uid": 76, "state": { "val": -1.04, "min": -2, "max": 2 }, "title": "Light direction Y" }, { "plugin": "slider_float_generator", "x": 267, "y": 783, "uid": 77, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light direction z" }, { "plugin": "color_picker", "x": 71, "y": 863, "uid": 78, "state": { "hue": 0, "sat": 0, "lum": 0.95 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 257, "y": 864, "uid": 79, "state": { "hue": 0, "sat": 0, "lum": 0.97 }, "title": "Specular color" }, { "plugin": "const_float_generator", "x": 165, "y": 575, "uid": 80, "state": { "val": 1 }, "title": "Light index" }, { "plugin": "graph", "x": 474, "y": 548, "uid": 81, "open": false, "dsid": 18, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 47, "uid": 6, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "output_proxy", "x": 1250, "y": 71, "uid": 9, "dsid": 30, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 24, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 24, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 24, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 24, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 24, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 574, "y": 162, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 470, "y": 149, "uid": 32, "dsid": 3, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 7, "parent_uid": 6, "open": true, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 22, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 22, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 426, "y": 241, "uid": 34, "dsid": 18, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 362, "y": 146, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 25, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 25, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 25, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 58, "y": 70, "uid": 44, "dsid": 14, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 44, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "hue", "dt": 0, "uid": 4, "index": 0, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 1, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 2, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 3, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 4, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 5, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 6, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 7, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 8, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 9, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 77, "y": 362, "uid": 82, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 150, "y": 362, "uid": 83, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 229, "y": 362, "uid": 84, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 311, "y": 365, "uid": 85, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 231, "y": 428, "uid": 86, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 150, "y": 428, "uid": 87, "state": { "val": 0.2599999999999999 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 109, "y": 500, "uid": 88, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 201, "y": 500, "uid": 89, "state": { "val": 0 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 289, "y": 500, "uid": 90, "state": { "val": 0.04 }, "title": "Ambient Lum" }, { "plugin": "graph", "x": 723, "y": 137, "uid": 91, "open": false, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "Rotate", "graph": { "node_uid": 21, "uid": 8, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 367, "y": 174, "uid": 0 }, { "plugin": "output_proxy", "x": 485, "y": 174, "uid": 1, "dsid": 5, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 80, "uid": 8, "dsid": 5, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 170, "uid": 9, "dsid": 5, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 46, "y": 257, "uid": 10, "dsid": 5, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 40, "y": 386, "uid": 11, "state": { "val": 180 } }, { "plugin": "const_float_generator", "x": 15, "y": 317, "uid": 12, "state": { "val": 360 } }, { "plugin": "multiply_modulator", "x": 165, "y": 80, "uid": 15 }, { "plugin": "subtract_modulator", "x": 260, "y": 105, "uid": 16 }, { "plugin": "multiply_modulator", "x": 165, "y": 170, "uid": 17 }, { "plugin": "subtract_modulator", "x": 260, "y": 195, "uid": 18 }, { "plugin": "multiply_modulator", "x": 163, "y": 257, "uid": 19 }, { "plugin": "subtract_modulator", "x": 258, "y": 282, "uid": 20 } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 17, "dst_nuid": 18, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 12, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 12, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 11, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 18, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 11, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 16, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 18, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 20, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2 } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 432, "y": 128, "uid": 92, "state": { "val": 0 }, "title": "Rotate X" }, { "plugin": "knob_float_generator", "x": 432, "y": 201, "uid": 93, "state": { "val": 0 }, "title": "Rotate Y" }, { "plugin": "knob_float_generator", "x": 432, "y": 275, "uid": 94, "state": { "val": 0 }, "title": "Rotate Z" }, { "plugin": "graph", "x": 721, "y": 200, "uid": 95, "open": false, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 9, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 189, "y": 49, "uid": 0 }, { "plugin": "output_proxy", "x": 278, "y": 49, "uid": 2, "dsid": 4, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 73, "y": 49, "uid": 3 }, { "plugin": "input_proxy", "x": 7, "y": 9, "uid": 13, "dsid": 4, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 69, "uid": 14, "dsid": 4, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 132, "uid": 15, "dsid": 4, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 722, "y": 169, "uid": 96, "open": false, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 10, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 291, "y": 50, "uid": 2, "dsid": 6, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 74, "y": 50, "uid": 3 }, { "plugin": "input_proxy", "x": 8, "y": 10, "uid": 13, "dsid": 6, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 70, "uid": 14, "dsid": 6, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 129, "uid": 15, "dsid": 6, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 191, "y": 50, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 519, "y": 132, "uid": 97, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position X" }, { "plugin": "slider_float_generator", "x": 519, "y": 193, "uid": 98, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Y" }, { "plugin": "slider_float_generator", "x": 519, "y": 255, "uid": 99, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Z" }, { "plugin": "const_float_generator", "x": 431, "y": 353, "uid": 100, "state": { "val": 1 }, "title": "Scale X" }, { "plugin": "const_float_generator", "x": 430, "y": 412, "uid": 101, "state": { "val": 1 }, "title": "Scale Y" }, { "plugin": "const_float_generator", "x": 428, "y": 472, "uid": 102, "state": { "val": 1 }, "title": "Scale Z" }, { "plugin": "graph", "x": 817, "y": 161, "uid": 103, "open": false, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 11, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 274, "y": 13, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 92, "y": 13, "uid": 1 }, { "plugin": "output_proxy", "x": 394, "y": 13, "uid": 2, "dsid": 4, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 197, "y": 14, "uid": 3, "dsid": 4, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 13, "uid": 4, "dsid": 4, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 71, "uid": 5, "dsid": 4, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 1093, "y": 107, "uid": 104, "dsid": 1, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "input", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 70, "dst_nuid": 69, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 71, "dst_nuid": 69, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 72, "dst_nuid": 69, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 73, "dst_nuid": 69, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 74, "dst_nuid": 69, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 75, "dst_nuid": 69, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 76, "dst_nuid": 69, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 77, "dst_nuid": 69, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 78, "dst_nuid": 69, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 79, "dst_nuid": 69, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 80, "dst_nuid": 69, "src_slot": 0, "dst_slot": 11, "dst_dyn": true }, { "src_nuid": 82, "dst_nuid": 81, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 83, "dst_nuid": 81, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 84, "dst_nuid": 81, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 85, "dst_nuid": 81, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 86, "dst_nuid": 81, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 87, "dst_nuid": 81, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 90, "dst_nuid": 81, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 89, "dst_nuid": 81, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 88, "dst_nuid": 81, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 69, "dst_nuid": 81, "src_slot": 0, "dst_slot": 9, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 81, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 92, "dst_nuid": 91, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 93, "dst_nuid": 91, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 94, "dst_nuid": 91, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 97, "dst_nuid": 96, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 98, "dst_nuid": 96, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 99, "dst_nuid": 96, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 100, "dst_nuid": 95, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 101, "dst_nuid": 95, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 102, "dst_nuid": 95, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 96, "dst_nuid": 103, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 91, "dst_nuid": 103, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 95, "dst_nuid": 103, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 103, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 104, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "camera", "dt": 6, "uid": 0, "index": 0, "type": 0 } ] } ], "conns": [] } } ================================================ FILE: browser/patches/3d_scene_with_texture_out.json ================================================ { "abs_t": 69.32, "active_graph": 0, "graph_uid": 8, "root": { "node_uid": 3, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 515, "y": 370, "uid": 0, "dsid": 1, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "91": 0 }, "output_sids": {} }, "title": "Scene controls", "graph": { "node_uid": 92, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 858, "y": 174, "uid": 0, "dsid": 7, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "1": 0, "2": 1, "10": 2, "21": 5, "23": 6 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 26, "uid": 2, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 868, "y": 16, "uid": 0 }, { "plugin": "input_proxy", "x": 11, "y": 308, "uid": 1, "dsid": 14, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 788, "y": 63, "uid": 2, "dsid": 14, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "scale_matrix", "x": 648, "y": 205, "uid": 7 }, { "plugin": "vector", "x": 514, "y": 216, "uid": 8 }, { "plugin": "divide_modulator", "x": 400, "y": 235, "uid": 9 }, { "plugin": "input_proxy", "x": 280, "y": 204, "uid": 10, "dsid": 14, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "max_modulator", "x": 320, "y": 307, "uid": 11 }, { "plugin": "vector_magnitude", "x": 220, "y": 355, "uid": 12 }, { "plugin": "vector_magnitude", "x": 221, "y": 288, "uid": 13 }, { "plugin": "scene_get_bounding_box", "x": 89, "y": 307, "uid": 14 }, { "plugin": "input_proxy", "x": 647, "y": 265, "uid": 21, "dsid": 13, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 569, "y": 434, "uid": 23, "dsid": 10, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "concatenate_matrix_modulator", "x": 763, "y": 184, "uid": 25 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 12, "src_slot": 1, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 21, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 } ] }, "dyn_in": [ { "name": "scene", "dt": 11, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 6, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "url_scene_generator", "x": 198, "y": 50, "uid": 1, "state": { "url": "/data/scene/ladybug/scene.json" } }, { "plugin": "graph", "x": 631, "y": 8, "uid": 2, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "0": 0, "1": 1, "2": 2 }, "output_sids": { "3": 3 } }, "title": "Camera", "graph": { "node_uid": 17, "uid": 3, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 127, "y": 210, "uid": 0, "dsid": 22, "state": { "slot_id": 0 }, "title": "rotation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 33, "y": 92, "uid": 1, "dsid": 22, "state": { "slot_id": 0 }, "title": "elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 54, "y": 37, "uid": 2, "dsid": 22, "state": { "slot_id": 0 }, "title": "dolly", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 554, "y": 99, "uid": 3, "dsid": 22, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "input", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "perspective_camera", "x": 436, "y": 99, "uid": 4 }, { "plugin": "vector", "x": 202, "y": 51, "uid": 5 }, { "plugin": "rotation_xyz_matrix", "x": 206, "y": 169, "uid": 6 }, { "plugin": "vector_transform", "x": 328, "y": 99, "uid": 7 }, { "plugin": "negate_modulator", "x": 123, "y": 71, "uid": 16 } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 7, "dst_nuid": 4, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 6, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "rotation", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "elevation", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "dolly", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 197, "y": 113, "uid": 3, "state": { "val": -36, "min": -180, "max": 180 }, "title": "Camera Rotation" }, { "plugin": "slider_float_generator", "x": 197, "y": 183, "uid": 4, "state": { "val": 1.2, "min": -20, "max": 20 }, "title": "Camera Elevation" }, { "plugin": "slider_float_generator", "x": 197, "y": 255, "uid": 5, "state": { "val": 5.1, "min": 0, "max": 10 }, "title": "Camera Dolly" }, { "plugin": "slider_float_generator", "x": 328, "y": 30, "uid": 6, "state": { "val": 3.5, "min": 0, "max": 10 }, "title": "Mesh scale" }, { "plugin": "graph", "x": 632, "y": 149, "uid": 19, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 4, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 303, "y": 53, "uid": 2, "dsid": 15, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 92, "y": 53, "uid": 3 }, { "plugin": "input_proxy", "x": 23, "y": 11, "uid": 13, "dsid": 15, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 23, "y": 73, "uid": 14, "dsid": 15, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 23, "y": 135, "uid": 15, "dsid": 15, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 204, "y": 53, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 399, "y": 112, "uid": 20, "state": { "val": 0, "min": -10, "max": 10 }, "title": "x position" }, { "plugin": "slider_float_generator", "x": 399, "y": 178, "uid": 21, "state": { "val": -1, "min": -10, "max": 10 }, "title": "y position" }, { "plugin": "slider_float_generator", "x": 399, "y": 242, "uid": 22, "state": { "val": -1.6, "min": -10, "max": 10 }, "title": "z position" }, { "plugin": "graph", "x": 667, "y": 335, "uid": 81, "dsid": 18, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 47, "uid": 6, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "output_proxy", "x": 1250, "y": 71, "uid": 9, "dsid": 29, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 23, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 23, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 23, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 23, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 23, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 574, "y": 162, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 470, "y": 149, "uid": 32, "dsid": 3, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 7, "parent_uid": 6, "open": true, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 21, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 21, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 426, "y": 241, "uid": 34, "dsid": 17, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 362, "y": 146, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 24, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 24, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 24, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 58, "y": 70, "uid": 44, "dsid": 13, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 44, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "hue", "dt": 0, "uid": 4, "index": 0, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 1, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 2, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 3, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 4, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 5, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 6, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 7, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 8, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 9, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 305, "y": 349, "uid": 82, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 378, "y": 349, "uid": 83, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 457, "y": 349, "uid": 84, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 538, "y": 349, "uid": 85, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 459, "y": 415, "uid": 86, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 378, "y": 415, "uid": 87, "state": { "val": 0 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 337, "y": 487, "uid": 88, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 429, "y": 487, "uid": 89, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 517, "y": 487, "uid": 90, "state": { "val": 0 }, "title": "Ambient Lum" }, { "plugin": "input_proxy", "x": 108, "y": 425, "uid": 91, "dsid": 4, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 20, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 21, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 22, "dst_nuid": 19, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 82, "dst_nuid": 81, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 83, "dst_nuid": 81, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 84, "dst_nuid": 81, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 85, "dst_nuid": 81, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 86, "dst_nuid": 81, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 87, "dst_nuid": 81, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 90, "dst_nuid": 81, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 89, "dst_nuid": 81, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 88, "dst_nuid": 81, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 81, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 91, "dst_nuid": 81, "src_slot": 0, "dst_slot": 9, "src_connected": true, "src_dyn": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "material_texture_modulator", "x": 377, "y": 433, "uid": 1 }, { "plugin": "url_texture_generator", "x": 237, "y": 540, "uid": 2, "state": { "url": "/data/image/57422df4c11a76d5531ef36299d5d1ac5b6b6739.jpg" } } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 2 } ] } } ================================================ FILE: browser/patches/_add-360-photo.json ================================================ {"abs_t":0,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":604,"y":248,"uid":"cNMzg6ZebEEa","state":{"always_update":true,"input_sids":{"awmP4ZwsSMnT":"lOz0fKTfMesH"},"output_sids":{"SnxfNPCbY2mR":"mh0rTKkFm0nD"}},"title":"360 photo","graph":{"uid":"JLwFxpJQvpmz","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1252,"y":373,"uid":"5YK7zqzaQmRU","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1438,"y":405,"uid":"SnxfNPCbY2mR","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_material","x":974,"y":130,"uid":"E6GQa92x5pH2","state":{}},{"plugin":"const_float_generator","x":723,"y":214,"uid":"p4MDf2dd79VV","state":{"val":1},"title":"Side"},{"plugin":"three_uv_modifier","x":553,"y":87,"uid":"wbJUnuvQTjn3","state":{}},{"plugin":"const_float_generator","x":297,"y":197,"uid":"VRgvdcbdUS9b","state":{"val":-1},"title":"X repeat photo"},{"plugin":"input_proxy","x":321,"y":122,"uid":"awmP4ZwsSMnT","title":"texture","dyn_out":[{"name":"input","dt":2,"uid":"q2TtZnBOutlf","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_geometry_sphere","x":939,"y":467,"uid":"5qVqPcEVJEWC"},{"plugin":"const_float_generator","x":675,"y":421,"uid":"Cs6w6VnJvkgZ","state":{"val":30},"title":"Radius"},{"plugin":"const_float_generator","x":676,"y":502,"uid":"PQmxHFMSJVVK","state":{"val":40},"title":"Width Segments"},{"plugin":"const_float_generator","x":674,"y":584,"uid":"Em9GEsFss32z","state":{"val":40},"title":"Height Segments"},{"plugin":"toggle_button","x":724,"y":292,"uid":"W58En5EDdYgg","state":{"enabled":false},"title":"Fog"},{"plugin":"slider_float_generator","x":301,"y":298,"uid":"yCR996fEsESU","state":{"val":0.25,"min":0,"max":1}},{"plugin":"photosphere_orientation_reader","x":671,"y":380,"uid":"4chWNjA3cFaS","open":false,"state":{}}],"conns":[{"src_nuid":"5YK7zqzaQmRU","dst_nuid":"SnxfNPCbY2mR","src_slot":"object3d","dst_slot":0,"uid":"TGnMec39tCeh","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"E6GQa92x5pH2","dst_nuid":"5YK7zqzaQmRU","src_slot":"material","dst_slot":"material","uid":"XmKQWrQX45Zj","src_connected":true,"dst_connected":true},{"src_nuid":"p4MDf2dd79VV","dst_nuid":"E6GQa92x5pH2","src_slot":"value","dst_slot":"side","uid":"EFULGrMBWWfN","src_connected":true,"dst_connected":true},{"src_nuid":"wbJUnuvQTjn3","dst_nuid":"E6GQa92x5pH2","src_slot":"texture","dst_slot":"texture","uid":"dqG7My9zp2B9","src_connected":true,"dst_connected":true},{"src_nuid":"VRgvdcbdUS9b","dst_nuid":"wbJUnuvQTjn3","src_slot":"value","dst_slot":"u repeat","uid":"v5STSCRuqFRC","src_connected":true,"dst_connected":true},{"src_nuid":"awmP4ZwsSMnT","dst_nuid":"wbJUnuvQTjn3","src_slot":0,"dst_slot":"texture","uid":"eVy29jkNpxwb","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"Cs6w6VnJvkgZ","dst_nuid":"5qVqPcEVJEWC","src_slot":"value","dst_slot":"radius","uid":"FXu5dMUwAcKh","src_connected":true,"dst_connected":true},{"src_nuid":"PQmxHFMSJVVK","dst_nuid":"5qVqPcEVJEWC","src_slot":"value","dst_slot":"widthSegments","uid":"JcSJvMhcSQUG","src_connected":true,"dst_connected":true},{"src_nuid":"Em9GEsFss32z","dst_nuid":"5qVqPcEVJEWC","src_slot":"value","dst_slot":"heightSegments","uid":"QDRHtFtNm5tC","src_connected":true,"dst_connected":true},{"src_nuid":"5qVqPcEVJEWC","dst_nuid":"5YK7zqzaQmRU","src_slot":"geometry","dst_slot":"geometry","uid":"4p3upjnwcFCp","src_connected":true,"dst_connected":true},{"src_nuid":"W58En5EDdYgg","dst_nuid":"E6GQa92x5pH2","src_slot":"bool","dst_slot":"fog","uid":"QXd38cZG446y","src_connected":true,"dst_connected":true},{"src_nuid":"yCR996fEsESU","dst_nuid":"wbJUnuvQTjn3","src_slot":"value","dst_slot":"u offset","uid":"u5sXAbbt9cp2","src_connected":true,"dst_connected":true},{"src_nuid":"awmP4ZwsSMnT","dst_nuid":"4chWNjA3cFaS","src_slot":0,"dst_slot":"texture","uid":"tMH27GLPnHKV","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"4chWNjA3cFaS","dst_nuid":"5YK7zqzaQmRU","src_slot":"rotation","dst_slot":"rotation","uid":"rPjNQp8Ze87C","src_connected":true,"dst_connected":true}]},"dyn_in":[{"name":"texture","dt":2,"index":0,"uid":"lOz0fKTfMesH","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":false}]},{"plugin":"url_texture_generator","x":334,"y":219,"uid":"Nvqv5tqCzTdz","state":{"url":"/data/image/32046a219d7cb0c4a7b3d46f0b16ee9a77791192.png"}}],"conns":[{"src_nuid":"Nvqv5tqCzTdz","dst_nuid":"cNMzg6ZebEEa","src_slot":"texture","dst_slot":0,"uid":"PtdeCHJjDCC5","src_connected":true,"dst_connected":true,"dst_dyn":true}]}} ================================================ FILE: browser/patches/_add-3d-model.json ================================================ {"abs_t":31.491,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":441,"y":172,"uid":"dGUhrR3y0Ugh","open":false,"state":{"always_update":true,"input_sids":{},"output_sids":{"hqMOmKyCUHxE":"Ys30r7aVEks1"}},"title":"3D model","graph":{"uid":"FwFVVKYAaxEY","parent_uid":"root","open":true,"nodes":[{"plugin":"three_loader_model","x":321,"y":234,"uid":"20BsetSGKAXF","state":{"url":"/data/scene/flamingo/flamingo.js"}},{"plugin":"three_mesh","x":687,"y":203,"uid":"HfckSNLLNC1p","open":false,"state":{"position":{"x":0,"y":0.890837835382039,"z":0},"scale":{"x":0.0094948370835134,"y":0.0094948370835134,"z":0.0094948370835134},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":883,"y":205,"uid":"hqMOmKyCUHxE","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]}],"conns":[{"src_nuid":"20BsetSGKAXF","dst_nuid":"HfckSNLLNC1p","src_slot":"geometry","dst_slot":"geometry","uid":"qPPdkXfIwHIU","src_connected":true,"dst_connected":true},{"src_nuid":"HfckSNLLNC1p","dst_nuid":"hqMOmKyCUHxE","src_slot":"object3d","dst_slot":0,"uid":"iT2wKJhju6fa","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"20BsetSGKAXF","dst_nuid":"HfckSNLLNC1p","src_slot":"materials","dst_slot":"material","uid":"6z9Y75hrq8Jp","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-ambient-light.json ================================================ {"abs_t":768.069,"active_graph":"root","graph_uid":"F2SOwIkvCgXj","root":{"uid":"root","parent_uid":-1,"nodes":[{"plugin":"graph","x":240,"y":220,"uid":"NQrb7p4ATQRp","state":{"always_update":true,"input_sids":{},"output_sids":{"1NSaWIRpIXTj":"547odbJKrTzG"}},"title":"Ambient light","graph":{"uid":"MEBE1ALZUwwN","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":1110,"y":223,"uid":"1NSaWIRpIXTj","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"vSy6Gj4JSPYs","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_ambient_light","x":810,"y":179,"uid":"O71ojlBOwFCs"},{"plugin":"color_picker","x":481,"y":186,"uid":"XBbrlsNMQmrO","state":{"hue":0,"sat":0.79,"lum":0.22999999999999998}}],"conns":[{"src_nuid":"O71ojlBOwFCs","dst_nuid":"1NSaWIRpIXTj","src_slot":"object3d","dst_slot":0,"uid":"sUTFPxvnlDzH","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"XBbrlsNMQmrO","dst_nuid":"O71ojlBOwFCs","src_slot":"color","dst_slot":"color","uid":"vzWfEdxMadPI","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"547odbJKrTzG","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-box.json ================================================ {"abs_t":144.629,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"entity","x":457,"y":162,"uid":"eLEA6x6YxKPr","state":{"always_update":true,"input_sids":{},"output_sids":{"fNHswe8pTzEQ":"mh0rTKkFm0nD"}},"title":"Box","graph":{"uid":"GUfwJdYq7VRA","parent_uid":"root","open":true,"nodes":[{"plugin":"three_geometry_box","x":883,"y":690,"uid":"MpLAkfW5KF6E"},{"plugin":"three_mesh","x":1254,"y":337,"uid":"9mUDpEbgVPFQ","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1444,"y":331,"uid":"fNHswe8pTzEQ","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":546,"y":151,"uid":"Gyu3Cngfzeyv","state":{"url":"/data/image/7cbc45195c04d1595c43be42418755520068c72e.png"},"title":"Box texture"},{"plugin":"three_material_phong","open":false,"x":878,"y":205,"uid":"RGbtcdNzPhXj"}],"conns":[{"src_nuid":"9mUDpEbgVPFQ","dst_nuid":"fNHswe8pTzEQ","src_slot":"object3d","dst_slot":0,"uid":"CtRbrA2K4BWA","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"MpLAkfW5KF6E","dst_nuid":"9mUDpEbgVPFQ","src_slot":"geometry","dst_slot":"geometry","uid":"RPDYS3ZKXnhY","src_connected":true,"dst_connected":true},{"src_nuid":"Gyu3Cngfzeyv","dst_nuid":"RGbtcdNzPhXj","src_slot":"texture","dst_slot":"texture","uid":"GeYcfxLeYX2G","src_connected":true,"dst_connected":true},{"src_nuid":"RGbtcdNzPhXj","dst_nuid":"9mUDpEbgVPFQ","src_slot":"material","dst_slot":"material","uid":"F3V4XBKDK8zH","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-cylinder.json ================================================ {"abs_t":357.565,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":563,"y":268,"uid":"PpshTsypPpWG","state":{"always_update":true,"input_sids":{},"output_sids":{"99T9SYYvKdzn":"mh0rTKkFm0nD"}},"title":"Cylinder","graph":{"uid":"7QdDZcCUYBTn","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1187,"y":356,"uid":"gbXLvUzQx3NN","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1386,"y":355,"uid":"99T9SYYvKdzn","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":392,"y":73,"uid":"kcYBed9XmRnQ","state":{"url":"/data/image/7cbc45195c04d1595c43be42418755520068c72e.png"},"title":"Texture"},{"plugin":"three_material_phong","x":759,"y":91,"uid":"SyqMKmPREwZf"},{"plugin":"const_float_generator","x":277,"y":397,"uid":"nMdEAK8h3skr","state":{"val":1},"title":"Height"},{"plugin":"const_float_generator","x":557,"y":522,"uid":"YfsWeDtxaGtU","state":{"val":1},"title":"Radius"},{"plugin":"three_geometry_cylinder","x":759,"y":551,"uid":"tzSeXzzpTU7x"},{"plugin":"const_float_generator","x":297,"y":575,"uid":"A4Xvy7A4ppbp","state":{"val":1},"title":"Height segments"},{"plugin":"const_float_generator","x":284,"y":488,"uid":"DAzCeneuSsaZ","state":{"val":64},"title":"Radius Segments"},{"plugin":"toggle_button","x":320,"y":662,"uid":"BcLZKZQ7jm7b","state":{"enabled":false},"title":"Open Ended ?"}],"conns":[{"src_nuid":"gbXLvUzQx3NN","dst_nuid":"99T9SYYvKdzn","src_slot":"object3d","dst_slot":0,"uid":"L7s77wgR6YQf","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"kcYBed9XmRnQ","dst_nuid":"SyqMKmPREwZf","src_slot":"texture","dst_slot":"texture","uid":"GHZ2HJDhQpsf","src_connected":true,"dst_connected":true},{"src_nuid":"SyqMKmPREwZf","dst_nuid":"gbXLvUzQx3NN","src_slot":"material","dst_slot":"material","uid":"gqPd6UHH9AGU","src_connected":true,"dst_connected":true},{"src_nuid":"tzSeXzzpTU7x","dst_nuid":"gbXLvUzQx3NN","src_slot":"geometry","dst_slot":"geometry","uid":"HtY8Y6StESSf","src_connected":true,"dst_connected":true},{"src_nuid":"YfsWeDtxaGtU","dst_nuid":"tzSeXzzpTU7x","src_slot":"value","dst_slot":"radiusTop","uid":"y84d5C9XcFms","src_connected":true,"dst_connected":true},{"src_nuid":"YfsWeDtxaGtU","dst_nuid":"tzSeXzzpTU7x","src_slot":"value","dst_slot":"radiusBottom","uid":"GpE29UssuQX7","src_connected":true,"dst_connected":true},{"src_nuid":"nMdEAK8h3skr","dst_nuid":"tzSeXzzpTU7x","src_slot":"value","dst_slot":"height","uid":"GBVLr3Tkm9YU","src_connected":true,"dst_connected":true},{"src_nuid":"A4Xvy7A4ppbp","dst_nuid":"tzSeXzzpTU7x","src_slot":"value","dst_slot":"heightSegments","uid":"7Z638zSVtpwR","src_connected":true,"dst_connected":true},{"src_nuid":"DAzCeneuSsaZ","dst_nuid":"tzSeXzzpTU7x","src_slot":"value","dst_slot":"radiusSegments","uid":"4nWj8EAd2fvH","src_connected":true,"dst_connected":true},{"src_nuid":"BcLZKZQ7jm7b","dst_nuid":"tzSeXzzpTU7x","src_slot":"bool","dst_slot":"openEnded","uid":"hKAuvUFK2vgb","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-directional-light.json ================================================ {"abs_t":573.637,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":708,"y":331,"uid":"ksxrAudWHG44","state":{"always_update":true,"input_sids":{},"output_sids":{"a9CTd7P6Ydtk":"547odbJKrTzG"}},"title":"Directional light","graph":{"uid":"jW3JJfyGAJ2n","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":1110,"y":223,"uid":"a9CTd7P6Ydtk","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"vSy6Gj4JSPYs","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"const_float_generator","x":304,"y":295,"uid":"nPGfweNeNqWx","state":{"val":1},"title":"Intensity"},{"plugin":"three_directional_light","x":877,"y":274,"uid":"hZ62Har5UPNg","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}}],"conns":[{"src_nuid":"nPGfweNeNqWx","dst_nuid":"hZ62Har5UPNg","src_slot":"value","dst_slot":"intensity","uid":"rw2SbJ7gH9uU","src_connected":true,"dst_connected":true},{"src_nuid":"hZ62Har5UPNg","dst_nuid":"a9CTd7P6Ydtk","src_slot":"object3d","dst_slot":0,"uid":"tbUNWQvc5ej6","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"547odbJKrTzG","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-dodecahedron.json ================================================ {"abs_t":237.182,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":591,"y":378,"uid":"KN7qWDuACMtT","state":{"always_update":true,"input_sids":{},"output_sids":{"TYhH63eWNPHR":"mh0rTKkFm0nD"}},"title":"Dodecahedron","graph":{"uid":"SGHsV6FCaQSx","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1078,"y":402,"uid":"deadv7NhKevb","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1322,"y":442,"uid":"TYhH63eWNPHR","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":523,"y":159,"uid":"es9SXtvYXkCF","state":{"url":"/data/image/7cbc45195c04d1595c43be42418755520068c72e.png"},"title":"Texture"},{"plugin":"three_material_phong","x":762,"y":171,"uid":"3bv8HmmAYKWR"},{"plugin":"const_float_generator","x":581,"y":734,"uid":"XKT9szYBWVwd","state":{"val":0},"title":"Detail"},{"plugin":"three_geometry_dodecahedron","x":753,"y":642,"uid":"vdpquuBgA5sV"},{"plugin":"const_float_generator","x":580,"y":611,"uid":"qEV7eez9mHCX","state":{"val":1},"title":"Radius"}],"conns":[{"src_nuid":"deadv7NhKevb","dst_nuid":"TYhH63eWNPHR","src_slot":"object3d","dst_slot":0,"uid":"nCzh9jhVLWXB","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"es9SXtvYXkCF","dst_nuid":"3bv8HmmAYKWR","src_slot":"texture","dst_slot":"texture","uid":"Xb2Fmt5Z5bMU","src_connected":true,"dst_connected":true},{"src_nuid":"3bv8HmmAYKWR","dst_nuid":"deadv7NhKevb","src_slot":"material","dst_slot":"material","uid":"3JgYPGABhnsc","src_connected":true,"dst_connected":true},{"src_nuid":"vdpquuBgA5sV","dst_nuid":"deadv7NhKevb","src_slot":"geometry","dst_slot":"geometry","uid":"UnKAhsrzGQkD","src_connected":true,"dst_connected":true},{"src_nuid":"XKT9szYBWVwd","dst_nuid":"vdpquuBgA5sV","src_slot":"value","dst_slot":"detail","uid":"L8gRmzRGwjTE","src_connected":true,"dst_connected":true},{"src_nuid":"qEV7eez9mHCX","dst_nuid":"vdpquuBgA5sV","src_slot":"value","dst_slot":"radius","uid":"wpEAZzxRKAkh","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-floor.json ================================================ {"abs_t":1814.986,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":596,"y":344,"uid":"TytYs7o6qFrI","state":{"always_update":true,"input_sids":{},"output_sids":{"UIK7rZC97h3v":"mh0rTKkFm0nD"}},"title":"Floor","graph":{"uid":"BlNdO1aDXTMH","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":937,"y":235,"uid":"YVKldc2mrHNN","open":false,"state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1121,"y":236,"uid":"UIK7rZC97h3v","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":177,"y":56,"uid":"XyJRCGbYVK8Y","state":{"url":"/data/image/ac491bcfd05a3ecf1315577d8eee830167fea233.png"},"title":"Box texture"},{"plugin":"three_material_phong","x":632,"y":176,"uid":"sEponEvkFzs0","open":false},{"plugin":"three_geometry_plane","x":733,"y":313,"uid":"3dGuNNTsfzRj","open":false},{"plugin":"three_uv_modifier","x":429,"y":176,"uid":"xhUTz8qk89Mf","open":false},{"plugin":"const_float_generator","x":236,"y":268,"uid":"1DgdsTeinJUe","state":{"val":64}}],"conns":[{"src_nuid":"YVKldc2mrHNN","dst_nuid":"UIK7rZC97h3v","src_slot":"object3d","dst_slot":0,"uid":"XN2Lk67XyRuk","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"sEponEvkFzs0","dst_nuid":"YVKldc2mrHNN","src_slot":"material","dst_slot":"material","uid":"fpyYmdQUFI3L","src_connected":true,"dst_connected":true},{"src_nuid":"3dGuNNTsfzRj","dst_nuid":"YVKldc2mrHNN","src_slot":"geometry","dst_slot":"geometry","uid":"W3Zxa1IfhmOj","src_connected":true,"dst_connected":true},{"src_nuid":"XyJRCGbYVK8Y","dst_nuid":"xhUTz8qk89Mf","src_slot":"texture","dst_slot":"texture","uid":"EALUab4w8FvI","src_connected":true,"dst_connected":true},{"src_nuid":"xhUTz8qk89Mf","dst_nuid":"sEponEvkFzs0","src_slot":"texture","dst_slot":"texture","uid":"YYhwgHaEYXdl","src_connected":true,"dst_connected":true},{"src_nuid":"1DgdsTeinJUe","dst_nuid":"xhUTz8qk89Mf","src_slot":"value","dst_slot":"u repeat","uid":"hvUCGLe3Soql","src_connected":true,"dst_connected":true},{"src_nuid":"1DgdsTeinJUe","dst_nuid":"xhUTz8qk89Mf","src_slot":"value","dst_slot":"v repeat","uid":"r2ME2LpluGOB","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-hemisphere-light.json ================================================ {"abs_t":0,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":416,"y":511,"uid":"Skrn6WL9nSrc","state":{"always_update":true,"input_sids":{},"output_sids":{"pfrqCuruhQ7Z":"5VCBtB7FNE6K"}},"title":"Hemisphere light","graph":{"uid":"4FJHgUJGkabm","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":1130,"y":255,"uid":"pfrqCuruhQ7Z","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"wr3tnpu9Vuge","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_hemisphere_light","x":791,"y":261,"uid":"aWhyKDcXPpSt","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1},"pivot":{"x":0,"y":0,"z":0}}},{"plugin":"vector","x":501,"y":625,"uid":"TFpLnRYvzqGY","open":false},{"plugin":"const_float_generator","x":299,"y":623,"uid":"EkbheqMyx9Eb","open":false,"state":{"val":1}},{"plugin":"color_picker","x":422,"y":61,"uid":"MVRLT6UQTY7P","state":{"hue":0.44382134831460673,"sat":0.2247191011235955,"lum":0.975},"title":"sky color"},{"plugin":"color_picker","x":424,"y":314,"uid":"ePKM8rJjsF2x","state":{"hue":0.44382134831460673,"sat":0.19101123595505617,"lum":0.29166666666666663},"title":"ground color"}],"conns":[{"src_nuid":"aWhyKDcXPpSt","dst_nuid":"pfrqCuruhQ7Z","src_slot":"object3d","dst_slot":0,"uid":"J4Cq3CVnCKwU","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"TFpLnRYvzqGY","dst_nuid":"aWhyKDcXPpSt","src_slot":"vector","dst_slot":"position","uid":"jR2srEunGU7a","src_connected":true,"dst_connected":true},{"src_nuid":"EkbheqMyx9Eb","dst_nuid":"TFpLnRYvzqGY","src_slot":"value","dst_slot":"y","uid":"DtbQJ4L3WeHg","src_connected":true,"dst_connected":true},{"src_nuid":"MVRLT6UQTY7P","dst_nuid":"aWhyKDcXPpSt","src_slot":"color","dst_slot":"color","uid":"a9RQU98MBJjj","src_connected":true,"dst_connected":true},{"src_nuid":"ePKM8rJjsF2x","dst_nuid":"aWhyKDcXPpSt","src_slot":"color","dst_slot":"groundColor","uid":"6wBeFserC3cS","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"5VCBtB7FNE6K","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-particle-emitter.json ================================================ {"abs_t":1245.138,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":483,"y":249,"uid":"Lx6FI6LiESQ8","state":{"always_update":true,"input_sids":{},"output_sids":{"iznPjAkiDy5R":"deUvDlZx96Z4"}},"title":"Particle emitter","graph":{"uid":"Bz3CyAcybJY7","parent_uid":"root","open":true,"nodes":[{"plugin":"three_particle_emitter","x":1088,"y":304,"uid":"FoAqpYNhw8od","open":false},{"plugin":"three_point_cloud_mesh","x":1333,"y":659,"uid":"NBMGwm5lD7Rr","open":false,"state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":0.12093798582984594,"y":0.12093798582984594,"z":0.12093798582984594},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"const_float_generator","x":514,"y":123,"uid":"NngsNj3WHuTM","state":{"val":500},"title":"Particle count"},{"plugin":"const_float_generator","x":852,"y":36,"uid":"G7unM7sbtA0L","state":{"val":4},"title":"Lifetime"},{"plugin":"three_point_cloud_material","x":1021,"y":1070,"uid":"kQdMAy3wQeUC","open":false},{"plugin":"const_float_generator","x":344,"y":36,"uid":"hU5LQRrRzka5","state":{"val":0.1},"title":"Size"},{"plugin":"url_texture_generator","x":291,"y":163,"uid":"2PGkLSB2JG8x","state":{"url":"/data/image/ba5501028e190cbd9bf920cb20a0509c37fc18b7.png"}},{"plugin":"toggle_button","x":749,"y":1161,"uid":"qJAJTGsbtS8X","open":false,"state":{"enabled":true},"title":"Transparent"},{"plugin":"const_float_generator","x":747,"y":1229,"uid":"NY0DdXTkO1HG","open":false,"state":{"val":2},"title":"Blending"},{"plugin":"const_float_generator","x":395,"y":362,"uid":"PKY7loh5peSI","state":{"val":0},"title":"Direction X"},{"plugin":"const_float_generator","x":394,"y":440,"uid":"sDpdW2z1jQPv","state":{"val":1},"title":"Direction Y"},{"plugin":"const_float_generator","x":393,"y":528,"uid":"ahXkF2xyApP9","state":{"val":0},"title":"Direction Z"},{"plugin":"vector","x":661,"y":406,"uid":"p3r4I3eAXaHU","open":false,"title":"Direction"},{"plugin":"const_float_generator","x":713,"y":35,"uid":"3cq7HxBW0l2H","state":{"val":0.1},"title":"Speed"},{"plugin":"const_float_generator","x":708,"y":239,"uid":"pvqbqenLQ0vn","state":{"val":0.4},"title":"Spread"},{"plugin":"const_float_generator","x":514,"y":239,"uid":"208WZhA7KCeb","state":{"val":0.1},"title":"Spawn rate"},{"plugin":"const_float_generator","x":396,"y":622,"uid":"7gsqq6vac89r","state":{"val":0},"title":"Gravity X"},{"plugin":"const_float_generator","x":395,"y":707,"uid":"EwCNH5avikLB","state":{"val":-0.04},"title":"Gravity Y"},{"plugin":"const_float_generator","x":394,"y":788,"uid":"fRAwFmX0ab2W","state":{"val":0},"title":"Gravity Z"},{"plugin":"vector","x":659,"y":709,"uid":"hCY2zoW7ueh1","open":false,"title":"Gravity"},{"plugin":"const_float_generator","x":889,"y":236,"uid":"227LtN5DoMeP","state":{"val":0},"title":"Noise"},{"plugin":"toggle_button","x":753,"y":1073,"uid":"Bak4sT4lGkvi","open":false,"state":{"enabled":false},"title":"DepthTest"},{"plugin":"output_proxy","x":1521,"y":660,"uid":"iznPjAkiDy5R","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"cDIv1wXVwWo7","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"convert_hsl_color_modulator","x":733,"y":999,"uid":"vKeSqSv2EiBY","open":false},{"plugin":"knob_float_generator","x":395,"y":1072,"uid":"5VREvs0v1BpH","state":{"val":0},"title":"Hue"},{"plugin":"knob_float_generator","x":392,"y":1170,"uid":"TQOmx5DBlgi9","state":{"val":0.7700000000000002},"title":"Saturation"},{"plugin":"knob_float_generator","x":388,"y":1266,"uid":"3qd9x7Erowy8","state":{"val":1},"title":"Luminosity"},{"plugin":"knob_float_generator","x":394,"y":966,"uid":"mxmt9W19gG4G","state":{"val":1},"title":"Opacity"}],"conns":[{"src_nuid":"NngsNj3WHuTM","dst_nuid":"FoAqpYNhw8od","src_slot":"value","dst_slot":"particle count","uid":"rhm21ytcOG2i","src_connected":true,"dst_connected":true},{"src_nuid":"208WZhA7KCeb","dst_nuid":"FoAqpYNhw8od","src_slot":"value","dst_slot":"spawn rate","uid":"7xMEKOmQRNxg","src_connected":true,"dst_connected":true},{"src_nuid":"p3r4I3eAXaHU","dst_nuid":"FoAqpYNhw8od","src_slot":"vector","dst_slot":"direction","uid":"JjqJwCQ2jDrn","src_connected":true,"dst_connected":true},{"src_nuid":"3cq7HxBW0l2H","dst_nuid":"FoAqpYNhw8od","src_slot":"value","dst_slot":"speed","uid":"HgeHrV0E34jV","src_connected":true,"dst_connected":true},{"src_nuid":"pvqbqenLQ0vn","dst_nuid":"FoAqpYNhw8od","src_slot":"value","dst_slot":"spread","uid":"Zsi9jo0exbSO","src_connected":true,"dst_connected":true},{"src_nuid":"G7unM7sbtA0L","dst_nuid":"FoAqpYNhw8od","src_slot":"value","dst_slot":"lifetime","uid":"DPwkq20DRXNb","src_connected":true,"dst_connected":true},{"src_nuid":"hCY2zoW7ueh1","dst_nuid":"FoAqpYNhw8od","src_slot":"vector","dst_slot":"gravity","uid":"dBWuFkGFYtQB","src_connected":true,"dst_connected":true},{"src_nuid":"227LtN5DoMeP","dst_nuid":"FoAqpYNhw8od","src_slot":"value","dst_slot":"noise","uid":"E0dKbiilSqce","src_connected":true,"dst_connected":true},{"src_nuid":"FoAqpYNhw8od","dst_nuid":"NBMGwm5lD7Rr","src_slot":"geometry","dst_slot":"geometry","uid":"BY05b7bgYIq3","src_connected":true,"dst_connected":true},{"src_nuid":"kQdMAy3wQeUC","dst_nuid":"NBMGwm5lD7Rr","src_slot":"material","dst_slot":"material","uid":"Yei3QEwKjjra","src_connected":true,"dst_connected":true},{"src_nuid":"2PGkLSB2JG8x","dst_nuid":"kQdMAy3wQeUC","src_slot":"texture","dst_slot":"texture","uid":"L9wG2vaCcpbF","src_connected":true,"dst_connected":true},{"src_nuid":"hU5LQRrRzka5","dst_nuid":"kQdMAy3wQeUC","src_slot":"value","dst_slot":"size","uid":"FphnLO0n1Ey8","src_connected":true,"dst_connected":true},{"src_nuid":"Bak4sT4lGkvi","dst_nuid":"kQdMAy3wQeUC","src_slot":"bool","dst_slot":"depthTest","uid":"z6WZVeMJiJT5","src_connected":true,"dst_connected":true},{"src_nuid":"qJAJTGsbtS8X","dst_nuid":"kQdMAy3wQeUC","src_slot":"bool","dst_slot":"transparent","uid":"cmjVtMMGzvus","src_connected":true,"dst_connected":true},{"src_nuid":"NY0DdXTkO1HG","dst_nuid":"kQdMAy3wQeUC","src_slot":"value","dst_slot":"blending","uid":"TCjrVJyqtLtR","src_connected":true,"dst_connected":true},{"src_nuid":"PKY7loh5peSI","dst_nuid":"p3r4I3eAXaHU","src_slot":"value","dst_slot":"x","uid":"Bt0W3sbRDygy","src_connected":true,"dst_connected":true},{"src_nuid":"sDpdW2z1jQPv","dst_nuid":"p3r4I3eAXaHU","src_slot":"value","dst_slot":"y","uid":"Uv5l1hYuNYb8","src_connected":true,"dst_connected":true},{"src_nuid":"ahXkF2xyApP9","dst_nuid":"p3r4I3eAXaHU","src_slot":"value","dst_slot":"z","uid":"pveLWjJ3AqmS","src_connected":true,"dst_connected":true},{"src_nuid":"7gsqq6vac89r","dst_nuid":"hCY2zoW7ueh1","src_slot":"value","dst_slot":"x","uid":"GgBWHuuuSjnh","src_connected":true,"dst_connected":true},{"src_nuid":"EwCNH5avikLB","dst_nuid":"hCY2zoW7ueh1","src_slot":"value","dst_slot":"y","uid":"ciocs7k1ioqp","src_connected":true,"dst_connected":true},{"src_nuid":"fRAwFmX0ab2W","dst_nuid":"hCY2zoW7ueh1","src_slot":"value","dst_slot":"z","uid":"aMZAjzkR2HK9","src_connected":true,"dst_connected":true},{"src_nuid":"NBMGwm5lD7Rr","dst_nuid":"iznPjAkiDy5R","src_slot":"object3d","dst_slot":0,"uid":"6OrTL9AcopIh","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"vKeSqSv2EiBY","dst_nuid":"kQdMAy3wQeUC","src_slot":"color","dst_slot":"color","uid":"PpV3dcqY7XTb","src_connected":true,"dst_connected":true},{"src_nuid":"5VREvs0v1BpH","dst_nuid":"vKeSqSv2EiBY","src_slot":"value","dst_slot":"hue","uid":"T4d1B08EwlXl","src_connected":true,"dst_connected":true},{"src_nuid":"TQOmx5DBlgi9","dst_nuid":"vKeSqSv2EiBY","src_slot":"value","dst_slot":"saturation","uid":"srISdxScGFfg","src_connected":true,"dst_connected":true},{"src_nuid":"3qd9x7Erowy8","dst_nuid":"vKeSqSv2EiBY","src_slot":"value","dst_slot":"luminosity","uid":"s8lYieVMy3nH","src_connected":true,"dst_connected":true},{"src_nuid":"mxmt9W19gG4G","dst_nuid":"kQdMAy3wQeUC","src_slot":"value","dst_slot":"opacity","uid":"zK8SgDTZK6LV","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"deUvDlZx96Z4","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-particle-geometry.json ================================================ {"abs_t":703.463,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":714,"y":406,"uid":"bGhqhe9PdfRx","state":{"always_update":true,"input_sids":{},"output_sids":{"HXAApmVysRWm":"deUvDlZx96Z4"}},"title":"Particle geometry","graph":{"uid":"LA44eek4D9eC","parent_uid":"root","open":true,"nodes":[{"plugin":"three_point_cloud_mesh","x":1343,"y":345,"uid":"HR7JSEsfpQwa","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"three_point_cloud_material","x":1035,"y":406,"uid":"GCa6WUMcSP5S"},{"plugin":"toggle_button","x":791,"y":639,"uid":"SDS5KCgk7PPQ","state":{"enabled":true},"title":"Transparent"},{"plugin":"const_float_generator","x":810,"y":811,"uid":"rUe2beM6cGYr","state":{"val":2},"title":"Blending"},{"plugin":"toggle_button","x":799,"y":722,"uid":"CXXBHNQzDMY9","state":{"enabled":false},"title":"DepthTest"},{"plugin":"output_proxy","x":1685,"y":350,"uid":"HXAApmVysRWm","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"cDIv1wXVwWo7","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"convert_hsl_color_modulator","x":854,"y":440,"uid":"pVKMQVEC6Lat","open":false},{"plugin":"knob_float_generator","x":376,"y":412,"uid":"syAdDEe8fBDN","state":{"val":0},"title":"Hue"},{"plugin":"knob_float_generator","x":453,"y":411,"uid":"HYQshmbHbMm8","state":{"val":1},"title":"Saturation"},{"plugin":"knob_float_generator","x":612,"y":410,"uid":"eHadzQaT7gab","state":{"val":1},"title":"Luminosity"},{"plugin":"knob_float_generator","x":376,"y":321,"uid":"bpDQNegwy7Uv","state":{"val":1},"title":"Opacity"},{"plugin":"three_geometry_sphere","x":993,"y":160,"uid":"VzJA4u5aWQjB"},{"plugin":"const_float_generator","x":638,"y":192,"uid":"u2zTUKfwXVZH","state":{"val":64}},{"plugin":"const_float_generator","x":841,"y":559,"uid":"VpuVaUydQACH","state":{"val":0.01},"title":"Size"},{"plugin":"url_texture_generator","x":380,"y":513,"uid":"6Zp3haRLGXqb","state":{"url":"/data/image/ba5501028e190cbd9bf920cb20a0509c37fc18b7.png"}}],"conns":[{"src_nuid":"GCa6WUMcSP5S","dst_nuid":"HR7JSEsfpQwa","src_slot":"material","dst_slot":"material","uid":"WG3P8zCRdUku","src_connected":true,"dst_connected":true},{"src_nuid":"CXXBHNQzDMY9","dst_nuid":"GCa6WUMcSP5S","src_slot":"bool","dst_slot":"depthTest","uid":"tLQKmBQS2WJc","src_connected":true,"dst_connected":true},{"src_nuid":"SDS5KCgk7PPQ","dst_nuid":"GCa6WUMcSP5S","src_slot":"bool","dst_slot":"transparent","uid":"AZSsfmjSJNk6","src_connected":true,"dst_connected":true},{"src_nuid":"rUe2beM6cGYr","dst_nuid":"GCa6WUMcSP5S","src_slot":"value","dst_slot":"blending","uid":"c3LtvaHE8rjW","src_connected":true,"dst_connected":true},{"src_nuid":"HR7JSEsfpQwa","dst_nuid":"HXAApmVysRWm","src_slot":"object3d","dst_slot":0,"uid":"jBj4SjQ7JCwE","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"pVKMQVEC6Lat","dst_nuid":"GCa6WUMcSP5S","src_slot":"color","dst_slot":"color","uid":"fB3WsSzPnajj","src_connected":true,"dst_connected":true},{"src_nuid":"syAdDEe8fBDN","dst_nuid":"pVKMQVEC6Lat","src_slot":"value","dst_slot":"hue","uid":"uAKJe2BbnY6P","src_connected":true,"dst_connected":true},{"src_nuid":"HYQshmbHbMm8","dst_nuid":"pVKMQVEC6Lat","src_slot":"value","dst_slot":"saturation","uid":"rUGXTyTByQnz","src_connected":true,"dst_connected":true},{"src_nuid":"eHadzQaT7gab","dst_nuid":"pVKMQVEC6Lat","src_slot":"value","dst_slot":"luminosity","uid":"T9Ldb4RjCErG","src_connected":true,"dst_connected":true},{"src_nuid":"bpDQNegwy7Uv","dst_nuid":"GCa6WUMcSP5S","src_slot":"value","dst_slot":"opacity","uid":"ckUpZLkCcAvp","src_connected":true,"dst_connected":true},{"src_nuid":"VzJA4u5aWQjB","dst_nuid":"HR7JSEsfpQwa","src_slot":"geometry","dst_slot":"geometry","uid":"b2yhTrZBZnsL","src_connected":true,"dst_connected":true},{"src_nuid":"u2zTUKfwXVZH","dst_nuid":"VzJA4u5aWQjB","src_slot":"value","dst_slot":"widthSegments","uid":"eVMq8wwWM9A7","src_connected":true,"dst_connected":true},{"src_nuid":"u2zTUKfwXVZH","dst_nuid":"VzJA4u5aWQjB","src_slot":"value","dst_slot":"heightSegments","uid":"avKB5TtduuXR","src_connected":true,"dst_connected":true},{"src_nuid":"VpuVaUydQACH","dst_nuid":"GCa6WUMcSP5S","src_slot":"value","dst_slot":"size","uid":"9pWBxGYPLwEx","src_connected":true,"dst_connected":true},{"src_nuid":"6Zp3haRLGXqb","dst_nuid":"GCa6WUMcSP5S","src_slot":"texture","dst_slot":"texture","uid":"gAWj9vZmcs7P","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"deUvDlZx96Z4","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-plane-no-shading.json ================================================ {"abs_t":275.925,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":773,"y":398,"uid":"sH5Q9QtkUnPk","state":{"always_update":true,"input_sids":{},"output_sids":{"XStnefVKjgfK":"mh0rTKkFm0nD"}},"title":"Plane (not shaded)","graph":{"uid":"eCgyyQZuJjGu","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1219,"y":454,"uid":"TztxBubZhxqC","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1418,"y":453,"uid":"XStnefVKjgfK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":468,"y":138,"uid":"mZDdNagRpLrD","state":{"url":"/data/image/7cbc45195c04d1595c43be42418755520068c72e.png"},"title":"Texture"},{"plugin":"const_float_generator","x":669,"y":542,"uid":"dHeFLLbPpWJH","state":{"val":16},"title":"Segments"},{"plugin":"three_geometry_plane","x":925,"y":466,"uid":"ec2J7wjHbyzq"},{"plugin":"three_material","x":719,"y":90,"uid":"ueR2MGGSNAgb"},{"plugin":"const_float_generator","x":664,"y":451,"uid":"ZGBuXanp5pzG","state":{"val":1},"title":"Width & Height"}],"conns":[{"src_nuid":"TztxBubZhxqC","dst_nuid":"XStnefVKjgfK","src_slot":"object3d","dst_slot":0,"uid":"bVLCXJURnrZf","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"ec2J7wjHbyzq","dst_nuid":"TztxBubZhxqC","src_slot":"geometry","dst_slot":"geometry","uid":"Wh3skezBdHU6","src_connected":true,"dst_connected":true},{"src_nuid":"mZDdNagRpLrD","dst_nuid":"ueR2MGGSNAgb","src_slot":"texture","dst_slot":"texture","uid":"Y7qEm2krS3Fd","src_connected":true,"dst_connected":true},{"src_nuid":"ueR2MGGSNAgb","dst_nuid":"TztxBubZhxqC","src_slot":"material","dst_slot":"material","uid":"NC9dnC2Kvv94","src_connected":true,"dst_connected":true},{"src_nuid":"ZGBuXanp5pzG","dst_nuid":"ec2J7wjHbyzq","src_slot":"value","dst_slot":"width","uid":"LV268xqsNWck","src_connected":true,"dst_connected":true},{"src_nuid":"ZGBuXanp5pzG","dst_nuid":"ec2J7wjHbyzq","src_slot":"value","dst_slot":"height","uid":"3zKApEEDywAp","src_connected":true,"dst_connected":true},{"src_nuid":"dHeFLLbPpWJH","dst_nuid":"ec2J7wjHbyzq","src_slot":"value","dst_slot":"widthSegments","uid":"FMcgaLx4E3tv","src_connected":true,"dst_connected":true},{"src_nuid":"dHeFLLbPpWJH","dst_nuid":"ec2J7wjHbyzq","src_slot":"value","dst_slot":"heightSegments","uid":"9KzCdHSDNcsW","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-point-light.json ================================================ {"abs_t":157.202,"active_graph":"root","graph_uid":"jG8ul210Feym","root":{"uid":"root","parent_uid":-1,"nodes":[{"plugin":"graph","x":382,"y":380,"uid":"O8xyzxPzfIfv","state":{"always_update":true,"input_sids":{},"output_sids":{"fLBjNZOjqImx":"547odbJKrTzG"}},"title":"Point light","graph":{"uid":"uXOZQEvlVzLa","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":1110,"y":223,"uid":"fLBjNZOjqImx","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"vSy6Gj4JSPYs","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"slider_float_generator","x":306,"y":399,"uid":"LAh9ouWvrhAg","state":{"val":1,"min":-1,"max":1},"title":"X"},{"plugin":"slider_float_generator","x":306,"y":465,"uid":"Pv9v8v3T9K25","state":{"val":0.06,"min":-1,"max":1},"title":"Y"},{"plugin":"slider_float_generator","x":301,"y":532,"uid":"YRcroRs76ZVv","state":{"val":2,"min":-1,"max":2},"title":"Z"},{"plugin":"vector","x":645,"y":384,"uid":"TmOFes2roAgE","title":"Position"},{"plugin":"three_point_light","x":867,"y":322,"uid":"jgVkG1a4gtyo"},{"plugin":"const_float_generator","x":304,"y":295,"uid":"9N4joYATH9L8","state":{"val":1},"title":"Intensity"}],"conns":[{"src_nuid":"LAh9ouWvrhAg","dst_nuid":"TmOFes2roAgE","src_slot":"value","dst_slot":"x","uid":"atvEsseSOZFX","src_connected":true,"dst_connected":true},{"src_nuid":"Pv9v8v3T9K25","dst_nuid":"TmOFes2roAgE","src_slot":"value","dst_slot":"y","uid":"I6gFMJgx63o9","src_connected":true,"dst_connected":true},{"src_nuid":"YRcroRs76ZVv","dst_nuid":"TmOFes2roAgE","src_slot":"value","dst_slot":"z","uid":"LilZDlzcUNa2","src_connected":true,"dst_connected":true},{"src_nuid":"jgVkG1a4gtyo","dst_nuid":"fLBjNZOjqImx","src_slot":"object3d","dst_slot":0,"uid":"fFbpRGwb2tc3","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"TmOFes2roAgE","dst_nuid":"jgVkG1a4gtyo","src_slot":"vector","dst_slot":"color","uid":"BdZz1hTVNPTo","src_connected":true,"dst_connected":true},{"src_nuid":"9N4joYATH9L8","dst_nuid":"jgVkG1a4gtyo","src_slot":"value","dst_slot":"intensity","uid":"7Gnn90kx8n5h","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"547odbJKrTzG","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-ring.json ================================================ {"abs_t":64.472,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":648,"y":420,"uid":"Y5CzuXESNu92","state":{"always_update":true,"input_sids":{},"output_sids":{"jcNT4C6TMp52":"mh0rTKkFm0nD"}},"title":"Ring","graph":{"uid":"gRsD4AdqG62P","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1254,"y":337,"uid":"kZWB6EMQ6xXr","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1444,"y":331,"uid":"jcNT4C6TMp52","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":541,"y":378,"uid":"XBrnCQWZNzb6","state":{"url":"/data/image/7cbc45195c04d1595c43be42418755520068c72e.png"},"title":"Torus texture"},{"plugin":"three_material_phong","x":871,"y":378,"uid":"ZhyrZc2e8xmk"},{"plugin":"three_geometry_ring","x":856,"y":70,"uid":"nC6TGB8pt2j4"},{"plugin":"const_float_generator","x":656,"y":840,"uid":"GJLsNEYheKqT","state":{"val":2},"title":"Side"}],"conns":[{"src_nuid":"kZWB6EMQ6xXr","dst_nuid":"jcNT4C6TMp52","src_slot":"object3d","dst_slot":0,"uid":"2DCxs4hXqNCN","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"XBrnCQWZNzb6","dst_nuid":"ZhyrZc2e8xmk","src_slot":"texture","dst_slot":"texture","uid":"MTKUMSwZAQu8","src_connected":true,"dst_connected":true},{"src_nuid":"ZhyrZc2e8xmk","dst_nuid":"kZWB6EMQ6xXr","src_slot":"material","dst_slot":"material","uid":"vgMxkcvpRDVj","src_connected":true,"dst_connected":true},{"src_nuid":"nC6TGB8pt2j4","dst_nuid":"kZWB6EMQ6xXr","src_slot":"geometry","dst_slot":"geometry","uid":"T4nD5UB9aDeg","src_connected":true,"dst_connected":true},{"src_nuid":"GJLsNEYheKqT","dst_nuid":"ZhyrZc2e8xmk","src_slot":"value","dst_slot":"side","uid":"a3W84cBdsAp8","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-room.json ================================================ {"abs_t":139.142,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":624,"y":145,"uid":"LyjUUzYcQJDX","state":{"always_update":true,"input_sids":{},"output_sids":{"6prUVLH8Mhzs":"mh0rTKkFm0nD"}},"title":"Room","graph":{"uid":"kY4ASuQHXV8S","parent_uid":"root","open":true,"nodes":[{"plugin":"three_geometry_box","x":883,"y":690,"uid":"9kscLz9y69au"},{"plugin":"three_mesh","x":1254,"y":337,"uid":"3r8T4LqCWtDj","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":21.284179039880932,"y":11.848232853084218,"z":11.848232853084218},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1444,"y":331,"uid":"6prUVLH8Mhzs","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":546,"y":151,"uid":"hZhR2ENFEPMM","state":{"url":"/data/image/7cbc45195c04d1595c43be42418755520068c72e.png"},"title":"Box texture"},{"plugin":"three_material_phong","x":878,"y":205,"uid":"pA9kzjqBXJkC"},{"plugin":"const_float_generator","x":686,"y":844,"uid":"AupqWu4LWeP6","state":{"val":1}},{"plugin":"const_float_generator","x":636,"y":671,"uid":"szVTvthU3Qzu","state":{"val":2}},{"plugin":"annotation","x":388,"y":429,"uid":"rXR64R6vs3pD","state":{"text":"This is a big cube, and \"side\" is set to 2, meaning it renders the inside of it as well. So if the camera is inside of this, you get the illusion of being in a room.","width":150,"height":70},"title":"Info"}],"conns":[{"src_nuid":"3r8T4LqCWtDj","dst_nuid":"6prUVLH8Mhzs","src_slot":"object3d","dst_slot":0,"uid":"NfGcNNLKSESt","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"9kscLz9y69au","dst_nuid":"3r8T4LqCWtDj","src_slot":"geometry","dst_slot":"geometry","uid":"C7smgBg6HmmG","src_connected":true,"dst_connected":true},{"src_nuid":"hZhR2ENFEPMM","dst_nuid":"pA9kzjqBXJkC","src_slot":"texture","dst_slot":"texture","uid":"QbqRKbq6VzC8","src_connected":true,"dst_connected":true},{"src_nuid":"pA9kzjqBXJkC","dst_nuid":"3r8T4LqCWtDj","src_slot":"material","dst_slot":"material","uid":"5wsLGLQg9UEp","src_connected":true,"dst_connected":true},{"src_nuid":"szVTvthU3Qzu","dst_nuid":"pA9kzjqBXJkC","src_slot":"value","dst_slot":"side","uid":"ED8M7tCaxvPX","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-sky-sphere.json ================================================ {"abs_t":474.827,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":720,"y":337,"uid":"bHgsY63zA4m5","state":{"always_update":true,"input_sids":{},"output_sids":{"Rsx2h9keR8YH":"mh0rTKkFm0nD"}},"title":"Sky sphere","graph":{"uid":"g5jQ5LWWAAbp","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1070,"y":391,"uid":"AqTJmpEVT23D","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":50,"y":50,"z":50},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1269,"y":390,"uid":"Rsx2h9keR8YH","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":194,"y":64,"uid":"SP7gGQqKYJaM","state":{"url":"/data/image/7cbc45195c04d1595c43be42418755520068c72e.png"},"title":"Texture"},{"plugin":"graph","x":637,"y":660,"uid":"p6nWamu6npQW","state":{"always_update":true,"input_sids":{},"output_sids":{"Yk8hckpSLzGL":"xnmIRUOwsegz","mB9Mmv8uTwqY":"ejxO7eIJpw4m","wbqdvRKD3qsR":"H3AwGhvcvewD"}},"title":"Position, Rotation, Scale","graph":{"uid":"dzvsqtsKxusV","parent_uid":"g5jQ5LWWAAbp","open":true,"nodes":[{"plugin":"slider_float_generator","x":82,"y":105,"uid":"sgKaJyRHDv7R","state":{"val":0,"min":-1,"max":1},"title":"X"},{"plugin":"slider_float_generator","x":83,"y":172,"uid":"zpYsqRyfrmwD","state":{"val":0,"min":-1,"max":1},"title":"Y"},{"plugin":"slider_float_generator","x":81,"y":238,"uid":"98Q9qJDnpdfU","state":{"val":0,"min":-1,"max":1},"title":"Z"},{"plugin":"vector","x":585,"y":200,"uid":"vfnUaMCY4Nt8","title":"Position"},{"plugin":"vector","x":290,"y":610,"uid":"xEeC9G7p4LmB","title":"Scale"},{"plugin":"vector","x":581,"y":413,"uid":"xnB7nxKsv5Mp","title":"Rotation"},{"plugin":"const_float_generator","x":113,"y":636,"uid":"sRaxKP4ex4VH","state":{"val":50},"title":"XYZ"},{"plugin":"output_proxy","x":803,"y":252,"uid":"Yk8hckpSLzGL","title":"position","dyn_in":[{"name":"output","dt":5,"def":null,"uid":"S0aurqIbmI1x","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":818,"y":400,"uid":"mB9Mmv8uTwqY","title":"rotation","dyn_in":[{"name":"output","dt":5,"def":null,"uid":"ueZzDAy1hfyc","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":825,"y":549,"uid":"wbqdvRKD3qsR","title":"scale","dyn_in":[{"name":"output","dt":5,"def":null,"uid":"TTvvZvj40kZI","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"slider_float_generator","x":85,"y":369,"uid":"hdQtQZga5HRU","state":{"val":0,"min":0,"max":5},"title":"X"},{"plugin":"slider_float_generator","x":82,"y":436,"uid":"gWarSJWqA8pd","state":{"val":0,"min":0,"max":5},"title":"Y"},{"plugin":"slider_float_generator","x":80,"y":502,"uid":"TUPLLEpJz4Ze","state":{"val":0,"min":0,"max":5},"title":"Z"}],"conns":[{"src_nuid":"sgKaJyRHDv7R","dst_nuid":"vfnUaMCY4Nt8","src_slot":"value","dst_slot":"x","uid":"9Auh7zqtuhvk","src_connected":true,"dst_connected":true},{"src_nuid":"zpYsqRyfrmwD","dst_nuid":"vfnUaMCY4Nt8","src_slot":"value","dst_slot":"y","uid":"fck7TUEaP8ws","src_connected":true,"dst_connected":true},{"src_nuid":"98Q9qJDnpdfU","dst_nuid":"vfnUaMCY4Nt8","src_slot":"value","dst_slot":"z","uid":"uqDtEV7cTx7A","src_connected":true,"dst_connected":true},{"src_nuid":"sRaxKP4ex4VH","dst_nuid":"xEeC9G7p4LmB","src_slot":"value","dst_slot":"x","uid":"9dREVLr7Mhw8","src_connected":true,"dst_connected":true},{"src_nuid":"sRaxKP4ex4VH","dst_nuid":"xEeC9G7p4LmB","src_slot":"value","dst_slot":"y","uid":"fTnKCjWckH4A","src_connected":true,"dst_connected":true,"offset":1},{"src_nuid":"sRaxKP4ex4VH","dst_nuid":"xEeC9G7p4LmB","src_slot":"value","dst_slot":"z","uid":"AfHFALBcV9RK","src_connected":true,"dst_connected":true},{"src_nuid":"vfnUaMCY4Nt8","dst_nuid":"Yk8hckpSLzGL","src_slot":"vector","dst_slot":0,"uid":"7ugecxEqnvc4","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"xnB7nxKsv5Mp","dst_nuid":"mB9Mmv8uTwqY","src_slot":"vector","dst_slot":0,"uid":"bdpVQ8XpGYKA","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"xEeC9G7p4LmB","dst_nuid":"wbqdvRKD3qsR","src_slot":"vector","dst_slot":0,"uid":"3PhyQ8yyEpB9","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"hdQtQZga5HRU","dst_nuid":"xnB7nxKsv5Mp","src_slot":"value","dst_slot":"x","uid":"bjrTAqBhaCh8","src_connected":true,"dst_connected":true},{"src_nuid":"gWarSJWqA8pd","dst_nuid":"xnB7nxKsv5Mp","src_slot":"value","dst_slot":"y","uid":"T3dRPJ7cMYcs","src_connected":true,"dst_connected":true},{"src_nuid":"TUPLLEpJz4Ze","dst_nuid":"xnB7nxKsv5Mp","src_slot":"value","dst_slot":"z","uid":"28QuvUKGVRgh","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"scale","dt":5,"index":0,"uid":"H3AwGhvcvewD","dynamic":true,"type":1,"is_connected":true},{"name":"rotation","dt":5,"index":1,"uid":"ejxO7eIJpw4m","dynamic":true,"type":1,"is_connected":true},{"name":"position","dt":5,"index":2,"uid":"xnmIRUOwsegz","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"three_geometry_sphere","x":645,"y":408,"uid":"r9KYzwPrEysg"},{"plugin":"const_float_generator","x":398,"y":448,"uid":"jgYXGynLBPYD","state":{"val":32},"title":"Segments"},{"plugin":"three_material","x":655,"y":112,"uid":"v6muqDGgy6Da"},{"plugin":"const_float_generator","x":421,"y":338,"uid":"LzqkkqL7AZ3y","state":{"val":1},"title":"Side"}],"conns":[{"src_nuid":"AqTJmpEVT23D","dst_nuid":"Rsx2h9keR8YH","src_slot":"object3d","dst_slot":0,"uid":"uqKPJHJDbW29","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"p6nWamu6npQW","dst_nuid":"AqTJmpEVT23D","src_slot":0,"dst_slot":"scale","uid":"ywK2TURrxGAj","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"p6nWamu6npQW","dst_nuid":"AqTJmpEVT23D","src_slot":1,"dst_slot":"rotation","uid":"zsHkfZ6xVxwS","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"p6nWamu6npQW","dst_nuid":"AqTJmpEVT23D","src_slot":2,"dst_slot":"position","uid":"Pkqfj3mndaXs","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"r9KYzwPrEysg","dst_nuid":"AqTJmpEVT23D","src_slot":"geometry","dst_slot":"geometry","uid":"k3Y5Skp5Sh2j","src_connected":true,"dst_connected":true},{"src_nuid":"jgYXGynLBPYD","dst_nuid":"r9KYzwPrEysg","src_slot":"value","dst_slot":"widthSegments","uid":"GCQfBZs8CqDF","src_connected":true,"dst_connected":true},{"src_nuid":"jgYXGynLBPYD","dst_nuid":"r9KYzwPrEysg","src_slot":"value","dst_slot":"heightSegments","uid":"2nyb6TDhp2SA","src_connected":true,"dst_connected":true},{"src_nuid":"SP7gGQqKYJaM","dst_nuid":"v6muqDGgy6Da","src_slot":"texture","dst_slot":"texture","uid":"T8SbVnBKVvCU","src_connected":true,"dst_connected":true},{"src_nuid":"v6muqDGgy6Da","dst_nuid":"AqTJmpEVT23D","src_slot":"material","dst_slot":"material","uid":"j4bAY2AREra6","src_connected":true,"dst_connected":true},{"src_nuid":"LzqkkqL7AZ3y","dst_nuid":"v6muqDGgy6Da","src_slot":"value","dst_slot":"side","uid":"r88sVR8855nd","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-sphere.json ================================================ {"abs_t":72.448,"active_graph":"XxZB4Aj6wVF3","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":623,"y":272,"uid":"C9Fr5V3YWrAh","state":{"always_update":true,"input_sids":{},"output_sids":{"RpeFKf3A3gnD":"mh0rTKkFm0nD"}},"title":"Sphere","graph":{"uid":"XxZB4Aj6wVF3","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1239,"y":326,"uid":"dMv65ktxqfSc","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1438,"y":325,"uid":"RpeFKf3A3gnD","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":425,"y":28,"uid":"RCy5nYU4dmPc","state":{"url":"/data/image/81238160a5dd3ebbe50a942ff7d4d1fca95bfcf7.png"},"title":"Box texture"},{"plugin":"three_material_phong","x":695,"y":112,"uid":"RMtkaqTpJEHw"},{"plugin":"three_geometry_sphere","x":884,"y":568,"uid":"TW6z9srQYDDz"},{"plugin":"const_float_generator","x":679,"y":615,"uid":"yBqbSwXGESrd","state":{"val":32},"title":"Segments"}],"conns":[{"src_nuid":"dMv65ktxqfSc","dst_nuid":"RpeFKf3A3gnD","src_slot":"object3d","dst_slot":0,"uid":"ru6d8kxqsRjF","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"RCy5nYU4dmPc","dst_nuid":"RMtkaqTpJEHw","src_slot":"texture","dst_slot":"texture","uid":"rrtc7JUw2vHn","src_connected":true,"dst_connected":true},{"src_nuid":"RMtkaqTpJEHw","dst_nuid":"dMv65ktxqfSc","src_slot":"material","dst_slot":"material","uid":"B7TVgEM39VJf","src_connected":true,"dst_connected":true},{"src_nuid":"TW6z9srQYDDz","dst_nuid":"dMv65ktxqfSc","src_slot":"geometry","dst_slot":"geometry","uid":"6mDCVEpwCsUx","src_connected":true,"dst_connected":true},{"src_nuid":"yBqbSwXGESrd","dst_nuid":"TW6z9srQYDDz","src_slot":"value","dst_slot":"widthSegments","uid":"jsZptJaBV5Hc","src_connected":true,"dst_connected":true},{"src_nuid":"yBqbSwXGESrd","dst_nuid":"TW6z9srQYDDz","src_slot":"value","dst_slot":"heightSegments","uid":"FHaVQbC964af","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add-text.json ================================================ {"abs_t":788.427,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":388,"y":208,"uid":"ULL3aBNb74pp","state":{"always_update":true,"input_sids":{"Fq8SveLeVHkP":"mdjVRg52TeVf"},"output_sids":{"JpRvUYvAmC9K":"Uhe2f2gPcWCB"}},"title":"Text","graph":{"uid":"C9GZtgTrQfJN","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":915,"y":215,"uid":"JpRvUYvAmC9K","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"VVrkC4pSddJy","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_text_geometry","x":374,"y":160,"uid":"bUSm3gbG9fYD","state":{}},{"plugin":"three_mesh","x":700,"y":208,"uid":"KDgnYzm7QmWd","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"three_material","x":365,"y":373,"uid":"5tbakrWcjz7U","state":{}},{"plugin":"color_picker","x":113,"y":392,"uid":"eXJPgStZ5mug","state":{"hue":0,"sat":0,"lum":1}},{"plugin":"input_proxy","x":166,"y":189,"uid":"Fq8SveLeVHkP","title":"text","dyn_out":[{"name":"input","dt":15,"uid":"BfjusZkKnTPF","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]}],"conns":[{"src_nuid":"bUSm3gbG9fYD","dst_nuid":"KDgnYzm7QmWd","src_slot":"geometry","dst_slot":"geometry","uid":"6uUMahCbTENc","src_connected":true,"dst_connected":true},{"src_nuid":"5tbakrWcjz7U","dst_nuid":"KDgnYzm7QmWd","src_slot":"material","dst_slot":"material","uid":"ZCkypDmpz2cD","src_connected":true,"dst_connected":true},{"src_nuid":"KDgnYzm7QmWd","dst_nuid":"JpRvUYvAmC9K","src_slot":"object3d","dst_slot":0,"uid":"mLWQvLZMPKVW","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"eXJPgStZ5mug","dst_nuid":"5tbakrWcjz7U","src_slot":"color","dst_slot":"color","uid":"WwZWMRGYX9YB","src_connected":true,"dst_connected":true},{"src_nuid":"Fq8SveLeVHkP","dst_nuid":"bUSm3gbG9fYD","src_slot":0,"dst_slot":"text","uid":"fhkUVaR48U3e","src_connected":true,"dst_connected":true,"src_dyn":true}]},"dyn_in":[{"name":"text","dt":15,"index":0,"uid":"mdjVRg52TeVf","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Uhe2f2gPcWCB","dynamic":true,"type":1,"is_connected":false}]},{"plugin":"const_text_generator","x":161,"y":240,"uid":"AuZYQQgFCmuK","state":{"text":"Welcome to Patches","width":118,"height":80}}],"conns":[{"src_nuid":"AuZYQQgFCmuK","dst_nuid":"ULL3aBNb74pp","src_slot":"text","dst_slot":0,"uid":"vbBnVnbPdhjC","src_connected":true,"dst_connected":true,"dst_dyn":true}]}} ================================================ FILE: browser/patches/_add-torus.json ================================================ {"abs_t":7.107,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":1005,"y":415,"uid":"s6kHrXDNXWFh","state":{"always_update":true,"input_sids":{},"output_sids":{"HADmZ8JNvF3p":"mh0rTKkFm0nD"}},"title":"Torus","graph":{"uid":"EK98NFMxmh2c","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1254,"y":337,"uid":"pseaWX8g5G7Y","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1444,"y":331,"uid":"HADmZ8JNvF3p","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":541,"y":378,"uid":"6gzVrYvb3aen","state":{"url":"/data/image/7cbc45195c04d1595c43be42418755520068c72e.png"},"title":"Torus texture"},{"plugin":"three_material_phong","x":871,"y":378,"uid":"4LxhHGbzGqkB"},{"plugin":"three_geometry_torus","x":815,"y":143,"uid":"G8RXd4Mh63e6"}],"conns":[{"src_nuid":"pseaWX8g5G7Y","dst_nuid":"HADmZ8JNvF3p","src_slot":"object3d","dst_slot":0,"uid":"Zs73QxrvHmZs","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"6gzVrYvb3aen","dst_nuid":"4LxhHGbzGqkB","src_slot":"texture","dst_slot":"texture","uid":"UtHVKMxAuQyx","src_connected":true,"dst_connected":true},{"src_nuid":"4LxhHGbzGqkB","dst_nuid":"pseaWX8g5G7Y","src_slot":"material","dst_slot":"material","uid":"ggnabDY7eCVv","src_connected":true,"dst_connected":true},{"src_nuid":"G8RXd4Mh63e6","dst_nuid":"pseaWX8g5G7Y","src_slot":"geometry","dst_slot":"geometry","uid":"BNWXTCP4tJYZ","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labv4-Genius_02.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Genius","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labv4-Genius_02/Labv4-Genius_02.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labv4_Happy_02.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Happy","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labv4_Happy_02/Labv4_Happy_02.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labv8lights.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Lights","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labv8lights/Labv8lights.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labv9.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labv9/Labv9.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_LabvTV.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/TV","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/LabvTV/LabvTV.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labvboombox.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/BoomBox","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labvboombox/Labvboombox.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labvbox.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Box","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labvbox/Labvbox.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labvdesk.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Desk","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labvdesk/Labvdesk.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labvglasses.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Glasses","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labvglasses/Labvglasses.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labvglobe.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Globe","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labvglobe/Labvglobe.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labvlight2.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Lights","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labvlight2/Labvlight2.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labvmic.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Mic","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labvmic/Labvmic.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labvrocket.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Rocket","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labvrocket/Labvrocket.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labvstool.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Stool","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labvstool/Labvstool.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labvtrash.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Trash","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labvtrash/Labvtrash.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labvwrench.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Wrench","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labvwrench/Labvwrench.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Labvzapper.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Lab/Zapper","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Labvzapper/Labvzapper.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Mountain_02.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Mountain","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Mountain_02/Mountain_02.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Mountain_PineTree_02.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Mountain/PineTree","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Mountain_PineTree_02/Mountain_PineTree_02.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Mountain_bush_01.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Mountain/Bush","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Mountain_bush_01/Mountain_bush_01.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Mountain_crystal_01.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Mountain/Crystal","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Mountain_crystal_01/Mountain_crystal_01.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Mountain_green_01.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Mountain/Green","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Mountain_green_01/Mountain_green_01.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Mountain_plumptree_01.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Mountain/PlumpTree1","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Mountain_plumptree_01/Mountain_plumptree_01.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Mountain_plumptree_02.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Mountain/PlumpTree2","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Mountain_plumptree_02/Mountain_plumptree_02.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Mountain_rocks_01.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Mountain/Rocks","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Mountain_rocks_01/Mountain_rocks_01.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Mountain_scope_01.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Mountain/Scope","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Mountain_scope_01/Mountain_scope_01.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Mountain_shroom_01.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Mountain/Shroom","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Mountain_shroom_01/Mountain_shroom_01.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Mountain_small_base_01.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Mountain-SmallBase1","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Mountain_small_base_01/Mountain_small_base_01.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Mountain_small_base_02.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Mountain/SmallBase2","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Mountain_small_base_02/Mountain_small_base_02.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_Mountain_water_02.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Mountain/Water","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/Mountain_water_02/Mountain_water_02.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_island-leaftreea.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Island/LeafTree","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/island-leaftreea/island-leaftreea.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_island-palmtree.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Island/PalmTree","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/island-palmtree/island-palmtree.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_island-stone-a.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Island/LowStoneA","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/island-stone-a/island-stone-a.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_island-stone-b.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Island/HighStoneA","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/island-stone-b/island-stone-b.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_island-stone-c.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Island/LowStoneB","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/island-stone-c/island-stone-c.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_island-stone-d.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Island/HighStoneB","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/island-stone-d/island-stone-d.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_object_preset_island-valley-baserock.json ================================================ {"abs_t":273.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":504,"y":214,"uid":"nKGRUxdMNKUX","state":{"always_update":true,"input_sids":{},"output_sids":{"JN8BbeEg6gmK":"Ys30r7aVEks1"}},"title":"Island/BaseRock","graph":{"uid":"hjXfBtVNNNpD","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":913,"y":215,"uid":"JN8BbeEg6gmK","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":414,"y":242,"uid":"Mt9TSk3ytX9j","state":{"url":"/data/vizor/assets/scene/island-valley-baserock/island-valley-baserock.obj"}},{"plugin":"three_mesh","x":709,"y":215,"uid":"5YxqY7yurrPE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"annotation","x":409,"y":357,"uid":"Lj5WxCWyEep2","state":{"text":"Create a Lambert material Patch (found in the 'Patches'-menu) and connect to the material input on the mesh. ","width":120,"height":80},"title":"Tip: Want to modify the material?"}],"conns":[{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"geometry","dst_slot":"geometry","uid":"y3TdW4ryKBRq","src_connected":true,"dst_connected":true},{"src_nuid":"Mt9TSk3ytX9j","dst_nuid":"5YxqY7yurrPE","src_slot":"materials","dst_slot":"material","uid":"pfupu7Agnyyu","src_connected":true,"dst_connected":true},{"src_nuid":"5YxqY7yurrPE","dst_nuid":"JN8BbeEg6gmK","src_slot":"object3d","dst_slot":0,"uid":"kFdQLwy7hJx3","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_add_stereo_cubemap.json ================================================ {"nodes":[{"plugin":"graph","x":501,"y":181,"uid":"FPrWsQkbPcEC","state":{"always_update":true,"input_sids":{},"output_sids":{"afE4dp8D789k":"6xX46R7XF9ss"}},"title":"Stereo Cubemap","graph":{"uid":"JNDgYVu7SvKc","parent_uid":"root","open":true,"nodes":[{"plugin":"url_stereo_cubemap_generator","x":466,"y":348,"uid":"3pZKqsPUvhdt","state":{"url":"/data/image/341612db85a9a7d339c2ca2a3bec389fcbdb0d8d.png"}},{"plugin":"output_proxy","x":1018,"y":394,"uid":"afE4dp8D789k","title":"stereo cube","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"adRs4Cy2hyFF","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true,"array":true}]},{"plugin":"graph","x":712,"y":348,"uid":"CA4mBgjCCXuw","state":{"always_update":true,"input_sids":{"nfBEwwrHd42B":"SvM7RynkmLXx","2RskHByHYuyQ":"kcXrHPHbPSNF"},"output_sids":{"5y9pHnpEDpya":"34PCrMfszSYK"}},"title":"Stereo Cube","graph":{"uid":"Lnmxg23P4auj","parent_uid":"JNDgYVu7SvKc","open":true,"nodes":[{"plugin":"input_proxy","x":235,"y":383,"uid":"nfBEwwrHd42B","title":"left texture","dyn_out":[{"name":"input","dt":24,"uid":"YXQtyugqVjM9","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":235,"y":448,"uid":"2RskHByHYuyQ","title":"right texture","dyn_out":[{"name":"input","dt":24,"uid":"JgtcUJ54Pz9s","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":1539,"y":418,"uid":"5y9pHnpEDpya","title":"mesh array","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"V893c7GJpVC3","dynamic":true,"type":0,"index":0,"array":true,"is_connected":true,"connected":true}]},{"plugin":"three_cube_material","x":777,"y":434,"uid":"NTJRhHY6Wn5x","open":false,"state":{},"title":"Left Eye Cube Material"},{"plugin":"three_geometry_box","x":774,"y":275,"uid":"rwD4ctGwShJw","open":false},{"plugin":"inputs_to_array","x":1365,"y":386,"uid":"6GY5nfLW9Bfk","dyn_in":[{"name":"0","dt":21,"array":true,"uid":"v5WSyrQ3Hc42","dynamic":true,"type":0,"index":0,"is_connected":true},{"type":0,"name":"1","dt":21,"array":true,"uid":"asmggL8mfYFX","dynamic":true,"index":1,"is_connected":true},{"type":0,"name":"2","dt":21,"array":true,"uid":"REqADfVFmHe9","dynamic":true,"index":2,"is_connected":true},{"type":0,"name":"3","dt":21,"array":true,"uid":"eG4e8ZY3AMca","dynamic":true,"index":3}]},{"plugin":"const_float_generator","x":777,"y":470,"uid":"QAtsfKEnWZrv","open":false,"state":{"val":2},"title":"Left Eye"},{"plugin":"const_float_generator","x":472,"y":469,"uid":"ucpuTa9bY5QL","open":false,"state":{"val":1},"title":"Backside Culling"},{"plugin":"const_float_generator","x":776,"y":583,"uid":"2raLRjnNzQmA","open":false,"state":{"val":2},"title":"Right Eye"},{"plugin":"three_cube_material","x":776,"y":544,"uid":"cVeBSy4CVv74","open":false,"state":{},"title":"Right Eye Cube Material"},{"plugin":"three_mesh","x":1105,"y":417,"uid":"uSJyweGFFLqL","open":false,"state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":50,"y":50,"z":50},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}},"title":"Stereo / Left Eye Mesh"},{"plugin":"three_mesh","x":1104,"y":470,"uid":"Lu6X5YKb9q7p","open":false,"state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":50,"y":50,"z":50},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}},"title":"Stereo / Right Eye Mesh"},{"plugin":"toggle_button","x":774,"y":740,"uid":"ydaKf6Sj9Dtk","open":false,"state":{"enabled":true},"title":"Lock Transform"},{"plugin":"toggle_button","x":774,"y":701,"uid":"7syEsmWKKBLz","open":false,"state":{"enabled":false},"title":"Shadows"},{"plugin":"three_mesh","x":1105,"y":524,"uid":"5unD7Ly5FCEu","open":false,"state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":50,"y":50,"z":50},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}},"title":"Non-Stereo Mesh"},{"plugin":"const_float_generator","x":775,"y":821,"uid":"jGcJwk3DZzYb","open":false,"state":{"val":3},"title":"Both Eyes"}],"conns":[{"src_nuid":"ucpuTa9bY5QL","dst_nuid":"NTJRhHY6Wn5x","src_slot":"value","dst_slot":"side","uid":"vkPhFfaWmL6n","src_connected":true,"dst_connected":true},{"src_nuid":"ucpuTa9bY5QL","dst_nuid":"cVeBSy4CVv74","src_slot":"value","dst_slot":"side","uid":"yUgV4BqzapTa","src_connected":true,"dst_connected":true},{"src_nuid":"nfBEwwrHd42B","dst_nuid":"NTJRhHY6Wn5x","src_slot":0,"dst_slot":"cube texture","uid":"D6GNpzUERrwM","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"2RskHByHYuyQ","dst_nuid":"cVeBSy4CVv74","src_slot":0,"dst_slot":"cube texture","uid":"wpmERGLz3F8n","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"6GY5nfLW9Bfk","dst_nuid":"5y9pHnpEDpya","src_slot":"array","dst_slot":0,"uid":"9eLZkQSBfJ2c","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"uSJyweGFFLqL","dst_nuid":"6GY5nfLW9Bfk","src_slot":"object3d","dst_slot":0,"uid":"7KWGc7Nu6gYg","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"Lu6X5YKb9q7p","dst_nuid":"6GY5nfLW9Bfk","src_slot":"object3d","dst_slot":1,"uid":"NW33EpV3Dwy6","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"rwD4ctGwShJw","dst_nuid":"Lu6X5YKb9q7p","src_slot":"geometry","dst_slot":"geometry","uid":"24rrWcwTFVja","src_connected":true,"dst_connected":true},{"src_nuid":"rwD4ctGwShJw","dst_nuid":"uSJyweGFFLqL","src_slot":"geometry","dst_slot":"geometry","uid":"jtDT5uRp6sCP","src_connected":true,"dst_connected":true},{"src_nuid":"cVeBSy4CVv74","dst_nuid":"Lu6X5YKb9q7p","src_slot":"material","dst_slot":"material","uid":"k4xAN7dxQnk3","src_connected":true,"dst_connected":true},{"src_nuid":"NTJRhHY6Wn5x","dst_nuid":"uSJyweGFFLqL","src_slot":"material","dst_slot":"material","uid":"2DAcbYWa4Yk2","src_connected":true,"dst_connected":true},{"src_nuid":"2raLRjnNzQmA","dst_nuid":"Lu6X5YKb9q7p","src_slot":"value","dst_slot":"stereo view","uid":"Drcg5g7yQ8nW","src_connected":true,"dst_connected":true},{"src_nuid":"QAtsfKEnWZrv","dst_nuid":"uSJyweGFFLqL","src_slot":"value","dst_slot":"stereo view","uid":"CJcxS7YDTRht","src_connected":true,"dst_connected":true},{"src_nuid":"ydaKf6Sj9Dtk","dst_nuid":"uSJyweGFFLqL","src_slot":"bool","dst_slot":"lock transform","uid":"6KK3kaPyWHBN","src_connected":true,"dst_connected":true},{"src_nuid":"ydaKf6Sj9Dtk","dst_nuid":"Lu6X5YKb9q7p","src_slot":"bool","dst_slot":"lock transform","uid":"PByM4QuGfDXx","src_connected":true,"dst_connected":true},{"src_nuid":"7syEsmWKKBLz","dst_nuid":"uSJyweGFFLqL","src_slot":"bool","dst_slot":"castShadow","uid":"CVyfc4qGYjQR","src_connected":true,"dst_connected":true},{"src_nuid":"7syEsmWKKBLz","dst_nuid":"Lu6X5YKb9q7p","src_slot":"bool","dst_slot":"castShadow","uid":"gvMrqWNJGetK","src_connected":true,"dst_connected":true,"offset":1},{"src_nuid":"7syEsmWKKBLz","dst_nuid":"uSJyweGFFLqL","src_slot":"bool","dst_slot":"receiveShadow","uid":"9BguWCSCg5Na","src_connected":true,"dst_connected":true,"offset":2},{"src_nuid":"7syEsmWKKBLz","dst_nuid":"Lu6X5YKb9q7p","src_slot":"bool","dst_slot":"receiveShadow","uid":"ZvvtTaX6SKj7","src_connected":true,"dst_connected":true,"offset":3},{"src_nuid":"5unD7Ly5FCEu","dst_nuid":"6GY5nfLW9Bfk","src_slot":"object3d","dst_slot":2,"uid":"pdZF2b8B6Mej","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"rwD4ctGwShJw","dst_nuid":"5unD7Ly5FCEu","src_slot":"geometry","dst_slot":"geometry","uid":"F7pHPzebw4CM","src_connected":true,"dst_connected":true},{"src_nuid":"NTJRhHY6Wn5x","dst_nuid":"5unD7Ly5FCEu","src_slot":"material","dst_slot":"material","uid":"V2SSmQy5x8vp","src_connected":true,"dst_connected":true},{"src_nuid":"jGcJwk3DZzYb","dst_nuid":"5unD7Ly5FCEu","src_slot":"value","dst_slot":"stereo view","uid":"qYktWzd2fAuK","src_connected":true,"dst_connected":true},{"src_nuid":"ydaKf6Sj9Dtk","dst_nuid":"5unD7Ly5FCEu","src_slot":"bool","dst_slot":"lock transform","uid":"H7ZYReWMfgme","src_connected":true,"dst_connected":true},{"src_nuid":"7syEsmWKKBLz","dst_nuid":"5unD7Ly5FCEu","src_slot":"bool","dst_slot":"receiveShadow","uid":"ayLzRcpcAWBm","src_connected":true,"dst_connected":true},{"src_nuid":"7syEsmWKKBLz","dst_nuid":"5unD7Ly5FCEu","src_slot":"bool","dst_slot":"castShadow","uid":"CnTcC3zzHCCN","src_connected":true,"dst_connected":true}]},"dyn_in":[{"name":"right texture","dt":24,"index":0,"uid":"kcXrHPHbPSNF","dynamic":true,"type":0,"is_connected":true},{"name":"left texture","dt":24,"index":1,"uid":"SvM7RynkmLXx","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"mesh array","dt":21,"index":0,"uid":"34PCrMfszSYK","dynamic":true,"type":1,"is_connected":true,"array":true}]}],"conns":[{"src_nuid":"CA4mBgjCCXuw","dst_nuid":"afE4dp8D789k","src_slot":0,"dst_slot":0,"uid":"wKfvk2syzFmZ","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"3pZKqsPUvhdt","dst_nuid":"CA4mBgjCCXuw","src_slot":"right","dst_slot":0,"uid":"2VWmtQ6mCDvf","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"3pZKqsPUvhdt","dst_nuid":"CA4mBgjCCXuw","src_slot":"left","dst_slot":1,"uid":"ZFutv2KuUqB8","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"stereo cube","dt":21,"index":0,"uid":"6xX46R7XF9ss","dynamic":true,"type":1,"array":true,"is_connected":true}]}],"conns":[],"x1":551,"y1":231,"x2":745,"y2":290} ================================================ FILE: browser/patches/_animate-on-trigger.json ================================================ {"abs_t":0,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":901,"y":291,"uid":"BYchfENVKDhr","state":{"always_update":true,"input_sids":{"F4Cq2d7VXaAE":"UsjEWfv3japH","j6FXDPVspnRY":"EYxSWdpWxZWw","UtHHhkD4UHtj":"sWCcHw3Xj7kN","McqLjYynCbbC":"pbYeBe7P2M9M","SkJsX53zuPLD":"HL47tt3dwVfw","bhw3ga2xAJbF":"g5bh9RMd8SP7"},"output_sids":{"jGqdRGRhF4uH":"P6PcSWDex2Fs","MfmUjLL4q7eh":"gfy3wZPpmRz9"}},"title":"Animate on Trigger","graph":{"uid":"SM3tXyDCs8Gg","parent_uid":"root","open":true,"nodes":[{"plugin":"input_proxy","x":83,"y":457,"uid":"F4Cq2d7VXaAE","title":"trigger","dyn_out":[{"name":"input","dt":7,"uid":"rxWUe5Jeq6Mp","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":1812,"y":362,"uid":"jGqdRGRhF4uH","title":"value","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"MzNS5zpb7YRw","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":771,"y":587,"uid":"j6FXDPVspnRY","title":"start","dyn_out":[{"name":"input","dt":0,"uid":"NRxfT23jMqW4","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":774,"y":638,"uid":"UtHHhkD4UHtj","title":"finish","dyn_out":[{"name":"input","dt":0,"uid":"NRxfT23jMqW4","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":1712,"y":308,"uid":"MfmUjLL4q7eh","title":"active","dyn_in":[{"name":"output","dt":7,"def":null,"uid":"WbQm9htuZPTp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":88,"y":381,"uid":"McqLjYynCbbC","title":"speed","dyn_out":[{"name":"input","dt":0,"uid":"YyGt4xxTMkca","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"if_else_modulator","x":1429,"y":423,"uid":"tqvMCLVEmN8L"},{"plugin":"variable_local_write","x":1216,"y":218,"uid":"sGgDzKPJJPuP","title":"startTime","dyn_in":[{"name":"value","dt":0,"uid":"cRe8Z4uSgULq","dynamic":true,"type":0,"index":0,"is_connected":true}]},{"plugin":"variable_local_read","x":535,"y":214,"uid":"Hf8w3tgVeA2p","title":"startTime","dyn_out":[{"name":"value","dt":0,"uid":"bXGqb9YKKCQ4","dynamic":true,"type":1,"index":0,"is_connected":true}]},{"plugin":"if_else_modulator","x":1021,"y":218,"uid":"AkHMyGrpU7pL"},{"plugin":"clock_generator","x":94,"y":326,"uid":"CmUFXLY6cfKp"},{"plugin":"subtract_modulator","x":768,"y":443,"uid":"MJ9FMhnQqUhC","title":"clock - startTime"},{"plugin":"add_modulator","x":993,"y":428,"uid":"P8ufBFvfKmaM","title":"time since start"},{"plugin":"less_than_modulator","x":1226,"y":322,"uid":"sZkfMR6vWn9k"},{"plugin":"multiply_modulator","x":449,"y":276,"uid":"kpfK3WtqZQxn","title":"clock * speed"},{"plugin":"input_proxy","x":147,"y":49,"uid":"SkJsX53zuPLD","title":"reset","dyn_out":[{"name":"input","dt":7,"uid":"GhVRQKt292Ku","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"if_else_modulator","x":626,"y":26,"uid":"ngWCQqrCkA6t"},{"plugin":"variable_local_write","x":1251,"y":39,"uid":"NatrgecNEhbT","title":"isRunning","dyn_in":[{"name":"value","dt":7,"uid":"Zpa2xPNZbyRC","dynamic":true,"type":0,"index":0,"is_connected":true}]},{"plugin":"toggle_button","x":83,"y":109,"uid":"CT3mq36mDQT2","open":false,"state":{"enabled":false},"title":"false"},{"plugin":"variable_local_read","x":60,"y":152,"uid":"Bz9tHa7WAFkf","title":"isRunning","dyn_out":[{"name":"value","dt":7,"uid":"UnS3Pvtjb53s","dynamic":true,"type":1,"index":0,"is_connected":true}]},{"plugin":"if_else_modulator","x":1065,"y":27,"uid":"txWr29uCMTNN"},{"plugin":"if_else_modulator","x":1722,"y":416,"uid":"pqRmmcDLM7qq"},{"plugin":"toggle_button","x":780,"y":93,"uid":"rcYSCtDdG7UG","open":false,"state":{"enabled":true},"title":"true"},{"plugin":"input_proxy","x":103,"y":603,"uid":"bhw3ga2xAJbF","title":"one shot","dyn_out":[{"name":"input","dt":7,"uid":"bkNU5uGrSEY7","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"and_modulator","x":300,"y":483,"uid":"2V6veuPysk3w"},{"plugin":"not_modulator","x":433,"y":451,"uid":"pfe5KFRaMtXJ"},{"plugin":"and_modulator","x":610,"y":386,"uid":"95eYjRSBdbd9"}],"conns":[{"src_nuid":"Hf8w3tgVeA2p","dst_nuid":"AkHMyGrpU7pL","src_slot":0,"dst_slot":"false value","uid":"hXRpbwwdjVhE","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"AkHMyGrpU7pL","dst_nuid":"sGgDzKPJJPuP","src_slot":"value","dst_slot":0,"uid":"XCWTJLpHS8gf","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"Hf8w3tgVeA2p","dst_nuid":"MJ9FMhnQqUhC","src_slot":0,"dst_slot":"b","uid":"D8HVf6wcAH86","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"MJ9FMhnQqUhC","dst_nuid":"P8ufBFvfKmaM","src_slot":"result","dst_slot":"a","uid":"kVsS9qHYQLuz","src_connected":true,"dst_connected":true},{"src_nuid":"j6FXDPVspnRY","dst_nuid":"P8ufBFvfKmaM","src_slot":0,"dst_slot":"b","uid":"gRYe7tV6duHm","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"P8ufBFvfKmaM","dst_nuid":"tqvMCLVEmN8L","src_slot":"result","dst_slot":"true value","uid":"D83AJG9MgQMT","src_connected":true,"dst_connected":true},{"src_nuid":"P8ufBFvfKmaM","dst_nuid":"sZkfMR6vWn9k","src_slot":"result","dst_slot":"value","uid":"fWLKq32f7JRe","src_connected":true,"dst_connected":true},{"src_nuid":"UtHHhkD4UHtj","dst_nuid":"sZkfMR6vWn9k","src_slot":0,"dst_slot":"reference","uid":"HD74XS3XUSAC","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"sZkfMR6vWn9k","dst_nuid":"tqvMCLVEmN8L","src_slot":"bool","dst_slot":"condition","uid":"F93gG3YmHKMa","src_connected":true,"dst_connected":true},{"src_nuid":"CmUFXLY6cfKp","dst_nuid":"kpfK3WtqZQxn","src_slot":"seconds","dst_slot":"a","uid":"tDUSqDHwjEJV","src_connected":true,"dst_connected":true},{"src_nuid":"kpfK3WtqZQxn","dst_nuid":"AkHMyGrpU7pL","src_slot":"result","dst_slot":"true value","uid":"yvXNUchmLn7q","src_connected":true,"dst_connected":true},{"src_nuid":"kpfK3WtqZQxn","dst_nuid":"MJ9FMhnQqUhC","src_slot":"result","dst_slot":"a","uid":"ZgzsNH8Lyk8C","src_connected":true,"dst_connected":true},{"src_nuid":"McqLjYynCbbC","dst_nuid":"kpfK3WtqZQxn","src_slot":0,"dst_slot":"b","uid":"D8ZcY4MGKzHj","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"sZkfMR6vWn9k","dst_nuid":"MfmUjLL4q7eh","src_slot":"bool","dst_slot":0,"uid":"3THwrXxCj65w","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"UtHHhkD4UHtj","dst_nuid":"tqvMCLVEmN8L","src_slot":0,"dst_slot":"false value","uid":"6FSKQhPa2BvP","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"CT3mq36mDQT2","dst_nuid":"ngWCQqrCkA6t","src_slot":"bool","dst_slot":"true value","uid":"Zn27sqkQZe38","src_connected":true,"dst_connected":true},{"src_nuid":"Bz9tHa7WAFkf","dst_nuid":"ngWCQqrCkA6t","src_slot":0,"dst_slot":"false value","uid":"UtRtpr32QkAg","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"ngWCQqrCkA6t","dst_nuid":"txWr29uCMTNN","src_slot":"value","dst_slot":"false value","uid":"FCasqXNyDpwh","src_connected":true,"dst_connected":true},{"src_nuid":"txWr29uCMTNN","dst_nuid":"NatrgecNEhbT","src_slot":"value","dst_slot":0,"uid":"H5JDfbWgPvrT","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"F4Cq2d7VXaAE","dst_nuid":"txWr29uCMTNN","src_slot":0,"dst_slot":"condition","uid":"4NE7RS2c3YXG","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"tqvMCLVEmN8L","dst_nuid":"pqRmmcDLM7qq","src_slot":"value","dst_slot":"true value","uid":"ERAJkSwTUBZT","src_connected":true,"dst_connected":true},{"src_nuid":"Bz9tHa7WAFkf","dst_nuid":"pqRmmcDLM7qq","src_slot":0,"dst_slot":"condition","uid":"6EtmzQFH9Rzc","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"j6FXDPVspnRY","dst_nuid":"pqRmmcDLM7qq","src_slot":0,"dst_slot":"false value","uid":"AUWRrt9SYKfb","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"pqRmmcDLM7qq","dst_nuid":"jGqdRGRhF4uH","src_slot":"value","dst_slot":0,"uid":"qAUgXTmMf7Mj","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"SkJsX53zuPLD","dst_nuid":"ngWCQqrCkA6t","src_slot":0,"dst_slot":"condition","uid":"NQ7k3PxggWZk","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"rcYSCtDdG7UG","dst_nuid":"txWr29uCMTNN","src_slot":"bool","dst_slot":"true value","uid":"8cPkBD27wRWG","src_connected":true,"dst_connected":true},{"src_nuid":"Bz9tHa7WAFkf","dst_nuid":"2V6veuPysk3w","src_slot":0,"dst_slot":"a","uid":"6YfzCUPaZ2Se","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"bhw3ga2xAJbF","dst_nuid":"2V6veuPysk3w","src_slot":0,"dst_slot":"b","uid":"ns5bnj89vbE7","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"2V6veuPysk3w","dst_nuid":"pfe5KFRaMtXJ","src_slot":"bool","dst_slot":"bool","uid":"x3J7MFxGZJ3b","src_connected":true,"dst_connected":true},{"src_nuid":"F4Cq2d7VXaAE","dst_nuid":"95eYjRSBdbd9","src_slot":0,"dst_slot":"a","uid":"8Ab3myWZfeGu","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"pfe5KFRaMtXJ","dst_nuid":"95eYjRSBdbd9","src_slot":"bool","dst_slot":"b","uid":"Akx8MxTzbQKP","src_connected":true,"dst_connected":true},{"src_nuid":"95eYjRSBdbd9","dst_nuid":"AkHMyGrpU7pL","src_slot":"bool","dst_slot":"condition","uid":"67aavTqtjc5x","src_connected":true,"dst_connected":true}],"variables":[{"id":"startTime","dt":0},{"id":"isRunning","dt":7}]},"dyn_in":[{"name":"one shot","dt":7,"index":0,"uid":"g5bh9RMd8SP7","dynamic":true,"type":0,"is_connected":false},{"name":"reset","dt":7,"index":1,"uid":"HL47tt3dwVfw","dynamic":true,"type":0,"is_connected":false},{"name":"speed","dt":0,"index":2,"uid":"pbYeBe7P2M9M","dynamic":true,"type":0,"is_connected":true},{"name":"finish","dt":0,"index":3,"uid":"sWCcHw3Xj7kN","dynamic":true,"type":0,"is_connected":true},{"name":"start","dt":0,"index":4,"uid":"EYxSWdpWxZWw","dynamic":true,"type":0,"is_connected":true},{"name":"trigger","dt":7,"index":5,"uid":"UsjEWfv3japH","dynamic":true,"type":0,"is_connected":false}],"dyn_out":[{"name":"active","dt":7,"index":0,"uid":"gfy3wZPpmRz9","dynamic":true,"type":1,"is_connected":true},{"name":"value","dt":0,"index":1,"uid":"P6PcSWDex2Fs","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"const_float_generator","x":612,"y":377,"uid":"F8TyNqgDdMAb","state":{"val":1},"title":"Finish Value"},{"plugin":"const_float_generator","x":613,"y":295,"uid":"6m5z9qVBBTBW","state":{"val":0},"title":"Start Value"},{"plugin":"const_float_generator","x":613,"y":459,"uid":"YRntNC6Dun2b","state":{"val":1},"title":"Speed"}],"conns":[{"src_nuid":"F8TyNqgDdMAb","dst_nuid":"BYchfENVKDhr","src_slot":"value","dst_slot":3,"uid":"LAku8xzCg7Zp","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"6m5z9qVBBTBW","dst_nuid":"BYchfENVKDhr","src_slot":"value","dst_slot":4,"uid":"ACbGXjmDPz79","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"YRntNC6Dun2b","dst_nuid":"BYchfENVKDhr","src_slot":"value","dst_slot":2,"uid":"xGHjkQfeWXV3","src_connected":true,"dst_connected":true,"dst_dyn":true}]}} ================================================ FILE: browser/patches/_animation-move-in-a-circle-and-turn.json ================================================ {"abs_t":404.814,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":573,"y":140,"uid":"WnVE1YawKV4A","state":{"always_update":true,"input_sids":{},"output_sids":{"o6XEV0HDGmfa":"ZEYFLq5Sq2zU","qEzbtCxtSeC7":"rrOyXUL9oOEz"}},"title":"Move in a circle and turn","graph":{"uid":"6Q8Wf83jqEhZ","parent_uid":"root","open":true,"nodes":[{"plugin":"graph","x":840,"y":166,"uid":"2rUne0tuX797","state":{"always_update":true,"input_sids":{"eCvZo6Znlbjn":"1"},"output_sids":{"4t4OPW2rOY0B":"0"}},"title":"Basic clock","graph":{"uid":"oviK17ZWvYuu","parent_uid":"6Q8Wf83jqEhZ","open":true,"nodes":[{"plugin":"delta_t_generator","x":234,"y":203,"uid":"IinMeeTzj5Vs"},{"plugin":"multiply_modulator","x":359,"y":193,"uid":"WuXx4H5crsxu"},{"plugin":"output_proxy","x":785,"y":240,"uid":"4t4OPW2rOY0B","title":"time","dyn_in":[{"name":"input","dt":0,"uid":"0","index":0,"type":0,"connected":true,"is_connected":true,"dynamic":true}]},{"plugin":"input_proxy","x":250,"y":262,"uid":"eCvZo6Znlbjn","title":"Speed","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_read","x":376,"y":310,"uid":"jubNbTMCcA13","title":"float","dyn_out":[{"name":"value","dt":0,"uid":"0","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_write","x":745,"y":188,"uid":"QEISdU4sGq6J","title":"float","dyn_in":[{"name":"value","dt":0,"uid":"0","index":0,"type":0,"is_connected":true,"dynamic":true}]},{"plugin":"add_modulator","x":484,"y":223,"uid":"tG7bWaQYpkDm"},{"plugin":"if_else_modulator","x":604,"y":249,"uid":"CkSMMSOMcFYJ"},{"plugin":"const_float_generator","x":488,"y":351,"uid":"clmNr8InbGoX","state":{"val":0},"title":"Reset"},{"plugin":"initialise_generator","x":520,"y":160,"uid":"ER1lAFl6P1BH"}],"conns":[{"src_nuid":"IinMeeTzj5Vs","dst_nuid":"WuXx4H5crsxu","src_slot":"seconds","dst_slot":"a","uid":"zpmqa2x40rKk","src_connected":true,"dst_connected":true},{"src_nuid":"eCvZo6Znlbjn","dst_nuid":"WuXx4H5crsxu","src_slot":0,"dst_slot":"b","uid":"Dz9kGtbAkn9e","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"ER1lAFl6P1BH","dst_nuid":"CkSMMSOMcFYJ","src_slot":"bool","dst_slot":"condition","uid":"U5ulkL0vnGBt","src_connected":true,"dst_connected":true},{"src_nuid":"jubNbTMCcA13","dst_nuid":"tG7bWaQYpkDm","src_slot":0,"dst_slot":"b","uid":"yHStMcWadc5j","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"WuXx4H5crsxu","dst_nuid":"tG7bWaQYpkDm","src_slot":"result","dst_slot":"a","uid":"VzNN7886ejS6","src_connected":true,"dst_connected":true},{"src_nuid":"tG7bWaQYpkDm","dst_nuid":"CkSMMSOMcFYJ","src_slot":"result","dst_slot":"false value","uid":"wuQI1hALmAnp","src_connected":true,"dst_connected":true},{"src_nuid":"clmNr8InbGoX","dst_nuid":"CkSMMSOMcFYJ","src_slot":"value","dst_slot":"true value","uid":"fDdlcHFGGCUw","src_connected":true,"dst_connected":true},{"src_nuid":"CkSMMSOMcFYJ","dst_nuid":"QEISdU4sGq6J","src_slot":"value","dst_slot":0,"uid":"3BhpkoDZ3vQU","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"CkSMMSOMcFYJ","dst_nuid":"4t4OPW2rOY0B","src_slot":"value","dst_slot":0,"uid":"8fhLwbYScO69","src_connected":true,"dst_connected":true,"dst_dyn":true,"offset":1}],"variables":[{"id":"float","dt":0}]},"dyn_in":[{"name":"Speed","dt":0,"uid":"1","index":0,"type":0,"is_connected":true,"dynamic":true}],"dyn_out":[{"name":"time","dt":0,"uid":"0","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"const_float_generator","x":300,"y":519,"uid":"VTL7DjpBaqhe","state":{"val":1},"title":"Circle radius"},{"plugin":"multiply_modulator","x":1238,"y":153,"uid":"Idgvu84ysi6n","open":false},{"plugin":"multiply_modulator","x":1229,"y":103,"uid":"MYylIWlLCE1n","open":false},{"plugin":"slider_float_generator","x":247,"y":403,"uid":"a2RJUXVGMKUH","state":{"val":0.511,"min":0,"max":1},"title":"Clock speed"},{"plugin":"const_float_generator","x":977,"y":355,"uid":"Vo4YF4dpmsVQ","open":false,"state":{"val":-1},"title":"Rotation amount"},{"plugin":"multiply_modulator","x":1237,"y":315,"uid":"cxyLlX4K5Lsf","open":false},{"plugin":"vector","x":1450,"y":316,"uid":"dxWoR0mw5Vns","open":false,"title":"Rotation"},{"plugin":"cos_modulator","x":1044,"y":148,"uid":"4GLB7g3lfgFG","open":false},{"plugin":"sin_modulator","x":1043,"y":218,"uid":"jiRqIW0WCm0F","open":false},{"plugin":"const_float_generator","x":273,"y":319,"uid":"ccMpKHkKX0vi","state":{"val":1},"title":"Height of object"},{"plugin":"vector","x":1461,"y":117,"uid":"seQu0Uqhj96I","open":false,"title":"Position"},{"plugin":"output_proxy","x":1700,"y":38,"uid":"o6XEV0HDGmfa","title":"position","dyn_in":[{"name":"output","dt":5,"def":null,"uid":"7XieETMkeKHN","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":1694,"y":313,"uid":"qEzbtCxtSeC7","title":"rotation","dyn_in":[{"name":"output","dt":5,"def":null,"uid":"8pZUaNqf0F41","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"annotation","x":344,"y":65,"uid":"JqvgZxEBqeuM","state":{"text":"Here are the basic controls:\nHeight from ground,\nClock speed and\nCircle radius.\n\nConnect this nested patch\nto \"position\" and \"rotation\" slots of an object to see your animation.","width":244,"height":148},"title":"Info"}],"conns":[{"src_nuid":"a2RJUXVGMKUH","dst_nuid":"2rUne0tuX797","src_slot":"value","dst_slot":0,"uid":"VarYAcHxf6BG","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"2rUne0tuX797","dst_nuid":"cxyLlX4K5Lsf","src_slot":0,"dst_slot":"a","uid":"3XIfS4w9hvfE","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"2rUne0tuX797","dst_nuid":"4GLB7g3lfgFG","src_slot":0,"dst_slot":"value","uid":"UJw32Xqru729","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"2rUne0tuX797","dst_nuid":"jiRqIW0WCm0F","src_slot":0,"dst_slot":"value","uid":"hwY0KI11jwAl","src_connected":true,"dst_connected":true,"src_dyn":true,"offset":1},{"src_nuid":"VTL7DjpBaqhe","dst_nuid":"Idgvu84ysi6n","src_slot":"value","dst_slot":"b","uid":"DoEmiU4TqAZr","src_connected":true,"dst_connected":true},{"src_nuid":"VTL7DjpBaqhe","dst_nuid":"MYylIWlLCE1n","src_slot":"value","dst_slot":"b","uid":"n6YB5Vz9B4XD","src_connected":true,"dst_connected":true},{"src_nuid":"jiRqIW0WCm0F","dst_nuid":"Idgvu84ysi6n","src_slot":"result","dst_slot":"a","uid":"NyflV8NNP3AC","src_connected":true,"dst_connected":true},{"src_nuid":"Idgvu84ysi6n","dst_nuid":"seQu0Uqhj96I","src_slot":"result","dst_slot":"z","uid":"TKvyVOXjGtyY","src_connected":true,"dst_connected":true},{"src_nuid":"4GLB7g3lfgFG","dst_nuid":"MYylIWlLCE1n","src_slot":"result","dst_slot":"a","uid":"TIF0BxGFqml4","src_connected":true,"dst_connected":true},{"src_nuid":"MYylIWlLCE1n","dst_nuid":"seQu0Uqhj96I","src_slot":"result","dst_slot":"x","uid":"c1LFJQW8nc7w","src_connected":true,"dst_connected":true},{"src_nuid":"Vo4YF4dpmsVQ","dst_nuid":"cxyLlX4K5Lsf","src_slot":"value","dst_slot":"b","uid":"zmXkIX2vEcHZ","src_connected":true,"dst_connected":true},{"src_nuid":"cxyLlX4K5Lsf","dst_nuid":"dxWoR0mw5Vns","src_slot":"result","dst_slot":"y","uid":"HozmlBg7T4Sa","src_connected":true,"dst_connected":true},{"src_nuid":"ccMpKHkKX0vi","dst_nuid":"seQu0Uqhj96I","src_slot":"value","dst_slot":"y","uid":"O6wt68c0d2rW","src_connected":true,"dst_connected":true},{"src_nuid":"seQu0Uqhj96I","dst_nuid":"o6XEV0HDGmfa","src_slot":"vector","dst_slot":0,"uid":"DJ6ngz1f48fV","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"dxWoR0mw5Vns","dst_nuid":"qEzbtCxtSeC7","src_slot":"vector","dst_slot":0,"uid":"WEVhNfmO2cZT","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"rotation","dt":5,"index":0,"uid":"rrOyXUL9oOEz","dynamic":true,"type":1,"is_connected":true},{"name":"position","dt":5,"index":1,"uid":"ZEYFLq5Sq2zU","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/_audio-player-and-fft.json ================================================ { "abs_t": 109.274, "active_graph": "root", "graph_uid": "TXDgBc0JJtS3", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 643, "y": 143, "uid": "zYJ4w8XeWjh3", "state": { "always_update": true, "input_sids": { "ECNDUqFeauhU": "wZXVLBHKaJkT", "Z6kQdB98tQCe": "vyDYtCSzVH3D", "ytka9379RXjT": "BkCNEjj55hF9" }, "output_sids": { "7NGDgyCmxBu5": "Y5HOn4ZWnlUE" } }, "title": "Music player with FFT output", "graph": { "uid": "kgd6ThrVhkWB", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "audio_source_player", "x": 1042, "y": 45, "uid": "HrvJYNuL6v2A", "open": false }, { "plugin": "audio_buffer_source_modulator", "x": 450, "y": 90, "uid": "hAcrDFhFpn5c", "state": 1 }, { "plugin": "audio_analyse_modulator", "x": 783, "y": 136, "uid": "LFTJXVtVuZxu" }, { "plugin": "const_float_generator", "x": 461, "y": 269, "uid": "j8eSFJcCtAzk", "state": { "val": 64 }, "title": "Bin count" }, { "plugin": "typed_array_get_modulator", "x": 1307, "y": 96, "uid": "r99wpQgKg8Za" }, { "plugin": "output_proxy", "x": 1531, "y": 136, "uid": "7NGDgyCmxBu5", "title": "fft bin output", "dyn_in": [ { "name": "output", "dt": 0, "def": null, "uid": "OM6pLe00QGiv", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "toggle_button", "x": 234, "y": 163, "uid": "bLuL37k2ythk", "state": { "enabled": false }, "title": "loop" }, { "plugin": "input_proxy", "x": 247, "y": 29, "uid": "ECNDUqFeauhU", "title": "input", "dyn_out": [ { "name": "input", "dt": 18, "uid": "CUfxf4DHkFyf", "dynamic": true, "type": 1, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "input_proxy", "x": 496, "y": 373, "uid": "Z6kQdB98tQCe", "title": "mul", "dyn_out": [ { "name": "input", "dt": 0, "uid": "L23fd2b2gMeV", "dynamic": true, "type": 1, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "input_proxy", "x": 258, "y": 118, "uid": "ytka9379RXjT", "title": "play", "dyn_out": [ { "name": "input", "dt": 7, "uid": "P9AV2kuWAvRQ", "dynamic": true, "type": 1, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "annotation", "x": 478, "y": 416, "uid": "36guNYmn594E", "state": { "text": "We use 64 bins of frequencies between 0 and 22khz, and carefully select the bin we would like to synch to depending on the music.", "width": 347, "height": 136 }, "title": "Info" }, { "plugin": "const_float_generator", "x": 1105, "y": 267, "uid": "EG924WwwSmeZ", "state": { "val": 1 }, "title": "Bin number" }, { "plugin": "annotation", "x": 1330, "y": 290, "uid": "5kMJqYxYzg7U", "state": { "text": "To add more bins, Copypaste the following plugins:\n\n-Bin number\n-Get typed array\n-Bin output\n\nThen connect the fft-bins output from Analyse into the array of your new copypaste. Then change the bin number to something else.", "width": 297, "height": 116 }, "title": "Adding more bins" } ], "conns": [ { "src_nuid": "hAcrDFhFpn5c", "dst_nuid": "LFTJXVtVuZxu", "src_slot": 0, "dst_slot": 0, "uid": "dTw9CMhkM9Lz", "src_connected": true, "dst_connected": true }, { "src_nuid": "LFTJXVtVuZxu", "dst_nuid": "HrvJYNuL6v2A", "src_slot": 0, "dst_slot": 0, "uid": "TXEgt9eqZvyE", "src_connected": true, "dst_connected": true }, { "src_nuid": "j8eSFJcCtAzk", "dst_nuid": "LFTJXVtVuZxu", "src_slot": 0, "dst_slot": 1, "uid": "FtrCzsVNP2gT", "src_connected": true, "dst_connected": true }, { "src_nuid": "LFTJXVtVuZxu", "dst_nuid": "r99wpQgKg8Za", "src_slot": 1, "dst_slot": 0, "uid": "yWN27acceUjU", "src_connected": true, "dst_connected": true }, { "src_nuid": "r99wpQgKg8Za", "dst_nuid": "7NGDgyCmxBu5", "src_slot": 1, "dst_slot": 0, "uid": "UfBFKutHx7nS", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "bLuL37k2ythk", "dst_nuid": "hAcrDFhFpn5c", "src_slot": 0, "dst_slot": 2, "uid": "AG76j4Ht3ShJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "ECNDUqFeauhU", "dst_nuid": "hAcrDFhFpn5c", "src_slot": 0, "dst_slot": 0, "uid": "ReYW7AP6uEPc", "src_connected": true, "dst_connected": true, "src_dyn": true }, { "src_nuid": "Z6kQdB98tQCe", "dst_nuid": "LFTJXVtVuZxu", "src_slot": 0, "dst_slot": 2, "uid": "DFWUZnRh5nnj", "src_connected": true, "dst_connected": true, "src_dyn": true }, { "src_nuid": "ytka9379RXjT", "dst_nuid": "hAcrDFhFpn5c", "src_slot": 0, "dst_slot": 1, "uid": "aA7kB4MeKTUK", "src_connected": true, "dst_connected": true, "src_dyn": true }, { "src_nuid": "EG924WwwSmeZ", "dst_nuid": "r99wpQgKg8Za", "src_slot": 0, "dst_slot": 1, "uid": "nLp9UwjJynn4", "src_connected": true, "dst_connected": true } ] }, "dyn_in": [ { "name": "play", "dt": 7, "index": 0, "uid": "BkCNEjj55hF9", "dynamic": true, "type": 0, "is_connected": true }, { "name": "mul", "dt": 0, "index": 1, "uid": "vyDYtCSzVH3D", "dynamic": true, "type": 0, "is_connected": true }, { "name": "input", "dt": 18, "index": 2, "uid": "wZXVLBHKaJkT", "dynamic": true, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "fft bin output", "dt": 0, "index": 0, "uid": "Y5HOn4ZWnlUE", "dynamic": true, "type": 1, "is_connected": true } ] }, { "plugin": "url_audio_buffer_generator", "x": 387, "y": 207, "uid": "qY4FufJ8PLC2", "state": { "url": "/data/audio/5bfd9d2ebdb633881640222bf57432d23d0af5c7.mp3" }, "title": "Load audio file" }, { "plugin": "slider_float_generator", "x": 385, "y": 102, "uid": "dXBDr2yL9zet", "state": { "val": 41.222, "min": 1, "max": 222 }, "title": "FFT multiplier" }, { "plugin": "toggle_button", "x": 387, "y": 291, "uid": "QHuYYMpEB9ej", "state": { "enabled": true }, "title": "Play" } ], "conns": [ { "src_nuid": "QHuYYMpEB9ej", "dst_nuid": "zYJ4w8XeWjh3", "src_slot": 0, "dst_slot": 0, "uid": "P5UR7feYX9S4", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "dXBDr2yL9zet", "dst_nuid": "zYJ4w8XeWjh3", "src_slot": 0, "dst_slot": 1, "uid": "gtmbuQGYBGbw", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "qY4FufJ8PLC2", "dst_nuid": "zYJ4w8XeWjh3", "src_slot": 0, "dst_slot": 2, "uid": "LQGh5sLymjaw", "src_connected": true, "dst_connected": true, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/_audio-player.json ================================================ { "abs_t": 12.068, "active_graph": "root", "graph_uid": "TXDgBc0JJtS3", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 505, "y": 200, "uid": "EBH83Ab4xPCY", "state": { "always_update": true, "input_sids": {}, "output_sids": {} }, "title": "Play music or sound", "graph": { "uid": "Qf52WnCyVKdd", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "audio_source_player", "x": 1188, "y": 94, "uid": "eDGjPxwkBYqe" }, { "plugin": "audio_buffer_source_modulator", "x": 853, "y": 139, "uid": "ZQNGC35pvhLU", "state": 1 }, { "plugin": "toggle_button", "x": 537, "y": 360, "uid": "HYEaresHSY2G", "state": { "enabled": false }, "title": "Loop" }, { "plugin": "annotation", "x": 1162, "y": 176, "uid": "A9GeKDZUBDGQ", "state": { "text": "Here we use WebAudio to play sound. Please note different browsers treat .MP3 and .OGG files differently.", "width": 150, "height": 70 } }, { "plugin": "url_audio_buffer_generator", "x": 485, "y": 164, "uid": "CHRphVK4JdVW", "state": { "url": "/data/audio/5bfd9d2ebdb633881640222bf57432d23d0af5c7.mp3" }, "title": "Load audio file" }, { "plugin": "toggle_button", "x": 537, "y": 269, "uid": "pTMfJxrBu88k", "state": { "enabled": true }, "title": "Play" } ], "conns": [ { "src_nuid": "HYEaresHSY2G", "dst_nuid": "ZQNGC35pvhLU", "src_slot": 0, "dst_slot": 2, "uid": "Tm4r2PSCNEkv", "src_connected": true, "dst_connected": true }, { "src_nuid": "ZQNGC35pvhLU", "dst_nuid": "eDGjPxwkBYqe", "src_slot": 0, "dst_slot": 0, "uid": "ZSW2RdjkCKZd", "src_connected": true, "dst_connected": true }, { "src_nuid": "CHRphVK4JdVW", "dst_nuid": "ZQNGC35pvhLU", "src_slot": 0, "dst_slot": 0, "uid": "XSDNKYg2UMac", "src_connected": true, "dst_connected": true }, { "src_nuid": "pTMfJxrBu88k", "dst_nuid": "ZQNGC35pvhLU", "src_slot": 0, "dst_slot": 1, "uid": "meAGRexQDg5N", "src_connected": true, "dst_connected": true } ] } } ], "conns": [] } } ================================================ FILE: browser/patches/_basic-clock.json ================================================ {"abs_t":1560.541,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":728,"y":242,"uid":"FAvCOYsg6S0E","state":{"always_update":true,"input_sids":{"lWZ6zcEWL28x":"1"},"output_sids":{"MFrrjLlHx0mc":"0"}},"title":"Basic clock","graph":{"uid":"Kspfso87MuNq","parent_uid":"root","open":true,"nodes":[{"plugin":"delta_t_generator","x":234,"y":203,"uid":"1d9VHAjac8c9"},{"plugin":"multiply_modulator","x":359,"y":193,"uid":"HxOxxSg1yA0l"},{"plugin":"output_proxy","x":785,"y":240,"uid":"MFrrjLlHx0mc","title":"time","dyn_in":[{"name":"input","dt":0,"uid":"0","index":0,"type":0,"connected":true,"is_connected":true,"dynamic":true}]},{"plugin":"input_proxy","x":250,"y":262,"uid":"lWZ6zcEWL28x","title":"Speed","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_read","x":376,"y":310,"uid":"G0INFbPgkThM","title":"float","dyn_out":[{"name":"value","dt":0,"uid":"0","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_write","x":745,"y":188,"uid":"HoAY9TAtDrzY","title":"float","dyn_in":[{"name":"value","dt":0,"uid":"0","index":0,"type":0,"is_connected":true,"dynamic":true}]},{"plugin":"add_modulator","x":484,"y":223,"uid":"DdN24g1a32H3"},{"plugin":"if_else_modulator","x":604,"y":249,"uid":"PFwQIUjrqe8O"},{"plugin":"const_float_generator","x":488,"y":351,"uid":"jALr1ZzL6lPF","state":{"val":0},"title":"Reset"},{"plugin":"initialise_generator","x":520,"y":160,"uid":"25WAISKP7Cxm"}],"conns":[{"src_nuid":"1d9VHAjac8c9","dst_nuid":"HxOxxSg1yA0l","src_slot":"seconds","dst_slot":"a","uid":"FWMZJAQBENbS","src_connected":true,"dst_connected":true},{"src_nuid":"lWZ6zcEWL28x","dst_nuid":"HxOxxSg1yA0l","src_slot":0,"dst_slot":"b","uid":"BdZSpwaqDwNc","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"25WAISKP7Cxm","dst_nuid":"PFwQIUjrqe8O","src_slot":"bool","dst_slot":"condition","uid":"HhoSFcJRhL6I","src_connected":true,"dst_connected":true},{"src_nuid":"G0INFbPgkThM","dst_nuid":"DdN24g1a32H3","src_slot":0,"dst_slot":"b","uid":"v5E9gZeH6IAA","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"HxOxxSg1yA0l","dst_nuid":"DdN24g1a32H3","src_slot":"result","dst_slot":"a","uid":"buq56NIoihEc","src_connected":true,"dst_connected":true},{"src_nuid":"DdN24g1a32H3","dst_nuid":"PFwQIUjrqe8O","src_slot":"result","dst_slot":"false value","uid":"XSOOeCxAg0gQ","src_connected":true,"dst_connected":true},{"src_nuid":"jALr1ZzL6lPF","dst_nuid":"PFwQIUjrqe8O","src_slot":"value","dst_slot":"true value","uid":"O4y9aU75ayyu","src_connected":true,"dst_connected":true},{"src_nuid":"PFwQIUjrqe8O","dst_nuid":"HoAY9TAtDrzY","src_slot":"value","dst_slot":0,"uid":"by2g4CFnu9Xd","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"PFwQIUjrqe8O","dst_nuid":"MFrrjLlHx0mc","src_slot":"value","dst_slot":0,"uid":"UhgtavGUBgJS","src_connected":true,"dst_connected":true,"dst_dyn":true,"offset":1}],"variables":[{"id":"float","dt":0}]},"dyn_in":[{"name":"Speed","dt":0,"uid":"1","index":0,"type":0,"is_connected":true,"dynamic":true}],"dyn_out":[{"name":"time","dt":0,"uid":"0","index":0,"type":1,"dynamic":true}]},{"plugin":"slider_float_generator","x":429,"y":274,"uid":"LSlIirXXDY28","state":{"val":0.3,"min":0,"max":1},"title":"Clock speed"}],"conns":[{"src_nuid":"LSlIirXXDY28","dst_nuid":"FAvCOYsg6S0E","src_slot":"value","dst_slot":0,"uid":"ZkDOKkmhiuoe","src_connected":true,"dst_connected":true,"dst_dyn":true}]}} ================================================ FILE: browser/patches/_example-gaze-button.json ================================================ {"abs_t":253.709,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"on_three_object_gaze_clicked","x":332,"y":147,"uid":"ysCSJh5vBXbW","state":{"nodeRef":"XzNSpjZU7Bbj.TC53dADgAn72","type":0},"title":"Gaze Click"},{"plugin":"graph","x":559,"y":82,"uid":"ztt8Vrheyrzy","state":{"always_update":true,"input_sids":{"cQnSgT6y7mHa":"uySY5hZYTGZz"},"output_sids":{"4Y4rfnC2dYVG":"meyY5XDMKJ8m"}},"title":"Scale on Click","graph":{"uid":"CkN5jP8Y5y9r","parent_uid":"root","open":true,"nodes":[{"plugin":"input_proxy","x":410,"y":337,"uid":"cQnSgT6y7mHa","title":"click impulse","dyn_out":[{"name":"input","dt":7,"uid":"Gt2RHxRweRQW","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":1597,"y":395,"uid":"4Y4rfnC2dYVG","title":"value","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"FnrtMvEHSK6L","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"array_blend_modulator_vector3","x":1210,"y":478,"uid":"HqFHpZWXfUHk","state":{"blendFuncId":"smoothstep-blend"},"dyn_in":[{"name":"0","dt":5,"array":false,"uid":"LvzQAHbTLkGP","dynamic":true,"type":0,"index":0,"is_connected":true},{"type":0,"name":"1","dt":5,"array":false,"uid":"hy5VQWU4UJxB","dynamic":true,"index":1,"is_connected":true},{"type":0,"name":"2","dt":5,"array":false,"uid":"TgZwpQ7gzyTJ","dynamic":true,"index":2,"is_connected":false},{"type":0,"name":"3","dt":5,"array":false,"uid":"YQvd8hhj5tBF","dynamic":true,"index":3}]},{"plugin":"vector","x":612,"y":624,"uid":"VnNXDHzpMxG2","title":"Scale 1"},{"plugin":"vector","x":692,"y":774,"uid":"VKPNeAaeT9vf","title":"Scale 2"},{"plugin":"const_float_generator","x":432,"y":803,"uid":"ZShtRN6QTaB5","state":{"val":1}},{"plugin":"const_float_generator","x":791,"y":524,"uid":"XhfFJN7s3k6E","state":{"val":0.5},"title":"animation duration"},{"plugin":"const_float_generator","x":394,"y":625,"uid":"ebwu2ZQThWYQ","state":{"val":1.5}},{"plugin":"convert_bool_float_modulator","x":611,"y":319,"uid":"f2RrzSHbpPAF"},{"plugin":"accumulate_modulator","x":817,"y":316,"uid":"kdmG93TBAZhJ","open":false,"state":{"value":553}},{"plugin":"modulate_modulator","x":1023,"y":358,"uid":"YButqPzbjp8e","open":false},{"plugin":"const_float_generator","x":762,"y":417,"uid":"ncKWDr6zeXZd","state":{"val":2},"title":"number of positions"},{"plugin":"convert_vector_xyz_modulator","x":1529,"y":482,"uid":"S78YeSNy6fWQ"}],"conns":[{"src_nuid":"XhfFJN7s3k6E","dst_nuid":"HqFHpZWXfUHk","src_slot":"value","dst_slot":"duration","uid":"X3mXjmUn5TJM","src_connected":true,"dst_connected":true},{"src_nuid":"VKPNeAaeT9vf","dst_nuid":"HqFHpZWXfUHk","src_slot":"vector","dst_slot":1,"uid":"ysCfHEacFsAV","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"VnNXDHzpMxG2","dst_nuid":"HqFHpZWXfUHk","src_slot":"vector","dst_slot":0,"uid":"mzHBKDvCaDFz","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"cQnSgT6y7mHa","dst_nuid":"f2RrzSHbpPAF","src_slot":0,"dst_slot":"bool","uid":"z7Qr8ZWtuQWe","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"f2RrzSHbpPAF","dst_nuid":"kdmG93TBAZhJ","src_slot":"value","dst_slot":"value","uid":"3C7X5e9ccXVW","src_connected":true,"dst_connected":true},{"src_nuid":"kdmG93TBAZhJ","dst_nuid":"YButqPzbjp8e","src_slot":"value","dst_slot":"value","uid":"txzSfRG9p7g6","src_connected":true,"dst_connected":true},{"src_nuid":"YButqPzbjp8e","dst_nuid":"HqFHpZWXfUHk","src_slot":"result","dst_slot":"number","uid":"4BKtMdtujQas","src_connected":true,"dst_connected":true},{"src_nuid":"ncKWDr6zeXZd","dst_nuid":"YButqPzbjp8e","src_slot":"value","dst_slot":"limit","uid":"UwXZMbADNp7y","src_connected":true,"dst_connected":true},{"src_nuid":"ebwu2ZQThWYQ","dst_nuid":"VnNXDHzpMxG2","src_slot":"value","dst_slot":"x","uid":"qqbecdaQp47d","src_connected":true,"dst_connected":true},{"src_nuid":"ebwu2ZQThWYQ","dst_nuid":"VnNXDHzpMxG2","src_slot":"value","dst_slot":"y","uid":"mvJHhwxQDCtX","src_connected":true,"dst_connected":true,"offset":1},{"src_nuid":"ebwu2ZQThWYQ","dst_nuid":"VnNXDHzpMxG2","src_slot":"value","dst_slot":"z","uid":"sh2Cjeg5AGjX","src_connected":true,"dst_connected":true},{"src_nuid":"ZShtRN6QTaB5","dst_nuid":"VKPNeAaeT9vf","src_slot":"value","dst_slot":"x","uid":"b9VBAmPfjVNp","src_connected":true,"dst_connected":true},{"src_nuid":"ZShtRN6QTaB5","dst_nuid":"VKPNeAaeT9vf","src_slot":"value","dst_slot":"y","uid":"qKRzU2b5SwTr","src_connected":true,"dst_connected":true,"offset":1},{"src_nuid":"ZShtRN6QTaB5","dst_nuid":"VKPNeAaeT9vf","src_slot":"value","dst_slot":"z","uid":"Mu3zyL5vMRSK","src_connected":true,"dst_connected":true},{"src_nuid":"HqFHpZWXfUHk","dst_nuid":"S78YeSNy6fWQ","src_slot":"value","dst_slot":"vector","uid":"kApUWn3kTvKy","src_connected":true,"dst_connected":true},{"src_nuid":"S78YeSNy6fWQ","dst_nuid":"4Y4rfnC2dYVG","src_slot":"x","dst_slot":0,"uid":"awAXzXqsWuha","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_in":[{"name":"click impulse","dt":7,"index":0,"uid":"uySY5hZYTGZz","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"value","dt":0,"index":0,"uid":"meyY5XDMKJ8m","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":775,"y":82,"uid":"waxfD4gVcEKS","state":{"always_update":true,"input_sids":{"GFsvS9nLh4hD":"nqTUF4XZQUea"},"output_sids":{"sbW758CvUYfc":"mh0rTKkFm0nD"}},"title":"Red Button","graph":{"uid":"XzNSpjZU7Bbj","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1187,"y":356,"uid":"TC53dADgAn72","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1},"pivot":{"x":0,"y":0,"z":0}}},{"plugin":"output_proxy","x":1386,"y":355,"uid":"sbW758CvUYfc","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_material_phong","x":759,"y":91,"uid":"ugMTunSc7zRn","state":{}},{"plugin":"const_float_generator","x":538,"y":679,"uid":"KLJw7vLxbNjA","state":{"val":0.6},"title":"Radius"},{"plugin":"three_geometry_cylinder","x":652,"y":445,"uid":"qLrT43WubKkM"},{"plugin":"const_float_generator","x":297,"y":575,"uid":"h95K74wKzn6t","state":{"val":1},"title":"Height segments"},{"plugin":"const_float_generator","x":284,"y":488,"uid":"GccYw2JUYg6B","state":{"val":64},"title":"Radius Segments"},{"plugin":"toggle_button","x":320,"y":662,"uid":"BK3aPdrsZEvH","state":{"enabled":false},"title":"Open Ended ?"},{"plugin":"input_proxy","x":358,"y":412,"uid":"GFsvS9nLh4hD","title":"height","dyn_out":[{"name":"input","dt":0,"uid":"t7ePrX5wunC8","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"color_picker","x":384,"y":189,"uid":"3kbVGe5qeG5W","state":{"hue":0,"sat":1,"lum":1}}],"conns":[{"src_nuid":"TC53dADgAn72","dst_nuid":"sbW758CvUYfc","src_slot":"object3d","dst_slot":0,"uid":"6QKkwrxjvxAF","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"ugMTunSc7zRn","dst_nuid":"TC53dADgAn72","src_slot":"material","dst_slot":"material","uid":"2bQpMRyJNdT2","src_connected":true,"dst_connected":true},{"src_nuid":"qLrT43WubKkM","dst_nuid":"TC53dADgAn72","src_slot":"geometry","dst_slot":"geometry","uid":"JV8yRe8C6m9q","src_connected":true,"dst_connected":true},{"src_nuid":"KLJw7vLxbNjA","dst_nuid":"qLrT43WubKkM","src_slot":"value","dst_slot":"radiusTop","uid":"3gnQVUyRwZBB","src_connected":true,"dst_connected":true},{"src_nuid":"KLJw7vLxbNjA","dst_nuid":"qLrT43WubKkM","src_slot":"value","dst_slot":"radiusBottom","uid":"WMHngpQCBgtp","src_connected":true,"dst_connected":true},{"src_nuid":"h95K74wKzn6t","dst_nuid":"qLrT43WubKkM","src_slot":"value","dst_slot":"heightSegments","uid":"VnauKkTRgvks","src_connected":true,"dst_connected":true},{"src_nuid":"GccYw2JUYg6B","dst_nuid":"qLrT43WubKkM","src_slot":"value","dst_slot":"radiusSegments","uid":"dwR6NuMehf9K","src_connected":true,"dst_connected":true},{"src_nuid":"BK3aPdrsZEvH","dst_nuid":"qLrT43WubKkM","src_slot":"bool","dst_slot":"openEnded","uid":"pJrjCkRQYWZa","src_connected":true,"dst_connected":true},{"src_nuid":"GFsvS9nLh4hD","dst_nuid":"qLrT43WubKkM","src_slot":0,"dst_slot":"height","uid":"d2pePW32rTsz","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"3kbVGe5qeG5W","dst_nuid":"ugMTunSc7zRn","src_slot":"color","dst_slot":"color","uid":"T6XmPrm9Xd2j","src_connected":true,"dst_connected":true}]},"dyn_in":[{"name":"height","dt":0,"index":0,"uid":"nqTUF4XZQUea","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":776,"y":149,"uid":"NGdc2edkK2mp","state":{"always_update":true,"input_sids":{},"output_sids":{"BY45p6MF9k6c":"mh0rTKkFm0nD"}},"title":"Button base","graph":{"uid":"preuGVd33qMX","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1187,"y":356,"uid":"27JxJUyPW4NK","state":{"position":{"x":0,"y":-0.10034686220571776,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1},"pivot":{"x":0,"y":0,"z":0}}},{"plugin":"output_proxy","x":1386,"y":355,"uid":"BY45p6MF9k6c","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_material_phong","x":759,"y":91,"uid":"8EFZnnU7k97C","state":{}},{"plugin":"const_float_generator","x":277,"y":397,"uid":"X5zRkR7cfgBS","state":{"val":1},"title":"Height"},{"plugin":"const_float_generator","x":557,"y":522,"uid":"84hWWjcL8WF8","state":{"val":1},"title":"Radius"},{"plugin":"three_geometry_cylinder","x":759,"y":551,"uid":"S3K4BZZrHZtj"},{"plugin":"const_float_generator","x":297,"y":575,"uid":"3GwEB3cuSNap","state":{"val":1},"title":"Height segments"},{"plugin":"const_float_generator","x":284,"y":488,"uid":"kQuEhQXHxtFK","state":{"val":64},"title":"Radius Segments"},{"plugin":"toggle_button","x":320,"y":662,"uid":"KGHbzNBnT6Ap","state":{"enabled":false},"title":"Open Ended ?"},{"plugin":"color_picker","x":435,"y":208,"uid":"cdamFhkguKVY","state":{"hue":0,"sat":0.016853932584269662,"lum":0.8833333333333333}}],"conns":[{"src_nuid":"27JxJUyPW4NK","dst_nuid":"BY45p6MF9k6c","src_slot":"object3d","dst_slot":0,"uid":"dWHeyRMSShXC","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"8EFZnnU7k97C","dst_nuid":"27JxJUyPW4NK","src_slot":"material","dst_slot":"material","uid":"Xd3Htna8Y4UK","src_connected":true,"dst_connected":true},{"src_nuid":"S3K4BZZrHZtj","dst_nuid":"27JxJUyPW4NK","src_slot":"geometry","dst_slot":"geometry","uid":"uJxyvmtw4zR9","src_connected":true,"dst_connected":true},{"src_nuid":"84hWWjcL8WF8","dst_nuid":"S3K4BZZrHZtj","src_slot":"value","dst_slot":"radiusTop","uid":"w478dbxRqGJj","src_connected":true,"dst_connected":true},{"src_nuid":"84hWWjcL8WF8","dst_nuid":"S3K4BZZrHZtj","src_slot":"value","dst_slot":"radiusBottom","uid":"wquXH9AhyC9L","src_connected":true,"dst_connected":true},{"src_nuid":"X5zRkR7cfgBS","dst_nuid":"S3K4BZZrHZtj","src_slot":"value","dst_slot":"height","uid":"93kWWa7jWs9C","src_connected":true,"dst_connected":true},{"src_nuid":"3GwEB3cuSNap","dst_nuid":"S3K4BZZrHZtj","src_slot":"value","dst_slot":"heightSegments","uid":"jXKvzehTv746","src_connected":true,"dst_connected":true},{"src_nuid":"kQuEhQXHxtFK","dst_nuid":"S3K4BZZrHZtj","src_slot":"value","dst_slot":"radiusSegments","uid":"TBqVEWm95QTE","src_connected":true,"dst_connected":true},{"src_nuid":"KGHbzNBnT6Ap","dst_nuid":"S3K4BZZrHZtj","src_slot":"bool","dst_slot":"openEnded","uid":"Mqs3qtR4Xcpv","src_connected":true,"dst_connected":true},{"src_nuid":"cdamFhkguKVY","dst_nuid":"8EFZnnU7k97C","src_slot":"color","dst_slot":"color","uid":"rpxpCmTY5zfm","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":776,"y":217,"uid":"MwHdm8g9aC35","state":{"always_update":true,"input_sids":{"XNHu654KeH9E":"Pv8Wpy7z9smn"},"output_sids":{"pCH8cMB8Qutg":"mh0rTKkFm0nD"}},"title":"Screen","graph":{"uid":"zVT3KLNTvS6B","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1219,"y":454,"uid":"7kzFCP8gSQbb","state":{"position":{"x":0.02082655270964437,"y":1.314264063809735,"z":-5.085863797386789},"scale":{"x":5.703307645992521,"y":2.2966869870654962,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1},"pivot":{"x":0,"y":0,"z":0}}},{"plugin":"output_proxy","x":1418,"y":453,"uid":"pCH8cMB8Qutg","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"const_float_generator","x":669,"y":542,"uid":"D8mFCDBRaXEA","state":{"val":16},"title":"Segments"},{"plugin":"three_geometry_plane","x":925,"y":466,"uid":"3KfTj6UGmzC8"},{"plugin":"three_material","x":799,"y":114,"uid":"Fp7BZwPQfE37","state":{}},{"plugin":"const_float_generator","x":664,"y":451,"uid":"8ugWt5qRcCQs","state":{"val":1},"title":"Width & Height"},{"plugin":"input_proxy","x":218,"y":291,"uid":"XNHu654KeH9E","title":"transparency","dyn_out":[{"name":"input","dt":7,"uid":"ChWME4uyuXxx","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"const_float_generator","x":486,"y":229,"uid":"H4vxrKJ7KGnP","state":{"val":0}},{"plugin":"toggle_modulator","x":371,"y":364,"uid":"4YUF3Yk7dtkh","state":{"value":false}}],"conns":[{"src_nuid":"7kzFCP8gSQbb","dst_nuid":"pCH8cMB8Qutg","src_slot":"object3d","dst_slot":0,"uid":"5cXaAzQYhzfS","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"3KfTj6UGmzC8","dst_nuid":"7kzFCP8gSQbb","src_slot":"geometry","dst_slot":"geometry","uid":"69hLYUuxLgNH","src_connected":true,"dst_connected":true},{"src_nuid":"Fp7BZwPQfE37","dst_nuid":"7kzFCP8gSQbb","src_slot":"material","dst_slot":"material","uid":"mP8GFxFU7zZ8","src_connected":true,"dst_connected":true},{"src_nuid":"8ugWt5qRcCQs","dst_nuid":"3KfTj6UGmzC8","src_slot":"value","dst_slot":"width","uid":"TxLF8bWqCSfQ","src_connected":true,"dst_connected":true},{"src_nuid":"8ugWt5qRcCQs","dst_nuid":"3KfTj6UGmzC8","src_slot":"value","dst_slot":"height","uid":"TJGDUebH3Kp8","src_connected":true,"dst_connected":true},{"src_nuid":"D8mFCDBRaXEA","dst_nuid":"3KfTj6UGmzC8","src_slot":"value","dst_slot":"widthSegments","uid":"3z4t2rFvnL2w","src_connected":true,"dst_connected":true},{"src_nuid":"D8mFCDBRaXEA","dst_nuid":"3KfTj6UGmzC8","src_slot":"value","dst_slot":"heightSegments","uid":"PeCYGGwXg9uv","src_connected":true,"dst_connected":true},{"src_nuid":"H4vxrKJ7KGnP","dst_nuid":"Fp7BZwPQfE37","src_slot":"value","dst_slot":"opacity","uid":"vTFbEeZ52uea","src_connected":true,"dst_connected":true},{"src_nuid":"XNHu654KeH9E","dst_nuid":"4YUF3Yk7dtkh","src_slot":0,"dst_slot":"trigger","uid":"F7mS4yEwpTP6","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"4YUF3Yk7dtkh","dst_nuid":"Fp7BZwPQfE37","src_slot":"bool","dst_slot":"transparent","uid":"gwSpGHjywFZC","src_connected":true,"dst_connected":true}]},"dyn_in":[{"name":"transparency","dt":7,"index":0,"uid":"Pv8Wpy7z9smn","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"annotation","x":539,"y":155,"uid":"mH2SWLc2WehA","state":{"text":"Connect the three object3d slots to the scene to see this example.\n\nGaze clicking the button will display a screen in front of it.","width":150,"height":70}}],"conns":[{"src_nuid":"ysCSJh5vBXbW","dst_nuid":"ztt8Vrheyrzy","src_slot":"trigger","dst_slot":0,"uid":"CTkuMWgmm8gS","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"ztt8Vrheyrzy","dst_nuid":"waxfD4gVcEKS","src_slot":0,"dst_slot":0,"uid":"b99WbK9T4PEd","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"ysCSJh5vBXbW","dst_nuid":"MwHdm8g9aC35","src_slot":"trigger","dst_slot":0,"uid":"tZ38hcgBdvdJ","src_connected":true,"dst_connected":true,"dst_dyn":true}]}} ================================================ FILE: browser/patches/_example-gaze-clicking.json ================================================ { "abs_t": 160.268, "active_graph": "root", "graph_uid": "TXDgBc0JJtS3", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 677, "y": 117, "uid": "ECZAUK6pars4", "state": { "always_update": true, "input_sids": { "4XFDvnsmAn6w": "uYApCSHb5Vth" }, "output_sids": { "D2MNS7yzzHgN": "Ys30r7aVEks1" } }, "title": "Box", "graph": { "uid": "EURNtUKvtem6", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_mesh", "x": 845, "y": 150, "uid": "YH4ATZ6USrYD", "state": { "position": { "x": 0.03717239065720079, "y": 0.03926023317848015, "z": -1.193571944882679 }, "scale": { "x": 0.0094948370835134, "y": 0.0094948370835134, "z": 0.0094948370835134 }, "quaternion": { "_x": 0, "_y": 0, "_z": 0, "_w": 1 }, "pivot": { "x": 0, "y": 0, "z": 0 } } }, { "plugin": "output_proxy", "x": 1113, "y": 194, "uid": "D2MNS7yzzHgN", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "UW8xhKSPhTFp", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "input_proxy", "x": 293, "y": 254, "uid": "4XFDvnsmAn6w", "title": "position", "dyn_out": [ { "name": "input", "dt": 5, "uid": "DgJuxCAzpaau", "dynamic": true, "type": 1, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "three_geometry_box", "x": 548, "y": 164, "uid": "MZ78sHYS4Sw4", "open": false }, { "plugin": "three_material", "x": 386, "y": 325, "uid": "jBQ74fxeZ6qC", "state": {} }, { "plugin": "color_picker", "x": 148, "y": 324, "uid": "u5Fkr6RMCHAG", "state": { "hue": 0.7977468539325843, "sat": 0.9719101123595506, "lum": 0.925 } } ], "conns": [ { "src_nuid": "YH4ATZ6USrYD", "dst_nuid": "D2MNS7yzzHgN", "src_slot": 0, "dst_slot": 0, "uid": "DeR76prFmHqZ", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "4XFDvnsmAn6w", "dst_nuid": "YH4ATZ6USrYD", "src_slot": 0, "dst_slot": 3, "uid": "WzpRsKtJWNzE", "src_connected": true, "dst_connected": true, "src_dyn": true }, { "src_nuid": "MZ78sHYS4Sw4", "dst_nuid": "YH4ATZ6USrYD", "src_slot": 0, "dst_slot": 1, "uid": "qEyvR7Mvw2AC", "src_connected": true, "dst_connected": true }, { "src_nuid": "jBQ74fxeZ6qC", "dst_nuid": "YH4ATZ6USrYD", "src_slot": 0, "dst_slot": 2, "uid": "Bshudzk3AaRM", "src_connected": true, "dst_connected": true }, { "src_nuid": "u5Fkr6RMCHAG", "dst_nuid": "jBQ74fxeZ6qC", "src_slot": 0, "dst_slot": 1, "uid": "yV5SdVDGkv75", "src_connected": true, "dst_connected": true } ] }, "dyn_in": [ { "name": "position", "dt": 5, "index": 0, "uid": "uYApCSHb5Vth", "dynamic": true, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "Ys30r7aVEks1", "dynamic": true, "type": 1, "is_connected": true } ] }, { "plugin": "on_three_object_gaze_clicked", "x": 179, "y": 188, "uid": "MsXHsYbaJCVq", "state": { "nodeRef": "EURNtUKvtem6.YH4ATZ6USrYD", "type": 0 }, "title": "Gaze clicked" }, { "plugin": "graph", "x": 382, "y": 149, "uid": "v2cdTX2cEaAh", "state": { "always_update": true, "input_sids": { "9JLXxK4FZyFk": "uySY5hZYTGZz" }, "output_sids": { "t7pZQ2CrTXEn": "meyY5XDMKJ8m" } }, "title": "Switch Position On Gaze Click", "graph": { "uid": "xfEjBCPZb9Fa", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "input_proxy", "x": 263, "y": 415, "uid": "9JLXxK4FZyFk", "title": "click impulse", "dyn_out": [ { "name": "input", "dt": 7, "uid": "Gt2RHxRweRQW", "dynamic": true, "type": 1, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "output_proxy", "x": 1410, "y": 572, "uid": "t7pZQ2CrTXEn", "title": "position", "dyn_in": [ { "name": "output", "dt": 5, "def": null, "uid": "FnrtMvEHSK6L", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "array_blend_modulator_vector3", "x": 1095, "y": 542, "uid": "MMz4nAAmWYNk", "state": { "blendFuncId": "smoothstep-blend" }, "dyn_in": [ { "name": "0", "dt": 5, "array": false, "uid": "LvzQAHbTLkGP", "dynamic": true, "type": 0, "index": 0, "is_connected": true }, { "type": 0, "name": "1", "dt": 5, "array": false, "uid": "hy5VQWU4UJxB", "dynamic": true, "index": 1, "is_connected": true }, { "type": 0, "name": "2", "dt": 5, "array": false, "uid": "TgZwpQ7gzyTJ", "dynamic": true, "index": 2, "is_connected": true }, { "type": 0, "name": "3", "dt": 5, "array": false, "uid": "DQeNWu8xf6Cw", "dynamic": true, "index": 3, "is_connected": true }, { "type": 0, "name": "4", "dt": 5, "array": false, "uid": "hNcuGpYtkLhF", "dynamic": true, "index": 4 } ] }, { "plugin": "vector", "x": 621, "y": 657, "uid": "QeLnsz6GZxKt", "open": false, "title": "XYZ to Vector (lower left)" }, { "plugin": "vector", "x": 620, "y": 698, "uid": "J6UxJQnx3Lpw", "open": false, "title": "XYZ to Vector (lower right)" }, { "plugin": "const_float_generator", "x": 334, "y": 754, "uid": "KtPF4YrV8MWa", "state": { "val": 1 } }, { "plugin": "const_float_generator", "x": 622, "y": 563, "uid": "VQUJyBPLwDff", "state": { "val": 2 }, "title": "animation duration" }, { "plugin": "const_float_generator", "x": 335, "y": 660, "uid": "Mw27vAuykS8y", "state": { "val": -1 } }, { "plugin": "convert_bool_float_modulator", "x": 496, "y": 383, "uid": "aNn8J2Qm5TPN" }, { "plugin": "accumulate_modulator", "x": 702, "y": 380, "uid": "ntTR3zhwrZSk", "open": false, "state": { "value": 6 } }, { "plugin": "modulate_modulator", "x": 908, "y": 422, "uid": "bcRKqbqQHRX7", "open": false }, { "plugin": "const_float_generator", "x": 647, "y": 481, "uid": "YAEpyYuUj5tf", "open": false, "state": { "val": 4 }, "title": "number of positions" }, { "plugin": "vector", "x": 620, "y": 738, "uid": "REURq5KNY7gn", "open": false, "title": "XYZ to Vector (upper right)" }, { "plugin": "vector", "x": 621, "y": 780, "uid": "wfcwKumFzxHh", "open": false, "title": "XYZ to Vector (upper left)" } ], "conns": [ { "src_nuid": "MMz4nAAmWYNk", "dst_nuid": "t7pZQ2CrTXEn", "src_slot": 0, "dst_slot": 0, "uid": "YMYJJScJPJcE", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "VQUJyBPLwDff", "dst_nuid": "MMz4nAAmWYNk", "src_slot": 0, "dst_slot": 1, "uid": "jJfYKk2cq3D3", "src_connected": true, "dst_connected": true }, { "src_nuid": "Mw27vAuykS8y", "dst_nuid": "QeLnsz6GZxKt", "src_slot": 0, "dst_slot": 0, "uid": "WXeKveMHwC84", "src_connected": true, "dst_connected": true }, { "src_nuid": "J6UxJQnx3Lpw", "dst_nuid": "MMz4nAAmWYNk", "src_slot": 0, "dst_slot": 1, "uid": "LxANDyhGmk4H", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "KtPF4YrV8MWa", "dst_nuid": "J6UxJQnx3Lpw", "src_slot": 0, "dst_slot": 0, "uid": "R78tdxkh2QNJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "QeLnsz6GZxKt", "dst_nuid": "MMz4nAAmWYNk", "src_slot": 0, "dst_slot": 0, "uid": "uCSfTqTTzj5x", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "9JLXxK4FZyFk", "dst_nuid": "aNn8J2Qm5TPN", "src_slot": 0, "dst_slot": 0, "uid": "GcxuauN5mghW", "src_connected": true, "dst_connected": true, "src_dyn": true }, { "src_nuid": "aNn8J2Qm5TPN", "dst_nuid": "ntTR3zhwrZSk", "src_slot": 0, "dst_slot": 0, "uid": "J6Gg2sM6ruDC", "src_connected": true, "dst_connected": true }, { "src_nuid": "ntTR3zhwrZSk", "dst_nuid": "bcRKqbqQHRX7", "src_slot": 0, "dst_slot": 0, "uid": "nwu5hKHHfxV4", "src_connected": true, "dst_connected": true }, { "src_nuid": "bcRKqbqQHRX7", "dst_nuid": "MMz4nAAmWYNk", "src_slot": 0, "dst_slot": 0, "uid": "X2rAykCVyYHB", "src_connected": true, "dst_connected": true }, { "src_nuid": "YAEpyYuUj5tf", "dst_nuid": "bcRKqbqQHRX7", "src_slot": 0, "dst_slot": 1, "uid": "wEGdF8GePGj6", "src_connected": true, "dst_connected": true }, { "src_nuid": "KtPF4YrV8MWa", "dst_nuid": "REURq5KNY7gn", "src_slot": 0, "dst_slot": 0, "uid": "VurTd2E4kDQa", "src_connected": true, "dst_connected": true }, { "src_nuid": "Mw27vAuykS8y", "dst_nuid": "wfcwKumFzxHh", "src_slot": 0, "dst_slot": 0, "uid": "ZjG8CSLPuBzd", "src_connected": true, "dst_connected": true }, { "src_nuid": "KtPF4YrV8MWa", "dst_nuid": "REURq5KNY7gn", "src_slot": 0, "dst_slot": 1, "uid": "ZZHXRQn9kZzS", "src_connected": true, "dst_connected": true }, { "src_nuid": "KtPF4YrV8MWa", "dst_nuid": "wfcwKumFzxHh", "src_slot": 0, "dst_slot": 1, "uid": "rEgn6bM2Gjnp", "src_connected": true, "dst_connected": true }, { "src_nuid": "REURq5KNY7gn", "dst_nuid": "MMz4nAAmWYNk", "src_slot": 0, "dst_slot": 2, "uid": "JjJsefmJrpVX", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "wfcwKumFzxHh", "dst_nuid": "MMz4nAAmWYNk", "src_slot": 0, "dst_slot": 3, "uid": "mpDKrc3rNfWC", "src_connected": true, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "click impulse", "dt": 7, "index": 0, "uid": "uySY5hZYTGZz", "dynamic": true, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "position", "dt": 5, "index": 0, "uid": "meyY5XDMKJ8m", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [ { "src_nuid": "v2cdTX2cEaAh", "dst_nuid": "ECZAUK6pars4", "src_slot": 0, "dst_slot": 0, "uid": "vr78UpdqLBsz", "src_connected": true, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": "MsXHsYbaJCVq", "dst_nuid": "v2cdTX2cEaAh", "src_slot": 0, "dst_slot": 0, "uid": "szLzju3avdA4", "src_connected": true, "dst_connected": true, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/_example-inputs-to-array.json ================================================ {"abs_t":282.729,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"inputs_to_array","x":535,"y":54,"uid":"vVgFnqfjmD9r","dyn_in":[{"name":"0","dt":21,"array":false,"uid":"vCwPv9Z4YFCw","dynamic":true,"type":0,"index":0,"is_connected":true},{"type":0,"name":"1","dt":21,"array":false,"uid":"5X9vjCZx4bHM","dynamic":true,"index":1,"is_connected":true},{"type":0,"name":"2","dt":21,"array":false,"uid":"J3BSBpYLSx2j","dynamic":true,"index":2,"is_connected":true},{"type":0,"name":"3","dt":21,"array":false,"uid":"St5PK5GBLUMQ","dynamic":true,"index":3}]},{"plugin":"graph","x":338,"y":49,"uid":"nvz6FkSBZYvX","state":{"always_update":true,"input_sids":{},"output_sids":{"tVpX6eFBZ5QF":"mh0rTKkFm0nD"}},"title":"Box","graph":{"uid":"QH8WxurqPrnd","parent_uid":"root","open":true,"nodes":[{"plugin":"three_geometry_box","x":883,"y":690,"uid":"CmSTvs6V9FkE"},{"plugin":"three_mesh","x":1254,"y":337,"uid":"DK9QdMtKbztM","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1},"pivot":{"x":0,"y":0,"z":0}}},{"plugin":"output_proxy","x":1444,"y":331,"uid":"tVpX6eFBZ5QF","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":546,"y":151,"uid":"TweGjq3U3BDj","state":{"url":"/data/image/7cbc45195c04d1595c43be42418755520068c72e.png"},"title":"Box texture"},{"plugin":"three_material_phong","x":878,"y":205,"uid":"tgZkTrM6LFcN","state":{}}],"conns":[{"src_nuid":"DK9QdMtKbztM","dst_nuid":"tVpX6eFBZ5QF","src_slot":"object3d","dst_slot":0,"uid":"JDLMLVjAx9eR","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"CmSTvs6V9FkE","dst_nuid":"DK9QdMtKbztM","src_slot":"geometry","dst_slot":"geometry","uid":"ATQaGZypjZ9k","src_connected":true,"dst_connected":true},{"src_nuid":"TweGjq3U3BDj","dst_nuid":"tgZkTrM6LFcN","src_slot":"texture","dst_slot":"texture","uid":"ArsrqCPHLfVr","src_connected":true,"dst_connected":true},{"src_nuid":"tgZkTrM6LFcN","dst_nuid":"DK9QdMtKbztM","src_slot":"material","dst_slot":"material","uid":"2CHaqAUs3A6Y","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":331,"y":122,"uid":"ZqNtGXD5HcxH","state":{"always_update":true,"input_sids":{},"output_sids":{"6ePgSMGBnDfp":"mh0rTKkFm0nD"}},"title":"Sphere","graph":{"uid":"T3p4fuJQmntz","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1239,"y":326,"uid":"sdPZv8XDymZq","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1},"pivot":{"x":0,"y":0,"z":0}}},{"plugin":"output_proxy","x":1438,"y":325,"uid":"6ePgSMGBnDfp","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":425,"y":28,"uid":"fvU8zk7gcVb9","state":{"url":"/data/image/81238160a5dd3ebbe50a942ff7d4d1fca95bfcf7.png"},"title":"Box texture"},{"plugin":"three_material_phong","x":695,"y":112,"uid":"gDsWv7vwjuPR","state":{}},{"plugin":"three_geometry_sphere","x":884,"y":568,"uid":"S2GxaFAawnRk"},{"plugin":"const_float_generator","x":679,"y":615,"uid":"eU8CHcGTTM8E","state":{"val":32},"title":"Segments"}],"conns":[{"src_nuid":"sdPZv8XDymZq","dst_nuid":"6ePgSMGBnDfp","src_slot":"object3d","dst_slot":0,"uid":"eHEXSbLegKdR","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"fvU8zk7gcVb9","dst_nuid":"gDsWv7vwjuPR","src_slot":"texture","dst_slot":"texture","uid":"ZJKbPbXJCrpR","src_connected":true,"dst_connected":true},{"src_nuid":"gDsWv7vwjuPR","dst_nuid":"sdPZv8XDymZq","src_slot":"material","dst_slot":"material","uid":"ajepMtaXk4e3","src_connected":true,"dst_connected":true},{"src_nuid":"S2GxaFAawnRk","dst_nuid":"sdPZv8XDymZq","src_slot":"geometry","dst_slot":"geometry","uid":"BLV82TfuzLuf","src_connected":true,"dst_connected":true},{"src_nuid":"eU8CHcGTTM8E","dst_nuid":"S2GxaFAawnRk","src_slot":"value","dst_slot":"widthSegments","uid":"cUPSv9KrSbpv","src_connected":true,"dst_connected":true},{"src_nuid":"eU8CHcGTTM8E","dst_nuid":"S2GxaFAawnRk","src_slot":"value","dst_slot":"heightSegments","uid":"GBVZMQAm75Eg","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":344,"y":197,"uid":"67xVcyQxByjy","state":{"always_update":true,"input_sids":{},"output_sids":{"PZujbx5PGHEq":"mh0rTKkFm0nD"}},"title":"Torus","graph":{"uid":"twtM6eFST2eC","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1254,"y":337,"uid":"hksSy2CL9PZX","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1},"pivot":{"x":0,"y":0,"z":0}}},{"plugin":"output_proxy","x":1444,"y":331,"uid":"PZujbx5PGHEq","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":541,"y":378,"uid":"Xftqp3xbWJQY","state":{"url":"/data/image/7cbc45195c04d1595c43be42418755520068c72e.png"},"title":"Torus texture"},{"plugin":"three_material_phong","x":871,"y":378,"uid":"BMqF6ty8TGWn","state":{}},{"plugin":"three_geometry_torus","x":815,"y":143,"uid":"wE466dD4kBJS","state":{}}],"conns":[{"src_nuid":"hksSy2CL9PZX","dst_nuid":"PZujbx5PGHEq","src_slot":"object3d","dst_slot":0,"uid":"MCJAhwx3KaHm","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"Xftqp3xbWJQY","dst_nuid":"BMqF6ty8TGWn","src_slot":"texture","dst_slot":"texture","uid":"5Bdf5VgLZcM8","src_connected":true,"dst_connected":true},{"src_nuid":"BMqF6ty8TGWn","dst_nuid":"hksSy2CL9PZX","src_slot":"material","dst_slot":"material","uid":"eFFa9BbbdK9f","src_connected":true,"dst_connected":true},{"src_nuid":"wE466dD4kBJS","dst_nuid":"hksSy2CL9PZX","src_slot":"geometry","dst_slot":"geometry","uid":"cpvyjnQmSqfB","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"annotation","x":532,"y":205,"uid":"LTbW6W8pC7h8","state":{"text":"Connect the \"array\" slot into scene to see the example.\n\nThis example combines three object3d´s into one array. It's convenient if you need to get several object3d's out from a single subpatch.\n","width":280,"height":86},"title":"Inputs to array example"}],"conns":[{"src_nuid":"nvz6FkSBZYvX","dst_nuid":"vVgFnqfjmD9r","src_slot":0,"dst_slot":0,"uid":"t6ZFZJzzUc6F","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"ZqNtGXD5HcxH","dst_nuid":"vVgFnqfjmD9r","src_slot":0,"dst_slot":1,"uid":"7FVdTRjgfNEX","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"67xVcyQxByjy","dst_nuid":"vVgFnqfjmD9r","src_slot":0,"dst_slot":2,"uid":"SpA8mj3ymJXW","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true}]}} ================================================ FILE: browser/patches/_example-particle-spawn-from-mesh.json ================================================ {"abs_t":676.203,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":307,"y":67,"uid":"xs9Ye2NYCuyu","state":{"always_update":true,"input_sids":{},"output_sids":{"3LKrr2zt9prP":"ymFttax7zrEs"}},"title":"Spawn particles from mesh","graph":{"uid":"LhwZ4fWaV3m4","parent_uid":"root","open":true,"nodes":[{"plugin":"three_point_cloud_mesh","x":2047,"y":537,"uid":"mVFftJnMkFMW","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1},"pivot":{"x":0,"y":0,"z":0}}},{"plugin":"three_point_cloud_material","x":1772,"y":772,"uid":"qEGkpgqsJWkx","state":{}},{"plugin":"three_particle_emitter","x":1316,"y":50,"uid":"63dYBu6NfSVq","state":{}},{"plugin":"const_float_generator","x":599,"y":364,"uid":"fc3TeJ2MDJPb","state":{"val":1000},"title":"Particle count"},{"plugin":"output_proxy","x":2290,"y":587,"uid":"3LKrr2zt9prP","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"IqY3qicWRiJ4","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"const_float_generator","x":788,"y":364,"uid":"jpVmqKRumvBx","state":{"val":1},"title":"Spawn rate"},{"plugin":"url_texture_generator","x":1515,"y":752,"uid":"uDDhrCGd2BgD","state":{"url":"/data/image/aa1f1d52c59230454ef8bd026baff7b87baca3ef.png"},"title":"Particle texture"},{"plugin":"const_float_generator","x":601,"y":447,"uid":"y6g9d2NpGrhm","state":{"val":0.04},"title":"Particle Size"},{"plugin":"toggle_button","x":1260,"y":881,"uid":"AE6adMeL6WNE","state":{"enabled":false},"title":"Depth test"},{"plugin":"toggle_button","x":1260,"y":965,"uid":"2D5PubnyMdvJ","state":{"enabled":true},"title":"Transparent"},{"plugin":"const_float_generator","x":1262,"y":1131,"uid":"PZJXKd6PhLwE","state":{"val":2},"title":"Blending"},{"plugin":"const_float_generator","x":789,"y":446,"uid":"knhRNGKAmyFx","state":{"val":0.1},"title":"Object scale"},{"plugin":"vector","x":965,"y":447,"uid":"McRD3wbZnhpY","open":false,"title":"scale"},{"plugin":"const_float_generator","x":960,"y":362,"uid":"Le7ve3xjdXP7","state":{"val":3},"title":"Lifetime"},{"plugin":"const_float_generator","x":930,"y":531,"uid":"uBHEWtBUKbm9","state":{"val":0.1},"title":"Speed"},{"plugin":"const_float_generator","x":790,"y":532,"uid":"suFy5VsW8eKR","state":{"val":0.001},"title":"Spread"},{"plugin":"const_float_generator","x":598,"y":646,"uid":"Fgt8h7T3pegT","state":{"val":0},"title":"X"},{"plugin":"const_float_generator","x":596,"y":728,"uid":"X8qJqDBrKVXE","state":{"val":0},"title":"Y"},{"plugin":"const_float_generator","x":596,"y":809,"uid":"FKkTQ6UTkUgC","state":{"val":0},"title":"Z"},{"plugin":"vector","x":733,"y":727,"uid":"Ag5vbs7jakzt","open":false,"title":"Direction"},{"plugin":"const_float_generator","x":1107,"y":362,"uid":"bNgBP8pKf9fT","state":{"val":0},"title":"Noise"},{"plugin":"color_picker","x":1512,"y":914,"uid":"HRMnjtfE8wLt","state":{"hue":0.6801385498046875,"sat":0.979027099609375,"lum":0.6409722900390624},"title":"Particle color"},{"plugin":"const_float_generator","x":1259,"y":1049,"uid":"jgUMCc3kq7nS","state":{"val":1},"title":"size Attenuation"},{"plugin":"three_geometry_torus","x":551,"y":175,"uid":"vnXGC4G9WbqU","state":{}},{"plugin":"const_float_generator","x":348,"y":200,"uid":"eCDwu2Zu2TuZ","state":{"val":64},"title":"Segments"},{"plugin":"annotation","x":761,"y":177,"uid":"ZAU9hN9Sazka","state":{"text":"Change the Spread, Speed or Noise to make the particles fly around in a more beautiful fashion.","width":150,"height":70},"title":"Information"},{"plugin":"const_float_generator","x":901,"y":621,"uid":"RFpZFUDaqegD","state":{"val":0},"title":"X"},{"plugin":"const_float_generator","x":899,"y":703,"uid":"4sErXNmRegC8","state":{"val":0},"title":"Y"},{"plugin":"const_float_generator","x":899,"y":784,"uid":"e2bZC6NMSs9K","state":{"val":0},"title":"Z"},{"plugin":"vector","x":1036,"y":702,"uid":"UFKKvYmuG7Np","open":false,"title":"Gravity"},{"plugin":"annotation","x":456,"y":9,"uid":"TqxL8sjYBQ7d","state":{"text":"The particles now spawn from the 64 segments of this torus. Change the torus to another 3D object to spawn from something else.","width":150,"height":70}}],"conns":[{"src_nuid":"qEGkpgqsJWkx","dst_nuid":"mVFftJnMkFMW","src_slot":"material","dst_slot":"material","uid":"fvKcRUJ8jkh7","src_connected":true,"dst_connected":true},{"src_nuid":"63dYBu6NfSVq","dst_nuid":"mVFftJnMkFMW","src_slot":"geometry","dst_slot":"geometry","uid":"arpY3MUDLZPf","src_connected":true,"dst_connected":true},{"src_nuid":"fc3TeJ2MDJPb","dst_nuid":"63dYBu6NfSVq","src_slot":"value","dst_slot":"particle count","uid":"QXVp7Qwus89S","src_connected":true,"dst_connected":true},{"src_nuid":"mVFftJnMkFMW","dst_nuid":"3LKrr2zt9prP","src_slot":"object3d","dst_slot":0,"uid":"yv3JKxJKjCBF","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"jpVmqKRumvBx","dst_nuid":"63dYBu6NfSVq","src_slot":"value","dst_slot":"spawn rate","uid":"uRSpNw7FT3hs","src_connected":true,"dst_connected":true},{"src_nuid":"uDDhrCGd2BgD","dst_nuid":"qEGkpgqsJWkx","src_slot":"texture","dst_slot":"texture","uid":"LTbTsq2JRXdP","src_connected":true,"dst_connected":true},{"src_nuid":"y6g9d2NpGrhm","dst_nuid":"qEGkpgqsJWkx","src_slot":"value","dst_slot":"size","uid":"YAJTsNWAerS2","src_connected":true,"dst_connected":true},{"src_nuid":"2D5PubnyMdvJ","dst_nuid":"qEGkpgqsJWkx","src_slot":"bool","dst_slot":"transparent","uid":"TuSf59XEZAtM","src_connected":true,"dst_connected":true},{"src_nuid":"AE6adMeL6WNE","dst_nuid":"qEGkpgqsJWkx","src_slot":"bool","dst_slot":"depthTest","uid":"yc82arBg7GxQ","src_connected":true,"dst_connected":true},{"src_nuid":"PZJXKd6PhLwE","dst_nuid":"qEGkpgqsJWkx","src_slot":"value","dst_slot":"blending","uid":"XNuaS4FNQ9Rk","src_connected":true,"dst_connected":true},{"src_nuid":"knhRNGKAmyFx","dst_nuid":"McRD3wbZnhpY","src_slot":"value","dst_slot":"x","uid":"uBtCKqGDWBbM","src_connected":true,"dst_connected":true},{"src_nuid":"knhRNGKAmyFx","dst_nuid":"McRD3wbZnhpY","src_slot":"value","dst_slot":"y","uid":"Xz9ycsHFbVvx","src_connected":true,"dst_connected":true},{"src_nuid":"knhRNGKAmyFx","dst_nuid":"McRD3wbZnhpY","src_slot":"value","dst_slot":"z","uid":"uT2VEMZmtYMV","src_connected":true,"dst_connected":true},{"src_nuid":"McRD3wbZnhpY","dst_nuid":"mVFftJnMkFMW","src_slot":"vector","dst_slot":"scale","uid":"XgCPXFa6Hzab","src_connected":true,"dst_connected":true},{"src_nuid":"Le7ve3xjdXP7","dst_nuid":"63dYBu6NfSVq","src_slot":"value","dst_slot":"lifetime","uid":"sCdbWM3gUX4E","src_connected":true,"dst_connected":true},{"src_nuid":"uBHEWtBUKbm9","dst_nuid":"63dYBu6NfSVq","src_slot":"value","dst_slot":"speed","uid":"VGXGBMRx2HZ8","src_connected":true,"dst_connected":true},{"src_nuid":"suFy5VsW8eKR","dst_nuid":"63dYBu6NfSVq","src_slot":"value","dst_slot":"spread","uid":"vgdckebGQh5b","src_connected":true,"dst_connected":true},{"src_nuid":"Fgt8h7T3pegT","dst_nuid":"Ag5vbs7jakzt","src_slot":"value","dst_slot":"x","uid":"RkfvDw3YYzU2","src_connected":true,"dst_connected":true},{"src_nuid":"X8qJqDBrKVXE","dst_nuid":"Ag5vbs7jakzt","src_slot":"value","dst_slot":"y","uid":"YFxUHjEj4uxX","src_connected":true,"dst_connected":true},{"src_nuid":"FKkTQ6UTkUgC","dst_nuid":"Ag5vbs7jakzt","src_slot":"value","dst_slot":"z","uid":"3hCDmq3d4Hz4","src_connected":true,"dst_connected":true},{"src_nuid":"Ag5vbs7jakzt","dst_nuid":"63dYBu6NfSVq","src_slot":"vector","dst_slot":"direction","uid":"9RcPrkRdyWVY","src_connected":true,"dst_connected":true},{"src_nuid":"bNgBP8pKf9fT","dst_nuid":"63dYBu6NfSVq","src_slot":"value","dst_slot":"noise","uid":"6dFzaK2xsMWs","src_connected":true,"dst_connected":true},{"src_nuid":"HRMnjtfE8wLt","dst_nuid":"qEGkpgqsJWkx","src_slot":"color","dst_slot":"color","uid":"99uQDL6hSW6A","src_connected":true,"dst_connected":true},{"src_nuid":"jgUMCc3kq7nS","dst_nuid":"qEGkpgqsJWkx","src_slot":"value","dst_slot":"sizeAttenuation","uid":"3tRLHbwqKjNf","src_connected":true,"dst_connected":true},{"src_nuid":"vnXGC4G9WbqU","dst_nuid":"63dYBu6NfSVq","src_slot":"geometry","dst_slot":"geometry","uid":"9VYYDYagv7YZ","src_connected":true,"dst_connected":true},{"src_nuid":"eCDwu2Zu2TuZ","dst_nuid":"vnXGC4G9WbqU","src_slot":"value","dst_slot":"radialSegments","uid":"ByxQKuFB4fkN","src_connected":true,"dst_connected":true},{"src_nuid":"eCDwu2Zu2TuZ","dst_nuid":"vnXGC4G9WbqU","src_slot":"value","dst_slot":"tubularSegments","uid":"7x7UQ3PbKEgD","src_connected":true,"dst_connected":true},{"src_nuid":"RFpZFUDaqegD","dst_nuid":"UFKKvYmuG7Np","src_slot":"value","dst_slot":"x","uid":"Z6txvdWVZHS4","src_connected":true,"dst_connected":true},{"src_nuid":"4sErXNmRegC8","dst_nuid":"UFKKvYmuG7Np","src_slot":"value","dst_slot":"y","uid":"aX7rzbdP2x4U","src_connected":true,"dst_connected":true},{"src_nuid":"e2bZC6NMSs9K","dst_nuid":"UFKKvYmuG7Np","src_slot":"value","dst_slot":"z","uid":"5jKh4gbZMZym","src_connected":true,"dst_connected":true},{"src_nuid":"UFKKvYmuG7Np","dst_nuid":"63dYBu6NfSVq","src_slot":"vector","dst_slot":"gravity","uid":"KV7pEsL7fyXy","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"ymFttax7zrEs","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"annotation","x":306,"y":129,"uid":"4v2WWcx8buZ6","state":{"text":"Connect the object3d slot to scene to see this example.\n\nParticles here spawn from any defined 3D geometry, in this case a torus. Click edit icon to change the settings.","width":150,"height":70},"title":"Spawn particles from mesh"}],"conns":[]}} ================================================ FILE: browser/patches/_example-rotating-cube.json ================================================ {"abs_t":101.499,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":376,"y":344,"uid":"HMDxAKJMbBMA","state":{"always_update":true,"input_sids":{},"output_sids":{"5CFA6K7bghRV":"mh0rTKkFm0nD"}},"title":"Rotating box","graph":{"uid":"wKX5kUHgjG84","parent_uid":"root","open":true,"nodes":[{"plugin":"three_geometry_box","x":723,"y":418,"uid":"AwWZaNNR6BYQ"},{"plugin":"three_mesh","x":1070,"y":391,"uid":"u8ZExcMDstNM","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1},"pivot":{"x":0,"y":0,"z":0}}},{"plugin":"output_proxy","x":1269,"y":390,"uid":"5CFA6K7bghRV","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"url_texture_generator","x":501,"y":43,"uid":"afWQW8rErjJF","state":{"url":"/data/image/b09b6c37eebe3b22dc21a9c5884be3cc4a1cda74.png"},"title":"Box texture"},{"plugin":"three_material_phong","x":758,"y":77,"uid":"yYfTZYJnMjEh","open":false,"state":{}},{"plugin":"vector","x":676,"y":241,"uid":"5nPwurQndRp7","title":"Rotation"},{"plugin":"graph","x":456,"y":270,"uid":"FPypG6qBRFTX","state":{"always_update":true,"input_sids":{"NKpJWxWzTMJ6":"1"},"output_sids":{"EZRccSbxACFy":"0"}},"title":"Clock","graph":{"uid":"jzpXLSrgYxYh","parent_uid":"wKX5kUHgjG84","open":true,"nodes":[{"plugin":"delta_t_generator","x":234,"y":203,"uid":"fdYEfLgK7rg5"},{"plugin":"multiply_modulator","x":359,"y":193,"uid":"tRycJ7YmvwpG"},{"plugin":"output_proxy","x":785,"y":240,"uid":"EZRccSbxACFy","title":"time","dyn_in":[{"name":"input","dt":0,"uid":"0","index":0,"type":0,"connected":true,"is_connected":true,"dynamic":true}]},{"plugin":"input_proxy","x":250,"y":262,"uid":"NKpJWxWzTMJ6","title":"Speed","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_read","x":376,"y":310,"uid":"NkqXGPZHTMtW","title":"float","dyn_out":[{"name":"value","dt":0,"uid":"0","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_write","x":745,"y":188,"uid":"AebE3e2y6M6y","title":"float","dyn_in":[{"name":"value","dt":0,"uid":"0","index":0,"type":0,"is_connected":true,"dynamic":true}]},{"plugin":"add_modulator","x":484,"y":223,"uid":"geLKEdpfnCPY"},{"plugin":"if_else_modulator","x":604,"y":249,"uid":"vzTWFekyh4ux"},{"plugin":"const_float_generator","x":488,"y":351,"uid":"XPAfkLd2tUL6","state":{"val":0},"title":"Reset"},{"plugin":"initialise_generator","x":520,"y":160,"uid":"deyCNPAEzscg"}],"conns":[{"src_nuid":"fdYEfLgK7rg5","dst_nuid":"tRycJ7YmvwpG","src_slot":"seconds","dst_slot":"a","uid":"RzYhmsY2QXKx","src_connected":true,"dst_connected":true},{"src_nuid":"NKpJWxWzTMJ6","dst_nuid":"tRycJ7YmvwpG","src_slot":0,"dst_slot":"b","uid":"YEUtrVTKE7Mv","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"deyCNPAEzscg","dst_nuid":"vzTWFekyh4ux","src_slot":"bool","dst_slot":"condition","uid":"xpeV3z5HQYHR","src_connected":true,"dst_connected":true},{"src_nuid":"NkqXGPZHTMtW","dst_nuid":"geLKEdpfnCPY","src_slot":0,"dst_slot":"b","uid":"4gSGHgCBHey3","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"tRycJ7YmvwpG","dst_nuid":"geLKEdpfnCPY","src_slot":"result","dst_slot":"a","uid":"FDnA9mVVZHGP","src_connected":true,"dst_connected":true},{"src_nuid":"geLKEdpfnCPY","dst_nuid":"vzTWFekyh4ux","src_slot":"result","dst_slot":"false value","uid":"ysy5EXkQxRwG","src_connected":true,"dst_connected":true},{"src_nuid":"XPAfkLd2tUL6","dst_nuid":"vzTWFekyh4ux","src_slot":"value","dst_slot":"true value","uid":"2emgNTKsdDah","src_connected":true,"dst_connected":true},{"src_nuid":"vzTWFekyh4ux","dst_nuid":"AebE3e2y6M6y","src_slot":"value","dst_slot":0,"uid":"T2FdNEMHfAFD","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"vzTWFekyh4ux","dst_nuid":"EZRccSbxACFy","src_slot":"value","dst_slot":0,"uid":"bE3uGgjSchsr","src_connected":true,"dst_connected":true,"dst_dyn":true,"offset":1}],"variables":[{"id":"float","dt":0}]},"dyn_in":[{"name":"Speed","dt":0,"uid":"1","index":0,"type":0,"is_connected":true,"dynamic":true}],"dyn_out":[{"name":"time","dt":0,"uid":"0","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"slider_float_generator","x":204,"y":308,"uid":"JJdeQdTfE6Yb","state":{"val":0.3,"min":0,"max":1},"title":"Clock speed"}],"conns":[{"src_nuid":"u8ZExcMDstNM","dst_nuid":"5CFA6K7bghRV","src_slot":"object3d","dst_slot":0,"uid":"aPG3eHcyJyfb","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"AwWZaNNR6BYQ","dst_nuid":"u8ZExcMDstNM","src_slot":"geometry","dst_slot":"geometry","uid":"4dnnBSS3xkYx","src_connected":true,"dst_connected":true},{"src_nuid":"afWQW8rErjJF","dst_nuid":"yYfTZYJnMjEh","src_slot":"texture","dst_slot":"texture","uid":"wYTGFzu7e9YX","src_connected":true,"dst_connected":true},{"src_nuid":"yYfTZYJnMjEh","dst_nuid":"u8ZExcMDstNM","src_slot":"material","dst_slot":"material","uid":"8EVv9mJbBx3X","src_connected":true,"dst_connected":true},{"src_nuid":"5nPwurQndRp7","dst_nuid":"u8ZExcMDstNM","src_slot":"vector","dst_slot":"rotation","uid":"CCTjJJP49cEz","src_connected":true,"dst_connected":true},{"src_nuid":"JJdeQdTfE6Yb","dst_nuid":"FPypG6qBRFTX","src_slot":"value","dst_slot":0,"uid":"ePvR63wASzFm","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"FPypG6qBRFTX","dst_nuid":"5nPwurQndRp7","src_slot":0,"dst_slot":"x","uid":"C7aVGZ8XuwNT","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"FPypG6qBRFTX","dst_nuid":"5nPwurQndRp7","src_slot":0,"dst_slot":"z","uid":"9Efrc2PLs33E","src_connected":true,"dst_connected":true,"src_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"annotation","x":373,"y":413,"uid":"84MjSBKkJjH7","state":{"text":"Here we rotate a box using a clock.\n\nConnect the object3d slot\nof the Box into the Scene to see the example. Click the pen icon to see how the clock was connected.\n\n","width":232,"height":98},"title":"Rotating box example"}],"conns":[]}} ================================================ FILE: browser/patches/_example-switch-box-position-on-gaze-click.json ================================================ {"abs_t":18.777,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":319,"y":297,"uid":"v8uQ2TM4Z4FP","state":{"always_update":true,"input_sids":{},"output_sids":{"P8L3xL34Q6Cz":"Ys30r7aVEks1"}},"title":"Switch box position on gaze click","graph":{"uid":"VffUakcj37hu","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":875,"y":124,"uid":"pvq2t6TeEhcC","state":{"position":{"x":0.03717239065720079,"y":0.03926023317848015,"z":-1.193571944882679},"scale":{"x":0.0094948370835134,"y":0.0094948370835134,"z":0.0094948370835134},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1},"pivot":{"x":0,"y":0,"z":0}}},{"plugin":"output_proxy","x":1113,"y":194,"uid":"P8L3xL34Q6Cz","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"UW8xhKSPhTFp","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_material","x":427,"y":295,"uid":"zTgjcXaGDkcm","open":false,"state":{}},{"plugin":"vector","x":661,"y":343,"uid":"xzTuuhtxh5rW","open":false},{"plugin":"const_float_generator","x":486,"y":383,"uid":"Ne9bdVGYjXUY","state":{"val":1}},{"plugin":"three_geometry_box","x":647,"y":69,"uid":"erpSxQjbpHY6","open":false},{"plugin":"url_texture_generator","x":112,"y":322,"uid":"KWB5DZtPXFTq","state":{"url":""}},{"plugin":"on_three_object_gaze_clicked","x":224,"y":162,"uid":"pqMGxhpMQJEv","state":{"nodeRef":"VffUakcj37hu.pvq2t6TeEhcC","type":0},"title":"Gaze clicked"},{"plugin":"graph","x":462,"y":167,"uid":"GnQDcHkFDcEa","state":{"always_update":true,"input_sids":{"zsXPyN6zVN9X":"uySY5hZYTGZz"},"output_sids":{"Bd8FvryqTFuA":"meyY5XDMKJ8m"}},"title":"Switch Position On Gaze Click","graph":{"uid":"Wj5V8qH3Yuxb","parent_uid":"VffUakcj37hu","open":true,"nodes":[{"plugin":"input_proxy","x":263,"y":415,"uid":"zsXPyN6zVN9X","title":"click impulse","dyn_out":[{"name":"input","dt":7,"uid":"Gt2RHxRweRQW","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":1410,"y":572,"uid":"Bd8FvryqTFuA","title":"position","dyn_in":[{"name":"output","dt":5,"def":null,"uid":"FnrtMvEHSK6L","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"array_blend_modulator_vector3","x":1095,"y":542,"uid":"4TLyvMq5wPfn","state":{"blendFuncId":"smoothstep-blend"},"dyn_in":[{"name":"0","dt":5,"array":false,"uid":"LvzQAHbTLkGP","dynamic":true,"type":0,"index":0,"is_connected":true},{"type":0,"name":"1","dt":5,"array":false,"uid":"hy5VQWU4UJxB","dynamic":true,"index":1,"is_connected":true},{"type":0,"name":"2","dt":5,"array":false,"uid":"TgZwpQ7gzyTJ","dynamic":true,"index":2,"is_connected":true},{"type":0,"name":"3","dt":5,"array":false,"uid":"DQeNWu8xf6Cw","dynamic":true,"index":3,"is_connected":true},{"type":0,"name":"4","dt":5,"array":false,"uid":"hNcuGpYtkLhF","dynamic":true,"index":4}]},{"plugin":"vector","x":621,"y":657,"uid":"KzhdGjanBa6T","open":false,"title":"XYZ to Vector (lower left)"},{"plugin":"vector","x":620,"y":698,"uid":"jjxmcKAetr5C","open":false,"title":"XYZ to Vector (lower right)"},{"plugin":"const_float_generator","x":334,"y":754,"uid":"pnTfHjN7D2Gs","state":{"val":1}},{"plugin":"const_float_generator","x":622,"y":563,"uid":"JrFce8p3Fs8x","state":{"val":2},"title":"animation duration"},{"plugin":"const_float_generator","x":335,"y":660,"uid":"JS7SXsCcFKyR","state":{"val":-1}},{"plugin":"convert_bool_float_modulator","x":496,"y":383,"uid":"e7EUBvqvgkWE"},{"plugin":"accumulate_modulator","x":702,"y":380,"uid":"3CCffGUeVx2J","open":false,"state":{"value":9}},{"plugin":"modulate_modulator","x":908,"y":422,"uid":"SbGGcsBvbeUQ","open":false},{"plugin":"const_float_generator","x":647,"y":481,"uid":"sgUkqJMZKyWK","open":false,"state":{"val":4},"title":"number of positions"},{"plugin":"vector","x":620,"y":738,"uid":"UdW5tMS7HHGg","open":false,"title":"XYZ to Vector (upper right)"},{"plugin":"vector","x":621,"y":780,"uid":"qNkWrw56vLQa","open":false,"title":"XYZ to Vector (upper left)"}],"conns":[{"src_nuid":"4TLyvMq5wPfn","dst_nuid":"Bd8FvryqTFuA","src_slot":"value","dst_slot":0,"uid":"exKFmwmCCDE7","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"JrFce8p3Fs8x","dst_nuid":"4TLyvMq5wPfn","src_slot":"value","dst_slot":"duration","uid":"Up7zseus6tYC","src_connected":true,"dst_connected":true},{"src_nuid":"JS7SXsCcFKyR","dst_nuid":"KzhdGjanBa6T","src_slot":"value","dst_slot":"x","uid":"RD2gZMrBeKPu","src_connected":true,"dst_connected":true},{"src_nuid":"jjxmcKAetr5C","dst_nuid":"4TLyvMq5wPfn","src_slot":"vector","dst_slot":1,"uid":"uh4hfnmDmFxe","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"pnTfHjN7D2Gs","dst_nuid":"jjxmcKAetr5C","src_slot":"value","dst_slot":"x","uid":"RfRkDXE9kJLB","src_connected":true,"dst_connected":true},{"src_nuid":"KzhdGjanBa6T","dst_nuid":"4TLyvMq5wPfn","src_slot":"vector","dst_slot":0,"uid":"LePWpwnbEKRZ","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"zsXPyN6zVN9X","dst_nuid":"e7EUBvqvgkWE","src_slot":0,"dst_slot":"bool","uid":"gL4XPhSBhzdH","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"e7EUBvqvgkWE","dst_nuid":"3CCffGUeVx2J","src_slot":"value","dst_slot":"value","uid":"Bf4k4NzKFN89","src_connected":true,"dst_connected":true},{"src_nuid":"3CCffGUeVx2J","dst_nuid":"SbGGcsBvbeUQ","src_slot":"value","dst_slot":"value","uid":"Zak9asAnH5gh","src_connected":true,"dst_connected":true},{"src_nuid":"SbGGcsBvbeUQ","dst_nuid":"4TLyvMq5wPfn","src_slot":"result","dst_slot":"number","uid":"k7S7aWLTUKnw","src_connected":true,"dst_connected":true},{"src_nuid":"sgUkqJMZKyWK","dst_nuid":"SbGGcsBvbeUQ","src_slot":"value","dst_slot":"limit","uid":"MAqebNyKer7M","src_connected":true,"dst_connected":true},{"src_nuid":"pnTfHjN7D2Gs","dst_nuid":"UdW5tMS7HHGg","src_slot":"value","dst_slot":"x","uid":"kvzXjSkSLQ6m","src_connected":true,"dst_connected":true},{"src_nuid":"JS7SXsCcFKyR","dst_nuid":"qNkWrw56vLQa","src_slot":"value","dst_slot":"x","uid":"wMNdhj35FABF","src_connected":true,"dst_connected":true},{"src_nuid":"pnTfHjN7D2Gs","dst_nuid":"UdW5tMS7HHGg","src_slot":"value","dst_slot":"y","uid":"x786WftVZu8z","src_connected":true,"dst_connected":true},{"src_nuid":"pnTfHjN7D2Gs","dst_nuid":"qNkWrw56vLQa","src_slot":"value","dst_slot":"y","uid":"D6txqp3LWScs","src_connected":true,"dst_connected":true},{"src_nuid":"UdW5tMS7HHGg","dst_nuid":"4TLyvMq5wPfn","src_slot":"vector","dst_slot":2,"uid":"FdxtHagJXsYy","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"qNkWrw56vLQa","dst_nuid":"4TLyvMq5wPfn","src_slot":"vector","dst_slot":3,"uid":"hE5MQE3wRAUs","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_in":[{"name":"click impulse","dt":7,"index":0,"uid":"uySY5hZYTGZz","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"position","dt":5,"index":0,"uid":"meyY5XDMKJ8m","dynamic":true,"type":1,"is_connected":true}]}],"conns":[{"src_nuid":"pvq2t6TeEhcC","dst_nuid":"P8L3xL34Q6Cz","src_slot":"object3d","dst_slot":0,"uid":"xtczuFAL4wM4","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"zTgjcXaGDkcm","dst_nuid":"pvq2t6TeEhcC","src_slot":"material","dst_slot":"material","uid":"xJkDjTmS7aDn","src_connected":true,"dst_connected":true},{"src_nuid":"xzTuuhtxh5rW","dst_nuid":"pvq2t6TeEhcC","src_slot":"vector","dst_slot":"scale","uid":"LusQpyJVTxDR","src_connected":true,"dst_connected":true},{"src_nuid":"Ne9bdVGYjXUY","dst_nuid":"xzTuuhtxh5rW","src_slot":"value","dst_slot":"x","uid":"2B3fNSgbtpwk","src_connected":true,"dst_connected":true},{"src_nuid":"Ne9bdVGYjXUY","dst_nuid":"xzTuuhtxh5rW","src_slot":"value","dst_slot":"y","uid":"KTErdMpNRBWf","src_connected":true,"dst_connected":true},{"src_nuid":"Ne9bdVGYjXUY","dst_nuid":"xzTuuhtxh5rW","src_slot":"value","dst_slot":"z","uid":"qGZJN6DMhVZz","src_connected":true,"dst_connected":true},{"src_nuid":"erpSxQjbpHY6","dst_nuid":"pvq2t6TeEhcC","src_slot":"geometry","dst_slot":"geometry","uid":"AQ6Z8m2YrU2Z","src_connected":true,"dst_connected":true},{"src_nuid":"KWB5DZtPXFTq","dst_nuid":"zTgjcXaGDkcm","src_slot":"texture","dst_slot":"texture","uid":"xbk6RfUa94AR","src_connected":true,"dst_connected":true},{"src_nuid":"pqMGxhpMQJEv","dst_nuid":"GnQDcHkFDcEa","src_slot":"trigger","dst_slot":0,"uid":"reYwMwDraXba","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"GnQDcHkFDcEa","dst_nuid":"pvq2t6TeEhcC","src_slot":0,"dst_slot":"position","uid":"CaJSBjkeH2mv","src_connected":true,"dst_connected":true,"src_dyn":true}]},"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"Ys30r7aVEks1","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"annotation","x":320,"y":363,"uid":"gwSyHznZJfqG","state":{"text":"Connect the object3d slot to scene to see this example.\n\nWe move the box between 4 different positions, which are trigged by a gaze click.","width":272,"height":74},"title":"Switch box position on gaze click"}],"conns":[]}} ================================================ FILE: browser/patches/_increment_or_decrement_on_trigger.json ================================================ {"abs_t":0,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":735,"y":550,"uid":"WBUxg9Q5fz2G","state":{"always_update":true,"input_sids":{"rvLDgGVpjPRL":"mVnEUjXzKTu9","PYjRb2vbEPLM":"RrXnGmd2CdV3","X6fUWXLUjYtC":"fQQyfTyQhtVt","t7vqUVc2qYF6":"vqzGBrdNCQUn"},"output_sids":{"wyekgcnREvCT":"33F9mKcYFhjZ"}},"title":"Increase / Decrease on Trigger","graph":{"uid":"8wNUmn5UyRNh","parent_uid":"root","open":true,"nodes":[{"plugin":"input_proxy","x":300,"y":564,"uid":"rvLDgGVpjPRL","title":"increase trigger","dyn_out":[{"name":"input","dt":7,"uid":"aSZDePV2hR2J","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":300,"y":611,"uid":"PYjRb2vbEPLM","title":"decrease trigger","dyn_out":[{"name":"input","dt":7,"uid":"aSZDePV2hR2J","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":1723,"y":650,"uid":"wyekgcnREvCT","title":"value","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"DsPSgcn6hY6J","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":301,"y":658,"uid":"X6fUWXLUjYtC","title":"reset trigger","dyn_out":[{"name":"input","dt":7,"uid":"aSZDePV2hR2J","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":301,"y":703,"uid":"t7vqUVc2qYF6","title":"start value","dyn_out":[{"name":"input","dt":0,"uid":"6JttH4uJyNfW","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"add_modulator","x":1396,"y":656,"uid":"PP6HEsAbzZFU"},{"plugin":"if_else_modulator","x":597,"y":318,"uid":"p8PsbPR8Qt8b"},{"plugin":"variable_local_read","x":338,"y":319,"uid":"T7g4CTDphXGg","title":"value","dyn_out":[{"name":"value","dt":0,"uid":"2szctpEgKtv8","dynamic":true,"type":1,"index":0,"is_connected":true}]},{"plugin":"variable_local_write","x":1541,"y":337,"uid":"YtLz6CSsSsSX","title":"value","dyn_in":[{"name":"value","dt":0,"uid":"3nZhVDGKFJvn","dynamic":true,"type":0,"index":0,"is_connected":true}]},{"plugin":"if_else_modulator","x":1020,"y":337,"uid":"NXZEctuvQkDX","title":"add on increase"},{"plugin":"add_modulator","x":783,"y":432,"uid":"6eEMaVSPbYd9"},{"plugin":"const_float_generator","x":531,"y":163,"uid":"7madAka4FkB5","state":{"val":1},"title":"one"},{"plugin":"if_else_modulator","x":1286,"y":332,"uid":"YhKCbHfESqLU","title":"dec on decrease"},{"plugin":"subtract_modulator","x":1284,"y":487,"uid":"KSR9RM8R83e2"}],"conns":[{"src_nuid":"t7vqUVc2qYF6","dst_nuid":"PP6HEsAbzZFU","src_slot":0,"dst_slot":"a","uid":"8vF9nB5BvwEH","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"PP6HEsAbzZFU","dst_nuid":"wyekgcnREvCT","src_slot":"result","dst_slot":0,"uid":"2cp9HQvqFt8V","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"X6fUWXLUjYtC","dst_nuid":"p8PsbPR8Qt8b","src_slot":0,"dst_slot":"condition","uid":"nKYD2WDhsP8v","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"t7vqUVc2qYF6","dst_nuid":"p8PsbPR8Qt8b","src_slot":0,"dst_slot":"true value","uid":"k7QYXMDvpkUe","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"T7g4CTDphXGg","dst_nuid":"p8PsbPR8Qt8b","src_slot":0,"dst_slot":"false value","uid":"KzdWpZvwCZpV","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"rvLDgGVpjPRL","dst_nuid":"NXZEctuvQkDX","src_slot":0,"dst_slot":"condition","uid":"QB9YCZwvtB85","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"p8PsbPR8Qt8b","dst_nuid":"NXZEctuvQkDX","src_slot":"value","dst_slot":"false value","uid":"BL2spfSRKQh9","src_connected":true,"dst_connected":true},{"src_nuid":"p8PsbPR8Qt8b","dst_nuid":"6eEMaVSPbYd9","src_slot":"value","dst_slot":"a","uid":"jLakrUTAK2T3","src_connected":true,"dst_connected":true},{"src_nuid":"7madAka4FkB5","dst_nuid":"6eEMaVSPbYd9","src_slot":"value","dst_slot":"b","uid":"d3xFELLp4Uw4","src_connected":true,"dst_connected":true},{"src_nuid":"6eEMaVSPbYd9","dst_nuid":"NXZEctuvQkDX","src_slot":"result","dst_slot":"true value","uid":"rPEHMWkcwdLh","src_connected":true,"dst_connected":true},{"src_nuid":"NXZEctuvQkDX","dst_nuid":"YhKCbHfESqLU","src_slot":"value","dst_slot":"false value","uid":"ZfQJxQMEXn2D","src_connected":true,"dst_connected":true},{"src_nuid":"PYjRb2vbEPLM","dst_nuid":"YhKCbHfESqLU","src_slot":0,"dst_slot":"condition","uid":"7p3GLB5NArRT","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"NXZEctuvQkDX","dst_nuid":"KSR9RM8R83e2","src_slot":"value","dst_slot":"a","uid":"Q7QYJnkEPULe","src_connected":true,"dst_connected":true},{"src_nuid":"7madAka4FkB5","dst_nuid":"KSR9RM8R83e2","src_slot":"value","dst_slot":"b","uid":"fT3QymAQA7RP","src_connected":true,"dst_connected":true},{"src_nuid":"KSR9RM8R83e2","dst_nuid":"YhKCbHfESqLU","src_slot":"result","dst_slot":"true value","uid":"uFpdDfrGrbAf","src_connected":true,"dst_connected":true},{"src_nuid":"YhKCbHfESqLU","dst_nuid":"YtLz6CSsSsSX","src_slot":"value","dst_slot":0,"uid":"6rjG7dkUtyLv","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"YhKCbHfESqLU","dst_nuid":"PP6HEsAbzZFU","src_slot":"value","dst_slot":"b","uid":"HPxehfdsxTvX","src_connected":true,"dst_connected":true}],"variables":[{"id":"value","dt":0}]},"dyn_in":[{"name":"start value","dt":0,"index":0,"uid":"vqzGBrdNCQUn","dynamic":true,"type":0,"is_connected":true},{"name":"reset trigger","dt":7,"index":1,"uid":"fQQyfTyQhtVt","dynamic":true,"type":0,"is_connected":false},{"name":"decrease trigger","dt":7,"index":2,"uid":"RrXnGmd2CdV3","dynamic":true,"type":0,"is_connected":false},{"name":"increase trigger","dt":7,"index":3,"uid":"mVnEUjXzKTu9","dynamic":true,"type":0,"is_connected":false}],"dyn_out":[{"name":"value","dt":0,"index":0,"uid":"33F9mKcYFhjZ","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"const_float_generator","x":549,"y":536,"uid":"WvHvCv6evReJ","state":{"val":0},"title":"start"}],"conns":[{"src_nuid":"WvHvCv6evReJ","dst_nuid":"WBUxg9Q5fz2G","src_slot":"value","dst_slot":0,"uid":"rMFLMNAG3GET","src_connected":true,"dst_connected":true,"dst_dyn":true}]}} ================================================ FILE: browser/patches/_oscillate-between-2-values.json ================================================ {"abs_t":1630.382,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":796,"y":185,"uid":"nQ3exkmg1k8M","state":{"always_update":true,"input_sids":{"qdAWNqjTMDpt":"6","L3RYhqIF5iSs":"8","RpPPfcKUADLq":"9"},"output_sids":{"pnMu38d5tpIy":"7"}},"title":"Oscillate (Sine)","graph":{"uid":"unJPhA7kNyXk","parent_uid":"root","open":true,"nodes":[{"plugin":"delta_t_generator","x":62,"y":232,"uid":"tEvhCAiOHnOh"},{"plugin":"multiply_modulator","x":187,"y":222,"uid":"UbNPhLG6WVuQ"},{"plugin":"input_proxy","x":78,"y":291,"uid":"qdAWNqjTMDpt","title":"Speed","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_read","x":204,"y":339,"uid":"uf1TrCi8qUGN","title":"float","dyn_out":[{"name":"value","dt":0,"uid":"0","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_write","x":589,"y":178,"uid":"TrIQRfjlqwOV","title":"float","dyn_in":[{"name":"value","dt":0,"uid":"0","index":0,"type":0,"is_connected":true,"dynamic":true}]},{"plugin":"add_modulator","x":312,"y":252,"uid":"prJidBzmvShX"},{"plugin":"if_else_modulator","x":432,"y":278,"uid":"gnj5IIRQTW0T"},{"plugin":"const_float_generator","x":316,"y":380,"uid":"BLGqcch4V6JG","state":{"val":0},"title":"Reset"},{"plugin":"initialise_generator","x":348,"y":189,"uid":"eCJswCeE17Ow"},{"plugin":"sine_modulator","x":550,"y":289,"uid":"IGHSIp4fEfqd"},{"plugin":"subtract_modulator","x":664,"y":404,"uid":"sJDeKgkFaDQ7"},{"plugin":"convert_oscilator_unit_modulator","x":629,"y":289,"uid":"Ud5IPj53D7rO"},{"plugin":"multiply_modulator","x":753,"y":289,"uid":"RLZbMIKFfcuG"},{"plugin":"add_modulator","x":836,"y":344,"uid":"xmv41ykKy8Zu"},{"plugin":"output_proxy","x":919,"y":344,"uid":"pnMu38d5tpIy","title":"float","dyn_in":[{"name":"input","dt":0,"uid":"0","index":0,"type":0,"connected":true,"is_connected":true,"dynamic":true}]},{"plugin":"input_proxy","x":538,"y":399,"uid":"L3RYhqIF5iSs","title":"Min","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"input_proxy","x":604,"y":404,"uid":"RpPPfcKUADLq","title":"Max","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]}],"conns":[{"src_nuid":"tEvhCAiOHnOh","dst_nuid":"UbNPhLG6WVuQ","src_slot":"seconds","dst_slot":"a","uid":"KXPQPFFxSv88","src_connected":true,"dst_connected":true},{"src_nuid":"qdAWNqjTMDpt","dst_nuid":"UbNPhLG6WVuQ","src_slot":0,"dst_slot":"b","uid":"vEnBKvboGxF1","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"UbNPhLG6WVuQ","dst_nuid":"prJidBzmvShX","src_slot":"result","dst_slot":"a","uid":"F9I7rkT8qaQ3","src_connected":true,"dst_connected":true},{"src_nuid":"uf1TrCi8qUGN","dst_nuid":"prJidBzmvShX","src_slot":0,"dst_slot":"b","uid":"xfz2VJQMzaMr","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"prJidBzmvShX","dst_nuid":"gnj5IIRQTW0T","src_slot":"result","dst_slot":"false value","uid":"4mVlS6yjT4RC","src_connected":true,"dst_connected":true},{"src_nuid":"eCJswCeE17Ow","dst_nuid":"gnj5IIRQTW0T","src_slot":"bool","dst_slot":"condition","uid":"lUnznMEjUMg4","src_connected":true,"dst_connected":true},{"src_nuid":"BLGqcch4V6JG","dst_nuid":"gnj5IIRQTW0T","src_slot":"value","dst_slot":"true value","uid":"Tf1Yih0OChYv","src_connected":true,"dst_connected":true},{"src_nuid":"IGHSIp4fEfqd","dst_nuid":"Ud5IPj53D7rO","src_slot":"value","dst_slot":"value","uid":"z6CNhO7O7HcZ","src_connected":true,"dst_connected":true},{"src_nuid":"RpPPfcKUADLq","dst_nuid":"sJDeKgkFaDQ7","src_slot":0,"dst_slot":"a","uid":"v5gm00EkT9Nz","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"L3RYhqIF5iSs","dst_nuid":"sJDeKgkFaDQ7","src_slot":0,"dst_slot":"b","uid":"8Zg2muCtxEHv","src_connected":true,"dst_connected":true,"src_dyn":true,"offset":1},{"src_nuid":"sJDeKgkFaDQ7","dst_nuid":"RLZbMIKFfcuG","src_slot":"result","dst_slot":"b","uid":"cacBsrWi9zTV","src_connected":true,"dst_connected":true},{"src_nuid":"Ud5IPj53D7rO","dst_nuid":"RLZbMIKFfcuG","src_slot":"value","dst_slot":"a","uid":"B4ZS1sQLumSS","src_connected":true,"dst_connected":true},{"src_nuid":"RLZbMIKFfcuG","dst_nuid":"xmv41ykKy8Zu","src_slot":"result","dst_slot":"a","uid":"WtbUQuDGr1u9","src_connected":true,"dst_connected":true},{"src_nuid":"L3RYhqIF5iSs","dst_nuid":"xmv41ykKy8Zu","src_slot":0,"dst_slot":"b","uid":"XWJN7KgAzQpm","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"xmv41ykKy8Zu","dst_nuid":"pnMu38d5tpIy","src_slot":"result","dst_slot":0,"uid":"OuzvuPIDL201","src_connected":true,"dst_connected":true,"dst_dyn":true,"offset":1},{"src_nuid":"gnj5IIRQTW0T","dst_nuid":"TrIQRfjlqwOV","src_slot":"value","dst_slot":0,"uid":"GrjToQoyjq8C","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"gnj5IIRQTW0T","dst_nuid":"IGHSIp4fEfqd","src_slot":"value","dst_slot":"time","uid":"rxMKA6QOJxCV","src_connected":true,"dst_connected":true,"offset":1}],"variables":[{"id":"float","dt":8}]},"dyn_in":[{"name":"Speed","dt":0,"uid":"6","index":0,"type":0,"is_connected":true,"dynamic":true},{"name":"Min","dt":0,"uid":"8","index":1,"type":0,"is_connected":true,"dynamic":true},{"name":"Max","dt":0,"uid":"9","index":2,"type":0,"is_connected":true,"dynamic":true}],"dyn_out":[{"name":"float","dt":0,"uid":"7","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"slider_float_generator","x":516,"y":156,"uid":"aeQwXvlB1ZgO","state":{"val":0.42,"min":0,"max":1},"title":"Clock speed"},{"plugin":"const_float_generator","x":502,"y":265,"uid":"4zdzeyOxKiJx","state":{"val":0},"title":"Min"},{"plugin":"const_float_generator","x":625,"y":265,"uid":"egmpRuU1FDCO","state":{"val":1},"title":"Max"}],"conns":[{"src_nuid":"aeQwXvlB1ZgO","dst_nuid":"nQ3exkmg1k8M","src_slot":"value","dst_slot":0,"uid":"5WA3xVK13Gj7","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"egmpRuU1FDCO","dst_nuid":"nQ3exkmg1k8M","src_slot":"value","dst_slot":2,"uid":"T0sQSS306nRv","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"4zdzeyOxKiJx","dst_nuid":"nQ3exkmg1k8M","src_slot":"value","dst_slot":1,"uid":"tm1XlBeh02eo","src_connected":true,"dst_connected":true,"dst_dyn":true}]}} ================================================ FILE: browser/patches/_oscillate-sawtooth.json ================================================ {"abs_t":1673.851,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":784,"y":264,"uid":"2KfJGi5FygJr","state":{"always_update":true,"input_sids":{"7lp29KnD8kND":"6","JI3XGVwSccBV":"8","nk9dwR98FxHJ":"9"},"output_sids":{"2Lbjuy0Py94H":"7"}},"title":"Oscillate Sawtooth","graph":{"uid":"QvlGqr3ZNFzv","parent_uid":"root","open":true,"nodes":[{"plugin":"delta_t_generator","x":62,"y":232,"uid":"Weo7eKicW3Gn"},{"plugin":"multiply_modulator","x":187,"y":222,"uid":"eoFJRgUPokZf"},{"plugin":"input_proxy","x":78,"y":291,"uid":"7lp29KnD8kND","title":"Speed","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_read","x":204,"y":339,"uid":"mpKncp3hEffs","title":"float","dyn_out":[{"name":"value","dt":0,"uid":"0","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_write","x":589,"y":178,"uid":"pxdhWaCnAzlP","title":"float","dyn_in":[{"name":"value","dt":0,"uid":"0","index":0,"type":0,"is_connected":true,"dynamic":true}]},{"plugin":"add_modulator","x":312,"y":252,"uid":"7AgA56ACdoxn"},{"plugin":"if_else_modulator","x":432,"y":278,"uid":"2Vlf638yfXyb"},{"plugin":"const_float_generator","x":316,"y":380,"uid":"STN6RF7dPWmO","state":{"val":0},"title":"Reset"},{"plugin":"initialise_generator","x":348,"y":189,"uid":"7RsyF1Ry1q9C"},{"plugin":"subtract_modulator","x":664,"y":404,"uid":"A6zeOtpw35IN"},{"plugin":"convert_oscilator_unit_modulator","x":629,"y":289,"uid":"eaHEZWueeMks"},{"plugin":"multiply_modulator","x":753,"y":289,"uid":"9YdOJBWubtjA"},{"plugin":"add_modulator","x":836,"y":344,"uid":"8RoT09Lwu2Hl"},{"plugin":"output_proxy","x":919,"y":344,"uid":"2Lbjuy0Py94H","title":"float","dyn_in":[{"name":"input","dt":0,"uid":"0","index":0,"type":0,"connected":true,"is_connected":true,"dynamic":true}]},{"plugin":"input_proxy","x":538,"y":399,"uid":"JI3XGVwSccBV","title":"Min","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"input_proxy","x":604,"y":404,"uid":"nk9dwR98FxHJ","title":"Max","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"sawtooth_modulator","x":543,"y":286,"uid":"Gm5djnB2ptB2"}],"conns":[{"src_nuid":"Weo7eKicW3Gn","dst_nuid":"eoFJRgUPokZf","src_slot":"seconds","dst_slot":"a","uid":"vatuVESuHt5M","src_connected":true,"dst_connected":true},{"src_nuid":"7lp29KnD8kND","dst_nuid":"eoFJRgUPokZf","src_slot":0,"dst_slot":"b","uid":"CJ1Sm7mjwglT","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"eoFJRgUPokZf","dst_nuid":"7AgA56ACdoxn","src_slot":"result","dst_slot":"a","uid":"z03Lx9KXJIUL","src_connected":true,"dst_connected":true},{"src_nuid":"mpKncp3hEffs","dst_nuid":"7AgA56ACdoxn","src_slot":0,"dst_slot":"b","uid":"d0NmPjNQLVwZ","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"7AgA56ACdoxn","dst_nuid":"2Vlf638yfXyb","src_slot":"result","dst_slot":"false value","uid":"DjvORLdEWVsD","src_connected":true,"dst_connected":true},{"src_nuid":"7RsyF1Ry1q9C","dst_nuid":"2Vlf638yfXyb","src_slot":"bool","dst_slot":"condition","uid":"AbC3dfHuIAz8","src_connected":true,"dst_connected":true},{"src_nuid":"STN6RF7dPWmO","dst_nuid":"2Vlf638yfXyb","src_slot":"value","dst_slot":"true value","uid":"dmYylhh1seIL","src_connected":true,"dst_connected":true},{"src_nuid":"nk9dwR98FxHJ","dst_nuid":"A6zeOtpw35IN","src_slot":0,"dst_slot":"a","uid":"OmcMuaouKvPf","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"JI3XGVwSccBV","dst_nuid":"A6zeOtpw35IN","src_slot":0,"dst_slot":"b","uid":"pDIUwg5vxGqj","src_connected":true,"dst_connected":true,"src_dyn":true,"offset":1},{"src_nuid":"A6zeOtpw35IN","dst_nuid":"9YdOJBWubtjA","src_slot":"result","dst_slot":"b","uid":"ECmOO9q1M9l4","src_connected":true,"dst_connected":true},{"src_nuid":"eaHEZWueeMks","dst_nuid":"9YdOJBWubtjA","src_slot":"value","dst_slot":"a","uid":"6U16jUeQIYv6","src_connected":true,"dst_connected":true},{"src_nuid":"9YdOJBWubtjA","dst_nuid":"8RoT09Lwu2Hl","src_slot":"result","dst_slot":"a","uid":"OtuprF4bZN5i","src_connected":true,"dst_connected":true},{"src_nuid":"JI3XGVwSccBV","dst_nuid":"8RoT09Lwu2Hl","src_slot":0,"dst_slot":"b","uid":"VGkhV09EnUxi","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"8RoT09Lwu2Hl","dst_nuid":"2Lbjuy0Py94H","src_slot":"result","dst_slot":0,"uid":"XYiyBc16DSps","src_connected":true,"dst_connected":true,"dst_dyn":true,"offset":1},{"src_nuid":"2Vlf638yfXyb","dst_nuid":"pxdhWaCnAzlP","src_slot":"value","dst_slot":0,"uid":"I9FxBlOv5sgC","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"2Vlf638yfXyb","dst_nuid":"Gm5djnB2ptB2","src_slot":"value","dst_slot":"time","uid":"C3b7xsV0LS3Z","src_connected":true,"dst_connected":true,"offset":1},{"src_nuid":"Gm5djnB2ptB2","dst_nuid":"eaHEZWueeMks","src_slot":"value","dst_slot":"value","uid":"jRoI43gG2hRA","src_connected":true,"dst_connected":true}],"variables":[{"id":"float","dt":8}]},"dyn_in":[{"name":"Speed","dt":0,"uid":"6","index":0,"type":0,"is_connected":true,"dynamic":true},{"name":"Min","dt":0,"uid":"8","index":1,"type":0,"is_connected":true,"dynamic":true},{"name":"Max","dt":0,"uid":"9","index":2,"type":0,"is_connected":true,"dynamic":true}],"dyn_out":[{"name":"float","dt":0,"uid":"7","index":0,"type":1,"dynamic":true}]},{"plugin":"slider_float_generator","x":501,"y":234,"uid":"ULwwZILoIuDL","state":{"val":0.42,"min":0,"max":1},"title":"speed"},{"plugin":"const_float_generator","x":492,"y":343,"uid":"QN8mZnWlWob0","state":{"val":0},"title":"Min"},{"plugin":"const_float_generator","x":613,"y":343,"uid":"AkJDjwjhqQ0A","state":{"val":1},"title":"Max"}],"conns":[{"src_nuid":"ULwwZILoIuDL","dst_nuid":"2KfJGi5FygJr","src_slot":"value","dst_slot":0,"uid":"kGZrkcylNUnj","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"QN8mZnWlWob0","dst_nuid":"2KfJGi5FygJr","src_slot":"value","dst_slot":1,"uid":"VwuLlUdlzVG9","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"AkJDjwjhqQ0A","dst_nuid":"2KfJGi5FygJr","src_slot":"value","dst_slot":2,"uid":"scr5PbAt52bP","src_connected":true,"dst_connected":true,"dst_dyn":true}]}} ================================================ FILE: browser/patches/_oscillate-with-in-tween.json ================================================ {"abs_t":672.995,"active_graph":"root","graph_uid":"F2SOwIkvCgXj","root":{"uid":"root","parent_uid":-1,"nodes":[{"plugin":"graph","x":455,"y":134,"uid":"iW03WdPhB3Xd","state":{"always_update":true,"input_sids":{"4jiMxFP9VcQ8":"6","moQO71kmhyVv":"8","wHtmDQUKAr4l":"9"},"output_sids":{"1S67zeqyUjEh":"7"}},"title":"Oscillate with In tween","graph":{"uid":"tOR9xUmAmeuI","parent_uid":"root","open":true,"nodes":[{"plugin":"delta_t_generator","x":62,"y":232,"uid":"jWnsLODuDTgG"},{"plugin":"multiply_modulator","x":187,"y":222,"uid":"MyO3sGh55PXa"},{"plugin":"input_proxy","x":78,"y":291,"uid":"4jiMxFP9VcQ8","title":"Speed","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_read","x":204,"y":339,"uid":"fdihtWSBdanQ","title":"float","dyn_out":[{"name":"value","dt":0,"uid":"0","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_write","x":589,"y":178,"uid":"wqm1RHo1AAj3","title":"float","dyn_in":[{"name":"value","dt":0,"uid":"0","index":0,"type":0,"is_connected":true,"dynamic":true}]},{"plugin":"add_modulator","x":312,"y":252,"uid":"KwS4R527HtmJ"},{"plugin":"if_else_modulator","x":432,"y":278,"uid":"BleuACeYmUp1"},{"plugin":"const_float_generator","x":316,"y":380,"uid":"v16ltBPAePJg","state":{"val":0},"title":"Reset"},{"plugin":"initialise_generator","x":348,"y":189,"uid":"lVL2HyA5QywG"},{"plugin":"sine_modulator","x":550,"y":289,"uid":"ZTk3XcueFTJY"},{"plugin":"subtract_modulator","x":664,"y":404,"uid":"HFtOeKTFYBZu"},{"plugin":"convert_oscilator_unit_modulator","x":629,"y":289,"uid":"qox7zRhssGGu"},{"plugin":"multiply_modulator","x":967,"y":260,"uid":"A0aUYQ5q4xKE"},{"plugin":"add_modulator","x":1067,"y":301,"uid":"OjvSX1Nxp0bB"},{"plugin":"output_proxy","x":1158,"y":304,"uid":"1S67zeqyUjEh","title":"float","dyn_in":[{"name":"input","dt":0,"uid":"0","index":0,"type":0,"connected":true,"is_connected":true,"dynamic":true}]},{"plugin":"input_proxy","x":538,"y":399,"uid":"moQO71kmhyVv","title":"Min","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"input_proxy","x":604,"y":404,"uid":"wHtmDQUKAr4l","title":"Max","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"tween_in_modulator","x":774,"y":250,"uid":"FYGsbZB2iIJC","state":{"type":0}}],"conns":[{"src_nuid":"jWnsLODuDTgG","dst_nuid":"MyO3sGh55PXa","src_slot":"seconds","dst_slot":"a","uid":"3bTSEB0Okctm","src_connected":true,"dst_connected":true},{"src_nuid":"4jiMxFP9VcQ8","dst_nuid":"MyO3sGh55PXa","src_slot":0,"dst_slot":"b","uid":"RMU62C5uHIHa","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"MyO3sGh55PXa","dst_nuid":"KwS4R527HtmJ","src_slot":"result","dst_slot":"a","uid":"7IEHBHb35BTo","src_connected":true,"dst_connected":true},{"src_nuid":"fdihtWSBdanQ","dst_nuid":"KwS4R527HtmJ","src_slot":0,"dst_slot":"b","uid":"ABnkvfxO1d7C","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"KwS4R527HtmJ","dst_nuid":"BleuACeYmUp1","src_slot":"result","dst_slot":"false value","uid":"B2uvbeYFIA0u","src_connected":true,"dst_connected":true},{"src_nuid":"lVL2HyA5QywG","dst_nuid":"BleuACeYmUp1","src_slot":"bool","dst_slot":"condition","uid":"hwqadyG7hn6s","src_connected":true,"dst_connected":true},{"src_nuid":"v16ltBPAePJg","dst_nuid":"BleuACeYmUp1","src_slot":"value","dst_slot":"true value","uid":"KtupFc7OYOh1","src_connected":true,"dst_connected":true},{"src_nuid":"ZTk3XcueFTJY","dst_nuid":"qox7zRhssGGu","src_slot":"value","dst_slot":"value","uid":"zMRWIZo0N8Kx","src_connected":true,"dst_connected":true},{"src_nuid":"wHtmDQUKAr4l","dst_nuid":"HFtOeKTFYBZu","src_slot":0,"dst_slot":"a","uid":"SDQuW9EKTNuT","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"moQO71kmhyVv","dst_nuid":"HFtOeKTFYBZu","src_slot":0,"dst_slot":"b","uid":"uumWRqS8eFAo","src_connected":true,"dst_connected":true,"src_dyn":true,"offset":1},{"src_nuid":"HFtOeKTFYBZu","dst_nuid":"A0aUYQ5q4xKE","src_slot":"result","dst_slot":"b","uid":"KzrYPrfgWBFB","src_connected":true,"dst_connected":true},{"src_nuid":"A0aUYQ5q4xKE","dst_nuid":"OjvSX1Nxp0bB","src_slot":"result","dst_slot":"a","uid":"crUynl3zdqqd","src_connected":true,"dst_connected":true},{"src_nuid":"moQO71kmhyVv","dst_nuid":"OjvSX1Nxp0bB","src_slot":0,"dst_slot":"b","uid":"ZZUMyZH7UWMJ","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"OjvSX1Nxp0bB","dst_nuid":"1S67zeqyUjEh","src_slot":"result","dst_slot":0,"uid":"BiphjiFRsabc","src_connected":true,"dst_connected":true,"dst_dyn":true,"offset":1},{"src_nuid":"BleuACeYmUp1","dst_nuid":"wqm1RHo1AAj3","src_slot":"value","dst_slot":0,"uid":"weGo0a2dOFJS","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"BleuACeYmUp1","dst_nuid":"ZTk3XcueFTJY","src_slot":"value","dst_slot":"time","uid":"LoKYqc2N5jzA","src_connected":true,"dst_connected":true,"offset":1},{"src_nuid":"qox7zRhssGGu","dst_nuid":"FYGsbZB2iIJC","src_slot":"value","dst_slot":"time","uid":"VCj9Vb7NpdNj","src_connected":true,"dst_connected":true},{"src_nuid":"FYGsbZB2iIJC","dst_nuid":"A0aUYQ5q4xKE","src_slot":"result","dst_slot":"a","uid":"cnIH4SLDv2g8","src_connected":true,"dst_connected":true}],"variables":[{"id":"float","dt":8}]},"dyn_in":[{"name":"Speed","dt":0,"uid":"6","index":0,"type":0,"is_connected":true,"dynamic":true},{"name":"Min","dt":0,"uid":"8","index":1,"type":0,"is_connected":true,"dynamic":true},{"name":"Max","dt":0,"uid":"9","index":2,"type":0,"is_connected":true,"dynamic":true}],"dyn_out":[{"name":"float","dt":0,"uid":"7","index":0,"type":1,"dynamic":true}]},{"plugin":"slider_float_generator","x":177,"y":134,"uid":"bQqBw0UNiZWg","state":{"val":0.42,"min":0,"max":1},"title":"speed"},{"plugin":"const_float_generator","x":176,"y":198,"uid":"yV9nkv6P4ipi","state":{"val":0},"title":"Min"},{"plugin":"const_float_generator","x":264,"y":198,"uid":"Qvdv4eR6oLnn","state":{"val":1},"title":"Max"}],"conns":[{"src_nuid":"bQqBw0UNiZWg","dst_nuid":"iW03WdPhB3Xd","src_slot":"value","dst_slot":0,"uid":"Ig3oaaESD8zW","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"yV9nkv6P4ipi","dst_nuid":"iW03WdPhB3Xd","src_slot":"value","dst_slot":1,"uid":"c0ckkZjZ8K3V","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"Qvdv4eR6oLnn","dst_nuid":"iW03WdPhB3Xd","src_slot":"value","dst_slot":2,"uid":"cx3mwT7IbJcY","src_connected":true,"dst_connected":true,"dst_dyn":true}]}} ================================================ FILE: browser/patches/_oscillate-with-out-tween.json ================================================ {"abs_t":644.064,"active_graph":"root","graph_uid":"F2SOwIkvCgXj","root":{"uid":"root","parent_uid":-1,"nodes":[{"plugin":"graph","x":450,"y":202,"uid":"oW4pZr1uXRho","state":{"always_update":true,"input_sids":{"tQbRXUKe2Gp0":"6","I7Qw5ok7Buh0":"8","3utWJDAWj15O":"9"},"output_sids":{"v2kPDMLI19Pl":"7"}},"title":"Oscillate with Out tween","graph":{"uid":"UQTZhDSKurR1","parent_uid":"root","open":true,"nodes":[{"plugin":"delta_t_generator","x":62,"y":232,"uid":"h9t9kCc7n9cW"},{"plugin":"multiply_modulator","x":187,"y":222,"uid":"DAzAaH5pZBjU"},{"plugin":"input_proxy","x":78,"y":291,"uid":"tQbRXUKe2Gp0","title":"Speed","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_read","x":204,"y":339,"uid":"OHtQEmD9lMLe","title":"float","dyn_out":[{"name":"value","dt":0,"uid":"0","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_write","x":589,"y":178,"uid":"RrdVC7pUuUHI","title":"float","dyn_in":[{"name":"value","dt":0,"uid":"0","index":0,"type":0,"is_connected":true,"dynamic":true}]},{"plugin":"add_modulator","x":312,"y":252,"uid":"GUuGLNCbF5E7"},{"plugin":"if_else_modulator","x":432,"y":278,"uid":"WQ3M3KvOFYQf"},{"plugin":"const_float_generator","x":316,"y":380,"uid":"num5v9hn6Kx1","state":{"val":0},"title":"Reset"},{"plugin":"initialise_generator","x":348,"y":189,"uid":"F1rQAvjXsFJr"},{"plugin":"sine_modulator","x":550,"y":289,"uid":"aPSv3Zq2PfYs"},{"plugin":"subtract_modulator","x":664,"y":404,"uid":"heVAnRB3XolV"},{"plugin":"convert_oscilator_unit_modulator","x":629,"y":289,"uid":"THoPZ15mKHJR"},{"plugin":"multiply_modulator","x":967,"y":260,"uid":"ssWnHQ5VwCFG"},{"plugin":"add_modulator","x":1067,"y":301,"uid":"pXKYcc4mhxyU"},{"plugin":"output_proxy","x":1158,"y":304,"uid":"v2kPDMLI19Pl","title":"float","dyn_in":[{"name":"input","dt":0,"uid":"0","index":0,"type":0,"connected":true,"is_connected":true,"dynamic":true}]},{"plugin":"input_proxy","x":538,"y":399,"uid":"I7Qw5ok7Buh0","title":"Min","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"input_proxy","x":604,"y":404,"uid":"3utWJDAWj15O","title":"Max","dyn_out":[{"name":"output","dt":0,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"tween_out_modulator","x":776,"y":277,"uid":"MqR0aSiZgwNo","state":{"type":0}}],"conns":[{"src_nuid":"h9t9kCc7n9cW","dst_nuid":"DAzAaH5pZBjU","src_slot":"seconds","dst_slot":"a","uid":"ZsCW9Co864j3","src_connected":true,"dst_connected":true},{"src_nuid":"tQbRXUKe2Gp0","dst_nuid":"DAzAaH5pZBjU","src_slot":0,"dst_slot":"b","uid":"i6XGIBLi4mVN","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"DAzAaH5pZBjU","dst_nuid":"GUuGLNCbF5E7","src_slot":"result","dst_slot":"a","uid":"uXuktDiE9qOR","src_connected":true,"dst_connected":true},{"src_nuid":"OHtQEmD9lMLe","dst_nuid":"GUuGLNCbF5E7","src_slot":0,"dst_slot":"b","uid":"jKB9fO3lPCjw","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"GUuGLNCbF5E7","dst_nuid":"WQ3M3KvOFYQf","src_slot":"result","dst_slot":"false value","uid":"fVRZcLVScNPB","src_connected":true,"dst_connected":true},{"src_nuid":"F1rQAvjXsFJr","dst_nuid":"WQ3M3KvOFYQf","src_slot":"bool","dst_slot":"condition","uid":"0oINrFlVnlTa","src_connected":true,"dst_connected":true},{"src_nuid":"num5v9hn6Kx1","dst_nuid":"WQ3M3KvOFYQf","src_slot":"value","dst_slot":"true value","uid":"fFksEYnlZwWc","src_connected":true,"dst_connected":true},{"src_nuid":"aPSv3Zq2PfYs","dst_nuid":"THoPZ15mKHJR","src_slot":"value","dst_slot":"value","uid":"efZrwF1mKkJb","src_connected":true,"dst_connected":true},{"src_nuid":"3utWJDAWj15O","dst_nuid":"heVAnRB3XolV","src_slot":0,"dst_slot":"a","uid":"EQqYfh7H0P9y","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"I7Qw5ok7Buh0","dst_nuid":"heVAnRB3XolV","src_slot":0,"dst_slot":"b","uid":"ffJkKWtiYQzK","src_connected":true,"dst_connected":true,"src_dyn":true,"offset":1},{"src_nuid":"heVAnRB3XolV","dst_nuid":"ssWnHQ5VwCFG","src_slot":"result","dst_slot":"b","uid":"Jqu2yOFd7rDj","src_connected":true,"dst_connected":true},{"src_nuid":"ssWnHQ5VwCFG","dst_nuid":"pXKYcc4mhxyU","src_slot":"result","dst_slot":"a","uid":"HNaqgpkbVRpX","src_connected":true,"dst_connected":true},{"src_nuid":"I7Qw5ok7Buh0","dst_nuid":"pXKYcc4mhxyU","src_slot":0,"dst_slot":"b","uid":"cUn7Rl0Hcrb6","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"pXKYcc4mhxyU","dst_nuid":"v2kPDMLI19Pl","src_slot":"result","dst_slot":0,"uid":"tExWPZY4XN6S","src_connected":true,"dst_connected":true,"dst_dyn":true,"offset":1},{"src_nuid":"WQ3M3KvOFYQf","dst_nuid":"RrdVC7pUuUHI","src_slot":"value","dst_slot":0,"uid":"yPOWFTo6y32D","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"WQ3M3KvOFYQf","dst_nuid":"aPSv3Zq2PfYs","src_slot":"value","dst_slot":"time","uid":"x7MPgJQ33eJo","src_connected":true,"dst_connected":true,"offset":1},{"src_nuid":"THoPZ15mKHJR","dst_nuid":"MqR0aSiZgwNo","src_slot":"value","dst_slot":"time","uid":"PExYvMeQ7yWJ","src_connected":true,"dst_connected":true},{"src_nuid":"MqR0aSiZgwNo","dst_nuid":"ssWnHQ5VwCFG","src_slot":"result","dst_slot":"a","uid":"aWFRUTsI1o4x","src_connected":true,"dst_connected":true}],"variables":[{"id":"float","dt":8}]},"dyn_in":[{"name":"Speed","dt":0,"uid":"6","index":0,"type":0,"is_connected":true,"dynamic":true},{"name":"Min","dt":0,"uid":"8","index":1,"type":0,"is_connected":true,"dynamic":true},{"name":"Max","dt":0,"uid":"9","index":2,"type":0,"is_connected":true,"dynamic":true}],"dyn_out":[{"name":"float","dt":0,"uid":"7","index":0,"type":1,"dynamic":true}]},{"plugin":"slider_float_generator","x":174,"y":203,"uid":"jaYxdScv3Ygd","state":{"val":0.42,"min":0,"max":1},"title":"speed"},{"plugin":"const_float_generator","x":173,"y":267,"uid":"67ltgtWGEyVk","state":{"val":0},"title":"Min"},{"plugin":"const_float_generator","x":261,"y":267,"uid":"gdfjV5IqopSg","state":{"val":1},"title":"Max"}],"conns":[{"src_nuid":"jaYxdScv3Ygd","dst_nuid":"oW4pZr1uXRho","src_slot":"value","dst_slot":0,"uid":"vlFnm1jEmPQv","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"67ltgtWGEyVk","dst_nuid":"oW4pZr1uXRho","src_slot":"value","dst_slot":1,"uid":"lRdQS64drRow","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"gdfjV5IqopSg","dst_nuid":"oW4pZr1uXRho","src_slot":"value","dst_slot":2,"uid":"N8707bu62Zrv","src_connected":true,"dst_connected":true,"dst_dyn":true}]}} ================================================ FILE: browser/patches/_stopwatch.json ================================================ {"abs_t":0,"active_graph":"root","graph_uid":"TXDgBc0JJtS3","root":{"uid":"root","parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":757,"y":333,"uid":"EzXhcnCVVJ8W","state":{"always_update":true,"input_sids":{"3geRrS9uymYk":"0","T65JNQCdNYKY":"2"},"output_sids":{"8RWgadMmrbve":"3"}},"title":"Stopwatch","graph":{"uid":"yKFxYDKWHPW2","parent_uid":"root","open":true,"nodes":[{"plugin":"delta_t_generator","x":878,"y":221,"uid":"x9AnLEmJCuCr"},{"plugin":"add_modulator","x":1028,"y":221,"uid":"sSkD6jxzqhLF"},{"plugin":"variable_local_read","x":44,"y":394,"uid":"Nf3VDzw4VNkM","title":"time","dyn_out":[{"name":"value","dt":0,"uid":"0","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"variable_local_write","x":1566,"y":201,"uid":"PMLMmwmPPFwm","title":"time","dyn_in":[{"name":"value","dt":0,"uid":"0","index":0,"type":0,"is_connected":true,"dynamic":true}]},{"plugin":"if_else_modulator","x":1267,"y":212,"uid":"yT9W6VAtvaUz"},{"plugin":"const_float_generator","x":316,"y":505,"uid":"8CCAwhe84rH5","state":{"val":0}},{"plugin":"variable_local_write","x":737,"y":454,"uid":"hTjWBxps6xnu","title":"time","dyn_in":[{"name":"value","dt":0,"uid":"0","index":0,"type":0,"is_connected":true,"dynamic":true}]},{"plugin":"const_float_generator","x":349,"y":189,"uid":"gScZS37YD3aZ","state":{"val":1}},{"plugin":"equals_modulator","x":1030,"y":98,"uid":"ycJVQydnfzCW"},{"plugin":"input_proxy","x":369,"y":40,"uid":"3geRrS9uymYk","title":"running","dyn_out":[{"name":"input","dt":7,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"input_proxy","x":376,"y":409,"uid":"T65JNQCdNYKY","title":"reset","dyn_out":[{"name":"input","dt":7,"uid":"0","index":0,"type":1,"connected":true,"dynamic":true,"is_connected":true}]},{"plugin":"output_proxy","x":1548,"y":434,"uid":"8RWgadMmrbve","title":"time","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"0","index":0,"type":0,"connected":true,"is_connected":true,"dynamic":true}]},{"plugin":"if_else_modulator","x":522,"y":418,"uid":"dwdf4ntgzJjJ"},{"plugin":"convert_float_bool_modulator","x":644,"y":165,"uid":"b7gUWYHWxQqN"}],"conns":[{"src_nuid":"x9AnLEmJCuCr","dst_nuid":"sSkD6jxzqhLF","src_slot":"seconds","dst_slot":"a","uid":"Sjc3guuNGuz4","src_connected":true,"dst_connected":true},{"src_nuid":"Nf3VDzw4VNkM","dst_nuid":"sSkD6jxzqhLF","src_slot":0,"dst_slot":"b","uid":"fdYGxJWfhyt2","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"sSkD6jxzqhLF","dst_nuid":"yT9W6VAtvaUz","src_slot":"result","dst_slot":"true value","uid":"8kLujTUeVZEv","src_connected":true,"dst_connected":true,"offset":1},{"src_nuid":"Nf3VDzw4VNkM","dst_nuid":"yT9W6VAtvaUz","src_slot":0,"dst_slot":"false value","uid":"Kq3S83dywJaC","src_connected":true,"dst_connected":true,"src_dyn":true,"offset":1},{"src_nuid":"yT9W6VAtvaUz","dst_nuid":"PMLMmwmPPFwm","src_slot":"value","dst_slot":0,"uid":"bC4rN6QBdkmX","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"ycJVQydnfzCW","dst_nuid":"yT9W6VAtvaUz","src_slot":"bool","dst_slot":"condition","uid":"6wRUMfJVwJtg","src_connected":true,"dst_connected":true},{"src_nuid":"yT9W6VAtvaUz","dst_nuid":"8RWgadMmrbve","src_slot":"value","dst_slot":0,"uid":"XbkxqqvLcUTk","src_connected":true,"dst_connected":true,"dst_dyn":true,"offset":2},{"src_nuid":"T65JNQCdNYKY","dst_nuid":"dwdf4ntgzJjJ","src_slot":0,"dst_slot":"condition","uid":"m3tKLC8PM7rT","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"8CCAwhe84rH5","dst_nuid":"dwdf4ntgzJjJ","src_slot":"value","dst_slot":"true value","uid":"VtG6KCeScHp4","src_connected":true,"dst_connected":true},{"src_nuid":"dwdf4ntgzJjJ","dst_nuid":"hTjWBxps6xnu","src_slot":"value","dst_slot":0,"uid":"uHhJ2222U7Q6","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"Nf3VDzw4VNkM","dst_nuid":"dwdf4ntgzJjJ","src_slot":0,"dst_slot":"false value","uid":"NfrkTn83Us8B","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"gScZS37YD3aZ","dst_nuid":"b7gUWYHWxQqN","src_slot":"value","dst_slot":"value","uid":"WxFhkG4D4CD2","src_connected":true,"dst_connected":true},{"src_nuid":"3geRrS9uymYk","dst_nuid":"ycJVQydnfzCW","src_slot":0,"dst_slot":"value","uid":"TmPyQrqLPPmy","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"b7gUWYHWxQqN","dst_nuid":"ycJVQydnfzCW","src_slot":"bool","dst_slot":"reference","uid":"MLHWxSn9LQgw","src_connected":true,"dst_connected":true}],"variables":[{"id":"time","dt":0}]},"dyn_in":[{"name":"running","dt":7,"uid":"0","index":0,"type":0,"is_connected":true,"dynamic":true},{"name":"reset","dt":7,"uid":"2","index":1,"type":0,"is_connected":true,"dynamic":true}],"dyn_out":[{"name":"time","dt":0,"uid":"3","index":0,"type":1,"dynamic":true,"is_connected":true}]},{"plugin":"action_button","x":511,"y":392,"uid":"VZCJrby9zGaf","title":"Reset"},{"plugin":"float_display","x":1004,"y":343,"uid":"peebMd9yEwXs"},{"plugin":"toggle_button","x":511,"y":306,"uid":"QDuNMCYzzwUs","state":{"enabled":false},"title":"Running"}],"conns":[{"src_nuid":"VZCJrby9zGaf","dst_nuid":"EzXhcnCVVJ8W","src_slot":"bool","dst_slot":1,"uid":"YCB56372hckx","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"EzXhcnCVVJ8W","dst_nuid":"peebMd9yEwXs","src_slot":0,"dst_slot":"float","uid":"dfCXbVXWW72r","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"QDuNMCYzzwUs","dst_nuid":"EzXhcnCVVJ8W","src_slot":"bool","dst_slot":0,"uid":"UzVce3nrD68r","src_connected":true,"dst_connected":true,"dst_dyn":true}]}} ================================================ FILE: browser/patches/_template-360-photo.json ================================================ { "abs_t":68.879, "active_graph":"root", "graph_uid":"TXDgBc0JJtS3", "root":{ "uid":"root", "parent_uid":-1, "open":true, "nodes":[ { "plugin":"three_scene", "x":875, "y":273, "uid":"u2O8M5ItNlW5", "dyn_in":[ { "type":0, "name":"0", "dt":21, "array":true, "uid":"DDzcOXqI6iRM", "dynamic":true, "index":0, "is_connected":true }, { "type":0, "name":"1", "dt":21, "array":true, "uid":"wVKKVFGKaWE8", "dynamic":true, "index":1 } ] }, { "plugin":"entity", "x":582, "y":272, "uid":"jKZUsNTh9S9j", "state":{ "always_update":true, "input_sids":{ "XpAk3k4R62fA":"lOz0fKTfMesH", "vYWHQzbKwNRK":"C82r5UcvHc5s", "jvdEMGcajAge":"85fwdKUVE96S" }, "output_sids":{ "FFHBWxJ4VSaE":"mh0rTKkFm0nD" } }, "title":"360 photo", "graph":{ "uid":"rnVdPCs2aRSb", "parent_uid":"root", "open":true, "nodes":[ { "plugin":"three_mesh", "x":886, "y":6, "uid":"VhKFCJfXjqaU", "state":{ "position":{ "x":0, "y":0, "z":0 }, "scale":{ "x":1, "y":1, "z":1 }, "quaternion":{ "_x":0, "_y":0, "_z":0, "_w":1 } } }, { "plugin":"output_proxy", "x":1052, "y":6, "uid":"FFHBWxJ4VSaE", "title":"object3d", "dyn_in":[ { "name":"output", "dt":21, "def":null, "uid":"bEdPpC9C6Rh1", "dynamic":true, "type":0, "index":0, "is_connected":true, "connected":true } ] }, { "plugin":"three_material", "x":664, "y":292, "uid":"JnhkETZKajQH", "state":{ } }, { "plugin":"const_float_generator", "x":537, "y":540, "uid":"J63sW4pqkQrw", "state":{ "val":1 }, "title":"Side" }, { "plugin":"three_uv_modifier", "x":491, "y":323, "uid":"73cbjNNMQ73q", "state":{ } }, { "plugin":"const_float_generator", "x":305, "y":436, "uid":"VCsmtxjNxvXH", "state":{ "val":-1 }, "title":"X repeat photo" }, { "plugin":"input_proxy", "x":362, "y":355, "uid":"XpAk3k4R62fA", "title":"texture", "dyn_out":[ { "name":"input", "dt":2, "uid":"q2TtZnBOutlf", "dynamic":true, "type":1, "index":0, "is_connected":true, "connected":true } ] }, { "plugin":"three_geometry_sphere", "x":680, "y":65, "uid":"jPJLNJY4qCBN" }, { "plugin":"input_proxy", "x":439, "y":49, "uid":"vYWHQzbKwNRK", "title":"Radius", "dyn_out":[ { "name":"input", "dt":0, "uid":"XMTdkuGQgC8b", "dynamic":true, "type":1, "index":0, "is_connected":true, "connected":true } ] }, { "plugin":"input_proxy", "x":349, "y":272, "uid":"jvdEMGcajAge", "title":"WidthHeightSegments", "dyn_out":[ { "name":"input", "dt":0, "uid":"yVNBBweKKPV5", "dynamic":true, "type":1, "index":0, "is_connected":true, "connected":true } ] } ], "conns":[ { "src_nuid":"VhKFCJfXjqaU", "dst_nuid":"FFHBWxJ4VSaE", "src_slot":"object3d", "dst_slot":0, "uid":"HnzeJVCC965y", "dst_dyn":true }, { "src_nuid":"JnhkETZKajQH", "dst_nuid":"VhKFCJfXjqaU", "src_slot":"material", "dst_slot":"material", "uid":"Lj3GwVEAuH8a" }, { "src_nuid":"J63sW4pqkQrw", "dst_nuid":"JnhkETZKajQH", "src_slot":"value", "dst_slot":"side", "uid":"rVa5L7dNyBB4" }, { "src_nuid":"73cbjNNMQ73q", "dst_nuid":"JnhkETZKajQH", "src_slot":"texture", "dst_slot":"texture", "uid":"wfYbSNwUSgN5" }, { "src_nuid":"VCsmtxjNxvXH", "dst_nuid":"73cbjNNMQ73q", "src_slot":"value", "dst_slot":"u repeat", "uid":"FWYvbPqmzXeR" }, { "src_nuid":"XpAk3k4R62fA", "dst_nuid":"73cbjNNMQ73q", "src_slot":0, "dst_slot":"texture", "uid":"JYKaxYtPhqta", "src_dyn":true }, { "src_nuid":"jPJLNJY4qCBN", "dst_nuid":"VhKFCJfXjqaU", "src_slot":"geometry", "dst_slot":"geometry", "uid":"bFcr4TAYFY7v" }, { "src_nuid":"vYWHQzbKwNRK", "dst_nuid":"jPJLNJY4qCBN", "src_slot":0, "dst_slot":"radius", "uid":"vs96guR4JGsu", "src_dyn":true }, { "src_nuid":"jvdEMGcajAge", "dst_nuid":"jPJLNJY4qCBN", "src_slot":0, "dst_slot":"widthSegments", "uid":"cDzZ8nvsstM8", "src_dyn":true }, { "src_nuid":"jvdEMGcajAge", "dst_nuid":"jPJLNJY4qCBN", "src_slot":0, "dst_slot":"heightSegments", "uid":"kaV3Bex2psqH", "src_dyn":true } ] }, "dyn_in":[ { "name":"WidthHeightSegments", "dt":0, "index":0, "uid":"85fwdKUVE96S", "dynamic":true, "type":0, "is_connected":true }, { "name":"Radius", "dt":0, "index":1, "uid":"C82r5UcvHc5s", "dynamic":true, "type":0, "is_connected":true }, { "name":"texture", "dt":2, "index":2, "uid":"lOz0fKTfMesH", "dynamic":true, "type":0, "is_connected":true } ], "dyn_out":[ { "name":"object3d", "dt":21, "index":0, "uid":"mh0rTKkFm0nD", "dynamic":true, "type":1, "is_connected":true } ] }, { "plugin":"url_texture_generator", "x":356, "y":359, "uid":"rbQzUJdSh2SH", "state":{ "url":"/data/image/32046a219d7cb0c4a7b3d46f0b16ee9a77791192.png", "urllow":null } }, { "plugin":"three_webgl_renderer", "x":1023, "y":214, "uid":"4Ykc8DAqcWkX", "state":{ "always_update":true } }, { "plugin":"three_vr_camera", "x":580, "y":40, "uid":"axWAU7nYy2U5", "state":{ "position":{ "x":-8.581592317734266, "y":0.480221928841524, "z":1.0609713432811405 }, "quaternion":{ "_x":-0.02078093965682079, "_y":-0.6620520642378454, "_z":-0.018369939975076563, "_w":0.7489444313010309 } } }, { "plugin":"const_float_generator", "x":351, "y":126, "uid":"VGKXeVCXzhnn", "state":{ "val":90 }, "title":"Field of Vision (FOV)" }, { "plugin":"const_float_generator", "x":427, "y":280, "uid":"eQRDr5KWW2JH", "state":{ "val":60 }, "title":"Radius" }, { "plugin":"const_float_generator", "x":329, "y":203, "uid":"hEcmuVCUgCZc", "state":{ "val":32 }, "title":"width+HeightSegments" } ], "conns":[ { "src_nuid":"rbQzUJdSh2SH", "dst_nuid":"jKZUsNTh9S9j", "src_slot":"texture", "dst_slot":2, "uid":"r63GBtbuan9H", "dst_dyn":true }, { "src_nuid":"jKZUsNTh9S9j", "dst_nuid":"u2O8M5ItNlW5", "src_slot":0, "dst_slot":0, "uid":"BLwXFTSmyxxc", "src_dyn":true, "dst_dyn":true }, { "src_nuid":"u2O8M5ItNlW5", "dst_nuid":"4Ykc8DAqcWkX", "src_slot":"scene", "dst_slot":"scene", "uid":"wVQMEJW2WPSJ" }, { "src_nuid":"axWAU7nYy2U5", "dst_nuid":"4Ykc8DAqcWkX", "src_slot":"camera", "dst_slot":"camera", "uid":"NV36fgyw9nXt" }, { "src_nuid":"VGKXeVCXzhnn", "dst_nuid":"axWAU7nYy2U5", "src_slot":"value", "dst_slot":"fov", "uid":"yZ8uzuct4yRq" }, { "src_nuid":"eQRDr5KWW2JH", "dst_nuid":"jKZUsNTh9S9j", "src_slot":"value", "dst_slot":1, "uid":"nVEfmNPQMBXS", "dst_dyn":true }, { "src_nuid":"hEcmuVCUgCZc", "dst_nuid":"jKZUsNTh9S9j", "src_slot":"value", "dst_slot":0, "uid":"xWWfByRw4Am9", "dst_dyn":true } ] } } ================================================ FILE: browser/patches/_template-basic-vr-scene.json ================================================ { "abs_t": 399.458, "active_graph": "root", "graph_uid": "TXDgBc0JJtS3", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 488, "y": 427, "uid": "MbhZTaM4pnmJ", "open": false, "state": { "always_update": true, "input_sids": {}, "output_sids": { "G9kmmAFUggLr": "Ys30r7aVEks1" } }, "title": "3D model", "graph": { "uid": "WB55EhbvQ4Tt", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_loader_model", "x": 321, "y": 234, "uid": "CCzJgvWPTSqT", "state": { "url": "/data/scene/flamingo/flamingo.js" } }, { "plugin": "three_mesh", "x": 687, "y": 203, "uid": "kF59HVNEZLeF", "open": false, "state": { "position": { "x": 0, "y": 0.890837835382039, "z": -1.9377822548397918 }, "scale": { "x": 0.0094948370835134, "y": 0.0094948370835134, "z": 0.0094948370835134 }, "quaternion": { "_x": 0, "_y": 0, "_z": 0, "_w": 1 } } }, { "plugin": "output_proxy", "x": 883, "y": 205, "uid": "G9kmmAFUggLr", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "UW8xhKSPhTFp", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] } ], "conns": [ { "src_nuid": "CCzJgvWPTSqT", "dst_nuid": "kF59HVNEZLeF", "src_slot": 0, "dst_slot": 1, "uid": "dtMPVWE7GQNT", "src_connected": true, "dst_connected": true }, { "src_nuid": "kF59HVNEZLeF", "dst_nuid": "G9kmmAFUggLr", "src_slot": 0, "dst_slot": 0, "uid": "B2FsJEL4CRqM", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "CCzJgvWPTSqT", "dst_nuid": "kF59HVNEZLeF", "src_slot": 1, "dst_slot": 2, "uid": "LP6EG4LbWhT4", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "Ys30r7aVEks1", "dynamic": true, "type": 1, "is_connected": true } ] }, { "plugin": "three_scene", "x": 832, "y": 327, "uid": "LeLkkRZThkyY", "dyn_in": [ { "type": 0, "name": "0", "dt": 21, "array": true, "uid": "DDzcOXqI6iRM", "dynamic": true, "index": 0, "is_connected": true }, { "type": 0, "name": "1", "dt": 21, "array": true, "uid": "gH5pmBKZK4lm", "dynamic": true, "index": 1, "is_connected": true }, { "type": 0, "name": "2", "dt": 21, "array": true, "uid": "ExPIjji5rvFO", "dynamic": true, "index": 2, "is_connected": true }, { "type": 0, "name": "3", "dt": 21, "array": true, "uid": "hddJID3FkB4R", "dynamic": true, "index": 3, "is_connected": true }, { "type": 0, "name": "4", "dt": 21, "array": true, "uid": "uSr941HZ6MvG", "dynamic": true, "index": 4, "is_connected": true }, { "type": 0, "name": "5", "dt": 21, "array": true, "uid": "VyYhKANCjM3v", "dynamic": true, "index": 5 } ] }, { "plugin": "graph", "x": 544, "y": 274, "uid": "HCha6a7ZxQNk", "open": false, "state": { "always_update": true, "input_sids": {}, "output_sids": { "SfXESqZsurhe": "tjoeHNDBhUcN" } }, "title": "Environment settings", "graph": { "uid": "rfMLxRJcfeHU", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_environment_settings", "x": 572, "y": 469, "uid": "EAWutZHNesxD", "title": "Environment settings" }, { "plugin": "output_proxy", "x": 980, "y": 512, "uid": "SfXESqZsurhe", "title": "environment", "dyn_in": [ { "name": "output", "dt": 23, "def": null, "uid": "Yy89wKzOcZo4", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "color_picker", "x": 216, "y": 254, "uid": "tGMdwhTdzqKe", "state": { "hue": 0.4438202247191011, "sat": 0.449438202247191, "lum": 0.7916666666666666 } }, { "plugin": "slider_float_generator", "x": 168, "y": 565, "uid": "yRs52j5CBJJq", "open": false, "state": { "val": 5.287, "min": 0.1, "max": 40 }, "title": "Fog near" }, { "plugin": "slider_float_generator", "x": 168, "y": 689, "uid": "nHEyfyj926rV", "open": false, "state": { "val": 18.706, "min": 1, "max": 40 }, "title": "Fog far" } ], "conns": [ { "src_nuid": "EAWutZHNesxD", "dst_nuid": "SfXESqZsurhe", "src_slot": 0, "dst_slot": 0, "uid": "Aj5fSgAkpzts", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "tGMdwhTdzqKe", "dst_nuid": "EAWutZHNesxD", "src_slot": 0, "dst_slot": 0, "uid": "cPNw6cWcVhZN", "src_connected": true, "dst_connected": true }, { "src_nuid": "yRs52j5CBJJq", "dst_nuid": "EAWutZHNesxD", "src_slot": 0, "dst_slot": 1, "uid": "cGAQjstKBawg", "src_connected": true, "dst_connected": true }, { "src_nuid": "nHEyfyj926rV", "dst_nuid": "EAWutZHNesxD", "src_slot": 0, "dst_slot": 2, "uid": "dAE6sBbYAp4B", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "environment", "dt": 23, "index": 0, "uid": "tjoeHNDBhUcN", "dynamic": true, "type": 1, "is_connected": true } ] }, { "plugin": "graph", "x": 520, "y": 326, "uid": "qWtKy9tqj6aU", "open": false, "state": { "always_update": true, "input_sids": {}, "output_sids": { "WdGHEpFW86bz": "547odbJKrTzG" } }, "title": "Point light 1", "graph": { "uid": "auhShGZLzNLP", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "output_proxy", "x": 1012, "y": 374, "uid": "WdGHEpFW86bz", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "vSy6Gj4JSPYs", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "three_point_light", "x": 730, "y": 371, "uid": "YWcJAfKzKMr7", "open": false, "state": { "position": { "x": -2.9420035670141815, "y": 1.3598567240571549, "z": 0 }, "scale": { "x": 1, "y": 1, "z": 1 }, "quaternion": { "_x": 0, "_y": 0, "_z": 0, "_w": 1 } } }, { "plugin": "const_float_generator", "x": 304, "y": 295, "uid": "NP2zfaHzg34S", "state": { "val": 1 }, "title": "Intensity" }, { "plugin": "color_picker", "x": 276, "y": 449, "uid": "Kw8esRt3uMnz", "state": { "hue": 0, "sat": 0, "lum": 1 } } ], "conns": [ { "src_nuid": "YWcJAfKzKMr7", "dst_nuid": "WdGHEpFW86bz", "src_slot": 0, "dst_slot": 0, "uid": "2hQmYsecbc3C", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "NP2zfaHzg34S", "dst_nuid": "YWcJAfKzKMr7", "src_slot": 0, "dst_slot": 0, "uid": "PzbJADq9FMtx", "src_connected": true, "dst_connected": true }, { "src_nuid": "Kw8esRt3uMnz", "dst_nuid": "YWcJAfKzKMr7", "src_slot": 0, "dst_slot": 3, "uid": "Nn4CsL6mZpQz", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "547odbJKrTzG", "dynamic": true, "type": 1, "is_connected": true } ] }, { "plugin": "graph", "x": 516, "y": 487, "uid": "kSFjjcYBtZtS", "open": false, "state": { "always_update": true, "input_sids": {}, "output_sids": { "3h5VMGVy55gj": "mh0rTKkFm0nD" } }, "title": "Floor", "graph": { "uid": "pfL9PkSq8NvE", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_mesh", "x": 936, "y": 221, "uid": "5bkrwERQjezL", "open": false, "state": { "position": { "x": 0, "y": -0.019391319112426565, "z": 0.000034513545685641685 }, "scale": { "x": 16.260185647641777, "y": 16.260185647641777, "z": 16.260185647641777 }, "quaternion": { "_x": -0.7077357707678449, "_y": 0, "_z": 0, "_w": 0.7064772456816478 } } }, { "plugin": "output_proxy", "x": 1105, "y": 223, "uid": "3h5VMGVy55gj", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "bEdPpC9C6Rh1", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "url_texture_generator", "x": 153, "y": 180, "uid": "5zZXRndQkE4p", "state": { "url": "/data/image/3968db2bdad274fc19d8283eb73c4691b14ac0b1.png" }, "title": "Box texture" }, { "plugin": "three_material_phong", "x": 665, "y": 280, "uid": "qcXuY5BkBUMz", "open": false }, { "plugin": "three_geometry_plane", "x": 751, "y": 172, "uid": "QvnMFKfBBV5R", "open": false }, { "plugin": "three_uv_modifier", "x": 459, "y": 279, "uid": "jHXhHywddqUL", "open": false }, { "plugin": "const_float_generator", "x": 215, "y": 386, "uid": "P69E3GZq5Sgz", "state": { "val": 40 }, "title": "Repeat" } ], "conns": [ { "src_nuid": "5bkrwERQjezL", "dst_nuid": "3h5VMGVy55gj", "src_slot": 0, "dst_slot": 0, "uid": "ukd6QKC4HbhE", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "qcXuY5BkBUMz", "dst_nuid": "5bkrwERQjezL", "src_slot": 0, "dst_slot": 2, "uid": "gSgGLGaLauMf", "src_connected": true, "dst_connected": true }, { "src_nuid": "QvnMFKfBBV5R", "dst_nuid": "5bkrwERQjezL", "src_slot": 0, "dst_slot": 1, "uid": "3CUEjQ9T5kde", "src_connected": true, "dst_connected": true }, { "src_nuid": "5zZXRndQkE4p", "dst_nuid": "jHXhHywddqUL", "src_slot": 0, "dst_slot": 0, "uid": "jDTq3YtPKq8G", "src_connected": true, "dst_connected": true }, { "src_nuid": "jHXhHywddqUL", "dst_nuid": "qcXuY5BkBUMz", "src_slot": 0, "dst_slot": 0, "uid": "pparXYdYfKzj", "src_connected": true, "dst_connected": true }, { "src_nuid": "P69E3GZq5Sgz", "dst_nuid": "jHXhHywddqUL", "src_slot": 0, "dst_slot": 3, "uid": "bubHv9MAEmtz", "src_connected": true, "dst_connected": true }, { "src_nuid": "P69E3GZq5Sgz", "dst_nuid": "jHXhHywddqUL", "src_slot": 0, "dst_slot": 4, "uid": "5TutRQMMkztm", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "mh0rTKkFm0nD", "dynamic": true, "type": 1, "is_connected": true } ] }, { "plugin": "graph", "x": 535, "y": 546, "uid": "B2NQHZKfBYzV", "open": false, "state": { "always_update": true, "input_sids": {}, "output_sids": { "A6vvXLq5uXNj": "mh0rTKkFm0nD" } }, "title": "Sky sphere", "graph": { "uid": "GGT5ah87tcRz", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_mesh", "x": 967, "y": 294, "uid": "fhh5QJMSC7rU", "open": false, "state": { "position": { "x": 0, "y": 0, "z": 0 }, "scale": { "x": 1, "y": 1, "z": 1 }, "quaternion": { "_x": 0, "_y": 0, "_z": 0, "_w": 1 } } }, { "plugin": "output_proxy", "x": 1166, "y": 295, "uid": "A6vvXLq5uXNj", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "bEdPpC9C6Rh1", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "url_texture_generator", "x": 194, "y": 63, "uid": "MtYbUTP9FKk6", "state": { "url": "/data/image/7cbc45195c04d1595c43be42418755520068c72e.png" }, "title": "Texture" }, { "plugin": "three_material", "x": 656, "y": 156, "uid": "yW97qMFvWVQY", "open": false }, { "plugin": "const_float_generator", "x": 470, "y": 234, "uid": "k5LMrWjKyXJ9", "open": false, "state": { "val": 1 }, "title": "Side" }, { "plugin": "toggle_button", "x": 431, "y": 172, "uid": "ue5RBj5Pmy4V", "open": false, "state": { "enabled": false }, "title": "Fog On/Off" }, { "plugin": "const_float_generator", "x": 356, "y": 372, "uid": "RtZ9H7mcXVwe", "open": false, "state": { "val": 40 }, "title": "Size" }, { "plugin": "const_float_generator", "x": 356, "y": 438, "uid": "bkeTdDZLhmrr", "open": false, "state": { "val": 40 }, "title": "Detail" }, { "plugin": "three_geometry_sphere", "x": 558, "y": 402, "uid": "nAVgSyUe3kqC", "open": false } ], "conns": [ { "src_nuid": "fhh5QJMSC7rU", "dst_nuid": "A6vvXLq5uXNj", "src_slot": 0, "dst_slot": 0, "uid": "9RkAY8hY6SB3", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "MtYbUTP9FKk6", "dst_nuid": "yW97qMFvWVQY", "src_slot": 0, "dst_slot": 0, "uid": "puVS76wwdHnP", "src_connected": true, "dst_connected": true }, { "src_nuid": "yW97qMFvWVQY", "dst_nuid": "fhh5QJMSC7rU", "src_slot": 0, "dst_slot": 2, "uid": "YguujvzsATPb", "src_connected": true, "dst_connected": true }, { "src_nuid": "k5LMrWjKyXJ9", "dst_nuid": "yW97qMFvWVQY", "src_slot": 0, "dst_slot": 8, "uid": "MYZbDQfBgLQR", "src_connected": true, "dst_connected": true }, { "src_nuid": "ue5RBj5Pmy4V", "dst_nuid": "yW97qMFvWVQY", "src_slot": 0, "dst_slot": 3, "uid": "pdNP54rvEZRx", "src_connected": true, "dst_connected": true }, { "src_nuid": "RtZ9H7mcXVwe", "dst_nuid": "nAVgSyUe3kqC", "src_slot": 0, "dst_slot": 0, "uid": "NB2RhZmrc44D", "src_connected": true, "dst_connected": true }, { "src_nuid": "bkeTdDZLhmrr", "dst_nuid": "nAVgSyUe3kqC", "src_slot": 0, "dst_slot": 1, "uid": "bMb3QTGfpApU", "src_connected": true, "dst_connected": true }, { "src_nuid": "bkeTdDZLhmrr", "dst_nuid": "nAVgSyUe3kqC", "src_slot": 0, "dst_slot": 2, "uid": "CdfWXA8xjgtD", "src_connected": true, "dst_connected": true }, { "src_nuid": "nAVgSyUe3kqC", "dst_nuid": "fhh5QJMSC7rU", "src_slot": 0, "dst_slot": 1, "uid": "hwwpGaQrXkby", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "mh0rTKkFm0nD", "dynamic": true, "type": 1, "is_connected": true } ] }, { "plugin": "graph", "x": 1184, "y": 428, "uid": "8u9pzzySmqs9", "open": false, "state": { "always_update": true, "input_sids": { "WUPf4ZdTWrM2": "lbU7hDvbnKfg" }, "output_sids": {} }, "title": "Render Camera", "graph": { "uid": "uq87wSCZFF49", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "input_proxy", "x": 576, "y": 363, "uid": "WUPf4ZdTWrM2", "title": "scene", "dyn_out": [ { "name": "input", "dt": 11, "uid": "uGHXM4cdeVb3", "dynamic": true, "type": 1, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "three_webgl_renderer", "x": 829, "y": 234, "uid": "nU8Mjdz8wsuC", "state": { "always_update": true } }, { "plugin": "graph", "x": 538, "y": 163, "uid": "YY6qvEMcKEy7", "state": { "always_update": true, "input_sids": {}, "output_sids": { "J7kWLNKeQYTF": "8GpdZjiiiEQa" } }, "title": "VR camera", "graph": { "uid": "gdmWHJyAUjUs", "parent_uid": "uq87wSCZFF49", "open": true, "nodes": [ { "plugin": "three_vr_camera", "x": 966, "y": 211, "uid": "bHk2s9znyKDj", "open": false, "state": { "position": { "x": 0, "y": 0.6160169417120982, "z": 0 }, "quaternion": { "_x": 0, "_y": 0, "_z": 0, "_w": 1 } } }, { "plugin": "output_proxy", "x": 1217, "y": 212, "uid": "J7kWLNKeQYTF", "title": "camera", "dyn_in": [ { "name": "output", "dt": 6, "def": null, "uid": "uyyGR7LQwSEh", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] } ], "conns": [ { "src_nuid": "bHk2s9znyKDj", "dst_nuid": "J7kWLNKeQYTF", "src_slot": 0, "dst_slot": 0, "uid": "MvjmFqTFWUGX", "src_connected": true, "dst_connected": true, "dst_dyn": true } ] }, "dyn_out": [ { "name": "camera", "dt": 6, "index": 0, "uid": "8GpdZjiiiEQa", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [ { "src_nuid": "YY6qvEMcKEy7", "dst_nuid": "nU8Mjdz8wsuC", "src_slot": 0, "dst_slot": 0, "uid": "Hfu2pJHRkkEU", "src_connected": true, "dst_connected": true, "src_dyn": true }, { "src_nuid": "WUPf4ZdTWrM2", "dst_nuid": "nU8Mjdz8wsuC", "src_slot": 0, "dst_slot": 1, "uid": "3acCKxS6BpsP", "src_connected": true, "dst_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "scene", "dt": 11, "index": 0, "uid": "lbU7hDvbnKfg", "dynamic": true, "type": 0, "is_connected": true } ] }, { "plugin": "graph", "x": 496, "y": 379, "uid": "F89kVwQxhdMg", "open": false, "state": { "always_update": true, "input_sids": {}, "output_sids": { "fkNnJXdrsR4y": "547odbJKrTzG" } }, "title": "Point light 2", "graph": { "uid": "KNHNWQ9mjP5f", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "output_proxy", "x": 1012, "y": 374, "uid": "fkNnJXdrsR4y", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "vSy6Gj4JSPYs", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "three_point_light", "x": 730, "y": 371, "uid": "e9y4kNK9bSSz", "open": false, "state": { "position": { "x": 2.9928296822160516, "y": 1.034341986571219, "z": 0 }, "scale": { "x": 1, "y": 1, "z": 1 }, "quaternion": { "_x": 0, "_y": 0, "_z": 0, "_w": 1 } } }, { "plugin": "const_float_generator", "x": 304, "y": 295, "uid": "pTrwFwWgsHbB", "state": { "val": 1 }, "title": "Intensity" }, { "plugin": "color_picker", "x": 276, "y": 449, "uid": "QTgvTPs8aTkm", "state": { "hue": 0, "sat": 0, "lum": 1 } } ], "conns": [ { "src_nuid": "e9y4kNK9bSSz", "dst_nuid": "fkNnJXdrsR4y", "src_slot": 0, "dst_slot": 0, "uid": "hJeuJUBYqKdW", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "pTrwFwWgsHbB", "dst_nuid": "e9y4kNK9bSSz", "src_slot": 0, "dst_slot": 0, "uid": "vpxXUtFHVBwy", "src_connected": true, "dst_connected": true }, { "src_nuid": "QTgvTPs8aTkm", "dst_nuid": "e9y4kNK9bSSz", "src_slot": 0, "dst_slot": 3, "uid": "x8kFnscnRmmm", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "547odbJKrTzG", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [ { "src_nuid": "HCha6a7ZxQNk", "dst_nuid": "LeLkkRZThkyY", "src_slot": 0, "dst_slot": 0, "uid": "jYKWy6AtRTEx", "src_connected": true, "dst_connected": true, "src_dyn": true }, { "src_nuid": "qWtKy9tqj6aU", "dst_nuid": "LeLkkRZThkyY", "src_slot": 0, "dst_slot": 0, "uid": "ssrqX44Esvtz", "src_connected": true, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": "LeLkkRZThkyY", "dst_nuid": "8u9pzzySmqs9", "src_slot": 0, "dst_slot": 0, "uid": "3QkDhkydNXtp", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "B2NQHZKfBYzV", "dst_nuid": "LeLkkRZThkyY", "src_slot": 0, "dst_slot": 4, "uid": "DG96RhpxDuGM", "src_connected": true, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": "kSFjjcYBtZtS", "dst_nuid": "LeLkkRZThkyY", "src_slot": 0, "dst_slot": 3, "uid": "PmPgQucV7VAt", "src_connected": true, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": "MbhZTaM4pnmJ", "dst_nuid": "LeLkkRZThkyY", "src_slot": 0, "dst_slot": 2, "uid": "BFSRhwY8RqFn", "src_connected": true, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": "F89kVwQxhdMg", "dst_nuid": "LeLkkRZThkyY", "src_slot": 0, "dst_slot": 1, "uid": "6WAW7CHf97Sx", "src_connected": true, "dst_connected": true, "src_dyn": true, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/_template-minimal-vr-scene.json ================================================ { "abs_t": 37.174, "active_graph": "root", "graph_uid": "TXDgBc0JJtS3", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 353, "y": 502, "uid": "2KEMeIH7wL7S", "state": { "always_update": true, "input_sids": {}, "output_sids": { "XFfBtKfcMuh6": "Ys30r7aVEks1" } }, "title": "3D model", "graph": { "uid": "3mI50zrJx2Bq", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_loader_model", "x": 155, "y": 112, "uid": "mUlYt365qrRS", "state": { "url": "/data/scene/flamingo/flamingo.js" } }, { "plugin": "three_mesh", "x": 886, "y": 217, "uid": "N8xLOvJsutOD" }, { "plugin": "output_proxy", "x": 1104, "y": 160, "uid": "XFfBtKfcMuh6", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "UW8xhKSPhTFp", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "graph", "x": 144, "y": 312, "uid": "oc5YGXTa2w1n", "state": { "always_update": true, "input_sids": {}, "output_sids": { "6nIheFD7R8w3": "xnmIRUOwsegz", "Jk1nTcdt9rzv": "ejxO7eIJpw4m", "3aklgN3mA1p4": "H3AwGhvcvewD" } }, "title": "Position, Rotation, Scale", "graph": { "uid": "9RKAHE4i2ldC", "parent_uid": "3mI50zrJx2Bq", "open": true, "nodes": [ { "plugin": "slider_float_generator", "x": 82, "y": 105, "uid": "nke9JEXzMAEz", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Position X" }, { "plugin": "slider_float_generator", "x": 83, "y": 172, "uid": "goB5PYf2hiVF", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Position Y" }, { "plugin": "slider_float_generator", "x": 81, "y": 238, "uid": "JPEAxPKL1qgp", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Position Z" }, { "plugin": "vector", "x": 585, "y": 200, "uid": "3dyLkxgVOEA0", "open": false, "title": "Position" }, { "plugin": "vector", "x": 290, "y": 610, "uid": "HeclFuuUNCpM", "title": "Scale" }, { "plugin": "vector", "x": 581, "y": 413, "uid": "7HOHqXOxSBXS", "open": false, "title": "Rotation" }, { "plugin": "const_float_generator", "x": 113, "y": 636, "uid": "0wxe1yAh8gVS", "state": { "val": 0.01 }, "title": "Scale XYZ" }, { "plugin": "output_proxy", "x": 803, "y": 252, "uid": "6nIheFD7R8w3", "title": "position", "dyn_in": [ { "name": "output", "dt": 5, "def": null, "uid": "S0aurqIbmI1x", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "output_proxy", "x": 818, "y": 400, "uid": "Jk1nTcdt9rzv", "title": "rotation", "dyn_in": [ { "name": "output", "dt": 5, "def": null, "uid": "ueZzDAy1hfyc", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "output_proxy", "x": 825, "y": 549, "uid": "3aklgN3mA1p4", "title": "scale", "dyn_in": [ { "name": "output", "dt": 5, "def": null, "uid": "TTvvZvj40kZI", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 85, "y": 369, "uid": "cTA1t9cI3UtW", "state": { "val": 0, "min": 0, "max": 5 }, "title": "Rotate X" }, { "plugin": "slider_float_generator", "x": 82, "y": 436, "uid": "UgA0cOmgpKCv", "state": { "val": 0, "min": 0, "max": 5 }, "title": "Rotate Y" }, { "plugin": "slider_float_generator", "x": 80, "y": 502, "uid": "3v7YhYTzSJmV", "state": { "val": 0, "min": 0, "max": 5 }, "title": "Rotate Z" } ], "conns": [ { "src_nuid": "nke9JEXzMAEz", "dst_nuid": "3dyLkxgVOEA0", "src_slot": 0, "dst_slot": 0, "uid": "JJp0zisZUlk9", "src_connected": true, "dst_connected": true }, { "src_nuid": "goB5PYf2hiVF", "dst_nuid": "3dyLkxgVOEA0", "src_slot": 0, "dst_slot": 1, "uid": "pJBNgSfhz1CZ", "src_connected": true, "dst_connected": true }, { "src_nuid": "JPEAxPKL1qgp", "dst_nuid": "3dyLkxgVOEA0", "src_slot": 0, "dst_slot": 2, "uid": "KKn9rh1MTNAk", "src_connected": true, "dst_connected": true }, { "src_nuid": "0wxe1yAh8gVS", "dst_nuid": "HeclFuuUNCpM", "src_slot": 0, "dst_slot": 0, "uid": "VV55ktVZYS55", "src_connected": true, "dst_connected": true }, { "src_nuid": "0wxe1yAh8gVS", "dst_nuid": "HeclFuuUNCpM", "src_slot": 0, "dst_slot": 1, "uid": "mqmXzAgE1Tqr", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "0wxe1yAh8gVS", "dst_nuid": "HeclFuuUNCpM", "src_slot": 0, "dst_slot": 2, "uid": "3X6juXECSVfC", "src_connected": true, "dst_connected": true }, { "src_nuid": "3dyLkxgVOEA0", "dst_nuid": "6nIheFD7R8w3", "src_slot": 0, "dst_slot": 0, "uid": "EyxhqxbsjI53", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "7HOHqXOxSBXS", "dst_nuid": "Jk1nTcdt9rzv", "src_slot": 0, "dst_slot": 0, "uid": "N0DDMtlOzjgT", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "HeclFuuUNCpM", "dst_nuid": "3aklgN3mA1p4", "src_slot": 0, "dst_slot": 0, "uid": "71wtCAFolmmd", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "cTA1t9cI3UtW", "dst_nuid": "7HOHqXOxSBXS", "src_slot": 0, "dst_slot": 0, "uid": "T6MBWFFnrmtU", "src_connected": true, "dst_connected": true }, { "src_nuid": "UgA0cOmgpKCv", "dst_nuid": "7HOHqXOxSBXS", "src_slot": 0, "dst_slot": 1, "uid": "WUe9EkftoiIS", "src_connected": true, "dst_connected": true }, { "src_nuid": "3v7YhYTzSJmV", "dst_nuid": "7HOHqXOxSBXS", "src_slot": 0, "dst_slot": 2, "uid": "TLuTsPIXEg6c", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "scale", "dt": 5, "index": 0, "uid": "H3AwGhvcvewD", "dynamic": true, "type": 1, "is_connected": true }, { "name": "rotation", "dt": 5, "index": 1, "uid": "ejxO7eIJpw4m", "dynamic": true, "type": 1, "is_connected": true }, { "name": "position", "dt": 5, "index": 2, "uid": "xnmIRUOwsegz", "dynamic": true, "type": 1, "is_connected": true } ] }, { "plugin": "three_material_modifier", "x": 628, "y": 282, "uid": "GR0iB5InqApN" }, { "plugin": "three_material_phong", "x": 396, "y": 474, "uid": "ZtD04w7VDW7z" }, { "plugin": "url_texture_generator", "x": 172, "y": 526, "uid": "gAKle1F1YXyg", "state": { "url": "/data/image/b09b6c37eebe3b22dc21a9c5884be3cc4a1cda74.png" } }, { "plugin": "annotation", "x": 83, "y": 417, "uid": "WkdcQ0klFS1R", "state": { "text": "To connect/modify a material, add a slot to the material modifier and connect the Phong material ...", "width": 265, "height": 56 } } ], "conns": [ { "src_nuid": "mUlYt365qrRS", "dst_nuid": "N8xLOvJsutOD", "src_slot": 0, "dst_slot": 1, "uid": "RuDFZhGAG4zB", "src_connected": true, "dst_connected": true }, { "src_nuid": "N8xLOvJsutOD", "dst_nuid": "XFfBtKfcMuh6", "src_slot": 0, "dst_slot": 0, "uid": "DEcApD6DX1pb", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "oc5YGXTa2w1n", "dst_nuid": "N8xLOvJsutOD", "src_slot": 0, "dst_slot": 5, "uid": "EiwEpJTBRjpv", "src_connected": true, "dst_connected": true, "src_dyn": true }, { "src_nuid": "oc5YGXTa2w1n", "dst_nuid": "N8xLOvJsutOD", "src_slot": 1, "dst_slot": 4, "uid": "dWNso3Ay1eQK", "src_connected": true, "dst_connected": true, "src_dyn": true }, { "src_nuid": "oc5YGXTa2w1n", "dst_nuid": "N8xLOvJsutOD", "src_slot": 2, "dst_slot": 3, "uid": "oFUKyXyPibtR", "src_connected": true, "dst_connected": true, "src_dyn": true }, { "src_nuid": "GR0iB5InqApN", "dst_nuid": "N8xLOvJsutOD", "src_slot": 0, "dst_slot": 2, "uid": "q5zxR18sj0IR", "src_connected": true, "dst_connected": true }, { "src_nuid": "mUlYt365qrRS", "dst_nuid": "GR0iB5InqApN", "src_slot": 1, "dst_slot": 0, "uid": "JHLlUfnTRqQL", "src_connected": true, "dst_connected": true }, { "src_nuid": "gAKle1F1YXyg", "dst_nuid": "ZtD04w7VDW7z", "src_slot": 0, "dst_slot": 0, "uid": "KNk1nttftNe8", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "Ys30r7aVEks1", "dynamic": true, "type": 1, "is_connected": true } ] }, { "plugin": "three_webgl_renderer", "x": 814, "y": 292, "uid": "l0ZekSTVYf3u", "state": { "always_update": true } }, { "plugin": "graph", "x": 559, "y": 246, "uid": "M5k6GnIXQPkj", "state": { "always_update": true, "input_sids": {}, "output_sids": { "qyIujWaTV1Jn": "8GpdZjiiiEQa" } }, "title": "VR camera", "graph": { "uid": "l45Db7k1UhZo", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_vr_camera", "x": 899, "y": 233, "uid": "sCXs9Zom40ut" }, { "plugin": "output_proxy", "x": 1077, "y": 294, "uid": "qyIujWaTV1Jn", "title": "camera", "dyn_in": [ { "name": "output", "dt": 6, "def": null, "uid": "uyyGR7LQwSEh", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 413, "y": 221, "uid": "P9CfgnQWbISC", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Position X" }, { "plugin": "slider_float_generator", "x": 413, "y": 286, "uid": "GupqtShRccSc", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Position Y" }, { "plugin": "slider_float_generator", "x": 413, "y": 352, "uid": "eORCAGcqzn2C", "state": { "val": 2, "min": -2, "max": 2 }, "title": "Position Z" }, { "plugin": "vector", "x": 736, "y": 283, "uid": "XRgFpMMHFSTT", "open": false, "title": "Camera position" }, { "plugin": "const_float_generator", "x": 772, "y": 183, "uid": "C7qh8h2ZMZJj", "state": { "val": 90 }, "title": "FOV" } ], "conns": [ { "src_nuid": "sCXs9Zom40ut", "dst_nuid": "qyIujWaTV1Jn", "src_slot": 0, "dst_slot": 0, "uid": "2BOyTQlfR6oy", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "P9CfgnQWbISC", "dst_nuid": "XRgFpMMHFSTT", "src_slot": 0, "dst_slot": 0, "uid": "xeUZPAuKZ5ts", "src_connected": true, "dst_connected": true }, { "src_nuid": "GupqtShRccSc", "dst_nuid": "XRgFpMMHFSTT", "src_slot": 0, "dst_slot": 1, "uid": "lcCiSrHyrtak", "src_connected": true, "dst_connected": true }, { "src_nuid": "eORCAGcqzn2C", "dst_nuid": "XRgFpMMHFSTT", "src_slot": 0, "dst_slot": 2, "uid": "IAmJtTgbQObi", "src_connected": true, "dst_connected": true }, { "src_nuid": "XRgFpMMHFSTT", "dst_nuid": "sCXs9Zom40ut", "src_slot": 0, "dst_slot": 0, "uid": "6KCQzWITix5b", "src_connected": true, "dst_connected": true }, { "src_nuid": "C7qh8h2ZMZJj", "dst_nuid": "sCXs9Zom40ut", "src_slot": 0, "dst_slot": 1, "uid": "azX9RnR6Qp0V", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "camera", "dt": 6, "index": 0, "uid": "8GpdZjiiiEQa", "dynamic": true, "type": 1, "is_connected": true } ] }, { "plugin": "three_scene", "x": 604, "y": 447, "uid": "lj4cRZgtC5iX", "dyn_in": [ { "type": 0, "name": "0", "dt": 21, "array": true, "uid": "DDzcOXqI6iRM", "dynamic": true, "index": 0, "is_connected": true }, { "type": 0, "name": "1", "dt": 21, "array": true, "uid": "gH5pmBKZK4lm", "dynamic": true, "index": 1, "is_connected": true }, { "type": 0, "name": "2", "dt": 21, "array": true, "uid": "ExPIjji5rvFO", "dynamic": true, "index": 2, "is_connected": false }, { "type": 0, "name": "3", "dt": 21, "array": true, "uid": "hddJID3FkB4R", "dynamic": true, "index": 3, "is_connected": false }, { "type": 0, "name": "4", "dt": 21, "array": true, "uid": "fb1ifySJ5kUl", "dynamic": true, "index": 4, "is_connected": false } ] }, { "plugin": "graph", "x": 331, "y": 360, "uid": "oLb4Asq8ZBZ3", "state": { "always_update": true, "input_sids": {}, "output_sids": { "UR0zbYEtfEm0": "tjoeHNDBhUcN" } }, "title": "Environment settings", "graph": { "uid": "yuuHkhVvMlmM", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_environment_settings", "x": 572, "y": 469, "uid": "yK65ivXwpvwt", "title": "Environment settings" }, { "plugin": "output_proxy", "x": 980, "y": 512, "uid": "UR0zbYEtfEm0", "title": "environment", "dyn_in": [ { "name": "output", "dt": 23, "def": null, "uid": "Yy89wKzOcZo4", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "color_picker", "x": 216, "y": 254, "uid": "QwATbg0pSF1b", "state": { "hue": 0, "sat": 0, "lum": 1 } }, { "plugin": "slider_float_generator", "x": 140, "y": 502, "uid": "ahmguxLjjItm", "state": { "val": 0, "min": 0.1, "max": 1 }, "title": "Fog near" }, { "plugin": "slider_float_generator", "x": 139, "y": 585, "uid": "yYN1Hp15rzf5", "state": { "val": 1004, "min": 500, "max": 1500 }, "title": "Fog far" } ], "conns": [ { "src_nuid": "yK65ivXwpvwt", "dst_nuid": "UR0zbYEtfEm0", "src_slot": 0, "dst_slot": 0, "uid": "212QSETB7ClB", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "QwATbg0pSF1b", "dst_nuid": "yK65ivXwpvwt", "src_slot": 0, "dst_slot": 0, "uid": "6ZLfj5rfQw1z", "src_connected": true, "dst_connected": true }, { "src_nuid": "ahmguxLjjItm", "dst_nuid": "yK65ivXwpvwt", "src_slot": 0, "dst_slot": 1, "uid": "Ftx9xnIFRYgd", "src_connected": true, "dst_connected": true }, { "src_nuid": "yYN1Hp15rzf5", "dst_nuid": "yK65ivXwpvwt", "src_slot": 0, "dst_slot": 2, "uid": "vIpJgDA6FDr5", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "environment", "dt": 23, "index": 0, "uid": "tjoeHNDBhUcN", "dynamic": true, "type": 1, "is_connected": true } ] }, { "plugin": "graph", "x": 348, "y": 438, "uid": "vINJ9n1TrLJQ", "state": { "always_update": true, "input_sids": {}, "output_sids": { "BJvc4ZcZYRNO": "547odbJKrTzG" } }, "title": "Point light", "graph": { "uid": "WztzoAJf48Dd", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "output_proxy", "x": 1110, "y": 223, "uid": "BJvc4ZcZYRNO", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "vSy6Gj4JSPYs", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 306, "y": 399, "uid": "y0lVdyh7fReM", "state": { "val": 1, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 306, "y": 465, "uid": "I03CEQnmVnQa", "state": { "val": 0.06, "min": -1, "max": 1 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 301, "y": 532, "uid": "bM41cvDFejPE", "state": { "val": 2, "min": -1, "max": 2 }, "title": "Z" }, { "plugin": "vector", "x": 645, "y": 384, "uid": "UHng5nxFHo1u", "title": "Position" }, { "plugin": "three_point_light", "x": 867, "y": 322, "uid": "fwoI1ziOGxyU" }, { "plugin": "const_float_generator", "x": 304, "y": 295, "uid": "Ay0KZWlFZ8Ui", "state": { "val": 1 }, "title": "Intensity" } ], "conns": [ { "src_nuid": "y0lVdyh7fReM", "dst_nuid": "UHng5nxFHo1u", "src_slot": 0, "dst_slot": 0, "uid": "8jXpJhKweMrf", "src_connected": true, "dst_connected": true }, { "src_nuid": "I03CEQnmVnQa", "dst_nuid": "UHng5nxFHo1u", "src_slot": 0, "dst_slot": 1, "uid": "IiyoZP5LT49g", "src_connected": true, "dst_connected": true }, { "src_nuid": "bM41cvDFejPE", "dst_nuid": "UHng5nxFHo1u", "src_slot": 0, "dst_slot": 2, "uid": "cDFnUGdc3gGJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "fwoI1ziOGxyU", "dst_nuid": "BJvc4ZcZYRNO", "src_slot": 0, "dst_slot": 0, "uid": "qWuUGLNOQfPp", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "UHng5nxFHo1u", "dst_nuid": "fwoI1ziOGxyU", "src_slot": 0, "dst_slot": 3, "uid": "0Xxreuya5o4S", "src_connected": true, "dst_connected": true }, { "src_nuid": "Ay0KZWlFZ8Ui", "dst_nuid": "fwoI1ziOGxyU", "src_slot": 0, "dst_slot": 0, "uid": "wS6UEMqueUIZ", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "547odbJKrTzG", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [ { "src_nuid": "M5k6GnIXQPkj", "dst_nuid": "l0ZekSTVYf3u", "src_slot": 0, "dst_slot": 0, "uid": "QJjyVtgpu0WU", "src_connected": true, "dst_connected": true, "src_dyn": true }, { "src_nuid": "lj4cRZgtC5iX", "dst_nuid": "l0ZekSTVYf3u", "src_slot": 0, "dst_slot": 1, "uid": "lOQolDaRixyL", "src_connected": true, "dst_connected": true }, { "src_nuid": "oLb4Asq8ZBZ3", "dst_nuid": "lj4cRZgtC5iX", "src_slot": 0, "dst_slot": 0, "uid": "JkwJ6Unjd8qA", "src_connected": true, "dst_connected": true, "src_dyn": true }, { "src_nuid": "vINJ9n1TrLJQ", "dst_nuid": "lj4cRZgtC5iX", "src_slot": 0, "dst_slot": 0, "uid": "sfkZb0dJp6Xg", "src_connected": true, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": "2KEMeIH7wL7S", "dst_nuid": "lj4cRZgtC5iX", "src_slot": 0, "dst_slot": 1, "uid": "I5trUSGmGSHr", "src_connected": true, "dst_connected": true, "src_dyn": true, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/_util-display-number.json ================================================ {"abs_t":65.728,"active_graph":"root","graph_uid":"jG8ul210Feym","root":{"uid":"root","parent_uid":-1,"nodes":[{"plugin":"graph","x":214,"y":275,"uid":"FZxEaDwz8FIi","state":{"always_update":true,"input_sids":{"oYe5etxYFvEp":"3avLd2vAV3XK"},"output_sids":{"aQsMSK6VwQ9H":"mh0rTKkFm0nD"}},"title":"Number","graph":{"uid":"RzMUMHmcqbDE","parent_uid":"root","open":true,"nodes":[{"plugin":"three_mesh","x":1070,"y":391,"uid":"Z9zbqzCVbBHV"},{"plugin":"output_proxy","x":1269,"y":390,"uid":"aQsMSK6VwQ9H","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"toggle_button","x":943,"y":320,"uid":"3KOfCQakcejO","state":{"enabled":true},"title":"Visible"},{"plugin":"graph","x":540,"y":571,"uid":"tdRU5gTHJv50","state":{"always_update":true,"input_sids":{},"output_sids":{"MdPLfrLfHWVp":"xnmIRUOwsegz","FsKkHY3OJXqL":"ejxO7eIJpw4m","BRJLizxwKvkm":"H3AwGhvcvewD"}},"title":"Position, Rotation, Scale","graph":{"uid":"EfzrVcM1vZav","parent_uid":"RzMUMHmcqbDE","open":true,"nodes":[{"plugin":"slider_float_generator","x":82,"y":105,"uid":"pACj253dIqxh","state":{"val":0,"min":-1,"max":1},"title":"Position X"},{"plugin":"slider_float_generator","x":83,"y":172,"uid":"73ahqhMj9Efe","state":{"val":0,"min":-1,"max":1},"title":"Position Y"},{"plugin":"slider_float_generator","x":81,"y":238,"uid":"dKuESZ6ghybF","state":{"val":0,"min":-1,"max":1},"title":"Position Z"},{"plugin":"vector","x":585,"y":200,"uid":"l5Xi8omU4nOI","open":false,"title":"Position"},{"plugin":"vector","x":290,"y":610,"uid":"GnLBDbafLjOA","title":"Scale"},{"plugin":"vector","x":581,"y":413,"uid":"DWCQwFKxUaLe","open":false,"title":"Rotation"},{"plugin":"const_float_generator","x":113,"y":636,"uid":"yDltuw2NoKEx","state":{"val":2},"title":"Scale XYZ"},{"plugin":"output_proxy","x":803,"y":252,"uid":"MdPLfrLfHWVp","title":"position","dyn_in":[{"name":"output","dt":5,"def":null,"uid":"S0aurqIbmI1x","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":818,"y":400,"uid":"FsKkHY3OJXqL","title":"rotation","dyn_in":[{"name":"output","dt":5,"def":null,"uid":"ueZzDAy1hfyc","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":825,"y":549,"uid":"BRJLizxwKvkm","title":"scale","dyn_in":[{"name":"output","dt":5,"def":null,"uid":"TTvvZvj40kZI","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"slider_float_generator","x":85,"y":369,"uid":"hbsckNzS1Cbu","state":{"val":0,"min":0,"max":5},"title":"Rotate X"},{"plugin":"slider_float_generator","x":82,"y":436,"uid":"c2AJ2IuiNtiN","state":{"val":0,"min":0,"max":5},"title":"Rotate Y"},{"plugin":"slider_float_generator","x":80,"y":502,"uid":"uQdNvWALWKWa","state":{"val":0,"min":0,"max":5},"title":"Rotate Z"}],"conns":[{"src_nuid":"pACj253dIqxh","dst_nuid":"l5Xi8omU4nOI","src_slot":"value","dst_slot":"x","uid":"bVDgW3tfxhAp","src_connected":true,"dst_connected":true},{"src_nuid":"73ahqhMj9Efe","dst_nuid":"l5Xi8omU4nOI","src_slot":"value","dst_slot":"y","uid":"meewX7n5dDel","src_connected":true,"dst_connected":true},{"src_nuid":"dKuESZ6ghybF","dst_nuid":"l5Xi8omU4nOI","src_slot":"value","dst_slot":"z","uid":"pCfIjgzj0PHb","src_connected":true,"dst_connected":true},{"src_nuid":"yDltuw2NoKEx","dst_nuid":"GnLBDbafLjOA","src_slot":"value","dst_slot":"x","uid":"lew8Br6lFfBM","src_connected":true,"dst_connected":true},{"src_nuid":"yDltuw2NoKEx","dst_nuid":"GnLBDbafLjOA","src_slot":"value","dst_slot":"y","uid":"OVjTjDVTI7Yg","src_connected":true,"dst_connected":true,"offset":1},{"src_nuid":"yDltuw2NoKEx","dst_nuid":"GnLBDbafLjOA","src_slot":"value","dst_slot":"z","uid":"NDfwN3ETJkXD","src_connected":true,"dst_connected":true},{"src_nuid":"l5Xi8omU4nOI","dst_nuid":"MdPLfrLfHWVp","src_slot":"vector","dst_slot":0,"uid":"xnonaywgE2Hh","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"DWCQwFKxUaLe","dst_nuid":"FsKkHY3OJXqL","src_slot":"vector","dst_slot":0,"uid":"dAXrwQ4s8SJZ","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"GnLBDbafLjOA","dst_nuid":"BRJLizxwKvkm","src_slot":"vector","dst_slot":0,"uid":"mfHA3gXTpEdN","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"hbsckNzS1Cbu","dst_nuid":"DWCQwFKxUaLe","src_slot":"value","dst_slot":"x","uid":"OEL4Ksu8TaBJ","src_connected":true,"dst_connected":true},{"src_nuid":"c2AJ2IuiNtiN","dst_nuid":"DWCQwFKxUaLe","src_slot":"value","dst_slot":"y","uid":"c7N5VvVAYQUA","src_connected":true,"dst_connected":true},{"src_nuid":"uQdNvWALWKWa","dst_nuid":"DWCQwFKxUaLe","src_slot":"value","dst_slot":"z","uid":"zEuDyJ8cesNe","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"scale","dt":5,"index":0,"uid":"H3AwGhvcvewD","dynamic":true,"type":1,"is_connected":true},{"name":"rotation","dt":5,"index":1,"uid":"ejxO7eIJpw4m","dynamic":true,"type":1,"is_connected":true},{"name":"position","dt":5,"index":2,"uid":"xnmIRUOwsegz","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"const_float_generator","x":523,"y":466,"uid":"NS2bFQjY1Iyk","state":{"val":1},"title":"Segments"},{"plugin":"three_geometry_plane","x":659,"y":441,"uid":"PkoN8IyqyNDV","open":false},{"plugin":"three_material","x":711,"y":252,"uid":"BWDmwXWmcktG","open":false},{"plugin":"const_float_generator","x":521,"y":413,"uid":"HOQs7moTdzFX","state":{"val":1},"title":"Width & Height"},{"plugin":"graph","x":339,"y":205,"uid":"H3DVIcBFYPQv","state":{"always_update":true,"input_sids":{"w3lWMYxHhiMZ":"jPDye0ahee25"},"output_sids":{"6sbR6h6pl2vp":"5CmKiuwpuSn6"}},"title":"Text settings","graph":{"uid":"MFFA31zEQzVf","parent_uid":"RzMUMHmcqbDE","open":true,"nodes":[{"plugin":"texture_from_text_generator","x":755,"y":144,"uid":"RQnLhl2U92ju"},{"plugin":"const_float_generator","x":231,"y":207,"uid":"NW56qEYo7Zlg","state":{"val":2048},"title":"Texture resolution"},{"plugin":"multiply_modulator","x":510,"y":176,"uid":"YTrF54VPGPQV","open":false},{"plugin":"knob_float_generator","x":382,"y":149,"uid":"2vsHeLaI9Yr8","state":{"val":0.2799999999999999},"title":"X position"},{"plugin":"multiply_modulator","x":523,"y":236,"uid":"PmayiwOEL0MJ","open":false},{"plugin":"knob_float_generator","x":379,"y":211,"uid":"JoLC6NEbT9ti","state":{"val":0.16000000000000014},"title":"Y position"},{"plugin":"output_proxy","x":910,"y":176,"uid":"6sbR6h6pl2vp","title":"texture","dyn_in":[{"name":"output","dt":2,"def":null,"uid":"6NOm574t5JhD","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":68,"y":81,"uid":"w3lWMYxHhiMZ","title":"text","dyn_out":[{"name":"input","dt":15,"uid":"iFnISyc7zSlI","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"const_text_generator","x":228,"y":150,"uid":"Pq9fu5wQdPTm","state":{"text":"italic 16px georgia","width":111,"height":22},"title":"Text style"},{"plugin":"const_text_generator","x":230,"y":268,"uid":"5JDfYUbcDCY8","state":{"text":"#fff","width":99,"height":21},"title":"Fill color (in hex)"}],"conns":[{"src_nuid":"NW56qEYo7Zlg","dst_nuid":"RQnLhl2U92ju","src_slot":"value","dst_slot":"width","uid":"z7uV49iNcWbC","src_connected":true,"dst_connected":true},{"src_nuid":"NW56qEYo7Zlg","dst_nuid":"RQnLhl2U92ju","src_slot":"value","dst_slot":"height","uid":"l77kJEZrR1BI","src_connected":true,"dst_connected":true,"offset":2},{"src_nuid":"YTrF54VPGPQV","dst_nuid":"RQnLhl2U92ju","src_slot":"result","dst_slot":"x","uid":"mBwMx5Bpg4oZ","src_connected":true,"dst_connected":true},{"src_nuid":"PmayiwOEL0MJ","dst_nuid":"RQnLhl2U92ju","src_slot":"result","dst_slot":"y","uid":"JogMkxc0sJQQ","src_connected":true,"dst_connected":true},{"src_nuid":"NW56qEYo7Zlg","dst_nuid":"YTrF54VPGPQV","src_slot":"value","dst_slot":"a","uid":"PNIeXyzsZXmE","src_connected":true,"dst_connected":true,"offset":1},{"src_nuid":"NW56qEYo7Zlg","dst_nuid":"PmayiwOEL0MJ","src_slot":"value","dst_slot":"a","uid":"kRuNffY9hcMl","src_connected":true,"dst_connected":true},{"src_nuid":"2vsHeLaI9Yr8","dst_nuid":"YTrF54VPGPQV","src_slot":"value","dst_slot":"b","uid":"9kkwDn3bGiHt","src_connected":true,"dst_connected":true},{"src_nuid":"JoLC6NEbT9ti","dst_nuid":"PmayiwOEL0MJ","src_slot":"value","dst_slot":"b","uid":"9pQHtU6MwzoE","src_connected":true,"dst_connected":true},{"src_nuid":"RQnLhl2U92ju","dst_nuid":"6sbR6h6pl2vp","src_slot":"texture","dst_slot":0,"uid":"XzmA5vPRU83y","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"w3lWMYxHhiMZ","dst_nuid":"RQnLhl2U92ju","src_slot":0,"dst_slot":"text","uid":"arm4WwTfZDED","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"Pq9fu5wQdPTm","dst_nuid":"RQnLhl2U92ju","src_slot":"text","dst_slot":"font style","uid":"mUki2KK6WHbD","src_connected":true,"dst_connected":true},{"src_nuid":"5JDfYUbcDCY8","dst_nuid":"RQnLhl2U92ju","src_slot":"text","dst_slot":"fill style","uid":"tnestFnfhbMY","src_connected":true,"dst_connected":true}]},"dyn_in":[{"name":"text","dt":15,"index":0,"uid":"jPDye0ahee25","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"texture","dt":2,"index":0,"uid":"5CmKiuwpuSn6","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"const_float_generator","x":482,"y":326,"uid":"l0QcZMxI8r7d","state":{"val":2},"title":"Blend mode"},{"plugin":"toggle_button","x":478,"y":265,"uid":"KNT64DfruD1i","state":{"enabled":true},"title":"Transparency"},{"plugin":"format_string_float","x":181,"y":250,"uid":"kMQY1A9Cbn34"},{"plugin":"input_proxy","x":95,"y":257,"uid":"oYe5etxYFvEp","title":"float","dyn_out":[{"name":"input","dt":0,"uid":"NZfP4zFhepEv","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]}],"conns":[{"src_nuid":"Z9zbqzCVbBHV","dst_nuid":"aQsMSK6VwQ9H","src_slot":"object3d","dst_slot":0,"uid":"SOhSln8IchH9","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"3KOfCQakcejO","dst_nuid":"Z9zbqzCVbBHV","src_slot":"bool","dst_slot":"visible","uid":"0J8y37Axm9W3","src_connected":true,"dst_connected":true},{"src_nuid":"tdRU5gTHJv50","dst_nuid":"Z9zbqzCVbBHV","src_slot":0,"dst_slot":"scale","uid":"OtzbEctAYMOE","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"tdRU5gTHJv50","dst_nuid":"Z9zbqzCVbBHV","src_slot":1,"dst_slot":"rotation","uid":"JIzdgts77QnF","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"tdRU5gTHJv50","dst_nuid":"Z9zbqzCVbBHV","src_slot":2,"dst_slot":"position","uid":"wgXBuBIIeu0j","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"PkoN8IyqyNDV","dst_nuid":"Z9zbqzCVbBHV","src_slot":"geometry","dst_slot":"geometry","uid":"ihAC78UH8MTE","src_connected":true,"dst_connected":true},{"src_nuid":"BWDmwXWmcktG","dst_nuid":"Z9zbqzCVbBHV","src_slot":"material","dst_slot":"material","uid":"F68BzZ8dSh4h","src_connected":true,"dst_connected":true},{"src_nuid":"HOQs7moTdzFX","dst_nuid":"PkoN8IyqyNDV","src_slot":"value","dst_slot":"width","uid":"OcLqEdWYf8Nm","src_connected":true,"dst_connected":true},{"src_nuid":"HOQs7moTdzFX","dst_nuid":"PkoN8IyqyNDV","src_slot":"value","dst_slot":"height","uid":"9ycmnM9q0EAm","src_connected":true,"dst_connected":true},{"src_nuid":"NS2bFQjY1Iyk","dst_nuid":"PkoN8IyqyNDV","src_slot":"value","dst_slot":"widthSegments","uid":"l20YCeaUSxNx","src_connected":true,"dst_connected":true},{"src_nuid":"NS2bFQjY1Iyk","dst_nuid":"PkoN8IyqyNDV","src_slot":"value","dst_slot":"heightSegments","uid":"baaThFz694CQ","src_connected":true,"dst_connected":true},{"src_nuid":"H3DVIcBFYPQv","dst_nuid":"BWDmwXWmcktG","src_slot":0,"dst_slot":"texture","uid":"wWrvJQ4OZVrC","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"l0QcZMxI8r7d","dst_nuid":"BWDmwXWmcktG","src_slot":"value","dst_slot":"blending","uid":"iZj9Qs5MnTWU","src_connected":true,"dst_connected":true},{"src_nuid":"KNT64DfruD1i","dst_nuid":"BWDmwXWmcktG","src_slot":"bool","dst_slot":"transparent","uid":"BNWttGoDWjre","src_connected":true,"dst_connected":true},{"src_nuid":"kMQY1A9Cbn34","dst_nuid":"H3DVIcBFYPQv","src_slot":"text","dst_slot":0,"uid":"kuqQV7Z0jJK7","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"oYe5etxYFvEp","dst_nuid":"kMQY1A9Cbn34","src_slot":0,"dst_slot":"float","uid":"uW8k31YeTTKn","src_connected":true,"dst_connected":true,"src_dyn":true}]},"dyn_in":[{"name":"float","dt":0,"index":0,"uid":"3avLd2vAV3XK","dynamic":true,"type":0}],"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]}],"conns":[]}} ================================================ FILE: browser/patches/audio_audio_player.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 17, "root": { "node_uid": 75, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 227, "y": 142, "uid": 74, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": {} }, "title": "Audio player", "graph": { "node_uid": 8, "uid": 16, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "url_audio_buffer_generator", "x": 275, "y": 371, "uid": 0, "state": { "url": "data/audio/inedible_candy.ogg" } }, { "plugin": "audio_buffer_source_modulator", "x": 434, "y": 438, "uid": 1 }, { "plugin": "audio_source_player", "x": 725, "y": 424, "uid": 2 }, { "plugin": "toggle_button", "x": 308, "y": 439, "uid": 3, "state": { "enabled": true } }, { "plugin": "toggle_button", "x": 308, "y": 501, "uid": 4, "state": { "enabled": false } }, { "plugin": "const_float_generator", "x": 309, "y": 562, "uid": 5, "state": { "val": 1 } }, { "plugin": "audio_gain_modulator", "x": 557, "y": 416, "uid": 6, "dsid": 1, "state": { "slot_uids": [ 0 ] }, "dyn_in": [ { "name": "0", "dt": 18, "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "knob_float_generator", "x": 465, "y": 333, "uid": 7, "state": { "val": 0.40000000000000013 }, "title": "Stop" } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 1, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 } ] } } ], "conns": [] } } ================================================ FILE: browser/patches/audio_audio_player_old.json ================================================ { "abs_t": 7.338, "active_graph": 0, "graph_uid": 36, "root": { "node_uid": 109, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "url_audio_generator", "x": 137, "y": 356, "uid": 99, "state": { "url": "data/audio/inedible_candy" } }, { "plugin": "audio_get_current_time_modulator", "x": 295, "y": 305, "uid": 100 }, { "plugin": "float_display", "x": 405, "y": 231, "uid": 101 }, { "plugin": "audio_player", "x": 614, "y": 404, "uid": 102 }, { "plugin": "toggle_button", "x": 297, "y": 417, "uid": 103, "state": { "enabled": false }, "title": "Play" }, { "plugin": "toggle_button", "x": 297, "y": 478, "uid": 104, "state": { "enabled": false }, "title": "Mute audio" }, { "plugin": "knob_float_generator", "x": 297, "y": 538, "uid": 105, "state": { "val": 0.49999999999999956 }, "title": "Volume" }, { "plugin": "audio_get_duration_modulator", "x": 297, "y": 679, "uid": 106 }, { "plugin": "knob_float_generator", "x": 297, "y": 607, "uid": 107, "state": { "val": 0 }, "title": "Playback position" }, { "plugin": "multiply_modulator", "x": 438, "y": 638, "uid": 108 } ], "conns": [ { "src_nuid": 99, "dst_nuid": 100, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 100, "dst_nuid": 101, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 99, "dst_nuid": 102, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 103, "dst_nuid": 102, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 104, "dst_nuid": 102, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 105, "dst_nuid": 102, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 99, "dst_nuid": 106, "src_slot": 0, "dst_slot": 0, "offset": 2 }, { "src_nuid": 107, "dst_nuid": 108, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 106, "dst_nuid": 108, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 108, "dst_nuid": 102, "src_slot": 0, "dst_slot": 4 } ] } } ================================================ FILE: browser/patches/background_skybox.json ================================================ { "abs_t": 31.941, "active_graph": 46, "graph_uid": 50, "root": { "node_uid": 8, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 561, "y": 472, "uid": 7, "dsid": 1, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "56": 0 }, "output_sids": {} }, "title": "Skybox", "graph": { "node_uid": 57, "uid": 46, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 714, "y": 78, "uid": 0, "dsid": 7, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "1": 0, "2": 1, "10": 2, "21": 5, "23": 6 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 26, "uid": 47, "parent_uid": 46, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 919, "y": 19, "uid": 0 }, { "plugin": "input_proxy", "x": 11, "y": 308, "uid": 1, "dsid": 12, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 837, "y": 127, "uid": 2, "dsid": 12, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "scale_matrix", "x": 631, "y": 195, "uid": 7 }, { "plugin": "vector", "x": 514, "y": 216, "uid": 8 }, { "plugin": "divide_modulator", "x": 400, "y": 235, "uid": 9 }, { "plugin": "input_proxy", "x": 280, "y": 204, "uid": 10, "dsid": 12, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "max_modulator", "x": 320, "y": 307, "uid": 11 }, { "plugin": "vector_magnitude", "x": 220, "y": 355, "uid": 12 }, { "plugin": "vector_magnitude", "x": 221, "y": 288, "uid": 13 }, { "plugin": "scene_get_bounding_box", "x": 89, "y": 307, "uid": 14 }, { "plugin": "input_proxy", "x": 632, "y": 251, "uid": 21, "dsid": 11, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 569, "y": 434, "uid": 23, "dsid": 8, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "concatenate_matrix_modulator", "x": 727, "y": 195, "uid": 25 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 12, "src_slot": 1, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 21, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 } ] }, "dyn_in": [ { "name": "scene", "dt": 11, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 5, "index": 3, "type": 0, "is_connected": false }, { "name": "material", "dt": 12, "uid": 6, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "url_scene_generator", "x": 581, "y": 35, "uid": 37, "state": { "url": "/data/scene/skybox/scene.json" } }, { "plugin": "slider_float_generator", "x": 430, "y": 195, "uid": 38, "state": { "val": 20, "min": 0, "max": 20 } }, { "plugin": "material_double_sided_modulator", "x": 569, "y": 312, "uid": 41 }, { "plugin": "toggle_button", "x": 429, "y": 410, "uid": 42, "state": { "enabled": true } }, { "plugin": "material_texture_modulator", "x": 427, "y": 312, "uid": 50 }, { "plugin": "url_texture_generator", "x": 256, "y": 456, "uid": 51, "state": { "url": "data/scenes/skybox/skybox_1.jpg" } }, { "plugin": "input_proxy", "x": 180, "y": 131, "uid": 56, "dsid": 1, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "input", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 37, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 38, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 41, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 42, "dst_nuid": 41, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 50, "dst_nuid": 41, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 51, "dst_nuid": 50, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 56, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "camera", "dt": 6, "uid": 0, "index": 0, "type": 0 } ] } ], "conns": [] } } ================================================ FILE: browser/patches/camera_orbit_camera.json ================================================ { "abs_t": 62.106, "active_graph": 0, "graph_uid": 20, "root": { "node_uid": 7, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 284, "y": 202, "uid": 1, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "10": 0, "11": 1, "12": 2 }, "output_sids": { "24": 3 } }, "title": "Orbit camera", "graph": { "node_uid": 30, "uid": 7, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 173, "y": 58, "uid": 10, "dsid": 3, "state": { "slot_id": 0 }, "title": "rotation", "dyn_out": [ { "name": "input", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 32, "y": 122, "uid": 11, "dsid": 3, "state": { "slot_id": 0 }, "title": "elevation", "dyn_out": [ { "name": "input", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 26, "y": 180, "uid": 12, "dsid": 3, "state": { "slot_id": 0 }, "title": "distance", "dyn_out": [ { "name": "input", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "cos_modulator", "x": 355, "y": 60, "uid": 13 }, { "plugin": "sin_modulator", "x": 376, "y": 118, "uid": 14 }, { "plugin": "multiply_modulator", "x": 487, "y": 55, "uid": 15 }, { "plugin": "multiply_modulator", "x": 596, "y": 132, "uid": 16 }, { "plugin": "sin_modulator", "x": 364, "y": 242, "uid": 17 }, { "plugin": "multiply_modulator", "x": 491, "y": 220, "uid": 18 }, { "plugin": "multiply_modulator", "x": 586, "y": 263, "uid": 19 }, { "plugin": "cos_modulator", "x": 379, "y": 332, "uid": 20 }, { "plugin": "multiply_modulator", "x": 474, "y": 372, "uid": 21 }, { "plugin": "perspective_camera", "x": 805, "y": 213, "uid": 22 }, { "plugin": "vector", "x": 692, "y": 279, "uid": 23 }, { "plugin": "output_proxy", "x": 925, "y": 213, "uid": 24, "dsid": 3, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "output", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "def": null, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "pi_generator", "x": 97, "y": 294, "uid": 25 }, { "plugin": "multiply_modulator", "x": 257, "y": 58, "uid": 26 }, { "plugin": "multiply_modulator", "x": 257, "y": 145, "uid": 27 }, { "plugin": "subtract_modulator", "x": 149, "y": 117, "uid": 28 }, { "plugin": "const_float_generator", "x": 34, "y": 52, "uid": 29, "state": { "val": 1 } } ], "conns": [ { "src_nuid": 13, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 15, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 12, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 18, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 17, "dst_nuid": 18, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 18, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 12, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 2 }, { "src_nuid": 16, "dst_nuid": 23, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 23, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 21, "dst_nuid": 23, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 23, "dst_nuid": 22, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 22, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 2 }, { "src_nuid": 25, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 26, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 26, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 25, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 27, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 27, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 11, "dst_nuid": 28, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 29, "dst_nuid": 28, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 } ] }, "dyn_in": [ { "name": "rotation", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "elevation", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "distance", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 30, "y": 176, "uid": 2, "state": { "val": 0, "min": -1, "max": 1 }, "title": "Rotation" }, { "plugin": "slider_float_generator", "x": 30, "y": 238, "uid": 3, "state": { "val": 0.65, "min": 0.05, "max": 0.95 }, "title": "Elevation" }, { "plugin": "slider_float_generator", "x": 28, "y": 300, "uid": 4, "state": { "val": 3.4, "min": 0.1, "max": 10 }, "title": "Distance" } ], "conns": [ { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 2, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/camera_perspective_camera_setup.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 3, "root": { "node_uid": 12, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 371, "y": 147, "uid": 6, "dsid": 6, "state": { "enabled": true, "input_sids": { "0": 0, "1": 1, "2": 2, "25": 5 }, "output_sids": { "3": 3 } }, "title": "Camera", "graph": { "node_uid": 26, "uid": 2, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 74, "y": 173, "uid": 0, "dsid": 16, "state": { "slot_id": 0 }, "title": "rotation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 129, "y": 89, "uid": 1, "dsid": 16, "state": { "slot_id": 0 }, "title": "elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 52, "y": 48, "uid": 2, "dsid": 16, "state": { "slot_id": 0 }, "title": "dolly", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 558, "y": 35, "uid": 3, "dsid": 16, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "input", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "perspective_camera", "x": 448, "y": 75, "uid": 4 }, { "plugin": "vector", "x": 218, "y": 28, "uid": 5 }, { "plugin": "rotation_xyz_matrix", "x": 160, "y": 153, "uid": 6 }, { "plugin": "vector_transform", "x": 342, "y": 77, "uid": 7 }, { "plugin": "vector", "x": 219, "y": 267, "uid": 21 }, { "plugin": "vector_transform", "x": 341, "y": 190, "uid": 22 }, { "plugin": "const_float_generator", "x": 104, "y": 287, "uid": 23, "state": { "val": 0.5 } }, { "plugin": "negate_modulator", "x": 132, "y": 33, "uid": 24 }, { "plugin": "input_proxy", "x": 92, "y": 457, "uid": 25, "dsid": 2, "state": { "slot_id": 0 }, "title": "target elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 7, "dst_nuid": 4, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 21, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 22, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 22, "dst_nuid": 4, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 0, "dst_nuid": 6, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 2, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "rotation", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "elevation", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "dolly", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "target elevation", "dt": 0, "uid": 5, "index": 3, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 152, "y": 104, "uid": 7, "state": { "val": -7.2, "min": -180, "max": 180 }, "title": "Rotation" }, { "plugin": "slider_float_generator", "x": 152, "y": 187, "uid": 8, "state": { "val": -0.8, "min": -20, "max": 20 }, "title": "Elevation" }, { "plugin": "slider_float_generator", "x": 152, "y": 270, "uid": 9, "state": { "val": 2.9, "min": 0, "max": 10 }, "title": "Dolly" }, { "plugin": "slider_float_generator", "x": 153, "y": 352, "uid": 11, "state": { "val": 0, "min": 0, "max": 10 }, "title": "target elevation" } ], "conns": [ { "src_nuid": 7, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 6, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 6, "src_slot": 0, "dst_slot": 3, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/camera_with_mouse_controls.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 7, "root": { "node_uid": 3, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 146, "y": 24, "uid": 1, "dsid": 2, "state": { "enabled": true, "input_sids": { "32": 0 }, "output_sids": { "39": 1 } }, "title": "Mouse cam", "graph": { "node_uid": 41, "uid": 6, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "perspective_camera", "x": 1801, "y": 42, "uid": 0 }, { "plugin": "vector", "x": 1530, "y": 48, "uid": 1 }, { "plugin": "vector_transform", "x": 1664, "y": 102, "uid": 2 }, { "plugin": "rotation_xyz_matrix", "x": 1302, "y": 326, "uid": 3 }, { "plugin": "rotation_xyz_matrix", "x": 1378, "y": 605, "uid": 4 }, { "plugin": "const_float_generator", "x": 1235, "y": 580, "uid": 5, "state": { "val": -90 }, "title": "X rotation" }, { "plugin": "const_float_generator", "x": 1235, "y": 645, "uid": 6, "state": { "val": 0 }, "title": "Y/Z rotation" }, { "plugin": "mouse_position_generator", "x": 0, "y": 470, "uid": 7 }, { "plugin": "multiply_modulator", "x": 1025, "y": 365, "uid": 8 }, { "plugin": "const_float_generator", "x": 915, "y": 447, "uid": 9, "state": { "val": -360 }, "title": "Rotation range" }, { "plugin": "multiply_modulator", "x": 846, "y": 793, "uid": 10 }, { "plugin": "const_float_generator", "x": 724, "y": 841, "uid": 11, "state": { "val": -10 }, "title": "Elev. sensitivity" }, { "plugin": "subtract_modulator", "x": 646, "y": 753, "uid": 12 }, { "plugin": "const_float_generator", "x": 514, "y": 840, "uid": 13, "state": { "val": 0.5 }, "title": "Elevation bias" }, { "plugin": "mouse_button_generator", "x": 222, "y": 581, "uid": 14 }, { "plugin": "toggle_modulator", "x": 395, "y": 581, "uid": 15, "state": { "value": false } }, { "plugin": "sample_and_hold_modulator", "x": 502, "y": 753, "uid": 16, "state": { "value": 0.5962962962962963 } }, { "plugin": "sample_and_hold_modulator", "x": 513, "y": 450, "uid": 17, "state": { "value": 0.48541666666666666 } }, { "plugin": "clock_generator", "x": 0, "y": 302, "uid": 18 }, { "plugin": "multiply_modulator", "x": 106, "y": 247, "uid": 19 }, { "plugin": "const_float_generator", "x": 0, "y": 233, "uid": 20, "state": { "val": 0 }, "title": "Zero" }, { "plugin": "add_modulator", "x": 647, "y": 385, "uid": 21 }, { "plugin": "lowpass_filter_modulator", "x": 1129, "y": 401, "uid": 22 }, { "plugin": "const_float_generator", "x": 718, "y": 448, "uid": 23, "state": { "val": 0.95 }, "title": "LP filt. amt." }, { "plugin": "mouse_wheel_generator", "x": 810, "y": 0, "uid": 24 }, { "plugin": "multiply_modulator", "x": 963, "y": 0, "uid": 25 }, { "plugin": "clamped_accumulate_modulator", "x": 1098, "y": 47, "uid": 26, "state": { "value": 1 }, "title": "Clamped acc." }, { "plugin": "const_float_generator", "x": 980, "y": 177, "uid": 27, "state": { "val": 20 }, "title": "Max. dolly" }, { "plugin": "lowpass_filter_modulator", "x": 1304, "y": 184, "uid": 28 }, { "plugin": "add_modulator", "x": 1219, "y": 119, "uid": 29 }, { "plugin": "const_float_generator", "x": 969, "y": 113, "uid": 30, "state": { "val": 1 }, "title": "Min. dolly" }, { "plugin": "negate_modulator", "x": 730, "y": 753, "uid": 31 }, { "plugin": "input_proxy", "x": 810, "y": 55, "uid": 32, "dsid": 20, "state": { "slot_id": 0 }, "title": "Mouse sensitivity", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector", "x": 1591, "y": 328, "uid": 33 }, { "plugin": "const_float_generator", "x": 1460, "y": 368, "uid": 34, "state": { "val": 0 } }, { "plugin": "const_float_generator", "x": 1464, "y": 305, "uid": 35, "state": { "val": 0.1 } }, { "plugin": "const_float_generator", "x": 1473, "y": 432, "uid": 36, "state": { "val": 0 } }, { "plugin": "add_modulator", "x": 934, "y": 366, "uid": 37 }, { "plugin": "const_float_generator", "x": 782, "y": 516, "uid": 38, "state": { "val": 0.5 }, "title": "Offset" }, { "plugin": "output_proxy", "x": 1897, "y": 41, "uid": 39, "dsid": 7, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "input", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "negate_modulator", "x": 1403, "y": 94, "uid": 40 } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "offset": 1 }, { "src_nuid": 33, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 35, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 39, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "offset": 2 }, { "src_nuid": 1, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 3, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 2, "offset": 1 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 16, "src_slot": 1, "dst_slot": 1 }, { "src_nuid": 7, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 11, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 12, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 16, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 12, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 17, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 18, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 20, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 19, "dst_nuid": 29, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 21, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 23, "dst_nuid": 22, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 23, "dst_nuid": 28, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 24, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 27, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 30, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 26, "dst_nuid": 29, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 29, "dst_nuid": 28, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 34, "dst_nuid": 33, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 34, "dst_nuid": 33, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 36, "dst_nuid": 33, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 38, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 22, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 28, "dst_nuid": 40, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 40, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "Mouse sensitivity", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "const_float_generator", "x": 18, "y": 88, "uid": 2, "state": { "val": 1 }, "title": "Mouse sensitivity" } ], "conns": [ { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/camera_with_zoom_only.json ================================================ { "abs_t": 0, "active_graph": 1, "graph_uid": 2, "root": { "node_uid": 2, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 219, "y": 29, "uid": 0, "dsid": 2, "state": { "enabled": true, "input_sids": { "2": 0 }, "output_sids": { "3": 1 } }, "title": "Camera zoom", "graph": { "node_uid": 5, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "perspective_camera", "x": 295, "y": 42, "uid": 0 }, { "plugin": "vector", "x": 177, "y": 43, "uid": 1 }, { "plugin": "input_proxy", "x": 19, "y": 64, "uid": 2, "dsid": 7, "state": { "slot_id": 0 }, "title": "zoom", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 395, "y": 42, "uid": 3, "dsid": 7, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "input", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": true } ] }, { "plugin": "negate_modulator", "x": 92, "y": 64, "uid": 4 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 0, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "zoom", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 13, "y": 49, "uid": 1, "state": { "val": 2, "min": 1, "max": 100 } } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/components/rotation-all-axes.json ================================================ {"nodes":[{"plugin":"entity_component","x":652,"y":714,"uid":"hCn3GJyfjcEr","state":{"always_update":true,"input_sids":{},"output_sids":{"6NRssES3S539":"hAAWj4zrpu6a"}},"title":"Rotation on all axes","graph":{"uid":"uzKbncFj9hMV","parent_uid":"root","open":true,"nodes":[{"plugin":"output_proxy","x":962,"y":368,"uid":"6NRssES3S539","title":"rotation","dyn_in":[{"name":"output","dt":5,"def":null,"uid":"vEbx2hrxHrMs","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"vector","x":761,"y":366,"uid":"mByauDKGhUcE","open":false},{"plugin":"annotation","x":614,"y":146,"uid":"ehLqT9eRpZYz","state":{"text":"Component for Rotation on all axes.","width":207,"height":80}},{"plugin":"clock_generator","x":454,"y":321,"uid":"9ZWwk8CxkbDu"},{"plugin":"multiply_modulator","x":584,"y":366,"uid":"WQHJpvWLhHFe","open":false,"title":"Multiply"},{"plugin":"slider_float_generator","x":355,"y":379,"uid":"eVqDfRjsgczd","state":{"val":1,"min":-10,"max":10},"title":"Rotation Speed"}],"conns":[{"src_nuid":"mByauDKGhUcE","dst_nuid":"6NRssES3S539","src_slot":"vector","dst_slot":0,"uid":"hdV32UYcDbSw","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"9ZWwk8CxkbDu","dst_nuid":"WQHJpvWLhHFe","src_slot":"seconds","dst_slot":"a","uid":"kBuq5TjfcYVp","src_connected":true,"dst_connected":true},{"src_nuid":"eVqDfRjsgczd","dst_nuid":"WQHJpvWLhHFe","src_slot":"value","dst_slot":"b","uid":"EqPwJmeCbfPg","src_connected":true,"dst_connected":true},{"src_nuid":"WQHJpvWLhHFe","dst_nuid":"mByauDKGhUcE","src_slot":"result","dst_slot":"y","uid":"NaswuRjrLXws","src_connected":true,"dst_connected":true},{"src_nuid":"WQHJpvWLhHFe","dst_nuid":"mByauDKGhUcE","src_slot":"result","dst_slot":"x","uid":"eGAq3j49GGeK","src_connected":true,"dst_connected":true,"offset":1},{"src_nuid":"WQHJpvWLhHFe","dst_nuid":"mByauDKGhUcE","src_slot":"result","dst_slot":"z","uid":"raWn6RG4AJmj","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"rotation","dt":5,"index":0,"uid":"hAAWj4zrpu6a","dynamic":true,"type":1,"is_connected":true}]}],"conns":[],"x1":702,"y1":764,"x2":913,"y2":823} ================================================ FILE: browser/patches/components/rotation-y-axis.json ================================================ {"nodes":[{"plugin":"entity_component","x":652,"y":714,"uid":"7RAW4kBwdDZm","state":{"always_update":true,"input_sids":{},"output_sids":{"Yw9hjydQmna5":"hAAWj4zrpu6a"}},"title":"Rotation on Y axis","graph":{"uid":"kJ4LmkQLqCbr","parent_uid":"root","open":false,"nodes":[{"plugin":"output_proxy","x":962,"y":368,"uid":"Yw9hjydQmna5","title":"rotation","dyn_in":[{"name":"output","dt":5,"def":null,"uid":"vEbx2hrxHrMs","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"vector","x":761,"y":366,"uid":"MSS4MqKJVrfZ","open":false},{"plugin":"annotation","x":614,"y":146,"uid":"WKvprTgqjQKr","state":{"text":"Component for Rotation on Y axis.","width":207,"height":80}},{"plugin":"clock_generator","x":454,"y":321,"uid":"y3aUteVxub4w"},{"plugin":"multiply_modulator","x":584,"y":366,"uid":"APs2xAy2yffd","open":false,"title":"Multiply"},{"plugin":"slider_float_generator","x":355,"y":379,"uid":"E3fTqdzV6NNM","state":{"val":1,"min":-10,"max":10},"title":"Y Rotation Speed"}],"conns":[{"src_nuid":"MSS4MqKJVrfZ","dst_nuid":"Yw9hjydQmna5","src_slot":"vector","dst_slot":0,"uid":"xGKNHAcy2Cwt","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"y3aUteVxub4w","dst_nuid":"APs2xAy2yffd","src_slot":"seconds","dst_slot":"a","uid":"yccD9FSyubpP","src_connected":true,"dst_connected":true},{"src_nuid":"E3fTqdzV6NNM","dst_nuid":"APs2xAy2yffd","src_slot":"value","dst_slot":"b","uid":"2HrPWUrEeYPa","src_connected":true,"dst_connected":true},{"src_nuid":"APs2xAy2yffd","dst_nuid":"MSS4MqKJVrfZ","src_slot":"result","dst_slot":"y","uid":"yTMKzbpSYqRY","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"rotation","dt":5,"index":0,"uid":"hAAWj4zrpu6a","dynamic":true,"type":1,"is_connected":true}]}],"conns":[{"src_nuid":"7RAW4kBwdDZm","dst_nuid":"GHGN2HCndg5D","src_slot":0,"dst_slot":0,"uid":"Htn4yRLrvW9Z","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true}],"x1":652,"y1":764,"x2":852,"y2":823} ================================================ FILE: browser/patches/components/wobble-y-axis.json ================================================ {"nodes":[{"plugin":"entity_component","x":353,"y":569,"uid":"B9s6NLUFhEx7","state":{"always_update":true,"input_sids":{},"output_sids":{"vh3vhkHMwZVE":"hAAWj4zrpu6a"}},"title":"Wobble on Y axis","graph":{"uid":"Huru3nKe58cN","parent_uid":"VXrYhepwHyZH","open":true,"nodes":[{"plugin":"output_proxy","x":825,"y":550,"uid":"vh3vhkHMwZVE","title":"position","dyn_in":[{"name":"output","dt":5,"def":null,"uid":"vEbx2hrxHrMs","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"vector","x":592,"y":549,"uid":"rPvZeP2EYb9w","open":false},{"plugin":"annotation","x":614,"y":146,"uid":"zzVae32Epwr6","state":{"text":"Wobble the Y position with a sinewave.","width":207,"height":80}},{"plugin":"clock_generator","x":362,"y":415,"uid":"wpjFNWJbSRZ4"},{"plugin":"sine_modulator","x":552,"y":498,"uid":"dGRYxnQ6ewTs","open":false},{"plugin":"slider_float_generator","x":280,"y":474,"uid":"9u8Fcpp9SEFd","state":{"val":0.187,"min":0,"max":1},"title":"Wobble Speed"},{"plugin":"multiply_modulator","x":505,"y":450,"uid":"QLzyyGMYLGp4","open":false,"title":"Multiply"}],"conns":[{"src_nuid":"rPvZeP2EYb9w","dst_nuid":"vh3vhkHMwZVE","src_slot":"vector","dst_slot":0,"uid":"JzM7HgqjeQUE","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"dGRYxnQ6ewTs","dst_nuid":"rPvZeP2EYb9w","src_slot":"value","dst_slot":"y","uid":"r7vA9QJTEx9H","src_connected":true,"dst_connected":true},{"src_nuid":"wpjFNWJbSRZ4","dst_nuid":"QLzyyGMYLGp4","src_slot":"seconds","dst_slot":"a","uid":"SJYez7RmA6KK","src_connected":true,"dst_connected":true},{"src_nuid":"9u8Fcpp9SEFd","dst_nuid":"QLzyyGMYLGp4","src_slot":"value","dst_slot":"b","uid":"483geGtgJE6d","src_connected":true,"dst_connected":true},{"src_nuid":"QLzyyGMYLGp4","dst_nuid":"dGRYxnQ6ewTs","src_slot":"result","dst_slot":"time","uid":"KY2uwcrvJu6S","src_connected":true,"dst_connected":true}]},"dyn_out":[{"name":"position","dt":5,"index":0,"uid":"hAAWj4zrpu6a","dynamic":true,"type":1,"is_connected":true}]}],"conns":[{"src_nuid":"B9s6NLUFhEx7","dst_nuid":"KuEQ556yBFDK","src_slot":0,"dst_slot":"position","uid":"4sAfB7ZQFkxT","src_connected":true,"dst_connected":true,"src_dyn":true}],"x1":403,"y1":619,"x2":597,"y2":678} ================================================ FILE: browser/patches/display_osc.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 1, "root": { "node_uid": 5, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "text_display", "x": 160, "y": 74, "uid": 1 }, { "plugin": "object_display", "x": 160, "y": 137, "uid": 3 }, { "plugin": "osc_receiver", "x": 21, "y": 74, "uid": 4 } ], "conns": [ { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 3, "src_slot": 1, "dst_slot": 0 } ] } } ================================================ FILE: browser/patches/instancing_array.json ================================================ { "abs_t": 33.595, "active_graph": 0, "graph_uid": 43, "root": { "node_uid": 48, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 376, "y": 701, "uid": 47, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": {} }, "title": "Array controls", "graph": { "node_uid": 75, "uid": 34, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 905, "y": 121, "uid": 0, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "12": 2, "13": 3, "14": 4, "15": 5, "18": 7 }, "output_sids": {} }, "title": "Array instancing", "graph": { "node_uid": 21, "uid": 35, "parent_uid": 34, "open": true, "nodes": [ { "plugin": "graph", "x": 166, "y": 128, "uid": 0, "dsid": 6, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "0": 0, "1": 1, "2": 2, "4": 3 }, "output_sids": { "8": 4, "9": 5 } }, "title": "Compute array parameters", "graph": { "node_uid": 10, "uid": 36, "parent_uid": 35, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 29, "y": 13, "uid": 0, "dsid": 14, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 29, "y": 68, "uid": 1, "dsid": 14, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 43, "y": 123, "uid": 2, "dsid": 14, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector", "x": 114, "y": 13, "uid": 3, "title": "offset" }, { "plugin": "input_proxy", "x": 112, "y": 109, "uid": 4, "dsid": 14, "state": { "slot_id": 0 }, "title": "count", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector_scale", "x": 187, "y": 89, "uid": 5 }, { "plugin": "vector_scale", "x": 285, "y": 89, "uid": 6 }, { "plugin": "const_float_generator", "x": 161, "y": 166, "uid": 7, "state": { "val": -0.5 } }, { "plugin": "output_proxy", "x": 199, "y": 14, "uid": 8, "dsid": 14, "state": { "slot_id": 0 }, "title": "offset", "dyn_in": [ { "name": "input", "dt": 5, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "output_proxy", "x": 373, "y": 89, "uid": 9, "dsid": 14, "state": { "slot_id": 0 }, "title": "start", "dyn_in": [ { "name": "input", "dt": 5, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "count", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "offset", "dt": 5, "uid": 4, "index": 0, "type": 1 }, { "name": "start", "dt": 5, "uid": 5, "index": 1, "type": 1 } ] }, { "plugin": "scene_renderer_emitter", "x": 463, "y": 94, "uid": 1 }, { "plugin": "quad_mesh_generator", "x": 12, "y": 9, "uid": 9 }, { "plugin": "input_proxy", "x": 365, "y": 198, "uid": 12, "dsid": 12, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 365, "y": 254, "uid": 13, "dsid": 12, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 34, "y": 84, "uid": 14, "dsid": 12, "state": { "slot_id": 0 }, "title": "instance count", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 14, "y": 209, "uid": 15, "dsid": 12, "state": { "slot_id": 0 }, "title": "instance offset", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "instance_array_modulator", "x": 349, "y": 24, "uid": 17 }, { "plugin": "input_proxy", "x": 146, "y": 369, "uid": 18, "dsid": 8, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 12, "dst_nuid": 1, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 13, "dst_nuid": 1, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 15, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 2 }, { "src_nuid": 14, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 17, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 17, "src_slot": 0, "dst_slot": 3, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 17, "src_slot": 1, "dst_slot": 2, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "camera", "dt": 6, "uid": 2, "index": 0, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 3, "index": 1, "type": 0, "is_connected": true }, { "name": "instance count", "dt": 0, "uid": 4, "index": 2, "type": 0, "is_connected": true }, { "name": "instance offset", "dt": 0, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 7, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "graph", "x": 561, "y": 15, "uid": 5, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 37, "parent_uid": 34, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 259, "y": 14, "uid": 0 }, { "plugin": "output_proxy", "x": 350, "y": 14, "uid": 2, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 142, "y": 14, "uid": 3 }, { "plugin": "input_proxy", "x": 48, "y": 15, "uid": 13, "dsid": 13, "state": { "slot_id": 0 }, "title": "scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "offset": 2 } ] }, "dyn_in": [ { "name": "scale", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 141, "y": 15, "uid": 6, "state": { "val": 0.72, "min": 0, "max": 2 }, "title": "Quad instance size" }, { "plugin": "const_float_generator", "x": 36, "y": 15, "uid": 7, "state": { "val": 12 }, "title": "instance count" }, { "plugin": "graph", "x": 576, "y": 115, "uid": 9, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 38, "parent_uid": 34, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 326, "y": 12, "uid": 2, "dsid": 14, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 113, "y": 12, "uid": 3 }, { "plugin": "input_proxy", "x": 42, "y": 12, "uid": 13, "dsid": 14, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 42, "y": 71, "uid": 14, "dsid": 14, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 51, "y": 130, "uid": 15, "dsid": 14, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 225, "y": 12, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 370, "y": 115, "uid": 10, "state": { "val": 0.04, "min": -2, "max": 2 }, "title": "array x position" }, { "plugin": "slider_float_generator", "x": 370, "y": 185, "uid": 11, "state": { "val": 0, "min": -2, "max": 2 }, "title": "array y position" }, { "plugin": "slider_float_generator", "x": 370, "y": 256, "uid": 12, "state": { "val": 0, "min": -2, "max": 2 }, "title": "array z position" }, { "plugin": "slider_float_generator", "x": 337, "y": 15, "uid": 13, "state": { "val": 0.7, "min": 0, "max": 2 }, "title": "instance offset xyz" }, { "plugin": "concatenate_matrix_modulator", "x": 788, "y": 93, "uid": 15 }, { "plugin": "color_picker", "x": 110, "y": 922, "uid": 32, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 296, "y": 923, "uid": 33, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Specular color" }, { "plugin": "graph", "x": 469, "y": 632, "uid": 53, "dsid": 14, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "14": 2, "15": 3, "16": 4, "17": 5, "18": 6, "19": 7 }, "output_sids": { "27": 12 } }, "title": "Light chain", "graph": { "node_uid": 30, "uid": 39, "parent_uid": 34, "open": true, "nodes": [ { "plugin": "light_type_modulator", "x": 762, "y": 207, "uid": 0 }, { "plugin": "light_position_modulator", "x": 604, "y": 215, "uid": 2 }, { "plugin": "light_diffuse_color_modulator", "x": 200, "y": 217, "uid": 3 }, { "plugin": "light_intensity_modulator", "x": 430, "y": 219, "uid": 5 }, { "plugin": "light_specular_color_modulator", "x": 309, "y": 219, "uid": 6 }, { "plugin": "vector", "x": 494, "y": 380, "uid": 7 }, { "plugin": "input_proxy", "x": 361, "y": 467, "uid": 14, "dsid": 13, "state": { "slot_id": 0 }, "title": "Pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 383, "y": 549, "uid": 15, "dsid": 14, "state": { "slot_id": 0 }, "title": "Pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 627, "uid": 16, "dsid": 15, "state": { "slot_id": 0 }, "title": "Pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 350, "y": 358, "uid": 17, "dsid": 13, "state": { "slot_id": 0 }, "title": "intensity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 196, "y": 340, "uid": 18, "dsid": 13, "state": { "slot_id": 0 }, "title": "specular color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 93, "y": 237, "uid": 19, "dsid": 14, "state": { "slot_id": 0 }, "title": "diffuse color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 900, "y": 133, "uid": 27, "dsid": 12, "state": { "slot_id": 0 }, "title": "light", "dyn_in": [ { "name": "input", "dt": 13, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "light_type_generator", "x": 618, "y": 302, "uid": 29, "state": { "type": 0 } } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 3, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 29, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 0, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "Pos x", "dt": 0, "uid": 2, "index": 0, "type": 0, "is_connected": true }, { "name": "Pos y", "dt": 0, "uid": 3, "index": 1, "type": 0, "is_connected": true }, { "name": "Pos z", "dt": 0, "uid": 4, "index": 2, "type": 0, "is_connected": true }, { "name": "intensity", "dt": 0, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "specular color", "dt": 3, "uid": 6, "index": 4, "type": 0, "is_connected": true }, { "name": "diffuse color", "dt": 3, "uid": 7, "index": 5, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "light", "dt": 13, "uid": 12, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 84, "y": 632, "uid": 54, "state": { "val": 0.3333333333333333, "min": "0", "max": "10" }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 85, "y": 707, "uid": 55, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position X" }, { "plugin": "slider_float_generator", "x": 84, "y": 780, "uid": 56, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position Y" }, { "plugin": "slider_float_generator", "x": 84, "y": 850, "uid": 57, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position Z" }, { "plugin": "color_picker", "x": 282, "y": 632, "uid": 58, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 283, "y": 767, "uid": 59, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Specular color" }, { "plugin": "graph", "x": 631, "y": 403, "uid": 60, "dsid": 20, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "15": 3, "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16, "47": 18, "49": 19 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 50, "uid": 40, "parent_uid": 34, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "material_texture_modulator", "x": 1252, "y": 68, "uid": 7 }, { "plugin": "output_proxy", "x": 1361, "y": 68, "uid": 9, "dsid": 30, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 1173, "y": 143, "uid": 15, "dsid": 30, "state": { "slot_id": 0 }, "title": "Image", "dyn_out": [ { "name": "output", "dt": 2, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 24, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 24, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 24, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 24, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 24, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 564, "y": 212, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 454, "y": 148, "uid": 32, "dsid": 3, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 41, "parent_uid": 40, "open": true, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 22, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 22, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 361, "y": 242, "uid": 34, "dsid": 18, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 323, "y": 161, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 25, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 25, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 25, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 61, "y": 99, "uid": 44, "dsid": 14, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 40, "y": 52, "uid": 47, "dsid": 9, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "output", "dt": 13, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 158, "y": 22, "uid": 48 }, { "plugin": "input_proxy", "x": 54, "y": 0, "uid": 49, "dsid": 6, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 47, "dst_nuid": 48, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 44, "dst_nuid": 48, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 48, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 49, "dst_nuid": 48, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "Image", "dt": 2, "uid": 3, "index": 0, "type": 0, "is_connected": true }, { "name": "hue", "dt": 0, "uid": 4, "index": 1, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 2, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 3, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 4, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 5, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 6, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 7, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 8, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 9, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 10, "type": 0, "is_connected": false }, { "name": "light", "dt": 13, "uid": 18, "index": 11, "type": 0, "is_connected": true }, { "name": "light index", "dt": 0, "uid": 19, "index": 12, "type": 0 } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "url_texture_generator", "x": 214, "y": 403, "uid": 61, "state": { "url": "/data/image/57422df4c11a76d5531ef36299d5d1ac5b6b6739.jpg" }, "title": "Image" }, { "plugin": "knob_float_generator", "x": 317, "y": 403, "uid": 62, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 390, "y": 403, "uid": 63, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 469, "y": 403, "uid": 64, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 550, "y": 403, "uid": 65, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 471, "y": 469, "uid": 66, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 390, "y": 469, "uid": 67, "state": { "val": 0 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 349, "y": 541, "uid": 68, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 441, "y": 541, "uid": 69, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 529, "y": 541, "uid": 70, "state": { "val": 0 }, "title": "Ambient Lum" }, { "plugin": "graph", "x": 228, "y": 170, "uid": 71, "dsid": 5, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "0": 0, "1": 1, "2": 2 }, "output_sids": { "3": 3 } }, "title": "Camera", "graph": { "node_uid": 25, "uid": 42, "parent_uid": 34, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 74, "y": 173, "uid": 0, "dsid": 15, "state": { "slot_id": 0 }, "title": "rotation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 129, "y": 89, "uid": 1, "dsid": 15, "state": { "slot_id": 0 }, "title": "elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 52, "y": 48, "uid": 2, "dsid": 15, "state": { "slot_id": 0 }, "title": "dolly", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 558, "y": 35, "uid": 3, "dsid": 15, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "input", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "perspective_camera", "x": 448, "y": 75, "uid": 4 }, { "plugin": "vector", "x": 218, "y": 28, "uid": 5 }, { "plugin": "rotation_xyz_matrix", "x": 160, "y": 153, "uid": 6 }, { "plugin": "vector_transform", "x": 342, "y": 77, "uid": 7 }, { "plugin": "vector", "x": 219, "y": 267, "uid": 21 }, { "plugin": "vector_transform", "x": 341, "y": 190, "uid": 22 }, { "plugin": "const_float_generator", "x": 104, "y": 287, "uid": 23, "state": { "val": 0.5 } }, { "plugin": "negate_modulator", "x": 132, "y": 33, "uid": 24 } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 7, "dst_nuid": 4, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 21, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 22, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 22, "dst_nuid": 4, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 0, "dst_nuid": 6, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 2, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "rotation", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "elevation", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "dolly", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 9, "y": 127, "uid": 72, "state": { "val": 0, "min": -180, "max": 180 }, "title": "Rotation" }, { "plugin": "slider_float_generator", "x": 9, "y": 210, "uid": 73, "state": { "val": -12, "min": "-20", "max": "20" }, "title": "Elevation" }, { "plugin": "slider_float_generator", "x": 9, "y": 293, "uid": 74, "state": { "val": 5.5, "min": "0", "max": "10" }, "title": "Dolly" } ], "conns": [ { "src_nuid": 7, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 9, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "offset": 1 }, { "src_nuid": 5, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "offset": 1 }, { "src_nuid": 15, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 54, "dst_nuid": 53, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 55, "dst_nuid": 53, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 56, "dst_nuid": 53, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 57, "dst_nuid": 53, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 58, "dst_nuid": 53, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 59, "dst_nuid": 53, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 61, "dst_nuid": 60, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 62, "dst_nuid": 60, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 63, "dst_nuid": 60, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 64, "dst_nuid": 60, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 65, "dst_nuid": 60, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 66, "dst_nuid": 60, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 67, "dst_nuid": 60, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 70, "dst_nuid": 60, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 69, "dst_nuid": 60, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 68, "dst_nuid": 60, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 53, "dst_nuid": 60, "src_slot": 0, "dst_slot": 11, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 60, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 72, "dst_nuid": 71, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 73, "dst_nuid": 71, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 74, "dst_nuid": 71, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 71, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true } ] } } ], "conns": [] } } ================================================ FILE: browser/patches/instancing_cube.json ================================================ { "abs_t": 53.942, "active_graph": 0, "graph_uid": 34, "root": { "node_uid": 47, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 376, "y": 701, "uid": 46, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": {} }, "title": "Cube controls", "graph": { "node_uid": 72, "uid": 25, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 867, "y": 137, "uid": 0, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "12": 2, "13": 3, "14": 4, "15": 5, "24": 7 }, "output_sids": {} }, "title": "Cube instancing", "graph": { "node_uid": 29, "uid": 26, "parent_uid": 25, "open": true, "nodes": [ { "plugin": "graph", "x": 232, "y": 274, "uid": 0, "dsid": 6, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "0": 0, "1": 1, "2": 2, "4": 3 }, "output_sids": { "8": 4, "9": 5 } }, "title": "Compute array parameters", "graph": { "node_uid": 10, "uid": 27, "parent_uid": 26, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 7, "y": 9, "uid": 0, "dsid": 14, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 10, "y": 76, "uid": 1, "dsid": 14, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 28, "y": 139, "uid": 2, "dsid": 14, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector", "x": 102, "y": 8, "uid": 3, "title": "offset" }, { "plugin": "input_proxy", "x": 101, "y": 107, "uid": 4, "dsid": 14, "state": { "slot_id": 0 }, "title": "count", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector_scale", "x": 187, "y": 51, "uid": 5 }, { "plugin": "vector_scale", "x": 288, "y": 90, "uid": 6 }, { "plugin": "const_float_generator", "x": 101, "y": 165, "uid": 7, "state": { "val": -0.5 } }, { "plugin": "output_proxy", "x": 269, "y": 9, "uid": 8, "dsid": 14, "state": { "slot_id": 0 }, "title": "offset", "dyn_in": [ { "name": "input", "dt": 5, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "output_proxy", "x": 379, "y": 90, "uid": 9, "dsid": 14, "state": { "slot_id": 0 }, "title": "start", "dyn_in": [ { "name": "input", "dt": 5, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "count", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "offset", "dt": 5, "uid": 4, "index": 0, "type": 1 }, { "name": "start", "dt": 5, "uid": 5, "index": 1, "type": 1 } ] }, { "plugin": "scene_renderer_emitter", "x": 856, "y": 82, "uid": 1 }, { "plugin": "instance_cube_modulator", "x": 429, "y": 87, "uid": 2 }, { "plugin": "vector", "x": 223, "y": 30, "uid": 3 }, { "plugin": "input_proxy", "x": 536, "y": 189, "uid": 12, "dsid": 12, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 533, "y": 258, "uid": 13, "dsid": 12, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 85, "y": 8, "uid": 14, "dsid": 12, "state": { "slot_id": 0 }, "title": "instance count", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 72, "y": 334, "uid": 15, "dsid": 12, "state": { "slot_id": 0 }, "title": "instance offset", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 492, "y": 405, "uid": 24, "dsid": 8, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "sphere_mesh_generator", "x": 235, "y": 164, "uid": 27, "state": { "v_res": 25, "h_res": 25 } }, { "plugin": "const_float_generator", "x": 84, "y": 223, "uid": 28, "state": { "val": 25 } } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 1, "dst_slot": 2, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 3, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 3, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 12, "dst_nuid": 1, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 13, "dst_nuid": 1, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "offset": 2 }, { "src_nuid": 14, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 3 }, { "src_nuid": 15, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 15, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 2 }, { "src_nuid": 24, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 27, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1, "offset": 1 } ] }, "dyn_in": [ { "name": "camera", "dt": 6, "uid": 2, "index": 0, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 3, "index": 1, "type": 0, "is_connected": true }, { "name": "instance count", "dt": 0, "uid": 4, "index": 2, "type": 0, "is_connected": true }, { "name": "instance offset", "dt": 0, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 7, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "graph", "x": 481, "y": 346, "uid": 5, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 28, "parent_uid": 25, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 207, "y": 43, "uid": 0 }, { "plugin": "output_proxy", "x": 296, "y": 43, "uid": 2, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 95, "y": 43, "uid": 3 }, { "plugin": "input_proxy", "x": 8, "y": 9, "uid": 13, "dsid": 13, "state": { "slot_id": 0 }, "title": "scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "offset": 2 } ] }, "dyn_in": [ { "name": "scale", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 257, "y": 17, "uid": 6, "state": { "val": 0.21, "min": 0, "max": 1 }, "title": "Instance scale" }, { "plugin": "const_float_generator", "x": 16, "y": 18, "uid": 7, "state": { "val": 4 }, "title": "instance count" }, { "plugin": "graph", "x": 481, "y": 230, "uid": 9, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 29, "parent_uid": 25, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 296, "y": 12, "uid": 2, "dsid": 14, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 82, "y": 11, "uid": 3 }, { "plugin": "input_proxy", "x": 15, "y": 12, "uid": 13, "dsid": 14, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 14, "y": 67, "uid": 14, "dsid": 14, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 20, "y": 124, "uid": 15, "dsid": 14, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 195, "y": 12, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 210, "y": 115, "uid": 10, "state": { "val": 0.52, "min": -2, "max": 2 }, "title": "cube x position" }, { "plugin": "slider_float_generator", "x": 210, "y": 186, "uid": 11, "state": { "val": 0, "min": -2, "max": 2 }, "title": "cube y position" }, { "plugin": "slider_float_generator", "x": 209, "y": 256, "uid": 12, "state": { "val": 1.16, "min": -2, "max": 2 }, "title": "cube z position" }, { "plugin": "slider_float_generator", "x": 644, "y": 37, "uid": 13, "state": { "val": 0.92, "min": 0, "max": 2 }, "title": "instance offset xyz" }, { "plugin": "graph", "x": 690, "y": 474, "uid": 45, "dsid": 20, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "15": 3, "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16, "47": 18, "49": 19 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 51, "uid": 30, "parent_uid": 25, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "material_texture_modulator", "x": 1252, "y": 68, "uid": 7 }, { "plugin": "output_proxy", "x": 1361, "y": 68, "uid": 9, "dsid": 31, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 1173, "y": 143, "uid": 15, "dsid": 31, "state": { "slot_id": 0 }, "title": "Image", "dyn_out": [ { "name": "output", "dt": 2, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 25, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 25, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 25, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 25, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 25, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 564, "y": 212, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 454, "y": 148, "uid": 32, "dsid": 3, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 31, "parent_uid": 30, "open": true, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 23, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 23, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 361, "y": 242, "uid": 34, "dsid": 19, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 323, "y": 161, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 26, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 26, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 26, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 61, "y": 99, "uid": 44, "dsid": 15, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 40, "y": 52, "uid": 47, "dsid": 10, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "output", "dt": 13, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 158, "y": 22, "uid": 48 }, { "plugin": "input_proxy", "x": 54, "y": 0, "uid": 49, "dsid": 7, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "toggle_button", "x": 574, "y": 276, "uid": 50, "state": { "enabled": true }, "title": "Depth write" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 47, "dst_nuid": 48, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 44, "dst_nuid": 48, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 48, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 49, "dst_nuid": 48, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 50, "dst_nuid": 27, "src_slot": 0, "dst_slot": 2 } ] }, "dyn_in": [ { "name": "Image", "dt": 2, "uid": 3, "index": 0, "type": 0, "is_connected": true }, { "name": "hue", "dt": 0, "uid": 4, "index": 1, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 2, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 3, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 4, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 5, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 6, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 7, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 8, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 9, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 10, "type": 0, "is_connected": false }, { "name": "light", "dt": 13, "uid": 18, "index": 11, "type": 0, "is_connected": true }, { "name": "light index", "dt": 0, "uid": 19, "index": 12, "type": 0 } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "url_texture_generator", "x": 220, "y": 474, "uid": 46, "state": { "url": "/data/image/57422df4c11a76d5531ef36299d5d1ac5b6b6739.jpg" }, "title": "Image" }, { "plugin": "knob_float_generator", "x": 324, "y": 472, "uid": 47, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 396, "y": 474, "uid": 48, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 475, "y": 474, "uid": 49, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 556, "y": 474, "uid": 50, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 220, "y": 539, "uid": 51, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 220, "y": 595, "uid": 52, "state": { "val": 0.04 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 365, "y": 539, "uid": 53, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 457, "y": 539, "uid": 54, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 545, "y": 539, "uid": 55, "state": { "val": 0 }, "title": "Ambient Lum" }, { "plugin": "graph", "x": 509, "y": 707, "uid": 56, "dsid": 16, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 1, "14": 2, "15": 3, "16": 4, "17": 5, "18": 6, "19": 7, "22": 8, "23": 9, "24": 10 }, "output_sids": { "30": 15 } }, "title": "Light chain", "graph": { "node_uid": 31, "uid": 32, "parent_uid": 25, "open": true, "nodes": [ { "plugin": "light_type_modulator", "x": 692, "y": 216, "uid": 0 }, { "plugin": "light_position_modulator", "x": 604, "y": 215, "uid": 2 }, { "plugin": "light_diffuse_color_modulator", "x": 200, "y": 217, "uid": 3 }, { "plugin": "light_direction_modulator", "x": 521, "y": 215, "uid": 4 }, { "plugin": "light_intensity_modulator", "x": 430, "y": 219, "uid": 5 }, { "plugin": "light_specular_color_modulator", "x": 309, "y": 219, "uid": 6 }, { "plugin": "vector", "x": 494, "y": 380, "uid": 7 }, { "plugin": "input_proxy", "x": 609, "y": 401, "uid": 13, "dsid": 12, "state": { "slot_id": 0 }, "title": "light type", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 413, "y": 532, "uid": 14, "dsid": 12, "state": { "slot_id": 0 }, "title": "Pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 581, "uid": 15, "dsid": 13, "state": { "slot_id": 0 }, "title": "Pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 627, "uid": 16, "dsid": 14, "state": { "slot_id": 0 }, "title": "Pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 350, "y": 358, "uid": 17, "dsid": 12, "state": { "slot_id": 0 }, "title": "intensity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 196, "y": 340, "uid": 18, "dsid": 12, "state": { "slot_id": 0 }, "title": "specular color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 80, "y": 347, "uid": 19, "dsid": 13, "state": { "slot_id": 0 }, "title": "diffuse color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector_normalize", "x": 361, "y": 452, "uid": 20 }, { "plugin": "vector", "x": 248, "y": 461, "uid": 21 }, { "plugin": "input_proxy", "x": 146, "y": 479, "uid": 22, "dsid": 13, "state": { "slot_id": 0 }, "title": "Dir x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 528, "uid": 23, "dsid": 14, "state": { "slot_id": 0 }, "title": "Dir y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 574, "uid": 24, "dsid": 15, "state": { "slot_id": 0 }, "title": "Dir z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 795, "y": 219, "uid": 30, "dsid": 5, "state": { "slot_id": 0 }, "title": "light", "dyn_in": [ { "name": "input", "dt": 13, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 21, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 22, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 30, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "light type", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Pos x", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Pos y", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true }, { "name": "Pos z", "dt": 0, "uid": 4, "index": 3, "type": 0, "is_connected": true }, { "name": "intensity", "dt": 0, "uid": 5, "index": 4, "type": 0, "is_connected": true }, { "name": "specular color", "dt": 3, "uid": 6, "index": 5, "type": 0, "is_connected": true }, { "name": "diffuse color", "dt": 3, "uid": 7, "index": 6, "type": 0, "is_connected": true }, { "name": "Dir x", "dt": 0, "uid": 8, "index": 7, "type": 0, "is_connected": true }, { "name": "Dir y", "dt": 0, "uid": 9, "index": 8, "type": 0, "is_connected": true }, { "name": "Dir z", "dt": 0, "uid": 10, "index": 9, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "light", "dt": 13, "uid": 15, "index": 0, "type": 1 } ] }, { "plugin": "light_type_generator", "x": 105, "y": 707, "uid": 57, "state": { "type": 0 } }, { "plugin": "slider_float_generator", "x": 307, "y": 707, "uid": 58, "state": { "val": 1.5, "min": "0", "max": "10" }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 106, "y": 780, "uid": 59, "state": { "val": -0.8, "min": -20, "max": 20 }, "title": "Light position X" }, { "plugin": "slider_float_generator", "x": 106, "y": 846, "uid": 60, "state": { "val": -7.333333333333335, "min": "-20", "max": "20" }, "title": "Light position Y" }, { "plugin": "slider_float_generator", "x": 106, "y": 914, "uid": 61, "state": { "val": 1.2, "min": -20, "max": 20 }, "title": "Light position Z" }, { "plugin": "slider_float_generator", "x": 304, "y": 781, "uid": 62, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light direction X" }, { "plugin": "slider_float_generator", "x": 304, "y": 850, "uid": 63, "state": { "val": 0.04, "min": -2, "max": 2 }, "title": "Light direction Y" }, { "plugin": "slider_float_generator", "x": 304, "y": 915, "uid": 64, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light direction z" }, { "plugin": "color_picker", "x": 108, "y": 995, "uid": 65, "state": { "hue": 0, "sat": 0, "lum": 0.98 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 294, "y": 996, "uid": 66, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Specular color" }, { "plugin": "graph", "x": 226, "y": 349, "uid": 67, "dsid": 5, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "0": 0, "1": 1, "2": 2 }, "output_sids": { "3": 3 } }, "title": "Camera", "graph": { "node_uid": 25, "uid": 33, "parent_uid": 25, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 74, "y": 173, "uid": 0, "dsid": 15, "state": { "slot_id": 0 }, "title": "rotation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 129, "y": 89, "uid": 1, "dsid": 15, "state": { "slot_id": 0 }, "title": "elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 52, "y": 48, "uid": 2, "dsid": 15, "state": { "slot_id": 0 }, "title": "dolly", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 558, "y": 35, "uid": 3, "dsid": 15, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "input", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "perspective_camera", "x": 448, "y": 75, "uid": 4 }, { "plugin": "vector", "x": 218, "y": 28, "uid": 5 }, { "plugin": "rotation_xyz_matrix", "x": 160, "y": 153, "uid": 6 }, { "plugin": "vector_transform", "x": 342, "y": 77, "uid": 7 }, { "plugin": "vector", "x": 219, "y": 267, "uid": 21 }, { "plugin": "vector_transform", "x": 341, "y": 190, "uid": 22 }, { "plugin": "const_float_generator", "x": 104, "y": 287, "uid": 23, "state": { "val": 0.5 } }, { "plugin": "negate_modulator", "x": 132, "y": 33, "uid": 24 } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 7, "dst_nuid": 4, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 21, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 22, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 22, "dst_nuid": 4, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 0, "dst_nuid": 6, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 2, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "rotation", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "elevation", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "dolly", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 7, "y": 306, "uid": 68, "state": { "val": 0, "min": -180, "max": 180 }, "title": "Rotation" }, { "plugin": "slider_float_generator", "x": 7, "y": 389, "uid": 69, "state": { "val": 2.4, "min": -20, "max": 20 }, "title": "Elevation" }, { "plugin": "slider_float_generator", "x": 7, "y": 472, "uid": 70, "state": { "val": 4.6, "min": 0, "max": 10 }, "title": "Dolly" }, { "plugin": "concatenate_matrix_modulator", "x": 679, "y": 276, "uid": 71 } ], "conns": [ { "src_nuid": 7, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 9, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 46, "dst_nuid": 45, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 47, "dst_nuid": 45, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 48, "dst_nuid": 45, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 49, "dst_nuid": 45, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 50, "dst_nuid": 45, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 51, "dst_nuid": 45, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 52, "dst_nuid": 45, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 55, "dst_nuid": 45, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 54, "dst_nuid": 45, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 53, "dst_nuid": 45, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 57, "dst_nuid": 56, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 58, "dst_nuid": 56, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 59, "dst_nuid": 56, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 60, "dst_nuid": 56, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 61, "dst_nuid": 56, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 62, "dst_nuid": 56, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 63, "dst_nuid": 56, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 64, "dst_nuid": 56, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 65, "dst_nuid": 56, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 66, "dst_nuid": 56, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 56, "dst_nuid": 45, "src_slot": 0, "dst_slot": 11, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 45, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 68, "dst_nuid": 67, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 69, "dst_nuid": 67, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 70, "dst_nuid": 67, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 67, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 71, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 71, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 71, "src_slot": 0, "dst_slot": 0, "src_dyn": true } ] } } ], "conns": [] } } ================================================ FILE: browser/patches/instancing_ifs.json ================================================ { "abs_t": 30.301, "active_graph": 0, "graph_uid": 70, "root": { "node_uid": 49, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 376, "y": 592, "uid": 48, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": {} }, "title": "IFS controls", "graph": { "node_uid": 94, "uid": 43, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 943, "y": 71, "uid": 0, "dsid": 24, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "5": 0, "13": 1, "25": 2, "26": 3, "27": 4, "28": 5, "29": 6, "30": 7, "31": 8, "32": 9, "33": 10, "47": 12, "48": 13, "49": 14, "50": 15, "51": 16, "52": 17, "53": 18, "54": 19, "55": 20, "56": 21, "57": 22, "58": 23 }, "output_sids": {} }, "title": "IFS system", "graph": { "node_uid": 69, "uid": 44, "parent_uid": 43, "open": true, "nodes": [ { "plugin": "instance_ifs_modulator", "x": 771, "y": 57, "uid": 0 }, { "plugin": "scene_renderer_emitter", "x": 1042, "y": 65, "uid": 1 }, { "plugin": "input_proxy", "x": 597, "y": 55, "uid": 5, "dsid": 16, "state": { "slot_id": 0 }, "title": "recursion depth", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 605, "y": 108, "uid": 13, "dsid": 16, "state": { "slot_id": 0 }, "title": "mesh", "dyn_out": [ { "name": "output", "dt": 9, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 284, "y": 47, "uid": 15, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 45, "parent_uid": 44, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 525, "y": 243, "uid": 2, "dsid": 17, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 331, "y": 241, "uid": 3 }, { "plugin": "input_proxy", "x": 173, "y": 314, "uid": 13, "dsid": 17, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 204, "y": 397, "uid": 14, "dsid": 17, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 223, "y": 456, "uid": 15, "dsid": 17, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 435, "y": 243, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 272, "y": 234, "uid": 19, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 46, "parent_uid": 44, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 456, "y": 245, "uid": 0 }, { "plugin": "output_proxy", "x": 590, "y": 257, "uid": 2, "dsid": 16, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 331, "y": 241, "uid": 3 }, { "plugin": "input_proxy", "x": 173, "y": 314, "uid": 13, "dsid": 16, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 204, "y": 397, "uid": 14, "dsid": 16, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 223, "y": 456, "uid": 15, "dsid": 16, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 479, "y": 58, "uid": 21, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "Rotate", "graph": { "node_uid": 16, "uid": 47, "parent_uid": 44, "open": true, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 385, "y": 227, "uid": 0 }, { "plugin": "output_proxy", "x": 509, "y": 216, "uid": 1, "dsid": 16, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 88, "y": 147, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 68, "y": 231, "uid": 9, "dsid": 16, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 67, "y": 353, "uid": 10, "dsid": 16, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 179, "y": 272, "uid": 13, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 48, "parent_uid": 47, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 15, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 15, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 172, "y": 352, "uid": 14, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 49, "parent_uid": 47, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 192, "y": 428, "uid": 15, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 50, "parent_uid": 47, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_dyn": true } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 114, "y": 57, "uid": 25, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 114, "y": 110, "uid": 26, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 114, "y": 165, "uid": 27, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 106, "y": 298, "uid": 28, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl scl x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 105, "y": 354, "uid": 29, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl scl y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 106, "y": 417, "uid": 30, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl scl z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 391, "y": 31, "uid": 31, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl rot x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 392, "y": 98, "uid": 32, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl rot y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 392, "y": 155, "uid": 33, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl rot z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 442, "y": 586, "uid": 36, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "branch rotate", "graph": { "node_uid": 14, "uid": 51, "parent_uid": 44, "open": true, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 385, "y": 227, "uid": 0 }, { "plugin": "output_proxy", "x": 509, "y": 216, "uid": 1, "dsid": 16, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 88, "y": 147, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 190, "y": 106, "uid": 9, "dsid": 16, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 272, "y": 181, "uid": 10, "dsid": 16, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 161, "y": 264, "uid": 11, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 52, "parent_uid": 51, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 191, "y": 341, "uid": 12, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 53, "parent_uid": 51, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 222, "y": 427, "uid": 13, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 54, "parent_uid": 51, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_dyn": true } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 438, "y": 360, "uid": 40, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "branch trnslt", "graph": { "node_uid": 17, "uid": 55, "parent_uid": 44, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 525, "y": 243, "uid": 2, "dsid": 17, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 331, "y": 241, "uid": 3 }, { "plugin": "input_proxy", "x": 173, "y": 314, "uid": 13, "dsid": 17, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 204, "y": 397, "uid": 14, "dsid": 17, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 223, "y": 456, "uid": 15, "dsid": 17, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 435, "y": 243, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 436, "y": 474, "uid": 44, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "branch scale", "graph": { "node_uid": 16, "uid": 56, "parent_uid": 44, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 456, "y": 245, "uid": 0 }, { "plugin": "output_proxy", "x": 590, "y": 257, "uid": 2, "dsid": 16, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 331, "y": 241, "uid": 3 }, { "plugin": "input_proxy", "x": 173, "y": 314, "uid": 13, "dsid": 16, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 204, "y": 397, "uid": 14, "dsid": 16, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 223, "y": 456, "uid": 15, "dsid": 16, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 330, "y": 369, "uid": 47, "dsid": 15, "state": { "slot_id": 0 }, "title": "b trn x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 330, "y": 422, "uid": 48, "dsid": 15, "state": { "slot_id": 0 }, "title": "b trn y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 328, "y": 475, "uid": 49, "dsid": 15, "state": { "slot_id": 0 }, "title": "b trn z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 329, "y": 543, "uid": 50, "dsid": 15, "state": { "slot_id": 0 }, "title": "b sc x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 330, "y": 590, "uid": 51, "dsid": 15, "state": { "slot_id": 0 }, "title": "b sc y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 329, "y": 636, "uid": 52, "dsid": 15, "state": { "slot_id": 0 }, "title": "b sc z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 327, "y": 715, "uid": 53, "dsid": 15, "state": { "slot_id": 0 }, "title": "b rot x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 326, "y": 757, "uid": 54, "dsid": 15, "state": { "slot_id": 0 }, "title": "b rot y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 327, "y": 804, "uid": 55, "dsid": 15, "state": { "slot_id": 0 }, "title": "b rot z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 922, "y": 185, "uid": 56, "dsid": 15, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 924, "y": 245, "uid": 57, "dsid": 15, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 820, "y": 412, "uid": 58, "dsid": 15, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 608, "y": 390, "uid": 64, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 57, "parent_uid": 44, "open": true, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 392, "y": 263, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 268, "y": 302, "uid": 1 }, { "plugin": "output_proxy", "x": 532, "y": 244, "uid": 2, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 229, "y": 195, "uid": 3, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 148, "y": 343, "uid": 4, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 171, "y": 500, "uid": 5, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 574, "y": 198, "uid": 66, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 58, "parent_uid": 44, "open": true, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 274, "y": 13, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 92, "y": 13, "uid": 1 }, { "plugin": "output_proxy", "x": 394, "y": 13, "uid": 2, "dsid": 8, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 197, "y": 14, "uid": 3, "dsid": 8, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 13, "uid": 4, "dsid": 8, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 71, "uid": 5, "dsid": 8, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 26, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 27, "dst_nuid": 15, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 28, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 29, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 30, "dst_nuid": 19, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 31, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 32, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 33, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 53, "dst_nuid": 36, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 54, "dst_nuid": 36, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 55, "dst_nuid": 36, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 50, "dst_nuid": 44, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 51, "dst_nuid": 44, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 52, "dst_nuid": 44, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 49, "dst_nuid": 40, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 48, "dst_nuid": 40, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 47, "dst_nuid": 40, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 56, "dst_nuid": 1, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 57, "dst_nuid": 1, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 64, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 44, "dst_nuid": 64, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 36, "dst_nuid": 64, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 64, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_dyn": true }, { "src_nuid": 66, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 66, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 66, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 21, "dst_nuid": 66, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 58, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "recursion depth", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "mesh", "dt": 9, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "lvl pos x", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "lvl pos y", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true }, { "name": "lvl pos z", "dt": 0, "uid": 4, "index": 4, "type": 0, "is_connected": true }, { "name": "lvl scl x", "dt": 0, "uid": 5, "index": 5, "type": 0, "is_connected": true }, { "name": "lvl scl y", "dt": 0, "uid": 6, "index": 6, "type": 0, "is_connected": true }, { "name": "lvl scl z", "dt": 0, "uid": 7, "index": 7, "type": 0, "is_connected": true }, { "name": "lvl rot x", "dt": 0, "uid": 8, "index": 8, "type": 0, "is_connected": true }, { "name": "lvl rot y", "dt": 0, "uid": 9, "index": 9, "type": 0, "is_connected": true }, { "name": "lvl rot z", "dt": 0, "uid": 10, "index": 10, "type": 0, "is_connected": true }, { "name": "b trn x", "dt": 0, "uid": 12, "index": 11, "type": 0, "is_connected": true }, { "name": "b trn y", "dt": 0, "uid": 13, "index": 12, "type": 0, "is_connected": true }, { "name": "b trn z", "dt": 0, "uid": 14, "index": 13, "type": 0, "is_connected": true }, { "name": "b sc x", "dt": 0, "uid": 15, "index": 14, "type": 0, "is_connected": true }, { "name": "b sc y", "dt": 0, "uid": 16, "index": 15, "type": 0, "is_connected": true }, { "name": "b sc z", "dt": 0, "uid": 17, "index": 16, "type": 0, "is_connected": true }, { "name": "b rot x", "dt": 0, "uid": 18, "index": 17, "type": 0, "is_connected": true }, { "name": "b rot y", "dt": 0, "uid": 19, "index": 18, "type": 0, "is_connected": true }, { "name": "b rot z", "dt": 0, "uid": 20, "index": 19, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 21, "index": 20, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 22, "index": 21, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 23, "index": 22, "type": 0, "is_connected": true } ] }, { "plugin": "const_float_generator", "x": 173, "y": 20, "uid": 1, "state": { "val": 5 }, "title": "recursion depth" }, { "plugin": "slider_float_generator", "x": 21, "y": 111, "uid": 2, "state": { "val": 0, "min": -2, "max": 2 }, "title": "level position x" }, { "plugin": "slider_float_generator", "x": 21, "y": 177, "uid": 3, "state": { "val": 0, "min": -2, "max": 2 }, "title": "level position y" }, { "plugin": "slider_float_generator", "x": 21, "y": 241, "uid": 4, "state": { "val": 0.04, "min": -2, "max": 2 }, "title": "level position z" }, { "plugin": "slider_float_generator", "x": 221, "y": 111, "uid": 5, "state": { "val": 1.02, "min": 0, "max": 2 }, "title": "level scale" }, { "plugin": "knob_float_generator", "x": 431, "y": 110, "uid": 8, "state": { "val": 0 }, "title": "level rotation x" }, { "plugin": "knob_float_generator", "x": 431, "y": 174, "uid": 9, "state": { "val": 0 }, "title": "level rotation y" }, { "plugin": "knob_float_generator", "x": 431, "y": 236, "uid": 10, "state": { "val": 0 }, "title": "level rotation z" }, { "plugin": "slider_float_generator", "x": 17, "y": 331, "uid": 11, "state": { "val": 0.04, "min": -2, "max": 2 }, "title": "branch position x" }, { "plugin": "slider_float_generator", "x": 17, "y": 397, "uid": 12, "state": { "val": 0.08, "min": -2, "max": 2 }, "title": "branch position y" }, { "plugin": "slider_float_generator", "x": 17, "y": 461, "uid": 13, "state": { "val": -0.04, "min": -2, "max": 2 }, "title": "branch position z" }, { "plugin": "slider_float_generator", "x": 229, "y": 332, "uid": 14, "state": { "val": 1, "min": 0, "max": 2 }, "title": "branch scale " }, { "plugin": "knob_float_generator", "x": 431, "y": 332, "uid": 17, "state": { "val": 0.05 }, "title": "branch rotation x" }, { "plugin": "knob_float_generator", "x": 431, "y": 396, "uid": 18, "state": { "val": 0 }, "title": "branch rotation y" }, { "plugin": "knob_float_generator", "x": 431, "y": 458, "uid": 19, "state": { "val": 0 }, "title": "branch rotation z" }, { "plugin": "graph", "x": 308, "y": 575, "uid": 31, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 59, "parent_uid": 43, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 525, "y": 243, "uid": 2, "dsid": 17, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 331, "y": 241, "uid": 3 }, { "plugin": "input_proxy", "x": 173, "y": 314, "uid": 13, "dsid": 17, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 204, "y": 397, "uid": 14, "dsid": 17, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 223, "y": 456, "uid": 15, "dsid": 17, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 435, "y": 243, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 104, "y": 576, "uid": 32, "state": { "val": 0, "min": -2, "max": 2 }, "title": "x position" }, { "plugin": "slider_float_generator", "x": 104, "y": 642, "uid": 33, "state": { "val": 0, "min": -2, "max": 2 }, "title": "y position" }, { "plugin": "slider_float_generator", "x": 104, "y": 706, "uid": 34, "state": { "val": 0, "min": -2, "max": 2 }, "title": "z position" }, { "plugin": "graph", "x": 406, "y": 574, "uid": 36, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 60, "parent_uid": 43, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 456, "y": 245, "uid": 0 }, { "plugin": "output_proxy", "x": 590, "y": 257, "uid": 2, "dsid": 16, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 331, "y": 241, "uid": 3 }, { "plugin": "input_proxy", "x": 173, "y": 314, "uid": 13, "dsid": 16, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 204, "y": 397, "uid": 14, "dsid": 16, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 223, "y": 456, "uid": 15, "dsid": 16, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 304, "y": 694, "uid": 37, "state": { "val": 0.105, "min": 0, "max": 0.5 }, "title": "instance size" }, { "plugin": "graph", "x": 612, "y": 601, "uid": 38, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "Rotate", "graph": { "node_uid": 14, "uid": 61, "parent_uid": 43, "open": true, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 385, "y": 227, "uid": 0 }, { "plugin": "output_proxy", "x": 509, "y": 216, "uid": 1, "dsid": 16, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 88, "y": 147, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 190, "y": 106, "uid": 9, "dsid": 16, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 272, "y": 181, "uid": 10, "dsid": 16, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 174, "y": 272, "uid": 11, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 62, "parent_uid": 61, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 178, "y": 344, "uid": 12, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 63, "parent_uid": 61, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 199, "y": 418, "uid": 13, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 64, "parent_uid": 61, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_dyn": true } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 513, "y": 596, "uid": 39, "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 513, "y": 660, "uid": 40, "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 513, "y": 722, "uid": 41, "state": { "val": 0 }, "title": "Z" }, { "plugin": "graph", "x": 707, "y": 604, "uid": 42, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 65, "parent_uid": 43, "open": true, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 392, "y": 263, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 268, "y": 302, "uid": 1 }, { "plugin": "output_proxy", "x": 532, "y": 244, "uid": 2, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 229, "y": 195, "uid": 3, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 148, "y": 343, "uid": 4, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 171, "y": 500, "uid": 5, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "sphere_mesh_generator", "x": 76, "y": 19, "uid": 71, "state": { "v_res": 15, "h_res": 15 } }, { "plugin": "graph", "x": 555, "y": 1031, "uid": 72, "dsid": 14, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "14": 2, "15": 3, "16": 4, "17": 5, "18": 6, "19": 7 }, "output_sids": { "27": 12 } }, "title": "Light chain", "graph": { "node_uid": 30, "uid": 66, "parent_uid": 43, "open": true, "nodes": [ { "plugin": "light_type_modulator", "x": 762, "y": 207, "uid": 0 }, { "plugin": "light_position_modulator", "x": 604, "y": 215, "uid": 2 }, { "plugin": "light_diffuse_color_modulator", "x": 200, "y": 217, "uid": 3 }, { "plugin": "light_intensity_modulator", "x": 430, "y": 219, "uid": 5 }, { "plugin": "light_specular_color_modulator", "x": 309, "y": 219, "uid": 6 }, { "plugin": "vector", "x": 494, "y": 380, "uid": 7 }, { "plugin": "input_proxy", "x": 361, "y": 467, "uid": 14, "dsid": 12, "state": { "slot_id": 0 }, "title": "Pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 383, "y": 549, "uid": 15, "dsid": 13, "state": { "slot_id": 0 }, "title": "Pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 627, "uid": 16, "dsid": 14, "state": { "slot_id": 0 }, "title": "Pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 350, "y": 358, "uid": 17, "dsid": 12, "state": { "slot_id": 0 }, "title": "intensity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 196, "y": 340, "uid": 18, "dsid": 12, "state": { "slot_id": 0 }, "title": "specular color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 93, "y": 237, "uid": 19, "dsid": 13, "state": { "slot_id": 0 }, "title": "diffuse color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 900, "y": 133, "uid": 27, "dsid": 11, "state": { "slot_id": 0 }, "title": "light", "dyn_in": [ { "name": "input", "dt": 13, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "light_type_generator", "x": 618, "y": 302, "uid": 29, "state": { "type": 0 } } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 3, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 29, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 0, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "Pos x", "dt": 0, "uid": 2, "index": 0, "type": 0, "is_connected": true }, { "name": "Pos y", "dt": 0, "uid": 3, "index": 1, "type": 0, "is_connected": true }, { "name": "Pos z", "dt": 0, "uid": 4, "index": 2, "type": 0, "is_connected": true }, { "name": "intensity", "dt": 0, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "specular color", "dt": 3, "uid": 6, "index": 4, "type": 0, "is_connected": true }, { "name": "diffuse color", "dt": 3, "uid": 7, "index": 5, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "light", "dt": 13, "uid": 12, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 170, "y": 1031, "uid": 73, "state": { "val": 1.5, "min": 0, "max": 10 }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 171, "y": 1106, "uid": 74, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position X" }, { "plugin": "slider_float_generator", "x": 170, "y": 1179, "uid": 75, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position Y" }, { "plugin": "slider_float_generator", "x": 170, "y": 1249, "uid": 76, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position Z" }, { "plugin": "color_picker", "x": 368, "y": 1031, "uid": 77, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 369, "y": 1166, "uid": 78, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Specular color" }, { "plugin": "graph", "x": 717, "y": 802, "uid": 79, "dsid": 20, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "15": 3, "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16, "47": 18, "49": 19 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 50, "uid": 67, "parent_uid": 43, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "material_texture_modulator", "x": 1252, "y": 68, "uid": 7 }, { "plugin": "output_proxy", "x": 1361, "y": 68, "uid": 9, "dsid": 29, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 1173, "y": 143, "uid": 15, "dsid": 29, "state": { "slot_id": 0 }, "title": "Image", "dyn_out": [ { "name": "output", "dt": 2, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 23, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 23, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 23, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 23, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 23, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 564, "y": 212, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 454, "y": 148, "uid": 32, "dsid": 3, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 68, "parent_uid": 67, "open": true, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 21, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 21, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 361, "y": 242, "uid": 34, "dsid": 17, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 323, "y": 161, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 24, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 24, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 24, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 61, "y": 99, "uid": 44, "dsid": 13, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 40, "y": 52, "uid": 47, "dsid": 8, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "output", "dt": 13, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 158, "y": 22, "uid": 48 }, { "plugin": "input_proxy", "x": 54, "y": 0, "uid": 49, "dsid": 5, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 47, "dst_nuid": 48, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 44, "dst_nuid": 48, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 48, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 49, "dst_nuid": 48, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "Image", "dt": 2, "uid": 3, "index": 0, "type": 0, "is_connected": true }, { "name": "hue", "dt": 0, "uid": 4, "index": 1, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 2, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 3, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 4, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 5, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 6, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 7, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 8, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 9, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 10, "type": 0, "is_connected": false }, { "name": "light", "dt": 13, "uid": 18, "index": 11, "type": 0, "is_connected": true }, { "name": "light index", "dt": 0, "uid": 19, "index": 12, "type": 0 } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "url_texture_generator", "x": 300, "y": 802, "uid": 80, "state": { "url": "/data/image/57422df4c11a76d5531ef36299d5d1ac5b6b6739.jpg" }, "title": "Image" }, { "plugin": "knob_float_generator", "x": 403, "y": 802, "uid": 81, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 476, "y": 802, "uid": 82, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 555, "y": 802, "uid": 83, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 636, "y": 802, "uid": 84, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 557, "y": 868, "uid": 85, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 476, "y": 868, "uid": 86, "state": { "val": 0 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 435, "y": 940, "uid": 87, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 527, "y": 940, "uid": 88, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 615, "y": 940, "uid": 89, "state": { "val": 0 }, "title": "Ambient Lum" }, { "plugin": "graph", "x": 781, "y": 193, "uid": 90, "dsid": 5, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "0": 0, "1": 1, "2": 2 }, "output_sids": { "3": 3 } }, "title": "Camera", "graph": { "node_uid": 25, "uid": 69, "parent_uid": 43, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 74, "y": 173, "uid": 0, "dsid": 15, "state": { "slot_id": 0 }, "title": "rotation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 129, "y": 89, "uid": 1, "dsid": 15, "state": { "slot_id": 0 }, "title": "elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 52, "y": 48, "uid": 2, "dsid": 15, "state": { "slot_id": 0 }, "title": "dolly", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 558, "y": 35, "uid": 3, "dsid": 15, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "input", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "perspective_camera", "x": 448, "y": 75, "uid": 4 }, { "plugin": "vector", "x": 218, "y": 28, "uid": 5 }, { "plugin": "rotation_xyz_matrix", "x": 160, "y": 153, "uid": 6 }, { "plugin": "vector_transform", "x": 342, "y": 77, "uid": 7 }, { "plugin": "vector", "x": 219, "y": 267, "uid": 21 }, { "plugin": "vector_transform", "x": 341, "y": 190, "uid": 22 }, { "plugin": "const_float_generator", "x": 104, "y": 287, "uid": 23, "state": { "val": 0.5 } }, { "plugin": "negate_modulator", "x": 132, "y": 33, "uid": 24 } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 7, "dst_nuid": 4, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 21, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 22, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 22, "dst_nuid": 4, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 0, "dst_nuid": 6, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 2, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "rotation", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "elevation", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "dolly", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 562, "y": 150, "uid": 91, "state": { "val": 0, "min": -180, "max": 180 }, "title": "Rotation" }, { "plugin": "slider_float_generator", "x": 562, "y": 233, "uid": 92, "state": { "val": 2.4, "min": -20, "max": 20 }, "title": "Elevation" }, { "plugin": "slider_float_generator", "x": 562, "y": 316, "uid": 93, "state": { "val": 4.6, "min": 0, "max": 10 }, "title": "Dolly" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 0, "src_slot": 0, "dst_slot": 11, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 0, "src_slot": 0, "dst_slot": 12, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 13, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 0, "src_slot": 0, "dst_slot": 14, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 0, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 0, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 0, "src_slot": 0, "dst_slot": 10, "dst_dyn": true }, { "src_nuid": 17, "dst_nuid": 0, "src_slot": 0, "dst_slot": 17, "dst_dyn": true }, { "src_nuid": 18, "dst_nuid": 0, "src_slot": 0, "dst_slot": 18, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 0, "src_slot": 0, "dst_slot": 19, "dst_dyn": true }, { "src_nuid": 42, "dst_nuid": 0, "src_slot": 0, "dst_slot": 21, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 33, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 34, "dst_nuid": 31, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 31, "dst_nuid": 42, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 37, "dst_nuid": 36, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 37, "dst_nuid": 36, "src_slot": 0, "dst_slot": 1, "dst_dyn": true, "offset": 1 }, { "src_nuid": 37, "dst_nuid": 36, "src_slot": 0, "dst_slot": 2, "dst_dyn": true, "offset": 2 }, { "src_nuid": 36, "dst_nuid": 42, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 39, "dst_nuid": 38, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 40, "dst_nuid": 38, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 41, "dst_nuid": 38, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 38, "dst_nuid": 42, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 6, "dst_dyn": true, "offset": 1 }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 7, "dst_dyn": true, "offset": 2 }, { "src_nuid": 14, "dst_nuid": 0, "src_slot": 0, "dst_slot": 15, "dst_dyn": true, "offset": 1 }, { "src_nuid": 14, "dst_nuid": 0, "src_slot": 0, "dst_slot": 16, "dst_dyn": true, "offset": 2 }, { "src_nuid": 71, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 73, "dst_nuid": 72, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 74, "dst_nuid": 72, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 75, "dst_nuid": 72, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 76, "dst_nuid": 72, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 77, "dst_nuid": 72, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 78, "dst_nuid": 72, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 80, "dst_nuid": 79, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 81, "dst_nuid": 79, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 82, "dst_nuid": 79, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 83, "dst_nuid": 79, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 84, "dst_nuid": 79, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 85, "dst_nuid": 79, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 86, "dst_nuid": 79, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 89, "dst_nuid": 79, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 88, "dst_nuid": 79, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 87, "dst_nuid": 79, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 72, "dst_nuid": 79, "src_slot": 0, "dst_slot": 11, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 79, "dst_nuid": 0, "src_slot": 0, "dst_slot": 22, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 91, "dst_nuid": 90, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 92, "dst_nuid": 90, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 93, "dst_nuid": 90, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 90, "dst_nuid": 0, "src_slot": 0, "dst_slot": 20, "src_dyn": true, "dst_dyn": true } ] } } ], "conns": [] } } ================================================ FILE: browser/patches/instancing_ifs_with_camera_and_light_out.json ================================================ { "abs_t": 28.071, "active_graph": 0, "graph_uid": 95, "root": { "node_uid": 50, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 376, "y": 455, "uid": 49, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "90": 0, "91": 1 }, "output_sids": {} }, "title": "IFS controls", "graph": { "node_uid": 92, "uid": 70, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 863, "y": 69, "uid": 0, "dsid": 24, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "5": 0, "13": 1, "25": 2, "26": 3, "27": 4, "28": 5, "29": 6, "30": 7, "31": 8, "32": 9, "33": 10, "47": 12, "48": 13, "49": 14, "50": 15, "51": 16, "52": 17, "53": 18, "54": 19, "55": 20, "56": 21, "57": 22, "58": 23 }, "output_sids": {} }, "title": "IFS system", "graph": { "node_uid": 69, "uid": 71, "parent_uid": 70, "open": true, "nodes": [ { "plugin": "instance_ifs_modulator", "x": 771, "y": 57, "uid": 0 }, { "plugin": "scene_renderer_emitter", "x": 1042, "y": 65, "uid": 1 }, { "plugin": "input_proxy", "x": 597, "y": 55, "uid": 5, "dsid": 16, "state": { "slot_id": 0 }, "title": "recursion depth", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 605, "y": 108, "uid": 13, "dsid": 16, "state": { "slot_id": 0 }, "title": "mesh", "dyn_out": [ { "name": "output", "dt": 9, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 284, "y": 47, "uid": 15, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 72, "parent_uid": 71, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 525, "y": 243, "uid": 2, "dsid": 17, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 331, "y": 241, "uid": 3 }, { "plugin": "input_proxy", "x": 173, "y": 314, "uid": 13, "dsid": 17, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 204, "y": 397, "uid": 14, "dsid": 17, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 223, "y": 456, "uid": 15, "dsid": 17, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 435, "y": 243, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 272, "y": 234, "uid": 19, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 73, "parent_uid": 71, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 456, "y": 245, "uid": 0 }, { "plugin": "output_proxy", "x": 590, "y": 257, "uid": 2, "dsid": 16, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 331, "y": 241, "uid": 3 }, { "plugin": "input_proxy", "x": 173, "y": 314, "uid": 13, "dsid": 16, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 204, "y": 397, "uid": 14, "dsid": 16, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 223, "y": 456, "uid": 15, "dsid": 16, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 479, "y": 58, "uid": 21, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "Rotate", "graph": { "node_uid": 16, "uid": 74, "parent_uid": 71, "open": true, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 385, "y": 227, "uid": 0 }, { "plugin": "output_proxy", "x": 509, "y": 216, "uid": 1, "dsid": 16, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 88, "y": 147, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 68, "y": 231, "uid": 9, "dsid": 16, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 67, "y": 353, "uid": 10, "dsid": 16, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 179, "y": 272, "uid": 13, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 75, "parent_uid": 74, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 15, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 15, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 172, "y": 352, "uid": 14, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 76, "parent_uid": 74, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 192, "y": 428, "uid": 15, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 77, "parent_uid": 74, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_dyn": true } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 114, "y": 57, "uid": 25, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 114, "y": 110, "uid": 26, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 114, "y": 165, "uid": 27, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 106, "y": 298, "uid": 28, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl scl x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 105, "y": 354, "uid": 29, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl scl y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 106, "y": 417, "uid": 30, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl scl z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 391, "y": 31, "uid": 31, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl rot x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 392, "y": 98, "uid": 32, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl rot y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 392, "y": 155, "uid": 33, "dsid": 15, "state": { "slot_id": 0 }, "title": "lvl rot z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 442, "y": 586, "uid": 36, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "branch rotate", "graph": { "node_uid": 14, "uid": 78, "parent_uid": 71, "open": true, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 385, "y": 227, "uid": 0 }, { "plugin": "output_proxy", "x": 509, "y": 216, "uid": 1, "dsid": 16, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 88, "y": 147, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 190, "y": 106, "uid": 9, "dsid": 16, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 272, "y": 181, "uid": 10, "dsid": 16, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 161, "y": 264, "uid": 11, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 79, "parent_uid": 78, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 191, "y": 341, "uid": 12, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 80, "parent_uid": 78, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 222, "y": 427, "uid": 13, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 81, "parent_uid": 78, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_dyn": true } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 438, "y": 360, "uid": 40, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "branch trnslt", "graph": { "node_uid": 17, "uid": 82, "parent_uid": 71, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 525, "y": 243, "uid": 2, "dsid": 17, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 331, "y": 241, "uid": 3 }, { "plugin": "input_proxy", "x": 173, "y": 314, "uid": 13, "dsid": 17, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 204, "y": 397, "uid": 14, "dsid": 17, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 223, "y": 456, "uid": 15, "dsid": 17, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 435, "y": 243, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 436, "y": 474, "uid": 44, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "branch scale", "graph": { "node_uid": 16, "uid": 83, "parent_uid": 71, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 456, "y": 245, "uid": 0 }, { "plugin": "output_proxy", "x": 590, "y": 257, "uid": 2, "dsid": 16, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 331, "y": 241, "uid": 3 }, { "plugin": "input_proxy", "x": 173, "y": 314, "uid": 13, "dsid": 16, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 204, "y": 397, "uid": 14, "dsid": 16, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 223, "y": 456, "uid": 15, "dsid": 16, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 330, "y": 369, "uid": 47, "dsid": 15, "state": { "slot_id": 0 }, "title": "b trn x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 330, "y": 422, "uid": 48, "dsid": 15, "state": { "slot_id": 0 }, "title": "b trn y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 328, "y": 475, "uid": 49, "dsid": 15, "state": { "slot_id": 0 }, "title": "b trn z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 329, "y": 543, "uid": 50, "dsid": 15, "state": { "slot_id": 0 }, "title": "b sc x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 330, "y": 590, "uid": 51, "dsid": 15, "state": { "slot_id": 0 }, "title": "b sc y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 329, "y": 636, "uid": 52, "dsid": 15, "state": { "slot_id": 0 }, "title": "b sc z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 327, "y": 715, "uid": 53, "dsid": 15, "state": { "slot_id": 0 }, "title": "b rot x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 326, "y": 757, "uid": 54, "dsid": 15, "state": { "slot_id": 0 }, "title": "b rot y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 327, "y": 804, "uid": 55, "dsid": 15, "state": { "slot_id": 0 }, "title": "b rot z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 922, "y": 185, "uid": 56, "dsid": 15, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 924, "y": 245, "uid": 57, "dsid": 15, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 820, "y": 412, "uid": 58, "dsid": 15, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 608, "y": 390, "uid": 64, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 84, "parent_uid": 71, "open": true, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 392, "y": 263, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 268, "y": 302, "uid": 1 }, { "plugin": "output_proxy", "x": 532, "y": 244, "uid": 2, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 229, "y": 195, "uid": 3, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 148, "y": 343, "uid": 4, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 171, "y": 500, "uid": 5, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 574, "y": 198, "uid": 66, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 85, "parent_uid": 71, "open": true, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 274, "y": 13, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 92, "y": 13, "uid": 1 }, { "plugin": "output_proxy", "x": 394, "y": 13, "uid": 2, "dsid": 8, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 197, "y": 14, "uid": 3, "dsid": 8, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 13, "uid": 4, "dsid": 8, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 71, "uid": 5, "dsid": 8, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 26, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 27, "dst_nuid": 15, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 28, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 29, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 30, "dst_nuid": 19, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 31, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 32, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 33, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 53, "dst_nuid": 36, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 54, "dst_nuid": 36, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 55, "dst_nuid": 36, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 50, "dst_nuid": 44, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 51, "dst_nuid": 44, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 52, "dst_nuid": 44, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 49, "dst_nuid": 40, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 48, "dst_nuid": 40, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 47, "dst_nuid": 40, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 56, "dst_nuid": 1, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 57, "dst_nuid": 1, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 64, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 44, "dst_nuid": 64, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 36, "dst_nuid": 64, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 64, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_dyn": true }, { "src_nuid": 66, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 66, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 66, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 21, "dst_nuid": 66, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 58, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "recursion depth", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "mesh", "dt": 9, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "lvl pos x", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "lvl pos y", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true }, { "name": "lvl pos z", "dt": 0, "uid": 4, "index": 4, "type": 0, "is_connected": true }, { "name": "lvl scl x", "dt": 0, "uid": 5, "index": 5, "type": 0, "is_connected": true }, { "name": "lvl scl y", "dt": 0, "uid": 6, "index": 6, "type": 0, "is_connected": true }, { "name": "lvl scl z", "dt": 0, "uid": 7, "index": 7, "type": 0, "is_connected": true }, { "name": "lvl rot x", "dt": 0, "uid": 8, "index": 8, "type": 0, "is_connected": true }, { "name": "lvl rot y", "dt": 0, "uid": 9, "index": 9, "type": 0, "is_connected": true }, { "name": "lvl rot z", "dt": 0, "uid": 10, "index": 10, "type": 0, "is_connected": true }, { "name": "b trn x", "dt": 0, "uid": 12, "index": 11, "type": 0, "is_connected": true }, { "name": "b trn y", "dt": 0, "uid": 13, "index": 12, "type": 0, "is_connected": true }, { "name": "b trn z", "dt": 0, "uid": 14, "index": 13, "type": 0, "is_connected": true }, { "name": "b sc x", "dt": 0, "uid": 15, "index": 14, "type": 0, "is_connected": true }, { "name": "b sc y", "dt": 0, "uid": 16, "index": 15, "type": 0, "is_connected": true }, { "name": "b sc z", "dt": 0, "uid": 17, "index": 16, "type": 0, "is_connected": true }, { "name": "b rot x", "dt": 0, "uid": 18, "index": 17, "type": 0, "is_connected": true }, { "name": "b rot y", "dt": 0, "uid": 19, "index": 18, "type": 0, "is_connected": true }, { "name": "b rot z", "dt": 0, "uid": 20, "index": 19, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 21, "index": 20, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 22, "index": 21, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 23, "index": 22, "type": 0, "is_connected": true } ] }, { "plugin": "const_float_generator", "x": 173, "y": 20, "uid": 1, "state": { "val": 5 }, "title": "recursion depth" }, { "plugin": "slider_float_generator", "x": 21, "y": 111, "uid": 2, "state": { "val": 0, "min": -2, "max": 2 }, "title": "level position x" }, { "plugin": "slider_float_generator", "x": 21, "y": 177, "uid": 3, "state": { "val": 0, "min": -2, "max": 2 }, "title": "level position y" }, { "plugin": "slider_float_generator", "x": 21, "y": 241, "uid": 4, "state": { "val": 0.04, "min": -2, "max": 2 }, "title": "level position z" }, { "plugin": "slider_float_generator", "x": 221, "y": 111, "uid": 5, "state": { "val": 1.02, "min": 0, "max": 2 }, "title": "level scale" }, { "plugin": "knob_float_generator", "x": 431, "y": 110, "uid": 8, "state": { "val": 0 }, "title": "level rotation x" }, { "plugin": "knob_float_generator", "x": 431, "y": 174, "uid": 9, "state": { "val": 0 }, "title": "level rotation y" }, { "plugin": "knob_float_generator", "x": 431, "y": 236, "uid": 10, "state": { "val": 0 }, "title": "level rotation z" }, { "plugin": "slider_float_generator", "x": 17, "y": 331, "uid": 11, "state": { "val": 0.04, "min": -2, "max": 2 }, "title": "branch position x" }, { "plugin": "slider_float_generator", "x": 17, "y": 397, "uid": 12, "state": { "val": 0.08, "min": -2, "max": 2 }, "title": "branch position y" }, { "plugin": "slider_float_generator", "x": 17, "y": 461, "uid": 13, "state": { "val": -0.04, "min": -2, "max": 2 }, "title": "branch position z" }, { "plugin": "slider_float_generator", "x": 229, "y": 332, "uid": 14, "state": { "val": 1, "min": 0, "max": 2 }, "title": "branch scale " }, { "plugin": "knob_float_generator", "x": 431, "y": 332, "uid": 17, "state": { "val": 0.05 }, "title": "branch rotation x" }, { "plugin": "knob_float_generator", "x": 431, "y": 396, "uid": 18, "state": { "val": 0 }, "title": "branch rotation y" }, { "plugin": "knob_float_generator", "x": 431, "y": 458, "uid": 19, "state": { "val": 0 }, "title": "branch rotation z" }, { "plugin": "graph", "x": 308, "y": 575, "uid": 31, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 86, "parent_uid": 70, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 525, "y": 243, "uid": 2, "dsid": 17, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 331, "y": 241, "uid": 3 }, { "plugin": "input_proxy", "x": 173, "y": 314, "uid": 13, "dsid": 17, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 204, "y": 397, "uid": 14, "dsid": 17, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 223, "y": 456, "uid": 15, "dsid": 17, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 435, "y": 243, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 104, "y": 576, "uid": 32, "state": { "val": 0, "min": -2, "max": 2 }, "title": "x position" }, { "plugin": "slider_float_generator", "x": 104, "y": 642, "uid": 33, "state": { "val": 0, "min": -2, "max": 2 }, "title": "y position" }, { "plugin": "slider_float_generator", "x": 104, "y": 706, "uid": 34, "state": { "val": 0, "min": -2, "max": 2 }, "title": "z position" }, { "plugin": "graph", "x": 406, "y": 574, "uid": 36, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 87, "parent_uid": 70, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 456, "y": 245, "uid": 0 }, { "plugin": "output_proxy", "x": 590, "y": 257, "uid": 2, "dsid": 16, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 331, "y": 241, "uid": 3 }, { "plugin": "input_proxy", "x": 173, "y": 314, "uid": 13, "dsid": 16, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 204, "y": 397, "uid": 14, "dsid": 16, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 223, "y": 456, "uid": 15, "dsid": 16, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 304, "y": 694, "uid": 37, "state": { "val": 0.105, "min": 0, "max": 0.5 }, "title": "instance size" }, { "plugin": "graph", "x": 612, "y": 601, "uid": 38, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "Rotate", "graph": { "node_uid": 14, "uid": 88, "parent_uid": 70, "open": true, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 385, "y": 227, "uid": 0 }, { "plugin": "output_proxy", "x": 509, "y": 216, "uid": 1, "dsid": 16, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 88, "y": 147, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 190, "y": 106, "uid": 9, "dsid": 16, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 272, "y": 181, "uid": 10, "dsid": 16, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 174, "y": 272, "uid": 11, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 89, "parent_uid": 88, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 178, "y": 344, "uid": 12, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 90, "parent_uid": 88, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 199, "y": 418, "uid": 13, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 0 }, "output_sids": { "8": 1 } }, "title": "Knob compute", "graph": { "node_uid": 9, "uid": 91, "parent_uid": 88, "open": true, "nodes": [ { "plugin": "add_modulator", "x": 660, "y": 204, "uid": 0 }, { "plugin": "multiply_modulator", "x": 553, "y": 165, "uid": 1 }, { "plugin": "subtract_modulator", "x": 335, "y": 296, "uid": 2 }, { "plugin": "absolute_modulator", "x": 465, "y": 321, "uid": 3 }, { "plugin": "min_modulator", "x": 382, "y": 407, "uid": 4 }, { "plugin": "const_float_generator", "x": 124, "y": 212, "uid": 5, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 118, "y": 371, "uid": 6, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "input_proxy", "x": 301, "y": 131, "uid": 7, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 764, "y": 210, "uid": 8, "dsid": 16, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_dyn": true } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 513, "y": 596, "uid": 39, "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 513, "y": 660, "uid": 40, "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 513, "y": 722, "uid": 41, "state": { "val": 0 }, "title": "Z" }, { "plugin": "graph", "x": 707, "y": 604, "uid": 42, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 92, "parent_uid": 70, "open": true, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 392, "y": 263, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 268, "y": 302, "uid": 1 }, { "plugin": "output_proxy", "x": 532, "y": 244, "uid": 2, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 229, "y": 195, "uid": 3, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 148, "y": 343, "uid": 4, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 171, "y": 500, "uid": 5, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "sphere_mesh_generator", "x": 76, "y": 19, "uid": 71, "state": { "v_res": 15, "h_res": 15 } }, { "plugin": "graph", "x": 735, "y": 804, "uid": 79, "dsid": 20, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "15": 3, "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16, "47": 18, "49": 19 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 50, "uid": 93, "parent_uid": 70, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "material_texture_modulator", "x": 1252, "y": 68, "uid": 7 }, { "plugin": "output_proxy", "x": 1361, "y": 68, "uid": 9, "dsid": 29, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 1173, "y": 143, "uid": 15, "dsid": 29, "state": { "slot_id": 0 }, "title": "Image", "dyn_out": [ { "name": "output", "dt": 2, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 23, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 23, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 23, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 23, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 23, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 564, "y": 212, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 454, "y": 148, "uid": 32, "dsid": 3, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 94, "parent_uid": 93, "open": true, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 21, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 21, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 361, "y": 242, "uid": 34, "dsid": 17, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 323, "y": 161, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 24, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 24, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 24, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 61, "y": 99, "uid": 44, "dsid": 13, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 40, "y": 52, "uid": 47, "dsid": 8, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "output", "dt": 13, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 158, "y": 22, "uid": 48 }, { "plugin": "input_proxy", "x": 54, "y": 0, "uid": 49, "dsid": 5, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 47, "dst_nuid": 48, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 44, "dst_nuid": 48, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 48, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 49, "dst_nuid": 48, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "Image", "dt": 2, "uid": 3, "index": 0, "type": 0, "is_connected": true }, { "name": "hue", "dt": 0, "uid": 4, "index": 1, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 2, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 3, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 4, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 5, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 6, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 7, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 8, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 9, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 10, "type": 0, "is_connected": false }, { "name": "light", "dt": 13, "uid": 18, "index": 11, "type": 0, "is_connected": true }, { "name": "light index", "dt": 0, "uid": 19, "index": 12, "type": 0 } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "url_texture_generator", "x": 300, "y": 802, "uid": 80, "state": { "url": "/data/image/57422df4c11a76d5531ef36299d5d1ac5b6b6739.jpg" }, "title": "Image" }, { "plugin": "knob_float_generator", "x": 403, "y": 802, "uid": 81, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 476, "y": 802, "uid": 82, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 555, "y": 802, "uid": 83, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 636, "y": 802, "uid": 84, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 557, "y": 868, "uid": 85, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 476, "y": 868, "uid": 86, "state": { "val": 0 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 435, "y": 940, "uid": 87, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 527, "y": 940, "uid": 88, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 615, "y": 940, "uid": 89, "state": { "val": 0 }, "title": "Ambient Lum" }, { "plugin": "input_proxy", "x": 425, "y": 1063, "uid": 90, "dsid": 2, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "output", "dt": 13, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 675, "y": 501, "uid": 91, "dsid": 2, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 0, "src_slot": 0, "dst_slot": 11, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 0, "src_slot": 0, "dst_slot": 12, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 13, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 0, "src_slot": 0, "dst_slot": 14, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 0, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 0, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 0, "src_slot": 0, "dst_slot": 10, "dst_dyn": true }, { "src_nuid": 17, "dst_nuid": 0, "src_slot": 0, "dst_slot": 17, "dst_dyn": true }, { "src_nuid": 18, "dst_nuid": 0, "src_slot": 0, "dst_slot": 18, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 0, "src_slot": 0, "dst_slot": 19, "dst_dyn": true }, { "src_nuid": 42, "dst_nuid": 0, "src_slot": 0, "dst_slot": 21, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 33, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 34, "dst_nuid": 31, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 31, "dst_nuid": 42, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 37, "dst_nuid": 36, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 37, "dst_nuid": 36, "src_slot": 0, "dst_slot": 1, "dst_dyn": true, "offset": 1 }, { "src_nuid": 37, "dst_nuid": 36, "src_slot": 0, "dst_slot": 2, "dst_dyn": true, "offset": 2 }, { "src_nuid": 36, "dst_nuid": 42, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 39, "dst_nuid": 38, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 40, "dst_nuid": 38, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 41, "dst_nuid": 38, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 38, "dst_nuid": 42, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 6, "dst_dyn": true, "offset": 1 }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 7, "dst_dyn": true, "offset": 2 }, { "src_nuid": 14, "dst_nuid": 0, "src_slot": 0, "dst_slot": 15, "dst_dyn": true, "offset": 1 }, { "src_nuid": 14, "dst_nuid": 0, "src_slot": 0, "dst_slot": 16, "dst_dyn": true, "offset": 2 }, { "src_nuid": 71, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 80, "dst_nuid": 79, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 81, "dst_nuid": 79, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 82, "dst_nuid": 79, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 83, "dst_nuid": 79, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 84, "dst_nuid": 79, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 85, "dst_nuid": 79, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 86, "dst_nuid": 79, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 89, "dst_nuid": 79, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 88, "dst_nuid": 79, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 87, "dst_nuid": 79, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 79, "dst_nuid": 0, "src_slot": 0, "dst_slot": 22, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 90, "dst_nuid": 79, "src_slot": 0, "dst_slot": 11, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 91, "dst_nuid": 0, "src_slot": 0, "dst_slot": 20, "src_connected": true, "src_dyn": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "light", "dt": 13, "uid": 0, "index": 0, "type": 0 }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0 } ] } ], "conns": [] } } ================================================ FILE: browser/patches/instancing_texture.json ================================================ { "abs_t": 172.168, "active_graph": 0, "graph_uid": 101, "root": { "node_uid": 51, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 376, "y": 543, "uid": 50, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": {} }, "title": "Texture instancing", "graph": { "node_uid": 31, "uid": 95, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 781, "y": 558, "uid": 0, "dsid": 9, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "15": 3, "21": 4, "22": 5, "23": 6, "24": 7, "25": 8 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 27, "uid": 96, "parent_uid": 95, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 240, "y": 43, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 348, "y": 43, "uid": 5 }, { "plugin": "toggle_button", "x": 236, "y": 120, "uid": 6, "state": { "enabled": true }, "title": "Alpha clip" }, { "plugin": "material_texture_modulator", "x": 463, "y": 43, "uid": 7 }, { "plugin": "output_proxy", "x": 572, "y": 43, "uid": 9, "dsid": 16, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 109, "y": 44, "uid": 10 }, { "plugin": "input_proxy", "x": 384, "y": 118, "uid": 15, "dsid": 16, "state": { "slot_id": 0 }, "title": "Image", "dyn_out": [ { "name": "output", "dt": 2, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 11, "y": 109, "uid": 21, "dsid": 10, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 11, "y": 176, "uid": 22, "dsid": 10, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 20, "y": 237, "uid": 23, "dsid": 10, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 48, "y": 303, "uid": 24, "dsid": 10, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 11, "y": 45, "uid": 25, "dsid": 10, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 118, "y": 122, "uid": 26 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "Image", "dt": 2, "uid": 3, "index": 0, "type": 0, "is_connected": true }, { "name": "hue", "dt": 0, "uid": 4, "index": 1, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 2, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 3, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 4, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 5, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "url_texture_generator", "x": 224, "y": 382, "uid": 1, "state": { "url": "/data/image/57422df4c11a76d5531ef36299d5d1ac5b6b6739.jpg" }, "title": "Image" }, { "plugin": "knob_float_generator", "x": 333, "y": 382, "uid": 2, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 410, "y": 382, "uid": 3, "state": { "val": 0.99 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 494, "y": 382, "uid": 4, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 581, "y": 382, "uid": 5, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 509, "y": 453, "uid": 6, "state": { "mode": 4 } }, { "plugin": "graph", "x": 949, "y": 151, "uid": 7, "dsid": 10, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "3": 0, "4": 1, "5": 2, "6": 3, "7": 4, "8": 5, "11": 7, "12": 8, "13": 9 }, "output_sids": {} }, "title": "Texture instancing", "graph": { "node_uid": 14, "uid": 97, "parent_uid": 95, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 782, "y": 194, "uid": 0 }, { "plugin": "instance_texture_modulator", "x": 571, "y": 113, "uid": 1 }, { "plugin": "input_proxy", "x": 454, "y": 95, "uid": 3, "dsid": 6, "state": { "slot_id": 0 }, "title": "count", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 349, "y": 104, "uid": 4, "dsid": 6, "state": { "slot_id": 0 }, "title": "mesh", "dyn_out": [ { "name": "output", "dt": 9, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 427, "y": 224, "uid": 5, "dsid": 6, "state": { "slot_id": 0 }, "title": "texture", "dyn_out": [ { "name": "output", "dt": 2, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 415, "y": 476, "uid": 6, "dsid": 6, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 657, "y": 244, "uid": 7, "dsid": 5, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 623, "y": 299, "uid": 8, "dsid": 5, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector", "x": 255, "y": 196, "uid": 10, "title": "scale of instance map" }, { "plugin": "input_proxy", "x": 35, "y": 202, "uid": 11, "dsid": 5, "state": { "slot_id": 0 }, "title": "scale x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 39, "y": 315, "uid": 12, "dsid": 6, "state": { "slot_id": 0 }, "title": "scale z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 35, "y": 261, "uid": 13, "dsid": 6, "state": { "slot_id": 0 }, "title": "scale y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 2, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 11, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 13, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 12, "dst_nuid": 10, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "count", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "mesh", "dt": 9, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "texture", "dt": 2, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 3, "index": 3, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 4, "index": 4, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 5, "index": 5, "type": 0, "is_connected": true }, { "name": "scale x", "dt": 0, "uid": 7, "index": 6, "type": 0, "is_connected": true }, { "name": "scale z", "dt": 0, "uid": 8, "index": 7, "type": 0, "is_connected": true }, { "name": "scale y", "dt": 0, "uid": 9, "index": 8, "type": 0, "is_connected": true } ] }, { "plugin": "quad_mesh_generator", "x": 220, "y": 28, "uid": 8 }, { "plugin": "const_float_generator", "x": 399, "y": 26, "uid": 9, "state": { "val": 200 }, "title": "Instance Count" }, { "plugin": "url_texture_generator", "x": 285, "y": 26, "uid": 10, "state": { "url": "/data/image/57422df4c11a76d5531ef36299d5d1ac5b6b6739.jpg" }, "title": "Texture map" }, { "plugin": "graph", "x": 569, "y": 639, "uid": 16, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 98, "parent_uid": 95, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 189, "y": 49, "uid": 0 }, { "plugin": "output_proxy", "x": 278, "y": 49, "uid": 2, "dsid": 7, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 73, "y": 49, "uid": 3 }, { "plugin": "input_proxy", "x": 7, "y": 9, "uid": 13, "dsid": 7, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 69, "uid": 14, "dsid": 7, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 132, "uid": 15, "dsid": 7, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 219, "y": 93, "uid": 17, "state": { "val": 0.13333333333333333, "min": "0", "max": "1" }, "title": "instance size" }, { "plugin": "graph", "x": 569, "y": 520, "uid": 18, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 99, "parent_uid": 95, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 291, "y": 50, "uid": 2, "dsid": 8, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 74, "y": 50, "uid": 3 }, { "plugin": "input_proxy", "x": 8, "y": 10, "uid": 13, "dsid": 8, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 70, "uid": 14, "dsid": 8, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 129, "uid": 15, "dsid": 8, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 191, "y": 50, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 219, "y": 160, "uid": 19, "state": { "val": 0, "min": -100, "max": 100 }, "title": "Texture map position X" }, { "plugin": "slider_float_generator", "x": 219, "y": 225, "uid": 20, "state": { "val": 0, "min": "-100", "max": "100" }, "title": "Texture map position Y" }, { "plugin": "slider_float_generator", "x": 218, "y": 292, "uid": 21, "state": { "val": -10.000000000000007, "min": "-100", "max": "100" }, "title": "Texture map position Z" }, { "plugin": "slider_float_generator", "x": 419, "y": 94, "uid": 22, "state": { "val": 9.666666666666666, "min": "0", "max": "10" }, "title": "Texture map scale x" }, { "plugin": "slider_float_generator", "x": 418, "y": 173, "uid": 23, "state": { "val": 0, "min": "0", "max": "10" }, "title": "Texture map scale y" }, { "plugin": "slider_float_generator", "x": 418, "y": 247, "uid": 24, "state": { "val": 7.833333333333333, "min": "0", "max": "10" }, "title": "Texture map scale z" }, { "plugin": "graph", "x": 706, "y": 204, "uid": 26, "dsid": 5, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "0": 0, "1": 1, "2": 2 }, "output_sids": { "3": 3 } }, "title": "Camera", "graph": { "node_uid": 25, "uid": 100, "parent_uid": 95, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 74, "y": 173, "uid": 0, "dsid": 15, "state": { "slot_id": 0 }, "title": "rotation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 129, "y": 89, "uid": 1, "dsid": 15, "state": { "slot_id": 0 }, "title": "elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 52, "y": 48, "uid": 2, "dsid": 15, "state": { "slot_id": 0 }, "title": "dolly", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 558, "y": 35, "uid": 3, "dsid": 15, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "input", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "perspective_camera", "x": 448, "y": 75, "uid": 4 }, { "plugin": "vector", "x": 218, "y": 28, "uid": 5 }, { "plugin": "rotation_xyz_matrix", "x": 160, "y": 153, "uid": 6 }, { "plugin": "vector_transform", "x": 342, "y": 77, "uid": 7 }, { "plugin": "vector", "x": 219, "y": 267, "uid": 21 }, { "plugin": "vector_transform", "x": 341, "y": 190, "uid": 22 }, { "plugin": "const_float_generator", "x": 104, "y": 287, "uid": 23, "state": { "val": 0.5 } }, { "plugin": "negate_modulator", "x": 132, "y": 33, "uid": 24 } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 7, "dst_nuid": 4, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 21, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 22, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 22, "dst_nuid": 4, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 0, "dst_nuid": 6, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 2, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "rotation", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "elevation", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "dolly", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 13, "y": 118, "uid": 27, "state": { "val": -5.999999999999986, "min": "-180", "max": "180" }, "title": "Rotation" }, { "plugin": "slider_float_generator", "x": 13, "y": 201, "uid": 28, "state": { "val": 4, "min": "-20", "max": "40" }, "title": "Elevation" }, { "plugin": "slider_float_generator", "x": 13, "y": 284, "uid": 29, "state": { "val": 9.666666666666666, "min": "0", "max": "10" }, "title": "Dolly" }, { "plugin": "concatenate_matrix_modulator", "x": 748, "y": 471, "uid": 30 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 0, "dst_nuid": 7, "src_slot": 0, "dst_slot": 3, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 22, "dst_nuid": 7, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 23, "dst_nuid": 7, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 24, "dst_nuid": 7, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 17, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 17, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1, "dst_dyn": true, "offset": 1 }, { "src_nuid": 17, "dst_nuid": 16, "src_slot": 0, "dst_slot": 2, "dst_dyn": true, "offset": 2 }, { "src_nuid": 19, "dst_nuid": 18, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 20, "dst_nuid": 18, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 21, "dst_nuid": 18, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 27, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 28, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 29, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 26, "dst_nuid": 7, "src_slot": 0, "dst_slot": 4, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 30, "dst_nuid": 7, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 18, "dst_nuid": 30, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 30, "src_slot": 0, "dst_slot": 0, "src_dyn": true } ] } } ], "conns": [] } } ================================================ FILE: browser/patches/interaction_keypress_number_up_down.json ================================================ { "abs_t": 184.309, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 15, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 441, "y": 453, "uid": 10, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "10": 0, "11": 1, "13": 3 }, "output_sids": { "12": 2 } }, "title": "Counter up / down", "graph": { "node_uid": 15, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "register_local_read", "x": 386, "y": 243, "uid": 2, "dsid": 1, "state": { "slot_id": 0 }, "title": "state", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "if_else_modulator", "x": 584, "y": 280, "uid": 3 }, { "plugin": "subtract_modulator", "x": 461, "y": 375, "uid": 4 }, { "plugin": "add_modulator", "x": 712, "y": 525, "uid": 6 }, { "plugin": "if_else_modulator", "x": 817, "y": 453, "uid": 7 }, { "plugin": "register_local_write", "x": 953, "y": 382, "uid": 9, "dsid": 1, "state": { "slot_id": 0 }, "title": "state", "dyn_in": [ { "name": "value", "dt": 8, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 124, "y": 229, "uid": 10, "dsid": 1, "state": { "slot_id": 0 }, "title": "Key for up", "dyn_out": [ { "name": "input", "dt": 7, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 369, "y": 636, "uid": 11, "dsid": 1, "state": { "slot_id": 0 }, "title": "Key for down", "dyn_out": [ { "name": "input", "dt": 7, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 989, "y": 544, "uid": 12, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "output", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "def": null, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 143, "y": 487, "uid": 13, "dsid": 1, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "input", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "float_display", "x": 952, "y": 457, "uid": 14 } ], "conns": [ { "src_nuid": 2, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 7, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "offset": 3 }, { "src_nuid": 3, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 10, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 13, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 13, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "offset": 2 } ], "registers": [ { "id": "state", "dt": 8 } ] }, "dyn_in": [ { "name": "Key for up", "dt": 7, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "Key for down", "dt": 7, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "Speed", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "float", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "key_press_generator", "x": 245, "y": 438, "uid": 11, "state": { "key": 87, "type": 0 } }, { "plugin": "key_press_generator", "x": 247, "y": 503, "uid": 12, "state": { "key": 83, "type": 0 } }, { "plugin": "float_display", "x": 656, "y": 431, "uid": 13 }, { "plugin": "const_float_generator", "x": 297, "y": 567, "uid": 14, "state": { "val": 1 }, "title": "Speed" } ], "conns": [ { "src_nuid": 11, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "dst_connected": false, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 10, "src_slot": 0, "dst_slot": 2, "dst_dyn": true } ], "registers": [ { "id": "state", "dt": 0 } ] } } ================================================ FILE: browser/patches/interaction_up_and_down_counter_with_init_and_clamp.json ================================================ { "abs_t": 118.223, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 36, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 636, "y": 594, "uid": 28, "dsid": 7, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "21": 1, "22": 2, "23": 3, "24": 4, "25": 5, "26": 6 }, "output_sids": { "20": 0 } }, "title": "Up / Down counter", "graph": { "node_uid": 27, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "register_local_read", "x": 691, "y": 371, "uid": 2, "dsid": 1, "state": { "slot_id": 0 }, "title": "state", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "float_display", "x": 1089, "y": 544, "uid": 4 }, { "plugin": "register_local_write", "x": 1089, "y": 490, "uid": 5, "dsid": 1, "state": { "slot_id": 0 }, "title": "state", "dyn_in": [ { "name": "value", "dt": 8, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "multiply_modulator", "x": 545, "y": 547, "uid": 6 }, { "plugin": "delta_t_generator", "x": 431, "y": 599, "uid": 7 }, { "plugin": "convert_bool_float_modulator", "x": 350, "y": 334, "uid": 8 }, { "plugin": "negate_modulator", "x": 457, "y": 334, "uid": 9 }, { "plugin": "convert_bool_float_modulator", "x": 348, "y": 464, "uid": 10 }, { "plugin": "add_modulator", "x": 554, "y": 373, "uid": 11 }, { "plugin": "multiply_modulator", "x": 647, "y": 463, "uid": 12 }, { "plugin": "add_modulator", "x": 758, "y": 412, "uid": 13 }, { "plugin": "if_else_modulator", "x": 870, "y": 368, "uid": 14 }, { "plugin": "initialise_generator", "x": 786, "y": 334, "uid": 15 }, { "plugin": "clamp_modulator", "x": 992, "y": 492, "uid": 17 }, { "plugin": "output_proxy", "x": 1091, "y": 408, "uid": 20, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "output", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "def": null, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 137, "y": 166, "uid": 21, "dsid": 1, "state": { "slot_id": 0 }, "title": "Keypress increase", "dyn_out": [ { "name": "input", "dt": 7, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 138, "y": 506, "uid": 22, "dsid": 2, "state": { "slot_id": 0 }, "title": "Keypress decrease", "dyn_out": [ { "name": "input", "dt": 7, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 296, "y": 683, "uid": 23, "dsid": 1, "state": { "slot_id": 0 }, "title": "speed", "dyn_out": [ { "name": "input", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 788, "y": 481, "uid": 24, "dsid": 1, "state": { "slot_id": 0 }, "title": "init to", "dyn_out": [ { "name": "input", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 699, "y": 634, "uid": 25, "dsid": 1, "state": { "slot_id": 0 }, "title": "Minimum", "dyn_out": [ { "name": "input", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 704, "y": 718, "uid": 26, "dsid": 2, "state": { "slot_id": 0 }, "title": "Maximum", "dyn_out": [ { "name": "input", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 7, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 12, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 8, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 10, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 12, "dst_nuid": 13, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 14, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 15, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 17, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 2 }, { "src_nuid": 21, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 14, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 17, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ], "registers": [ { "id": "state", "dt": 8 } ] }, "dyn_in": [ { "name": "Keypress increase", "dt": 7, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Keypress decrease", "dt": 7, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "speed", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true }, { "name": "init to", "dt": 0, "uid": 4, "index": 3, "type": 0, "is_connected": true }, { "name": "Minimum", "dt": 0, "uid": 5, "index": 4, "type": 0, "is_connected": true }, { "name": "Maximum", "dt": 0, "uid": 6, "index": 5, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "float", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "key_press_generator", "x": 281, "y": 597, "uid": 29, "state": { "key": 87, "type": 0 }, "title": "Key to increase" }, { "plugin": "key_press_generator", "x": 281, "y": 659, "uid": 30, "state": { "key": 83, "type": 0 }, "title": "Key to decrease" }, { "plugin": "float_display", "x": 886, "y": 513, "uid": 31 }, { "plugin": "const_float_generator", "x": 426, "y": 596, "uid": 32, "state": { "val": 10 }, "title": "Speed" }, { "plugin": "const_float_generator", "x": 426, "y": 643, "uid": 33, "state": { "val": 0 }, "title": "Initial value" }, { "plugin": "const_float_generator", "x": 520, "y": 596, "uid": 34, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "const_float_generator", "x": 521, "y": 641, "uid": 35, "state": { "val": 100 }, "title": "Maximum" } ], "conns": [ { "src_nuid": 29, "dst_nuid": 28, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 30, "dst_nuid": 28, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 28, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 32, "dst_nuid": 28, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 33, "dst_nuid": 28, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 34, "dst_nuid": 28, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 28, "src_slot": 0, "dst_slot": 5, "dst_dyn": true } ], "registers": [ { "id": "state", "dt": 0 } ] } } ================================================ FILE: browser/patches/interaction_up_down_counter_simple.json ================================================ { "abs_t": 173.383, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 27, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 331, "y": 342, "uid": 22, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "15": 1, "16": 2, "17": 3 }, "output_sids": { "14": 0 } }, "title": "Up / Down counter", "graph": { "node_uid": 18, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "register_local_read", "x": 798, "y": 371, "uid": 2, "dsid": 1, "state": { "slot_id": 0 }, "title": "state", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "register_local_write", "x": 970, "y": 412, "uid": 5, "dsid": 1, "state": { "slot_id": 0 }, "title": "state", "dyn_in": [ { "name": "value", "dt": 8, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "multiply_modulator", "x": 652, "y": 547, "uid": 6 }, { "plugin": "delta_t_generator", "x": 538, "y": 599, "uid": 7 }, { "plugin": "convert_bool_float_modulator", "x": 457, "y": 334, "uid": 8 }, { "plugin": "negate_modulator", "x": 564, "y": 334, "uid": 9 }, { "plugin": "convert_bool_float_modulator", "x": 455, "y": 464, "uid": 10 }, { "plugin": "add_modulator", "x": 661, "y": 373, "uid": 11 }, { "plugin": "multiply_modulator", "x": 754, "y": 463, "uid": 12 }, { "plugin": "add_modulator", "x": 865, "y": 412, "uid": 13 }, { "plugin": "output_proxy", "x": 956, "y": 160, "uid": 14, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "output", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "def": null, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 381, "y": 594, "uid": 15, "dsid": 1, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "input", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 218, "y": 198, "uid": 16, "dsid": 1, "state": { "slot_id": 0 }, "title": "Key press increase", "dyn_out": [ { "name": "input", "dt": 7, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 206, "y": 489, "uid": 17, "dsid": 2, "state": { "slot_id": 0 }, "title": "Key press decrease", "dyn_out": [ { "name": "input", "dt": 7, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 13, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 7, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 12, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 8, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 10, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 12, "dst_nuid": 13, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 15, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true } ], "registers": [ { "id": "state", "dt": 8 } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Key press increase", "dt": 7, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Key press decrease", "dt": 7, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "float", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "float_display", "x": 552, "y": 336, "uid": 23 }, { "plugin": "const_float_generator", "x": 227, "y": 480, "uid": 24, "state": { "val": 1 }, "title": "Speed" }, { "plugin": "key_press_generator", "x": 170, "y": 350, "uid": 25, "state": { "key": 37, "type": 0 } }, { "plugin": "key_press_generator", "x": 170, "y": 416, "uid": 26, "state": { "key": 39, "type": 0 } } ], "conns": [ { "src_nuid": 22, "dst_nuid": 23, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 25, "dst_nuid": 22, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 26, "dst_nuid": 22, "src_slot": 0, "dst_slot": 2, "dst_dyn": true } ], "registers": [ { "id": "state", "dt": 0 } ] } } ================================================ FILE: browser/patches/material_all_texture_types.json ================================================ { "abs_t": 200.128, "active_graph": 0, "graph_uid": 9, "root": { "node_uid": 13, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "material_texture_modulator", "x": 221, "y": 55, "uid": 1 }, { "plugin": "texture_type_generator", "x": 69, "y": 54, "uid": 2, "state": { "type": 0 } }, { "plugin": "url_texture_generator", "x": 108, "y": 109, "uid": 3, "state": { "url": "" } }, { "plugin": "material_texture_modulator", "x": 226, "y": 176, "uid": 4 }, { "plugin": "texture_type_generator", "x": 66, "y": 171, "uid": 5, "state": { "type": 2 } }, { "plugin": "url_texture_generator", "x": 105, "y": 227, "uid": 6, "state": { "url": "" } }, { "plugin": "material_texture_modulator", "x": 471, "y": 56, "uid": 7 }, { "plugin": "texture_type_generator", "x": 317, "y": 56, "uid": 8, "state": { "type": 1 } }, { "plugin": "url_texture_generator", "x": 357, "y": 109, "uid": 9, "state": { "url": "" } }, { "plugin": "material_texture_modulator", "x": 477, "y": 175, "uid": 10 }, { "plugin": "texture_type_generator", "x": 323, "y": 175, "uid": 11, "state": { "type": 3 } }, { "plugin": "url_texture_generator", "x": 363, "y": 228, "uid": 12, "state": { "url": "" } } ], "conns": [ { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 1, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 4, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 7, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 11, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 10, "src_slot": 0, "dst_slot": 2 } ] } } ================================================ FILE: browser/patches/material_chain_with_hsla_and_blend_out.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 3, "root": { "node_uid": 11, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 620, "y": 206, "uid": 0, "dsid": 18, "state": { "enabled": true, "input_sids": { "15": 3, "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 47, "uid": 1, "parent_uid": 0, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "material_texture_modulator", "x": 1252, "y": 68, "uid": 7 }, { "plugin": "output_proxy", "x": 1361, "y": 68, "uid": 9, "dsid": 18, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 1173, "y": 143, "uid": 15, "dsid": 18, "state": { "slot_id": 0 }, "title": "Image", "dyn_out": [ { "name": "output", "dt": 2, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 12, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 12, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 12, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 12, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 12, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 574, "y": 162, "uid": 28, "state": { "enabled": false }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 470, "y": 149, "uid": 32, "dsid": 3, "state": { "enabled": true, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 2, "parent_uid": 1, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 10, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 10, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 426, "y": 241, "uid": 34, "dsid": 6, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 362, "y": 146, "uid": 36, "state": { "enabled": true }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 13, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 13, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 13, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 58, "y": 70, "uid": 44, "dsid": 2, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 44, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "Image", "dt": 2, "uid": 3, "index": 0, "type": 0, "is_connected": true }, { "name": "hue", "dt": 0, "uid": 4, "index": 1, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 2, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 3, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 4, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 5, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 6, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 7, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 8, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 9, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 10, "type": 0 } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "url_texture_generator", "x": 203, "y": 206, "uid": 1, "state": { "url": "/data/image/f0e870569e5a143a8d3be0722e38e523141e4248.png" }, "title": "Image" }, { "plugin": "knob_float_generator", "x": 306, "y": 206, "uid": 2, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 379, "y": 206, "uid": 3, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 458, "y": 206, "uid": 4, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 539, "y": 206, "uid": 5, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 460, "y": 272, "uid": 6, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 379, "y": 272, "uid": 7, "state": { "val": 0 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 338, "y": 344, "uid": 8, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 430, "y": 344, "uid": 9, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 518, "y": 344, "uid": 10, "state": { "val": 0 }, "title": "Ambient Lum" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 7, "dst_nuid": 0, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 0, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 0, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 0, "src_slot": 0, "dst_slot": 7, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/material_chain_with_image_out.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 2, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 532, "y": 300, "uid": 0, "dsid": 4, "state": { "enabled": true, "input_sids": { "15": 3 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 18, "uid": 1, "parent_uid": 0, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 488, "y": 182, "uid": 1 }, { "plugin": "color_picker", "x": 175, "y": 207, "uid": 2, "state": { "hue": 0, "sat": 0.03, "lum": 1 }, "title": "Color picker" }, { "plugin": "alpha_modulator", "x": 394, "y": 280, "uid": 3 }, { "plugin": "knob_float_generator", "x": 282, "y": 354, "uid": 4, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "material_alpha_clip_modulator", "x": 607, "y": 182, "uid": 5 }, { "plugin": "toggle_button", "x": 484, "y": 258, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "material_texture_modulator", "x": 726, "y": 182, "uid": 7 }, { "plugin": "output_proxy", "x": 836, "y": 182, "uid": 9, "dsid": 5, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 336, "y": 123, "uid": 10 }, { "plugin": "blend_mode_generator", "x": 118, "y": 356, "uid": 12, "state": { "mode": 4 } }, { "plugin": "input_proxy", "x": 644, "y": 258, "uid": 15, "dsid": 5, "state": { "slot_id": 0 }, "title": "Image", "dyn_out": [ { "name": "output", "dt": 2, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_z_buffer_modulator", "x": 144, "y": 73, "uid": 16 }, { "plugin": "toggle_button", "x": 16, "y": 93, "uid": 17, "state": { "enabled": true }, "title": "Depth test" } ], "conns": [ { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 12, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 17, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "Image", "dt": 2, "uid": 3, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "url_texture_generator", "x": 408, "y": 320, "uid": 1, "state": { "url": "/data/image/f0e870569e5a143a8d3be0722e38e523141e4248.png" }, "title": "Image" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/material_full_material_chain.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 11, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 621, "y": 391, "uid": 0, "dsid": 20, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "15": 3, "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16, "47": 18, "49": 19 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 53, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1054, "y": 73, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1176, "y": 73, "uid": 5 }, { "plugin": "toggle_button", "x": 1064, "y": 151, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "material_texture_modulator", "x": 1288, "y": 73, "uid": 7 }, { "plugin": "output_proxy", "x": 1396, "y": 73, "uid": 9, "dsid": 30, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 839, "y": 73, "uid": 10 }, { "plugin": "input_proxy", "x": 1207, "y": 150, "uid": 15, "dsid": 30, "state": { "slot_id": 0 }, "title": "Image", "dyn_out": [ { "name": "output", "dt": 2, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 866, "y": 279, "uid": 21, "dsid": 24, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 803, "y": 334, "uid": 22, "dsid": 24, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 814, "y": 395, "uid": 23, "dsid": 24, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 856, "y": 457, "uid": 24, "dsid": 24, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 739, "y": 204, "uid": 25, "dsid": 24, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 943, "y": 296, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 706, "y": 72, "uid": 27 }, { "plugin": "toggle_button", "x": 573, "y": 162, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 559, "y": 73, "uid": 31 }, { "plugin": "input_proxy", "x": 375, "y": 234, "uid": 34, "dsid": 18, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 432, "y": 73, "uid": 35 }, { "plugin": "toggle_button", "x": 323, "y": 161, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 83, "y": 181, "uid": 39, "dsid": 25, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 244, "uid": 40, "dsid": 25, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 56, "y": 305, "uid": 41, "dsid": 25, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 200, "uid": 43 }, { "plugin": "input_proxy", "x": 17, "y": 38, "uid": 44, "dsid": 14, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 106, "y": 109, "uid": 47, "dsid": 9, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "output", "dt": 13, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 169, "y": 22, "uid": 48 }, { "plugin": "input_proxy", "x": 18, "y": 93, "uid": 49, "dsid": 6, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "toggle_button", "x": 584, "y": 231, "uid": 50, "state": { "enabled": true }, "title": "Depth write" }, { "plugin": "multiply_modulator", "x": 479, "y": 251, "uid": 51 }, { "plugin": "const_float_generator", "x": 353, "y": 296, "uid": 52, "state": { "val": 10 } } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 47, "dst_nuid": 48, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 44, "dst_nuid": 48, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 48, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 49, "dst_nuid": 48, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 50, "dst_nuid": 27, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 34, "dst_nuid": 51, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 52, "dst_nuid": 51, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 51, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "Image", "dt": 2, "uid": 3, "index": 0, "type": 0, "is_connected": true }, { "name": "hue", "dt": 0, "uid": 4, "index": 1, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 2, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 3, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 4, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 5, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 6, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 7, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 8, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 9, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 10, "type": 0, "is_connected": false }, { "name": "light", "dt": 13, "uid": 18, "index": 11, "type": 0, "is_connected": false }, { "name": "light index", "dt": 0, "uid": 19, "index": 12, "type": 0 } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "url_texture_generator", "x": 131, "y": 380, "uid": 1, "state": { "url": "/data/image/57422df4c11a76d5531ef36299d5d1ac5b6b6739.jpg" }, "title": "Image" }, { "plugin": "knob_float_generator", "x": 250, "y": 380, "uid": 2, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 333, "y": 381, "uid": 3, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 427, "y": 380, "uid": 4, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 515, "y": 380, "uid": 5, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 130, "y": 456, "uid": 6, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 515, "y": 530, "uid": 7, "state": { "val": 0.03 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 319, "y": 458, "uid": 8, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 419, "y": 458, "uid": 9, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 515, "y": 457, "uid": 10, "state": { "val": 0 }, "title": "Ambient Lum" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 7, "dst_nuid": 0, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 0, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 0, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 0, "src_slot": 0, "dst_slot": 7, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/material_light_chain.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 4, "root": { "node_uid": 22, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 438, "y": 94, "uid": 11, "dsid": 16, "state": { "enabled": true, "input_sids": { "13": 1, "14": 2, "15": 3, "16": 4, "17": 5, "18": 6, "19": 7, "22": 8, "23": 9, "24": 10 }, "output_sids": { "30": 15 } }, "title": "Light chain", "graph": { "node_uid": 31, "uid": 3, "parent_uid": 0, "nodes": [ { "plugin": "light_type_modulator", "x": 692, "y": 216, "uid": 0 }, { "plugin": "light_position_modulator", "x": 604, "y": 215, "uid": 2 }, { "plugin": "light_diffuse_color_modulator", "x": 200, "y": 217, "uid": 3 }, { "plugin": "light_direction_modulator", "x": 521, "y": 215, "uid": 4 }, { "plugin": "light_intensity_modulator", "x": 430, "y": 219, "uid": 5 }, { "plugin": "light_specular_color_modulator", "x": 309, "y": 219, "uid": 6 }, { "plugin": "vector", "x": 494, "y": 380, "uid": 7 }, { "plugin": "input_proxy", "x": 609, "y": 401, "uid": 13, "dsid": 9, "state": { "slot_id": 0 }, "title": "light type", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 413, "y": 532, "uid": 14, "dsid": 9, "state": { "slot_id": 0 }, "title": "Pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 581, "uid": 15, "dsid": 10, "state": { "slot_id": 0 }, "title": "Pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 627, "uid": 16, "dsid": 11, "state": { "slot_id": 0 }, "title": "Pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 350, "y": 358, "uid": 17, "dsid": 9, "state": { "slot_id": 0 }, "title": "intensity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 196, "y": 340, "uid": 18, "dsid": 9, "state": { "slot_id": 0 }, "title": "specular color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 80, "y": 347, "uid": 19, "dsid": 10, "state": { "slot_id": 0 }, "title": "diffuse color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector_normalize", "x": 361, "y": 452, "uid": 20 }, { "plugin": "vector", "x": 248, "y": 461, "uid": 21 }, { "plugin": "input_proxy", "x": 146, "y": 479, "uid": 22, "dsid": 10, "state": { "slot_id": 0 }, "title": "Dir x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 528, "uid": 23, "dsid": 11, "state": { "slot_id": 0 }, "title": "Dir y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 574, "uid": 24, "dsid": 12, "state": { "slot_id": 0 }, "title": "Dir z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 795, "y": 219, "uid": 30, "dsid": 2, "state": { "slot_id": 0 }, "title": "light", "dyn_in": [ { "name": "input", "dt": 13, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 21, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 22, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 30, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "light type", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Pos x", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Pos y", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true }, { "name": "Pos z", "dt": 0, "uid": 4, "index": 3, "type": 0, "is_connected": true }, { "name": "intensity", "dt": 0, "uid": 5, "index": 4, "type": 0, "is_connected": true }, { "name": "specular color", "dt": 3, "uid": 6, "index": 5, "type": 0, "is_connected": true }, { "name": "diffuse color", "dt": 3, "uid": 7, "index": 6, "type": 0, "is_connected": true }, { "name": "Dir x", "dt": 0, "uid": 8, "index": 7, "type": 0, "is_connected": true }, { "name": "Dir y", "dt": 0, "uid": 9, "index": 8, "type": 0, "is_connected": true }, { "name": "Dir z", "dt": 0, "uid": 10, "index": 9, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "light", "dt": 13, "uid": 15, "index": 0, "type": 1 } ] }, { "plugin": "light_type_generator", "x": 36, "y": 94, "uid": 12, "state": { "type": 0 } }, { "plugin": "slider_float_generator", "x": 238, "y": 94, "uid": 13, "state": { "val": 1.6, "min": 0, "max": 10 }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 37, "y": 167, "uid": 14, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position X" }, { "plugin": "slider_float_generator", "x": 37, "y": 233, "uid": 15, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position Y" }, { "plugin": "slider_float_generator", "x": 37, "y": 301, "uid": 16, "state": { "val": 1.2, "min": -20, "max": 20 }, "title": "Light position Z" }, { "plugin": "slider_float_generator", "x": 235, "y": 168, "uid": 17, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light direction X" }, { "plugin": "slider_float_generator", "x": 235, "y": 237, "uid": 18, "state": { "val": 0.04, "min": -2, "max": 2 }, "title": "Light direction Y" }, { "plugin": "slider_float_generator", "x": 235, "y": 302, "uid": 19, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light direction z" }, { "plugin": "color_picker", "x": 39, "y": 382, "uid": 20, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 225, "y": 383, "uid": 21, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Specular color" } ], "conns": [ { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 11, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 16, "dst_nuid": 11, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 17, "dst_nuid": 11, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 18, "dst_nuid": 11, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 11, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 20, "dst_nuid": 11, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 21, "dst_nuid": 11, "src_slot": 0, "dst_slot": 5, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/material_material_and_light.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 7, "root": { "node_uid": 51, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 646, "y": 195, "uid": 29, "dsid": 20, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "15": 3, "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16, "47": 18, "49": 19 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 51, "uid": 4, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "material_texture_modulator", "x": 1252, "y": 68, "uid": 7 }, { "plugin": "output_proxy", "x": 1361, "y": 68, "uid": 9, "dsid": 28, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 1173, "y": 143, "uid": 15, "dsid": 28, "state": { "slot_id": 0 }, "title": "Image", "dyn_out": [ { "name": "output", "dt": 2, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 22, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 22, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 22, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 22, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 22, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 564, "y": 212, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 454, "y": 148, "uid": 32, "dsid": 3, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 5, "parent_uid": 4, "open": true, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 20, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 20, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 361, "y": 242, "uid": 34, "dsid": 16, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 323, "y": 161, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 23, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 23, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 23, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 61, "y": 99, "uid": 44, "dsid": 12, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 40, "y": 52, "uid": 47, "dsid": 7, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "output", "dt": 13, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 158, "y": 22, "uid": 48 }, { "plugin": "input_proxy", "x": 54, "y": 0, "uid": 49, "dsid": 4, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "toggle_button", "x": 574, "y": 276, "uid": 50, "state": { "enabled": true }, "title": "Depth write" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 47, "dst_nuid": 48, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 44, "dst_nuid": 48, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 48, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 49, "dst_nuid": 48, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 50, "dst_nuid": 27, "src_slot": 0, "dst_slot": 2 } ] }, "dyn_in": [ { "name": "Image", "dt": 2, "uid": 3, "index": 0, "type": 0, "is_connected": true }, { "name": "hue", "dt": 0, "uid": 4, "index": 1, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 2, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 3, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 4, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 5, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 6, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 7, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 8, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 9, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 10, "type": 0, "is_connected": false }, { "name": "light", "dt": 13, "uid": 18, "index": 11, "type": 0, "is_connected": true }, { "name": "light index", "dt": 0, "uid": 19, "index": 12, "type": 0 } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "url_texture_generator", "x": 220, "y": 195, "uid": 30, "state": { "url": "/data/image/57422df4c11a76d5531ef36299d5d1ac5b6b6739.jpg" }, "title": "Image" }, { "plugin": "knob_float_generator", "x": 324, "y": 193, "uid": 31, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 396, "y": 195, "uid": 32, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 475, "y": 195, "uid": 33, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 556, "y": 195, "uid": 34, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 220, "y": 260, "uid": 35, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 220, "y": 316, "uid": 36, "state": { "val": 0.03 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 365, "y": 260, "uid": 37, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 457, "y": 260, "uid": 38, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 545, "y": 260, "uid": 39, "state": { "val": 0 }, "title": "Ambient Lum" }, { "plugin": "graph", "x": 509, "y": 428, "uid": 40, "dsid": 16, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 1, "14": 2, "15": 3, "16": 4, "17": 5, "18": 6, "19": 7, "22": 8, "23": 9, "24": 10 }, "output_sids": { "30": 15 } }, "title": "Light chain", "graph": { "node_uid": 31, "uid": 6, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "light_type_modulator", "x": 692, "y": 216, "uid": 0 }, { "plugin": "light_position_modulator", "x": 604, "y": 215, "uid": 2 }, { "plugin": "light_diffuse_color_modulator", "x": 200, "y": 217, "uid": 3 }, { "plugin": "light_direction_modulator", "x": 521, "y": 215, "uid": 4 }, { "plugin": "light_intensity_modulator", "x": 430, "y": 219, "uid": 5 }, { "plugin": "light_specular_color_modulator", "x": 309, "y": 219, "uid": 6 }, { "plugin": "vector", "x": 494, "y": 380, "uid": 7 }, { "plugin": "input_proxy", "x": 609, "y": 401, "uid": 13, "dsid": 9, "state": { "slot_id": 0 }, "title": "light type", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 413, "y": 532, "uid": 14, "dsid": 9, "state": { "slot_id": 0 }, "title": "Pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 581, "uid": 15, "dsid": 10, "state": { "slot_id": 0 }, "title": "Pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 627, "uid": 16, "dsid": 11, "state": { "slot_id": 0 }, "title": "Pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 350, "y": 358, "uid": 17, "dsid": 9, "state": { "slot_id": 0 }, "title": "intensity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 196, "y": 340, "uid": 18, "dsid": 9, "state": { "slot_id": 0 }, "title": "specular color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 80, "y": 347, "uid": 19, "dsid": 10, "state": { "slot_id": 0 }, "title": "diffuse color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector_normalize", "x": 361, "y": 452, "uid": 20 }, { "plugin": "vector", "x": 248, "y": 461, "uid": 21 }, { "plugin": "input_proxy", "x": 146, "y": 479, "uid": 22, "dsid": 10, "state": { "slot_id": 0 }, "title": "Dir x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 528, "uid": 23, "dsid": 11, "state": { "slot_id": 0 }, "title": "Dir y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 574, "uid": 24, "dsid": 12, "state": { "slot_id": 0 }, "title": "Dir z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 795, "y": 219, "uid": 30, "dsid": 2, "state": { "slot_id": 0 }, "title": "light", "dyn_in": [ { "name": "input", "dt": 13, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 21, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 22, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 30, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "light type", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Pos x", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Pos y", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true }, { "name": "Pos z", "dt": 0, "uid": 4, "index": 3, "type": 0, "is_connected": true }, { "name": "intensity", "dt": 0, "uid": 5, "index": 4, "type": 0, "is_connected": true }, { "name": "specular color", "dt": 3, "uid": 6, "index": 5, "type": 0, "is_connected": true }, { "name": "diffuse color", "dt": 3, "uid": 7, "index": 6, "type": 0, "is_connected": true }, { "name": "Dir x", "dt": 0, "uid": 8, "index": 7, "type": 0, "is_connected": true }, { "name": "Dir y", "dt": 0, "uid": 9, "index": 8, "type": 0, "is_connected": true }, { "name": "Dir z", "dt": 0, "uid": 10, "index": 9, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "light", "dt": 13, "uid": 15, "index": 0, "type": 1 } ] }, { "plugin": "light_type_generator", "x": 105, "y": 428, "uid": 41, "state": { "type": 0 } }, { "plugin": "slider_float_generator", "x": 307, "y": 428, "uid": 42, "state": { "val": 1.6, "min": 0, "max": 10 }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 106, "y": 501, "uid": 43, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position X" }, { "plugin": "slider_float_generator", "x": 106, "y": 567, "uid": 44, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position Y" }, { "plugin": "slider_float_generator", "x": 106, "y": 635, "uid": 45, "state": { "val": 1.2, "min": -20, "max": 20 }, "title": "Light position Z" }, { "plugin": "slider_float_generator", "x": 304, "y": 502, "uid": 46, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light direction X" }, { "plugin": "slider_float_generator", "x": 304, "y": 571, "uid": 47, "state": { "val": 0.04, "min": -2, "max": 2 }, "title": "Light direction Y" }, { "plugin": "slider_float_generator", "x": 304, "y": 636, "uid": 48, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light direction z" }, { "plugin": "color_picker", "x": 108, "y": 716, "uid": 49, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 294, "y": 717, "uid": 50, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Specular color" } ], "conns": [ { "src_nuid": 30, "dst_nuid": 29, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 31, "dst_nuid": 29, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 32, "dst_nuid": 29, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 33, "dst_nuid": 29, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 34, "dst_nuid": 29, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 29, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 36, "dst_nuid": 29, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 39, "dst_nuid": 29, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 38, "dst_nuid": 29, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 37, "dst_nuid": 29, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 41, "dst_nuid": 40, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 42, "dst_nuid": 40, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 43, "dst_nuid": 40, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 44, "dst_nuid": 40, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 45, "dst_nuid": 40, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 46, "dst_nuid": 40, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 47, "dst_nuid": 40, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 48, "dst_nuid": 40, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 49, "dst_nuid": 40, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 50, "dst_nuid": 40, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 40, "dst_nuid": 29, "src_slot": 0, "dst_slot": 11, "src_dyn": true, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/material_material_and_light_no_texture.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 4, "root": { "node_uid": 22, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 619, "y": 279, "uid": 0, "dsid": 14, "state": { "enabled": true, "input_sids": { "13": 1, "14": 2, "15": 3, "16": 4, "17": 5, "18": 6, "19": 7, "22": 8, "23": 9, "24": 10, "26": 11, "28": 13 }, "output_sids": { "27": 12 } }, "title": "Light chain", "graph": { "node_uid": 29, "uid": 1, "parent_uid": 0, "nodes": [ { "plugin": "light_type_modulator", "x": 692, "y": 216, "uid": 0 }, { "plugin": "light_position_modulator", "x": 604, "y": 215, "uid": 2 }, { "plugin": "light_diffuse_color_modulator", "x": 200, "y": 217, "uid": 3 }, { "plugin": "light_direction_modulator", "x": 521, "y": 215, "uid": 4 }, { "plugin": "light_intensity_modulator", "x": 430, "y": 219, "uid": 5 }, { "plugin": "light_specular_color_modulator", "x": 309, "y": 219, "uid": 6 }, { "plugin": "vector", "x": 494, "y": 380, "uid": 7 }, { "plugin": "input_proxy", "x": 609, "y": 401, "uid": 13, "dsid": 8, "state": { "slot_id": 0 }, "title": "light type", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 413, "y": 532, "uid": 14, "dsid": 8, "state": { "slot_id": 0 }, "title": "Pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 581, "uid": 15, "dsid": 9, "state": { "slot_id": 0 }, "title": "Pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 627, "uid": 16, "dsid": 10, "state": { "slot_id": 0 }, "title": "Pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 350, "y": 358, "uid": 17, "dsid": 8, "state": { "slot_id": 0 }, "title": "intensity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 196, "y": 340, "uid": 18, "dsid": 8, "state": { "slot_id": 0 }, "title": "specular color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 80, "y": 347, "uid": 19, "dsid": 9, "state": { "slot_id": 0 }, "title": "diffuse color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "vector_normalize", "x": 361, "y": 452, "uid": 20 }, { "plugin": "vector", "x": 248, "y": 461, "uid": 21 }, { "plugin": "input_proxy", "x": 146, "y": 479, "uid": 22, "dsid": 9, "state": { "slot_id": 0 }, "title": "Dir x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 528, "uid": 23, "dsid": 10, "state": { "slot_id": 0 }, "title": "Dir y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 145, "y": 574, "uid": 24, "dsid": 11, "state": { "slot_id": 0 }, "title": "Dir z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 777, "y": 133, "uid": 25 }, { "plugin": "input_proxy", "x": 681, "y": 135, "uid": 26, "dsid": 7, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 900, "y": 133, "uid": 27, "dsid": 7, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 569, "y": 134, "uid": 28, "dsid": 7, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 21, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 22, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 25, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 26, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 28, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "light type", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Pos x", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Pos y", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true }, { "name": "Pos z", "dt": 0, "uid": 4, "index": 3, "type": 0, "is_connected": true }, { "name": "intensity", "dt": 0, "uid": 5, "index": 4, "type": 0, "is_connected": true }, { "name": "specular color", "dt": 3, "uid": 6, "index": 5, "type": 0, "is_connected": true }, { "name": "diffuse color", "dt": 3, "uid": 7, "index": 6, "type": 0, "is_connected": true }, { "name": "Dir x", "dt": 0, "uid": 8, "index": 7, "type": 0, "is_connected": true }, { "name": "Dir y", "dt": 0, "uid": 9, "index": 8, "type": 0, "is_connected": true }, { "name": "Dir z", "dt": 0, "uid": 10, "index": 9, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 11, "index": 10, "type": 0 }, { "name": "light index", "dt": 0, "uid": 13, "index": 11, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 12, "index": 0, "type": 1 } ] }, { "plugin": "light_type_generator", "x": 175, "y": 279, "uid": 1, "state": { "type": 0 } }, { "plugin": "slider_float_generator", "x": 417, "y": 279, "uid": 2, "state": { "val": 1.6, "min": 0, "max": 10 }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 216, "y": 352, "uid": 3, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light position X" }, { "plugin": "slider_float_generator", "x": 216, "y": 418, "uid": 4, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light position Y" }, { "plugin": "slider_float_generator", "x": 216, "y": 486, "uid": 5, "state": { "val": 1.08, "min": -2, "max": 2 }, "title": "Light position Z" }, { "plugin": "slider_float_generator", "x": 414, "y": 353, "uid": 6, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light direction X" }, { "plugin": "slider_float_generator", "x": 414, "y": 422, "uid": 7, "state": { "val": -1.04, "min": -2, "max": 2 }, "title": "Light direction Y" }, { "plugin": "slider_float_generator", "x": 414, "y": 487, "uid": 8, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light direction z" }, { "plugin": "color_picker", "x": 218, "y": 567, "uid": 9, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 404, "y": 568, "uid": 10, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Specular color" }, { "plugin": "const_float_generator", "x": 312, "y": 279, "uid": 11, "state": { "val": 0 }, "title": "Light index" }, { "plugin": "graph", "x": 766, "y": 53, "uid": 12, "dsid": 18, "state": { "enabled": true, "input_sids": { "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 47, "uid": 2, "parent_uid": 0, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "output_proxy", "x": 1250, "y": 71, "uid": 9, "dsid": 23, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 17, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 17, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 17, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 17, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 17, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 574, "y": 162, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 470, "y": 149, "uid": 32, "dsid": 3, "state": { "enabled": true, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 3, "parent_uid": 2, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 15, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 15, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 426, "y": 241, "uid": 34, "dsid": 11, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 362, "y": 146, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 18, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 18, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 18, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 58, "y": 70, "uid": 44, "dsid": 7, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 44, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "hue", "dt": 0, "uid": 4, "index": 0, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 1, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 2, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 3, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 4, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 5, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 6, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 7, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 8, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 9, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 452, "y": 53, "uid": 13, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 525, "y": 53, "uid": 14, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 604, "y": 53, "uid": 15, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 685, "y": 53, "uid": 16, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 606, "y": 119, "uid": 17, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 525, "y": 119, "uid": 18, "state": { "val": 0 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 484, "y": 191, "uid": 19, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 576, "y": 191, "uid": 20, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 664, "y": 191, "uid": 21, "state": { "val": 0 }, "title": "Ambient Lum" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 7, "dst_nuid": 0, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 0, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 0, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 0, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 0, "src_slot": 0, "dst_slot": 11, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 12, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 12, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 16, "dst_nuid": 12, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 17, "dst_nuid": 12, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 18, "dst_nuid": 12, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 21, "dst_nuid": 12, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 20, "dst_nuid": 12, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 12, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 0, "dst_nuid": 12, "src_slot": 0, "dst_slot": 9, "src_dyn": true, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/material_material_and_point_light_chain.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 10, "root": { "node_uid": 69, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 531, "y": 460, "uid": 51, "dsid": 14, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "14": 2, "15": 3, "16": 4, "17": 5, "18": 6, "19": 7 }, "output_sids": { "27": 12 } }, "title": "Light chain", "graph": { "node_uid": 30, "uid": 7, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "light_type_modulator", "x": 762, "y": 207, "uid": 0 }, { "plugin": "light_position_modulator", "x": 604, "y": 215, "uid": 2 }, { "plugin": "light_diffuse_color_modulator", "x": 200, "y": 217, "uid": 3 }, { "plugin": "light_intensity_modulator", "x": 430, "y": 219, "uid": 5 }, { "plugin": "light_specular_color_modulator", "x": 309, "y": 219, "uid": 6 }, { "plugin": "vector", "x": 494, "y": 380, "uid": 7 }, { "plugin": "input_proxy", "x": 361, "y": 467, "uid": 14, "dsid": 10, "state": { "slot_id": 0 }, "title": "Pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 383, "y": 549, "uid": 15, "dsid": 11, "state": { "slot_id": 0 }, "title": "Pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 627, "uid": 16, "dsid": 12, "state": { "slot_id": 0 }, "title": "Pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 350, "y": 358, "uid": 17, "dsid": 10, "state": { "slot_id": 0 }, "title": "intensity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 196, "y": 340, "uid": 18, "dsid": 10, "state": { "slot_id": 0 }, "title": "specular color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 93, "y": 237, "uid": 19, "dsid": 11, "state": { "slot_id": 0 }, "title": "diffuse color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 900, "y": 133, "uid": 27, "dsid": 9, "state": { "slot_id": 0 }, "title": "light", "dyn_in": [ { "name": "input", "dt": 13, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "light_type_generator", "x": 618, "y": 302, "uid": 29, "state": { "type": 0 } } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 3, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 29, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 0, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "Pos x", "dt": 0, "uid": 2, "index": 0, "type": 0, "is_connected": true }, { "name": "Pos y", "dt": 0, "uid": 3, "index": 1, "type": 0, "is_connected": true }, { "name": "Pos z", "dt": 0, "uid": 4, "index": 2, "type": 0, "is_connected": true }, { "name": "intensity", "dt": 0, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "specular color", "dt": 3, "uid": 6, "index": 4, "type": 0, "is_connected": true }, { "name": "diffuse color", "dt": 3, "uid": 7, "index": 5, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "light", "dt": 13, "uid": 12, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 146, "y": 460, "uid": 52, "state": { "val": 1.5, "min": 0, "max": 10 }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 147, "y": 535, "uid": 53, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position X" }, { "plugin": "slider_float_generator", "x": 146, "y": 608, "uid": 54, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position Y" }, { "plugin": "slider_float_generator", "x": 146, "y": 678, "uid": 55, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position Z" }, { "plugin": "color_picker", "x": 344, "y": 460, "uid": 56, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 345, "y": 595, "uid": 57, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Specular color" }, { "plugin": "graph", "x": 693, "y": 231, "uid": 58, "dsid": 20, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "15": 3, "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "34": 10, "39": 12, "40": 13, "41": 14, "44": 16, "47": 18, "49": 19 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 50, "uid": 8, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "material_texture_modulator", "x": 1252, "y": 68, "uid": 7 }, { "plugin": "output_proxy", "x": 1361, "y": 68, "uid": 9, "dsid": 27, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 1173, "y": 143, "uid": 15, "dsid": 27, "state": { "slot_id": 0 }, "title": "Image", "dyn_out": [ { "name": "output", "dt": 2, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 21, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 21, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 21, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 21, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 21, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 564, "y": 212, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "graph", "x": 454, "y": 148, "uid": 32, "dsid": 3, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 9, "parent_uid": 8, "open": true, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": 10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 19, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 0 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 19, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 361, "y": 242, "uid": 34, "dsid": 15, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 323, "y": 161, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 22, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 22, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 22, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 61, "y": 99, "uid": 44, "dsid": 11, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 40, "y": 52, "uid": 47, "dsid": 6, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "output", "dt": 13, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 158, "y": 22, "uid": 48 }, { "plugin": "input_proxy", "x": 54, "y": 0, "uid": 49, "dsid": 3, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 32, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 47, "dst_nuid": 48, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 44, "dst_nuid": 48, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 48, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 49, "dst_nuid": 48, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "Image", "dt": 2, "uid": 3, "index": 0, "type": 0, "is_connected": true }, { "name": "hue", "dt": 0, "uid": 4, "index": 1, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 2, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 3, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 4, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 5, "type": 0, "is_connected": true }, { "name": "shinyness", "dt": 0, "uid": 10, "index": 6, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 7, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 8, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 9, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 10, "type": 0, "is_connected": false }, { "name": "light", "dt": 13, "uid": 18, "index": 11, "type": 0, "is_connected": true }, { "name": "light index", "dt": 0, "uid": 19, "index": 12, "type": 0 } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "url_texture_generator", "x": 276, "y": 231, "uid": 59, "state": { "url": "/data/image/57422df4c11a76d5531ef36299d5d1ac5b6b6739.jpg" }, "title": "Image" }, { "plugin": "knob_float_generator", "x": 379, "y": 231, "uid": 60, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 452, "y": 231, "uid": 61, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 531, "y": 231, "uid": 62, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 612, "y": 231, "uid": 63, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 533, "y": 297, "uid": 64, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 452, "y": 297, "uid": 65, "state": { "val": 0 }, "title": "Shinyness" }, { "plugin": "knob_float_generator", "x": 411, "y": 369, "uid": 66, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 503, "y": 369, "uid": 67, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 591, "y": 369, "uid": 68, "state": { "val": 0 }, "title": "Ambient Lum" } ], "conns": [ { "src_nuid": 52, "dst_nuid": 51, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 53, "dst_nuid": 51, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 54, "dst_nuid": 51, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 55, "dst_nuid": 51, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 56, "dst_nuid": 51, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 57, "dst_nuid": 51, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 59, "dst_nuid": 58, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 60, "dst_nuid": 58, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 61, "dst_nuid": 58, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 62, "dst_nuid": 58, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 63, "dst_nuid": 58, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 64, "dst_nuid": 58, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 65, "dst_nuid": 58, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 68, "dst_nuid": 58, "src_slot": 0, "dst_slot": 9, "dst_dyn": true }, { "src_nuid": 67, "dst_nuid": 58, "src_slot": 0, "dst_slot": 8, "dst_dyn": true }, { "src_nuid": 66, "dst_nuid": 58, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 51, "dst_nuid": 58, "src_slot": 0, "dst_slot": 11, "src_dyn": true, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/material_point_light_chain.json ================================================ { "abs_t": 508.502, "active_graph": 0, "graph_uid": 16, "root": { "node_uid": 46, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 425, "y": 38, "uid": 10, "dsid": 14, "state": { "enabled": true, "input_sids": { "14": 2, "15": 3, "16": 4, "17": 5, "18": 6, "19": 7 }, "output_sids": { "27": 12 } }, "title": "Light chain", "graph": { "node_uid": 30, "uid": 8, "parent_uid": 0, "nodes": [ { "plugin": "light_type_modulator", "x": 762, "y": 207, "uid": 0 }, { "plugin": "light_position_modulator", "x": 604, "y": 215, "uid": 2 }, { "plugin": "light_diffuse_color_modulator", "x": 200, "y": 217, "uid": 3 }, { "plugin": "light_intensity_modulator", "x": 430, "y": 219, "uid": 5 }, { "plugin": "light_specular_color_modulator", "x": 309, "y": 219, "uid": 6 }, { "plugin": "vector", "x": 494, "y": 380, "uid": 7 }, { "plugin": "input_proxy", "x": 361, "y": 467, "uid": 14, "dsid": 9, "state": { "slot_id": 0 }, "title": "Pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 383, "y": 549, "uid": 15, "dsid": 10, "state": { "slot_id": 0 }, "title": "Pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 627, "uid": 16, "dsid": 11, "state": { "slot_id": 0 }, "title": "Pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 350, "y": 358, "uid": 17, "dsid": 9, "state": { "slot_id": 0 }, "title": "intensity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 196, "y": 340, "uid": 18, "dsid": 9, "state": { "slot_id": 0 }, "title": "specular color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 93, "y": 237, "uid": 19, "dsid": 10, "state": { "slot_id": 0 }, "title": "diffuse color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 900, "y": 133, "uid": 27, "dsid": 8, "state": { "slot_id": 0 }, "title": "light", "dyn_in": [ { "name": "input", "dt": 13, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "light_type_generator", "x": 618, "y": 302, "uid": 29, "state": { "type": 0 } } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 3, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 29, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 0, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "Pos x", "dt": 0, "uid": 2, "index": 0, "type": 0, "is_connected": true }, { "name": "Pos y", "dt": 0, "uid": 3, "index": 1, "type": 0, "is_connected": true }, { "name": "Pos z", "dt": 0, "uid": 4, "index": 2, "type": 0, "is_connected": true }, { "name": "intensity", "dt": 0, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "specular color", "dt": 3, "uid": 6, "index": 4, "type": 0, "is_connected": true }, { "name": "diffuse color", "dt": 3, "uid": 7, "index": 5, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "light", "dt": 13, "uid": 12, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 40, "y": 38, "uid": 11, "state": { "val": 1.5, "min": 0, "max": 10 }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 41, "y": 113, "uid": 12, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position X" }, { "plugin": "slider_float_generator", "x": 40, "y": 186, "uid": 13, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position Y" }, { "plugin": "slider_float_generator", "x": 40, "y": 256, "uid": 14, "state": { "val": 0, "min": -20, "max": 20 }, "title": "Light position Z" }, { "plugin": "color_picker", "x": 238, "y": 38, "uid": 15, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 239, "y": 173, "uid": 16, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Specular color" } ], "conns": [ { "src_nuid": 11, "dst_nuid": 10, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 10, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 10, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 16, "dst_nuid": 10, "src_slot": 0, "dst_slot": 4, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/material_texture.json ================================================ { "abs_t": 190.925, "active_graph": 0, "graph_uid": 10, "root": { "node_uid": 21, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 333, "y": 239, "uid": 19, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "0": 0 }, "output_sids": { "1": 1 } }, "title": "Texture", "graph": { "node_uid": 4, "uid": 9, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 189, "y": 225, "uid": 0, "dsid": 1, "state": { "slot_id": 0 }, "title": "texture", "dyn_out": [ { "name": "input", "dt": 2, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 520, "y": 153, "uid": 1, "dsid": 1, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "output", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "def": null, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_texture_modulator", "x": 307, "y": 130, "uid": 3 } ], "conns": [ { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 0, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "texture", "dt": 2, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "url_texture_generator", "x": 199, "y": 283, "uid": 20, "state": { "url": "/data/image/57422df4c11a76d5531ef36299d5d1ac5b6b6739.jpg" }, "title": "Image" } ], "conns": [ { "src_nuid": 20, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/matrix_circular_motion.json ================================================ { "abs_t": 6069.914, "active_graph": 0, "graph_uid": 8, "root": { "node_uid": 77, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 258, "y": 330, "uid": 71, "dsid": 3, "state": { "enabled": true, "input_sids": { "11": 1, "19": 2 }, "output_sids": { "10": 0 } }, "title": "Circular motion", "graph": { "node_uid": 20, "uid": 4, "parent_uid": 0, "nodes": [ { "plugin": "const_float_generator", "x": 338, "y": 416, "uid": 1, "state": { "val": 0.25 } }, { "plugin": "sine_modulator", "x": 476, "y": 146, "uid": 2 }, { "plugin": "translation_matrix", "x": 759, "y": 218, "uid": 4 }, { "plugin": "vector", "x": 655, "y": 184, "uid": 5 }, { "plugin": "multiply_modulator", "x": 292, "y": 177, "uid": 6 }, { "plugin": "delta_t_generator", "x": 212, "y": 177, "uid": 8 }, { "plugin": "accumulate_modulator", "x": 372, "y": 177, "uid": 9, "state": { "value": -1164.778880000027 } }, { "plugin": "output_proxy", "x": 849, "y": 217, "uid": 10, "dsid": 2, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 141, "y": 270, "uid": 11, "dsid": 1, "state": { "slot_id": 0 }, "title": "speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "cosine_modulator", "x": 486, "y": 230, "uid": 12 }, { "plugin": "multiply_modulator", "x": 567, "y": 143, "uid": 16 }, { "plugin": "multiply_modulator", "x": 558, "y": 225, "uid": 17 }, { "plugin": "input_proxy", "x": 570, "y": 391, "uid": 19, "dsid": 1, "state": { "slot_id": 0 }, "title": "radius", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 9, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 2, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 12, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "dst_connected": false }, { "src_nuid": 16, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 19, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 } ] }, "dyn_in": [ { "name": "speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "radius", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 61, "y": 334, "uid": 72, "state": { "val": 0.44, "min": -2, "max": 2 }, "title": "Speed" }, { "plugin": "slider_float_generator", "x": 61, "y": 419, "uid": 76, "state": { "val": 1.1, "min": 0, "max": 10 }, "title": "radius" } ], "conns": [ { "src_nuid": 72, "dst_nuid": 71, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 76, "dst_nuid": 71, "src_slot": 0, "dst_slot": 1, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/matrix_rotate_animated.json ================================================ { "abs_t": 276.913, "active_graph": 0, "graph_uid": 25, "root": { "node_uid": 15, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 415, "y": 114, "uid": 10, "dsid": 4, "state": { "enabled": true, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "Rotate", "graph": { "node_uid": 11, "uid": 20, "parent_uid": 0, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 177, "y": 96, "uid": 0 }, { "plugin": "output_proxy", "x": 295, "y": 96, "uid": 1, "dsid": 4, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "graph", "x": 70, "y": 9, "uid": 2, "dsid": 3, "state": { "enabled": true, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "knob", "graph": { "node_uid": 13, "uid": 21, "parent_uid": 20, "nodes": [ { "plugin": "const_float_generator", "x": 29, "y": 147, "uid": 2, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 149, "y": 48, "uid": 3 }, { "plugin": "absolute_modulator", "x": 237, "y": 48, "uid": 4 }, { "plugin": "multiply_modulator", "x": 389, "y": 28, "uid": 5 }, { "plugin": "add_modulator", "x": 470, "y": 86, "uid": 7 }, { "plugin": "min_modulator", "x": 237, "y": 106, "uid": 8 }, { "plugin": "input_proxy", "x": 317, "y": 11, "uid": 9, "dsid": 6, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 13, "y": 69, "uid": 11, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 552, "y": 86, "uid": 12, "dsid": 6, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 69, "y": 96, "uid": 4, "dsid": 3, "state": { "enabled": true, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "knob values", "graph": { "node_uid": 13, "uid": 22, "parent_uid": 20, "nodes": [ { "plugin": "const_float_generator", "x": 39, "y": 168, "uid": 2, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 154, "y": 67, "uid": 3 }, { "plugin": "absolute_modulator", "x": 246, "y": 67, "uid": 4 }, { "plugin": "multiply_modulator", "x": 370, "y": 48, "uid": 5 }, { "plugin": "add_modulator", "x": 454, "y": 107, "uid": 7 }, { "plugin": "min_modulator", "x": 245, "y": 127, "uid": 8 }, { "plugin": "input_proxy", "x": 297, "y": 11, "uid": 9, "dsid": 7, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 14, "y": 88, "uid": 11, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 542, "y": 107, "uid": 12, "dsid": 7, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 68, "y": 182, "uid": 6, "dsid": 3, "state": { "enabled": true, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "knob", "graph": { "node_uid": 13, "uid": 23, "parent_uid": 20, "nodes": [ { "plugin": "const_float_generator", "x": 56, "y": 217, "uid": 2, "state": { "val": 180 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 174, "y": 95, "uid": 3 }, { "plugin": "absolute_modulator", "x": 264, "y": 95, "uid": 4 }, { "plugin": "multiply_modulator", "x": 360, "y": 75, "uid": 5 }, { "plugin": "add_modulator", "x": 444, "y": 135, "uid": 7 }, { "plugin": "min_modulator", "x": 263, "y": 155, "uid": 8 }, { "plugin": "input_proxy", "x": 283, "y": 23, "uid": 9, "dsid": 7, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 19, "y": 115, "uid": 11, "state": { "val": -180 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 533, "y": 135, "uid": 12, "dsid": 7, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 8, "y": 9, "uid": 8, "dsid": 4, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 96, "uid": 9, "dsid": 4, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 181, "uid": 10, "dsid": 4, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 316, "y": 83, "uid": 11, "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 316, "y": 148, "uid": 12, "state": { "val": 0 }, "title": "Z" }, { "plugin": "graph", "x": 318, "y": 219, "uid": 13, "dsid": 2, "state": { "enabled": true, "input_sids": { "7": 1 }, "output_sids": { "6": 0 } }, "title": "Time", "graph": { "node_uid": 8, "uid": 24, "parent_uid": 0, "nodes": [ { "plugin": "delta_t_generator", "x": 7, "y": 7, "uid": 0 }, { "plugin": "accumulate_modulator", "x": 181, "y": 7, "uid": 1, "state": { "value": 0.622960000000001 } }, { "plugin": "multiply_modulator", "x": 101, "y": 7, "uid": 2 }, { "plugin": "output_proxy", "x": 283, "y": 7, "uid": 6, "dsid": 7, "state": { "slot_id": 0 }, "title": "time", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 23, "y": 66, "uid": 7, "dsid": 5, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "time", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 120, "y": 239, "uid": 14, "state": { "val": 0.13, "min": -1, "max": 1 }, "title": "Speed" } ], "conns": [ { "src_nuid": 11, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 10, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/matrix_rotate_with_knobs.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 5, "root": { "node_uid": 4, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 103, "y": 113, "uid": 0, "dsid": 4, "state": { "enabled": true, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "Rotate", "graph": { "node_uid": 21, "uid": 1, "parent_uid": 0, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 367, "y": 174, "uid": 0 }, { "plugin": "output_proxy", "x": 485, "y": 174, "uid": 1, "dsid": 3, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 80, "uid": 8, "dsid": 3, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 170, "uid": 9, "dsid": 3, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 46, "y": 257, "uid": 10, "dsid": 3, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 40, "y": 386, "uid": 11, "state": { "val": 180 } }, { "plugin": "const_float_generator", "x": 15, "y": 317, "uid": 12, "state": { "val": 360 } }, { "plugin": "multiply_modulator", "x": 165, "y": 80, "uid": 15 }, { "plugin": "subtract_modulator", "x": 260, "y": 105, "uid": 16 }, { "plugin": "multiply_modulator", "x": 165, "y": 170, "uid": 17 }, { "plugin": "subtract_modulator", "x": 260, "y": 195, "uid": 18 }, { "plugin": "multiply_modulator", "x": 163, "y": 257, "uid": 19 }, { "plugin": "subtract_modulator", "x": 258, "y": 282, "uid": 20 } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 17, "dst_nuid": 18, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "src_connected": true, "dst_connected": false, "src_dyn": true }, { "src_nuid": 12, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1, "dst_connected": false }, { "src_nuid": 12, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "dst_connected": false, "offset": 1 }, { "src_nuid": 12, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "dst_connected": false, "offset": 2 }, { "src_nuid": 11, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1, "dst_connected": false }, { "src_nuid": 11, "dst_nuid": 18, "src_slot": 0, "dst_slot": 1, "dst_connected": false, "offset": 1 }, { "src_nuid": 11, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "dst_connected": false, "offset": 2 }, { "src_nuid": 16, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 18, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 20, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2 } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 10, "y": 80, "uid": 1, "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 10, "y": 153, "uid": 2, "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 10, "y": 227, "uid": 3, "state": { "val": 0 }, "title": "Z" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/matrix_scale.json ================================================ { "abs_t": 0, "active_graph": 1, "graph_uid": 2, "root": { "node_uid": 2, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 581, "y": 310, "uid": 0, "dsid": 8, "state": { "enabled": true, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 1, "parent_uid": 0, "nodes": [ { "plugin": "scale_matrix", "x": 189, "y": 49, "uid": 0 }, { "plugin": "output_proxy", "x": 278, "y": 49, "uid": 2, "dsid": 2, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 73, "y": 49, "uid": 3 }, { "plugin": "input_proxy", "x": 7, "y": 9, "uid": 13, "dsid": 2, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 69, "uid": 14, "dsid": 2, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 132, "uid": 15, "dsid": 2, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 359, "y": 311, "uid": 1, "state": { "val": 1, "min": 0, "max": 2 }, "title": "size" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true, "offset": 1 }, { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true, "offset": 2 } ] } } ================================================ FILE: browser/patches/matrix_shaky_translate_to_xy.json ================================================ { "abs_t": 65.055, "active_graph": 0, "graph_uid": 16, "root": { "node_uid": 28, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 471, "y": 568, "uid": 27, "dsid": 1, "state": { "enabled": true, "input_sids": {}, "output_sids": { "24": 0 } }, "title": "Shaky translate", "graph": { "node_uid": 25, "uid": 10, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "random_float_generator", "x": 585, "y": 590, "uid": 0, "open": false }, { "plugin": "graph", "x": 500, "y": 595, "uid": 1, "open": false, "dsid": 5, "state": { "enabled": true, "input_sids": { "13": 1, "14": 2, "15": 3 }, "output_sids": { "12": 0 } }, "title": "Oscillate", "graph": { "node_uid": 25, "uid": 11, "parent_uid": 10, "open": true, "nodes": [ { "plugin": "sine_modulator", "x": 291, "y": 9, "uid": 1 }, { "plugin": "subtract_modulator", "x": 405, "y": 124, "uid": 4 }, { "plugin": "convert_oscilator_unit_modulator", "x": 370, "y": 9, "uid": 5 }, { "plugin": "multiply_modulator", "x": 494, "y": 9, "uid": 6 }, { "plugin": "add_modulator", "x": 577, "y": 64, "uid": 7 }, { "plugin": "output_proxy", "x": 660, "y": 64, "uid": 12, "dsid": 19, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 25, "y": 67, "uid": 13, "dsid": 17, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 279, "y": 119, "uid": 14, "dsid": 17, "state": { "slot_id": 0 }, "title": "Min", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 345, "y": 124, "uid": 15, "dsid": 17, "state": { "slot_id": 0 }, "title": "Max", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "delta_t_generator", "x": 8, "y": 9, "uid": 18 }, { "plugin": "accumulate_modulator", "x": 187, "y": 9, "uid": 19, "state": { "value": 1.8264600000000004 } }, { "plugin": "multiply_modulator", "x": 102, "y": 9, "uid": 20 }, { "plugin": "const_float_generator", "x": 106, "y": 111, "uid": 24, "state": { "val": 0 }, "title": "reset" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 15, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true, "connected": false }, { "name": "Min", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true, "connected": false }, { "name": "Max", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "float", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 499, "y": 639, "uid": 2, "open": false, "dsid": 5, "state": { "enabled": true, "input_sids": { "13": 1, "14": 2, "15": 3 }, "output_sids": { "12": 0 } }, "title": "Oscillate", "graph": { "node_uid": 25, "uid": 12, "parent_uid": 10, "open": true, "nodes": [ { "plugin": "sine_modulator", "x": 291, "y": 9, "uid": 1 }, { "plugin": "subtract_modulator", "x": 405, "y": 124, "uid": 4 }, { "plugin": "convert_oscilator_unit_modulator", "x": 370, "y": 9, "uid": 5 }, { "plugin": "multiply_modulator", "x": 494, "y": 9, "uid": 6 }, { "plugin": "add_modulator", "x": 577, "y": 64, "uid": 7 }, { "plugin": "output_proxy", "x": 660, "y": 64, "uid": 12, "dsid": 20, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 25, "y": 67, "uid": 13, "dsid": 18, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 279, "y": 119, "uid": 14, "dsid": 18, "state": { "slot_id": 0 }, "title": "Min", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 345, "y": 124, "uid": 15, "dsid": 18, "state": { "slot_id": 0 }, "title": "Max", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "delta_t_generator", "x": 8, "y": 9, "uid": 18 }, { "plugin": "accumulate_modulator", "x": 187, "y": 9, "uid": 19, "state": { "value": 1.2509999999999981 } }, { "plugin": "multiply_modulator", "x": 102, "y": 9, "uid": 20 }, { "plugin": "const_float_generator", "x": 106, "y": 111, "uid": 24, "state": { "val": 0 }, "title": "reset" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 15, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Min", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Max", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "float", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "const_float_generator", "x": 291, "y": 647, "uid": 3, "state": { "val": 0 }, "title": "Min" }, { "plugin": "const_float_generator", "x": 388, "y": 647, "uid": 4, "state": { "val": 2 }, "title": "Max" }, { "plugin": "const_float_generator", "x": 498, "y": 682, "uid": 5, "state": { "val": 0.976 }, "title": "Lowpass amount" }, { "plugin": "lowpass_filter_modulator", "x": 696, "y": 611, "uid": 6, "open": false }, { "plugin": "const_float_generator", "x": 290, "y": 571, "uid": 7, "state": { "val": -2 }, "title": "Min" }, { "plugin": "const_float_generator", "x": 389, "y": 571, "uid": 8, "state": { "val": 0 }, "title": "Max" }, { "plugin": "graph", "x": 826, "y": 449, "uid": 9, "dsid": 8, "state": { "enabled": true, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 13, "parent_uid": 10, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 291, "y": 50, "uid": 2, "dsid": 11, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 74, "y": 50, "uid": 3 }, { "plugin": "input_proxy", "x": 8, "y": 10, "uid": 13, "dsid": 11, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 70, "uid": 14, "dsid": 11, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 129, "uid": 15, "dsid": 11, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 191, "y": 50, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true, "connected": false }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 696, "y": 533, "uid": 10, "open": false, "state": { "val": 0, "min": -2, "max": 2 }, "title": "z position" }, { "plugin": "random_float_generator", "x": 585, "y": 422, "uid": 11, "open": false }, { "plugin": "graph", "x": 496, "y": 411, "uid": 12, "open": false, "dsid": 5, "state": { "enabled": true, "input_sids": { "13": 1, "14": 2, "15": 3 }, "output_sids": { "12": 0 } }, "title": "Oscillate", "graph": { "node_uid": 25, "uid": 14, "parent_uid": 10, "open": true, "nodes": [ { "plugin": "sine_modulator", "x": 291, "y": 9, "uid": 1 }, { "plugin": "subtract_modulator", "x": 405, "y": 124, "uid": 4 }, { "plugin": "convert_oscilator_unit_modulator", "x": 370, "y": 9, "uid": 5 }, { "plugin": "multiply_modulator", "x": 494, "y": 9, "uid": 6 }, { "plugin": "add_modulator", "x": 577, "y": 64, "uid": 7 }, { "plugin": "output_proxy", "x": 660, "y": 64, "uid": 12, "dsid": 19, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 25, "y": 67, "uid": 13, "dsid": 17, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 279, "y": 119, "uid": 14, "dsid": 17, "state": { "slot_id": 0 }, "title": "Min", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 345, "y": 124, "uid": 15, "dsid": 17, "state": { "slot_id": 0 }, "title": "Max", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "delta_t_generator", "x": 8, "y": 9, "uid": 18 }, { "plugin": "accumulate_modulator", "x": 187, "y": 9, "uid": 19, "state": { "value": 1.1759400000000007 } }, { "plugin": "multiply_modulator", "x": 102, "y": 9, "uid": 20 }, { "plugin": "const_float_generator", "x": 106, "y": 111, "uid": 24, "state": { "val": 0 }, "title": "reset" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 15, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true, "connected": false }, { "name": "Min", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true, "connected": false }, { "name": "Max", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "float", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 492, "y": 472, "uid": 13, "open": false, "dsid": 5, "state": { "enabled": true, "input_sids": { "13": 1, "14": 2, "15": 3 }, "output_sids": { "12": 0 } }, "title": "Oscillate", "graph": { "node_uid": 25, "uid": 15, "parent_uid": 10, "open": true, "nodes": [ { "plugin": "sine_modulator", "x": 291, "y": 9, "uid": 1 }, { "plugin": "subtract_modulator", "x": 405, "y": 124, "uid": 4 }, { "plugin": "convert_oscilator_unit_modulator", "x": 370, "y": 9, "uid": 5 }, { "plugin": "multiply_modulator", "x": 494, "y": 9, "uid": 6 }, { "plugin": "add_modulator", "x": 577, "y": 64, "uid": 7 }, { "plugin": "output_proxy", "x": 660, "y": 64, "uid": 12, "dsid": 20, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 25, "y": 67, "uid": 13, "dsid": 18, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 279, "y": 119, "uid": 14, "dsid": 18, "state": { "slot_id": 0 }, "title": "Min", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 345, "y": 124, "uid": 15, "dsid": 18, "state": { "slot_id": 0 }, "title": "Max", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "delta_t_generator", "x": 8, "y": 9, "uid": 18 }, { "plugin": "accumulate_modulator", "x": 187, "y": 9, "uid": 19, "state": { "value": 0.8506800000000007 } }, { "plugin": "multiply_modulator", "x": 102, "y": 9, "uid": 20 }, { "plugin": "const_float_generator", "x": 106, "y": 111, "uid": 24, "state": { "val": 0 }, "title": "reset" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 15, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Min", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Max", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "float", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "const_float_generator", "x": 287, "y": 461, "uid": 14, "state": { "val": 0 }, "title": "Min" }, { "plugin": "const_float_generator", "x": 383, "y": 461, "uid": 15, "state": { "val": 2 }, "title": "Max" }, { "plugin": "const_float_generator", "x": 493, "y": 509, "uid": 16, "state": { "val": 0.989 }, "title": "Lowpass amount" }, { "plugin": "lowpass_filter_modulator", "x": 692, "y": 456, "uid": 17, "open": false }, { "plugin": "const_float_generator", "x": 285, "y": 381, "uid": 18, "state": { "val": -2 }, "title": "Min" }, { "plugin": "const_float_generator", "x": 382, "y": 381, "uid": 19, "state": { "val": 0 }, "title": "Max" }, { "plugin": "knob_float_generator", "x": 209, "y": 380, "uid": 20, "state": { "val": 0.4700000000000002 }, "title": "Speed" }, { "plugin": "knob_float_generator", "x": 208, "y": 461, "uid": 21, "state": { "val": 0.34 }, "title": "Speed" }, { "plugin": "knob_float_generator", "x": 209, "y": 572, "uid": 22, "state": { "val": 0.7300000000000003 }, "title": "Speed" }, { "plugin": "knob_float_generator", "x": 212, "y": 644, "uid": 23, "state": { "val": 0.5000000000000001 }, "title": "Speed" }, { "plugin": "output_proxy", "x": 985, "y": 464, "uid": 24, "dsid": 2, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 8, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "dst_connected": false, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 1, "src_slot": 0, "dst_slot": 2, "dst_connected": false, "dst_dyn": true }, { "src_nuid": 22, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": false, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 23, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1, "dst_connected": false, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 17, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 18, "dst_nuid": 12, "src_slot": 0, "dst_slot": 1, "dst_connected": false, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 12, "src_slot": 0, "dst_slot": 2, "dst_connected": false, "dst_dyn": true }, { "src_nuid": 20, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": false, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 13, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 21, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 16, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_out": [ { "name": "matrix", "dt": 8, "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [] } } ================================================ FILE: browser/patches/matrix_transforms_setup.json ================================================ { "abs_t": 180.369, "active_graph": 0, "graph_uid": 10, "root": { "node_uid": 21, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 670, "y": 154, "uid": 8, "open": false, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "Rotate", "graph": { "node_uid": 21, "uid": 6, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 367, "y": 174, "uid": 0 }, { "plugin": "output_proxy", "x": 485, "y": 174, "uid": 1, "dsid": 5, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 80, "uid": 8, "dsid": 5, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 170, "uid": 9, "dsid": 5, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 46, "y": 257, "uid": 10, "dsid": 5, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 40, "y": 386, "uid": 11, "state": { "val": 180 } }, { "plugin": "const_float_generator", "x": 15, "y": 317, "uid": 12, "state": { "val": 360 } }, { "plugin": "multiply_modulator", "x": 165, "y": 80, "uid": 15 }, { "plugin": "subtract_modulator", "x": 260, "y": 105, "uid": 16 }, { "plugin": "multiply_modulator", "x": 165, "y": 170, "uid": 17 }, { "plugin": "subtract_modulator", "x": 260, "y": 195, "uid": 18 }, { "plugin": "multiply_modulator", "x": 163, "y": 257, "uid": 19 }, { "plugin": "subtract_modulator", "x": 258, "y": 282, "uid": 20 } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 17, "dst_nuid": 18, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 12, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 12, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 11, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 18, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 11, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 16, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 18, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 20, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2 } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 323, "y": 147, "uid": 9, "state": { "val": 0 }, "title": "Rotate X" }, { "plugin": "knob_float_generator", "x": 323, "y": 220, "uid": 10, "state": { "val": 0 }, "title": "Rotate Y" }, { "plugin": "knob_float_generator", "x": 323, "y": 294, "uid": 11, "state": { "val": 0 }, "title": "Rotate Z" }, { "plugin": "graph", "x": 676, "y": 280, "uid": 12, "open": false, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 7, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 189, "y": 49, "uid": 0 }, { "plugin": "output_proxy", "x": 278, "y": 49, "uid": 2, "dsid": 4, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 73, "y": 49, "uid": 3 }, { "plugin": "input_proxy", "x": 7, "y": 9, "uid": 13, "dsid": 4, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 69, "uid": 14, "dsid": 4, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 132, "uid": 15, "dsid": 4, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 672, "y": 215, "uid": 13, "open": false, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 8, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 291, "y": 50, "uid": 2, "dsid": 6, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 74, "y": 50, "uid": 3 }, { "plugin": "input_proxy", "x": 8, "y": 10, "uid": 13, "dsid": 6, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 70, "uid": 14, "dsid": 6, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 129, "uid": 15, "dsid": 6, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 191, "y": 50, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 410, "y": 151, "uid": 14, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position X" }, { "plugin": "slider_float_generator", "x": 410, "y": 212, "uid": 15, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Y" }, { "plugin": "slider_float_generator", "x": 410, "y": 274, "uid": 16, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Z" }, { "plugin": "const_float_generator", "x": 319, "y": 368, "uid": 17, "state": { "val": 1 }, "title": "Scale XYZ" }, { "plugin": "graph", "x": 833, "y": 153, "uid": 20, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 9, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 274, "y": 13, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 92, "y": 13, "uid": 1 }, { "plugin": "output_proxy", "x": 394, "y": 13, "uid": 2, "dsid": 4, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 197, "y": 14, "uid": 3, "dsid": 4, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 13, "uid": 4, "dsid": 4, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 71, "uid": 5, "dsid": 4, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 13, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 16, "dst_nuid": 13, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 17, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 20, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 17, "dst_nuid": 12, "src_slot": 0, "dst_slot": 1, "dst_dyn": true, "offset": 1 }, { "src_nuid": 17, "dst_nuid": 12, "src_slot": 0, "dst_slot": 2, "dst_dyn": true, "offset": 2 } ] } } ================================================ FILE: browser/patches/matrix_translate.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 3, "root": { "node_uid": 7, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 562, "y": 225, "uid": 3, "dsid": 8, "state": { "enabled": true, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 2, "parent_uid": 0, "nodes": [ { "plugin": "output_proxy", "x": 291, "y": 50, "uid": 2, "dsid": 4, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 74, "y": 50, "uid": 3 }, { "plugin": "input_proxy", "x": 8, "y": 10, "uid": 13, "dsid": 4, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 70, "uid": 14, "dsid": 4, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 129, "uid": 15, "dsid": 4, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 191, "y": 50, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 366, "y": 225, "uid": 4, "state": { "val": 0, "min": -2, "max": 2 }, "title": "x position" }, { "plugin": "slider_float_generator", "x": 366, "y": 286, "uid": 5, "state": { "val": 0, "min": -2, "max": 2 }, "title": "y position" }, { "plugin": "slider_float_generator", "x": 366, "y": 348, "uid": 6, "state": { "val": 0, "min": -2, "max": 2 }, "title": "z position" } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/newset_3d_scene_loader.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 4, "root": { "node_uid": 17, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 249, "y": 143, "uid": 0, "open": false, "dsid": 6, "state": { "enabled": true, "input_sids": { "70": 1, "73": 2, "75": 3, "76": 4, "77": 5 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 78, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 889, "y": 120, "uid": 0, "dsid": 7, "state": { "enabled": true, "input_sids": { "1": 0, "2": 1, "10": 2, "21": 5, "23": 6 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 26, "uid": 2, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 849, "y": 16, "uid": 0 }, { "plugin": "input_proxy", "x": 11, "y": 308, "uid": 1, "dsid": 27, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 707, "y": 122, "uid": 2, "dsid": 27, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "scale_matrix", "x": 648, "y": 205, "uid": 7 }, { "plugin": "vector", "x": 514, "y": 216, "uid": 8 }, { "plugin": "divide_modulator", "x": 400, "y": 235, "uid": 9 }, { "plugin": "input_proxy", "x": 280, "y": 204, "uid": 10, "dsid": 27, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "max_modulator", "x": 320, "y": 307, "uid": 11 }, { "plugin": "vector_magnitude", "x": 220, "y": 355, "uid": 12 }, { "plugin": "vector_magnitude", "x": 221, "y": 288, "uid": 13 }, { "plugin": "scene_get_bounding_box", "x": 89, "y": 307, "uid": 14 }, { "plugin": "input_proxy", "x": 647, "y": 265, "uid": 21, "dsid": 26, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 605, "y": 72, "uid": 23, "dsid": 23, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "concatenate_matrix_modulator", "x": 743, "y": 204, "uid": 25 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 12, "src_slot": 1, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 21, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 } ] }, "dyn_in": [ { "name": "scene", "dt": 11, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 6, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 768, "y": 125, "uid": 70, "open": false, "dsid": 19, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 766, "y": 190, "uid": 73, "open": false, "dsid": 12, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 31, "uid": 75, "dsid": 10, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 761, "y": 300, "uid": 76, "dsid": 10, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 776, "y": 233, "uid": 77, "dsid": 9, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 70, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 73, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 75, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 76, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 77, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_connected": true, "src_dyn": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "camera", "dt": 6, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "scene", "dt": 11, "uid": 3, "index": 2, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 4, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 5, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "register_global_read", "x": 173, "y": 142, "uid": 1, "open": false, "dsid": 13, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "value", "dt": 6, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "register_global_read", "x": 173, "y": 173, "uid": 2, "open": false, "dsid": 13, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "value", "dt": 4, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "url_scene_generator", "x": 55, "y": 141, "uid": 3, "state": { "url": "/data/scene/ladybug/scene.json" } }, { "plugin": "slider_float_generator", "x": 53, "y": 203, "uid": 4, "state": { "val": 1, "min": 0, "max": 10 }, "title": "Mesh scale" }, { "plugin": "graph", "x": 682, "y": 173, "uid": 5, "open": false, "dsid": 21, "state": { "enabled": true, "input_sids": { "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "39": 12, "40": 13, "41": 14, "44": 16, "47": 18, "49": 19 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 54, "uid": 3, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "output_proxy", "x": 1361, "y": 68, "uid": 9, "dsid": 48, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 42, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 42, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 42, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 42, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 42, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 564, "y": 212, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 323, "y": 161, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 43, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 43, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 43, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 61, "y": 99, "uid": 44, "dsid": 32, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 40, "y": 52, "uid": 47, "dsid": 27, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "output", "dt": 13, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 158, "y": 22, "uid": 48 }, { "plugin": "input_proxy", "x": 54, "y": 0, "uid": 49, "dsid": 24, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "toggle_button", "x": 574, "y": 276, "uid": 50, "state": { "enabled": true }, "title": "Depth write" }, { "plugin": "register_global_read", "x": 477, "y": 164, "uid": 51, "dsid": 14, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 47, "dst_nuid": 48, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 44, "dst_nuid": 48, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 48, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 49, "dst_nuid": 48, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 50, "dst_nuid": 27, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 51, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "hue", "dt": 0, "uid": 4, "index": 0, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 1, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 2, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 3, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 4, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 5, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 6, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 7, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 8, "type": 0, "is_connected": false }, { "name": "light", "dt": 13, "uid": 18, "index": 9, "type": 0, "is_connected": true, "connected": false }, { "name": "light index", "dt": 0, "uid": 19, "index": 10, "type": 0 } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 375, "y": 177, "uid": 6, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 447, "y": 179, "uid": 7, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 526, "y": 179, "uid": 8, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 607, "y": 179, "uid": 9, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 258, "y": 247, "uid": 10, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 416, "y": 244, "uid": 11, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 508, "y": 244, "uid": 12, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 596, "y": 244, "uid": 13, "state": { "val": 0 }, "title": "Ambient Lum" }, { "plugin": "url_texture_generator", "x": 255, "y": 177, "uid": 14, "state": { "url": "/data/image/f0e870569e5a143a8d3be0722e38e523141e4248.png" }, "title": "Texture" }, { "plugin": "material_texture_modulator", "x": 414, "y": 315, "uid": 15, "open": false }, { "plugin": "register_global_read", "x": 684, "y": 204, "uid": 16, "open": false, "dsid": 7, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "value", "dt": 13, "desc": "", "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 7, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 5, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 5, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 5, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 5, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 16, "dst_nuid": 5, "src_slot": 0, "dst_slot": 9, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 15, "src_slot": 0, "dst_slot": 2 } ] }, "registers": [ { "id": "camera", "dt": 8 }, { "id": "shinyness", "dt": 8 }, { "id": "light", "dt": 8 }, { "id": "matrix", "dt": 8 } ] } ================================================ FILE: browser/patches/newset_3d_scene_loader_with_camera.json ================================================ { "abs_t": 75.339, "active_graph": 0, "graph_uid": 5, "root": { "node_uid": 23, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 282, "y": 222, "uid": 0, "open": false, "dsid": 6, "state": { "enabled": true, "input_sids": { "70": 1, "73": 2, "75": 3, "76": 4, "77": 5 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 78, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 889, "y": 120, "uid": 0, "dsid": 7, "state": { "enabled": true, "input_sids": { "1": 0, "2": 1, "10": 2, "21": 5, "23": 6 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 26, "uid": 2, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 849, "y": 16, "uid": 0 }, { "plugin": "input_proxy", "x": 11, "y": 308, "uid": 1, "dsid": 28, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 707, "y": 122, "uid": 2, "dsid": 28, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "scale_matrix", "x": 648, "y": 205, "uid": 7 }, { "plugin": "vector", "x": 514, "y": 216, "uid": 8 }, { "plugin": "divide_modulator", "x": 400, "y": 235, "uid": 9 }, { "plugin": "input_proxy", "x": 280, "y": 204, "uid": 10, "dsid": 28, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "max_modulator", "x": 320, "y": 307, "uid": 11 }, { "plugin": "vector_magnitude", "x": 220, "y": 355, "uid": 12 }, { "plugin": "vector_magnitude", "x": 221, "y": 288, "uid": 13 }, { "plugin": "scene_get_bounding_box", "x": 89, "y": 307, "uid": 14 }, { "plugin": "input_proxy", "x": 647, "y": 265, "uid": 21, "dsid": 27, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 605, "y": 72, "uid": 23, "dsid": 24, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "concatenate_matrix_modulator", "x": 743, "y": 204, "uid": 25 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 12, "src_slot": 1, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 21, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 } ] }, "dyn_in": [ { "name": "scene", "dt": 11, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 6, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 768, "y": 125, "uid": 70, "open": false, "dsid": 20, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 766, "y": 190, "uid": 73, "open": false, "dsid": 13, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 31, "uid": 75, "dsid": 11, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 761, "y": 300, "uid": 76, "dsid": 11, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 776, "y": 233, "uid": 77, "dsid": 10, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 70, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 73, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 75, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 76, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 77, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_connected": true, "src_dyn": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "camera", "dt": 6, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "scene", "dt": 11, "uid": 3, "index": 2, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 4, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 5, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "register_global_read", "x": 206, "y": 221, "uid": 1, "open": false, "dsid": 14, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "value", "dt": 6, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "register_global_read", "x": 206, "y": 252, "uid": 2, "open": false, "dsid": 14, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "value", "dt": 4, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "url_scene_generator", "x": 88, "y": 220, "uid": 3, "state": { "url": "/data/scene/ladybug/scene.json" } }, { "plugin": "slider_float_generator", "x": 86, "y": 282, "uid": 4, "state": { "val": 1, "min": 0, "max": 10 }, "title": "Mesh scale" }, { "plugin": "graph", "x": 715, "y": 252, "uid": 5, "open": false, "dsid": 21, "state": { "enabled": true, "input_sids": { "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "39": 12, "40": 13, "41": 14, "44": 16, "47": 18, "49": 19 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 54, "uid": 3, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "output_proxy", "x": 1361, "y": 68, "uid": 9, "dsid": 49, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 43, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 43, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 43, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 43, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 43, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 564, "y": 212, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 323, "y": 161, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 44, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 44, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 44, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 61, "y": 99, "uid": 44, "dsid": 33, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 40, "y": 52, "uid": 47, "dsid": 28, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "output", "dt": 13, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 158, "y": 22, "uid": 48 }, { "plugin": "input_proxy", "x": 54, "y": 0, "uid": 49, "dsid": 25, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "toggle_button", "x": 574, "y": 276, "uid": 50, "state": { "enabled": true }, "title": "Depth write" }, { "plugin": "register_global_read", "x": 477, "y": 164, "uid": 51, "dsid": 15, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 47, "dst_nuid": 48, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 44, "dst_nuid": 48, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 48, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 49, "dst_nuid": 48, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 50, "dst_nuid": 27, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 51, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "hue", "dt": 0, "uid": 4, "index": 0, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 1, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 2, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 3, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 4, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 5, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 6, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 7, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 8, "type": 0, "is_connected": false }, { "name": "light", "dt": 13, "uid": 18, "index": 9, "type": 0, "is_connected": true, "connected": false }, { "name": "light index", "dt": 0, "uid": 19, "index": 10, "type": 0 } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 408, "y": 256, "uid": 6, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 480, "y": 258, "uid": 7, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 559, "y": 258, "uid": 8, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 640, "y": 258, "uid": 9, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 291, "y": 326, "uid": 10, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 449, "y": 323, "uid": 11, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 541, "y": 323, "uid": 12, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 629, "y": 323, "uid": 13, "state": { "val": 0 }, "title": "Ambient Lum" }, { "plugin": "url_texture_generator", "x": 288, "y": 256, "uid": 14, "state": { "url": "/data/image/f0e870569e5a143a8d3be0722e38e523141e4248.png" }, "title": "Texture" }, { "plugin": "material_texture_modulator", "x": 447, "y": 394, "uid": 15, "open": false }, { "plugin": "register_global_read", "x": 717, "y": 283, "uid": 16, "open": false, "dsid": 8, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "value", "dt": 13, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 869, "y": 110, "uid": 17, "open": false, "dsid": 6, "state": { "enabled": true, "input_sids": { "0": 0, "1": 1, "2": 2, "25": 5 }, "output_sids": { "3": 3 } }, "title": "Camera", "graph": { "node_uid": 26, "uid": 4, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 74, "y": 173, "uid": 0, "dsid": 17, "state": { "slot_id": 0 }, "title": "rotation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 129, "y": 89, "uid": 1, "dsid": 17, "state": { "slot_id": 0 }, "title": "elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 52, "y": 48, "uid": 2, "dsid": 17, "state": { "slot_id": 0 }, "title": "dolly", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 558, "y": 35, "uid": 3, "dsid": 17, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "input", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "perspective_camera", "x": 448, "y": 75, "uid": 4 }, { "plugin": "vector", "x": 218, "y": 28, "uid": 5 }, { "plugin": "rotation_xyz_matrix", "x": 160, "y": 153, "uid": 6 }, { "plugin": "vector_transform", "x": 342, "y": 77, "uid": 7 }, { "plugin": "vector", "x": 219, "y": 267, "uid": 21 }, { "plugin": "vector_transform", "x": 341, "y": 190, "uid": 22 }, { "plugin": "const_float_generator", "x": 104, "y": 287, "uid": 23, "state": { "val": 0.5 } }, { "plugin": "negate_modulator", "x": 132, "y": 33, "uid": 24 }, { "plugin": "input_proxy", "x": 92, "y": 457, "uid": 25, "dsid": 3, "state": { "slot_id": 0 }, "title": "target elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 7, "dst_nuid": 4, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 21, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 22, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 22, "dst_nuid": 4, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 0, "dst_nuid": 6, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 2, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "rotation", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "elevation", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "dolly", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "target elevation", "dt": 0, "uid": 5, "index": 3, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 85, "y": 107, "uid": 18, "state": { "val": -7.2, "min": -180, "max": 180 }, "title": "Rotation" }, { "plugin": "slider_float_generator", "x": 473, "y": 108, "uid": 19, "state": { "val": -0.8, "min": -20, "max": 20 }, "title": "Elevation" }, { "plugin": "slider_float_generator", "x": 279, "y": 108, "uid": 20, "state": { "val": 2.9, "min": 0, "max": 10 }, "title": "Dolly" }, { "plugin": "register_global_write", "x": 941, "y": 110, "uid": 21, "open": false, "dsid": 4, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "value", "dt": 8, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "slider_float_generator", "x": 670, "y": 108, "uid": 22, "state": { "val": 0, "min": 0, "max": 10 }, "title": "Target elevation" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 7, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 5, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 5, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 5, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 5, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 16, "dst_nuid": 5, "src_slot": 0, "dst_slot": 9, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 15, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 18, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 20, "dst_nuid": 17, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 17, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 22, "dst_nuid": 17, "src_slot": 0, "dst_slot": 3, "dst_dyn": true } ] }, "registers": [ { "id": "camera", "dt": 8 }, { "id": "matrix", "dt": 8 }, { "id": "shinyness", "dt": 8 }, { "id": "light", "dt": 8 } ] } ================================================ FILE: browser/patches/newset_3d_scene_with_full_controls.json ================================================ { "abs_t": 2.066, "active_graph": 1, "graph_uid": 11, "root": { "node_uid": 1, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 370, "y": 250, "uid": 0, "state": { "enabled": true, "input_sids": {}, "output_sids": {} }, "title": "Scene controls", "graph": { "node_uid": 49, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 232, "y": 10, "uid": 0, "dsid": 6, "state": { "enabled": true, "input_sids": { "70": 1, "73": 2, "75": 3, "76": 4, "77": 5 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 78, "uid": 2, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "graph", "x": 889, "y": 120, "uid": 0, "dsid": 7, "state": { "enabled": true, "input_sids": { "1": 0, "2": 1, "10": 2, "21": 5, "23": 6 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 26, "uid": 3, "parent_uid": 2, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 849, "y": 16, "uid": 0 }, { "plugin": "input_proxy", "x": 11, "y": 308, "uid": 1, "dsid": 29, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 707, "y": 122, "uid": 2, "dsid": 29, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "scale_matrix", "x": 648, "y": 205, "uid": 7 }, { "plugin": "vector", "x": 514, "y": 216, "uid": 8 }, { "plugin": "divide_modulator", "x": 400, "y": 235, "uid": 9 }, { "plugin": "input_proxy", "x": 280, "y": 204, "uid": 10, "dsid": 29, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "max_modulator", "x": 320, "y": 307, "uid": 11 }, { "plugin": "vector_magnitude", "x": 220, "y": 355, "uid": 12 }, { "plugin": "vector_magnitude", "x": 221, "y": 288, "uid": 13 }, { "plugin": "scene_get_bounding_box", "x": 89, "y": 307, "uid": 14 }, { "plugin": "input_proxy", "x": 647, "y": 265, "uid": 21, "dsid": 28, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 605, "y": 72, "uid": 23, "dsid": 25, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "concatenate_matrix_modulator", "x": 743, "y": 204, "uid": 25 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 12, "src_slot": 1, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 21, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 } ] }, "dyn_in": [ { "name": "scene", "dt": 11, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 6, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 768, "y": 125, "uid": 70, "open": false, "dsid": 21, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 766, "y": 190, "uid": 73, "open": false, "dsid": 14, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 31, "uid": 75, "dsid": 12, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 761, "y": 300, "uid": 76, "dsid": 12, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 776, "y": 233, "uid": 77, "dsid": 11, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 70, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 73, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 75, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 76, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 77, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_connected": true, "src_dyn": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "camera", "dt": 6, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "scene", "dt": 11, "uid": 3, "index": 2, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 4, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 5, "index": 4, "type": 0, "is_connected": true } ] }, { "plugin": "register_global_read", "x": 156, "y": 9, "uid": 1, "open": false, "dsid": 15, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "value", "dt": 6, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "register_global_read", "x": 156, "y": 40, "uid": 3, "open": false, "dsid": 15, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "value", "dt": 4, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 251, "y": 225, "uid": 4, "open": false, "dsid": 7, "state": { "enabled": true, "input_sids": { "0": 0, "1": 1, "2": 2, "27": 6 }, "output_sids": { "3": 3 } }, "title": "Camera", "graph": { "node_uid": 28, "uid": 4, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 74, "y": 173, "uid": 0, "dsid": 28, "state": { "slot_id": 0 }, "title": "rotation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 129, "y": 89, "uid": 1, "dsid": 28, "state": { "slot_id": 0 }, "title": "elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 52, "y": 48, "uid": 2, "dsid": 28, "state": { "slot_id": 0 }, "title": "dolly", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 558, "y": 35, "uid": 3, "dsid": 28, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "input", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "perspective_camera", "x": 448, "y": 75, "uid": 4 }, { "plugin": "vector", "x": 218, "y": 28, "uid": 5 }, { "plugin": "rotation_xyz_matrix", "x": 160, "y": 153, "uid": 6 }, { "plugin": "vector_transform", "x": 342, "y": 77, "uid": 7 }, { "plugin": "vector", "x": 219, "y": 267, "uid": 21 }, { "plugin": "vector_transform", "x": 341, "y": 190, "uid": 22 }, { "plugin": "const_float_generator", "x": 104, "y": 287, "uid": 23, "state": { "val": 0.5 } }, { "plugin": "negate_modulator", "x": 132, "y": 33, "uid": 24 }, { "plugin": "input_proxy", "x": 102, "y": 365, "uid": 27, "dsid": 12, "state": { "slot_id": 0 }, "title": "target elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 7, "dst_nuid": 4, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 21, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 22, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 22, "dst_nuid": 4, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 0, "dst_nuid": 6, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 2, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 27, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "rotation", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "elevation", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "dolly", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "target elevation", "dt": 0, "uid": 6, "index": 3, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 49, "y": 225, "uid": 5, "state": { "val": 0, "min": -180, "max": 180 }, "title": "Rotation" }, { "plugin": "slider_float_generator", "x": 49, "y": 294, "uid": 6, "state": { "val": 1.2, "min": -20, "max": 20 }, "title": "Elevation" }, { "plugin": "slider_float_generator", "x": 49, "y": 368, "uid": 7, "state": { "val": 1.3, "min": 0, "max": 10 }, "title": "Dolly" }, { "plugin": "register_global_write", "x": 324, "y": 225, "uid": 8, "open": false, "dsid": 15, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "value", "dt": 8, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "graph", "x": 743, "y": 2, "uid": 9, "open": false, "dsid": 4, "state": { "enabled": true, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "Rotate", "graph": { "node_uid": 21, "uid": 5, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 367, "y": 174, "uid": 0 }, { "plugin": "output_proxy", "x": 485, "y": 174, "uid": 1, "dsid": 18, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 80, "uid": 8, "dsid": 18, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 170, "uid": 9, "dsid": 18, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 46, "y": 257, "uid": 10, "dsid": 18, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 40, "y": 386, "uid": 11, "state": { "val": 180 } }, { "plugin": "const_float_generator", "x": 15, "y": 317, "uid": 12, "state": { "val": 360 } }, { "plugin": "multiply_modulator", "x": 165, "y": 80, "uid": 15 }, { "plugin": "subtract_modulator", "x": 260, "y": 105, "uid": 16 }, { "plugin": "multiply_modulator", "x": 165, "y": 170, "uid": 17 }, { "plugin": "subtract_modulator", "x": 260, "y": 195, "uid": 18 }, { "plugin": "multiply_modulator", "x": 163, "y": 257, "uid": 19 }, { "plugin": "subtract_modulator", "x": 258, "y": 282, "uid": 20 } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 17, "dst_nuid": 18, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 12, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 12, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 11, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 18, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 11, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 16, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 18, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 20, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2 } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 353, "y": -1, "uid": 10, "state": { "val": 0 }, "title": "Rotate X" }, { "plugin": "knob_float_generator", "x": 353, "y": 72, "uid": 11, "state": { "val": 0 }, "title": "Rotate Y" }, { "plugin": "knob_float_generator", "x": 353, "y": 146, "uid": 12, "state": { "val": 0 }, "title": "Rotate Z" }, { "plugin": "graph", "x": 741, "y": 65, "uid": 13, "open": false, "dsid": 8, "state": { "enabled": true, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 6, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 189, "y": 49, "uid": 0 }, { "plugin": "output_proxy", "x": 278, "y": 49, "uid": 2, "dsid": 17, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 73, "y": 49, "uid": 3 }, { "plugin": "input_proxy", "x": 7, "y": 9, "uid": 13, "dsid": 17, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 69, "uid": 14, "dsid": 17, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 132, "uid": 15, "dsid": 17, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 742, "y": 34, "uid": 14, "open": false, "dsid": 8, "state": { "enabled": true, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 7, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 291, "y": 50, "uid": 2, "dsid": 19, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 74, "y": 50, "uid": 3 }, { "plugin": "input_proxy", "x": 8, "y": 10, "uid": 13, "dsid": 19, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 70, "uid": 14, "dsid": 19, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 129, "uid": 15, "dsid": 19, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 191, "y": 50, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 434, "y": -1, "uid": 15, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position X" }, { "plugin": "slider_float_generator", "x": 434, "y": 60, "uid": 16, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Y" }, { "plugin": "slider_float_generator", "x": 434, "y": 122, "uid": 17, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Z" }, { "plugin": "const_float_generator", "x": 634, "y": 0, "uid": 18, "state": { "val": 1 }, "title": "Scale X" }, { "plugin": "const_float_generator", "x": 633, "y": 59, "uid": 19, "state": { "val": 1 }, "title": "Scale Y" }, { "plugin": "const_float_generator", "x": 631, "y": 119, "uid": 20, "state": { "val": 1 }, "title": "Scale Z" }, { "plugin": "graph", "x": 742, "y": 97, "uid": 21, "open": false, "dsid": 4, "state": { "enabled": true, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 8, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 274, "y": 13, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 92, "y": 13, "uid": 1 }, { "plugin": "output_proxy", "x": 394, "y": 13, "uid": 2, "dsid": 17, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 197, "y": 14, "uid": 3, "dsid": 17, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 13, "uid": 4, "dsid": 17, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 71, "uid": 5, "dsid": 17, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "register_global_write", "x": 742, "y": 131, "uid": 22, "open": false, "dsid": 14, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "value", "dt": 4, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "graph", "x": 726, "y": 268, "uid": 23, "open": false, "dsid": 14, "state": { "enabled": true, "input_sids": { "14": 2, "15": 3, "16": 4, "17": 5, "18": 6, "19": 7 }, "output_sids": { "27": 12 } }, "title": "Light chain", "graph": { "node_uid": 33, "uid": 9, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "light_type_modulator", "x": 762, "y": 207, "uid": 0 }, { "plugin": "light_position_modulator", "x": 604, "y": 215, "uid": 2 }, { "plugin": "light_diffuse_color_modulator", "x": 200, "y": 217, "uid": 3 }, { "plugin": "light_intensity_modulator", "x": 430, "y": 219, "uid": 5 }, { "plugin": "light_specular_color_modulator", "x": 309, "y": 219, "uid": 6 }, { "plugin": "vector", "x": 494, "y": 380, "uid": 7 }, { "plugin": "input_proxy", "x": 361, "y": 467, "uid": 14, "dsid": 21, "state": { "slot_id": 0 }, "title": "Pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 383, "y": 549, "uid": 15, "dsid": 22, "state": { "slot_id": 0 }, "title": "Pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 627, "uid": 16, "dsid": 23, "state": { "slot_id": 0 }, "title": "Pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 350, "y": 358, "uid": 17, "dsid": 21, "state": { "slot_id": 0 }, "title": "intensity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 196, "y": 340, "uid": 18, "dsid": 21, "state": { "slot_id": 0 }, "title": "specular color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 93, "y": 237, "uid": 19, "dsid": 22, "state": { "slot_id": 0 }, "title": "diffuse color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 900, "y": 133, "uid": 27, "dsid": 20, "state": { "slot_id": 0 }, "title": "light", "dyn_in": [ { "name": "input", "dt": 13, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "light_type_generator", "x": 618, "y": 302, "uid": 29, "state": { "type": 0 } }, { "plugin": "register_global_write", "x": 547, "y": 549, "uid": 30, "dsid": 3, "state": { "slot_id": 0 }, "title": "lightx", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "register_global_write", "x": 547, "y": 600, "uid": 31, "dsid": 4, "state": { "slot_id": 0 }, "title": "lighty", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "register_global_write", "x": 546, "y": 649, "uid": 32, "dsid": 4, "state": { "slot_id": 0 }, "title": "lightz", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 3, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 29, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 0, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 30, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 15, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 16, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 1 } ] }, "dyn_in": [ { "name": "Pos x", "dt": 0, "uid": 2, "index": 0, "type": 0, "is_connected": true }, { "name": "Pos y", "dt": 0, "uid": 3, "index": 1, "type": 0, "is_connected": true }, { "name": "Pos z", "dt": 0, "uid": 4, "index": 2, "type": 0, "is_connected": true }, { "name": "intensity", "dt": 0, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "specular color", "dt": 3, "uid": 6, "index": 4, "type": 0, "is_connected": true }, { "name": "diffuse color", "dt": 3, "uid": 7, "index": 5, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "light", "dt": 13, "uid": 12, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 341, "y": 268, "uid": 24, "state": { "val": 1.26, "min": 0, "max": 2 }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 342, "y": 343, "uid": 25, "state": { "val": -0.32, "min": -2, "max": 2 }, "title": "Light position X" }, { "plugin": "slider_float_generator", "x": 341, "y": 416, "uid": 26, "state": { "val": -0.12, "min": -2, "max": 2 }, "title": "Light position Y" }, { "plugin": "slider_float_generator", "x": 341, "y": 486, "uid": 27, "state": { "val": 0.92, "min": -2, "max": 2 }, "title": "Light position Z" }, { "plugin": "color_picker", "x": 539, "y": 268, "uid": 28, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 540, "y": 403, "uid": 29, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Specular color" }, { "plugin": "register_global_write", "x": 824, "y": 271, "uid": 30, "open": false, "dsid": 12, "state": { "slot_id": 0 }, "title": "light", "dyn_in": [ { "name": "value", "dt": 13, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "knob_float_generator", "x": 254, "y": 270, "uid": 31, "state": { "val": 0.4399999999999997 }, "title": "shinyness" }, { "plugin": "register_global_write", "x": 823, "y": 324, "uid": 32, "open": false, "dsid": 12, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "slider_float_generator", "x": 48, "y": 440, "uid": 33, "state": { "val": 0, "min": 0, "max": 1 }, "title": "target elevation" }, { "plugin": "url_scene_generator", "x": 38, "y": 8, "uid": 34, "state": { "url": "/data/scene/ladybug/scene.json" } }, { "plugin": "slider_float_generator", "x": 36, "y": 70, "uid": 35, "state": { "val": 1, "min": 0, "max": 10 }, "title": "Mesh scale" }, { "plugin": "graph", "x": 465, "y": 582, "uid": 36, "open": false, "dsid": 21, "state": { "enabled": true, "input_sids": { "21": 4, "22": 5, "23": 6, "24": 7, "25": 8, "39": 12, "40": 13, "41": 14, "44": 16, "47": 18, "49": 19 }, "output_sids": { "9": 0 } }, "title": "Material chain", "graph": { "node_uid": 54, "uid": 10, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "material_diffuse_color_modulator", "x": 1029, "y": 68, "uid": 1 }, { "plugin": "material_alpha_clip_modulator", "x": 1137, "y": 68, "uid": 5 }, { "plugin": "toggle_button", "x": 1025, "y": 145, "uid": 6, "state": { "enabled": false }, "title": "Alpha clip" }, { "plugin": "output_proxy", "x": 1361, "y": 68, "uid": 9, "dsid": 50, "state": { "slot_id": 0 }, "title": "material", "dyn_in": [ { "name": "input", "dt": 12, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "material_blend_mode_modulator", "x": 898, "y": 69, "uid": 10 }, { "plugin": "input_proxy", "x": 800, "y": 134, "uid": 21, "dsid": 44, "state": { "slot_id": 0 }, "title": "hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 798, "y": 183, "uid": 22, "dsid": 44, "state": { "slot_id": 0 }, "title": "saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 231, "uid": 23, "dsid": 44, "state": { "slot_id": 0 }, "title": "luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 799, "y": 279, "uid": 24, "dsid": 44, "state": { "slot_id": 0 }, "title": "alpha", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 800, "y": 70, "uid": 25, "dsid": 44, "state": { "slot_id": 0 }, "title": "blend mode", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "convert_hsla_color_modulator", "x": 907, "y": 147, "uid": 26 }, { "plugin": "material_z_buffer_modulator", "x": 672, "y": 65, "uid": 27 }, { "plugin": "toggle_button", "x": 564, "y": 212, "uid": 28, "state": { "enabled": true }, "title": "Z-buffer" }, { "plugin": "material_shinyness_modulator", "x": 558, "y": 64, "uid": 31 }, { "plugin": "material_double_sided_modulator", "x": 437, "y": 61, "uid": 35 }, { "plugin": "toggle_button", "x": 323, "y": 161, "uid": 36, "state": { "enabled": false }, "title": "Double-sided" }, { "plugin": "material_ambient_color_modulator", "x": 290, "y": 73, "uid": 37 }, { "plugin": "input_proxy", "x": 63, "y": 153, "uid": 39, "dsid": 45, "state": { "slot_id": 0 }, "title": "am hue", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 60, "y": 202, "uid": 40, "dsid": 45, "state": { "slot_id": 0 }, "title": "am saturation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 63, "y": 250, "uid": 41, "dsid": 45, "state": { "slot_id": 0 }, "title": "am luminosity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "convert_hsla_color_modulator", "x": 170, "y": 166, "uid": 43 }, { "plugin": "input_proxy", "x": 61, "y": 99, "uid": 44, "dsid": 34, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 40, "y": 52, "uid": 47, "dsid": 29, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "output", "dt": 13, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "material_light_modulator", "x": 158, "y": 22, "uid": 48 }, { "plugin": "input_proxy", "x": 54, "y": 0, "uid": 49, "dsid": 26, "state": { "slot_id": 0 }, "title": "light index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "toggle_button", "x": 574, "y": 276, "uid": 50, "state": { "enabled": true }, "title": "Depth write" }, { "plugin": "register_global_read", "x": 477, "y": 164, "uid": 51, "dsid": 16, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 25, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 23, "dst_nuid": 26, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 26, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 27, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 31, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 35, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 36, "dst_nuid": 35, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 39, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 40, "dst_nuid": 43, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 43, "dst_nuid": 37, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 47, "dst_nuid": 48, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 44, "dst_nuid": 48, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 48, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 49, "dst_nuid": 48, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 50, "dst_nuid": 27, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 51, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "hue", "dt": 0, "uid": 4, "index": 0, "type": 0, "is_connected": true }, { "name": "saturation", "dt": 0, "uid": 5, "index": 1, "type": 0, "is_connected": true }, { "name": "luminosity", "dt": 0, "uid": 6, "index": 2, "type": 0, "is_connected": true }, { "name": "alpha", "dt": 0, "uid": 7, "index": 3, "type": 0, "is_connected": true }, { "name": "blend mode", "dt": 0, "uid": 8, "index": 4, "type": 0, "is_connected": true }, { "name": "am hue", "dt": 0, "uid": 12, "index": 5, "type": 0, "is_connected": true }, { "name": "am saturation", "dt": 0, "uid": 13, "index": 6, "type": 0, "is_connected": true }, { "name": "am luminosity", "dt": 0, "uid": 14, "index": 7, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 16, "index": 8, "type": 0, "is_connected": false }, { "name": "light", "dt": 13, "uid": 18, "index": 9, "type": 0, "is_connected": true, "connected": false }, { "name": "light index", "dt": 0, "uid": 19, "index": 10, "type": 0 } ], "dyn_out": [ { "name": "material", "dt": 12, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 158, "y": 586, "uid": 37, "state": { "val": 1 }, "title": "Hue" }, { "plugin": "knob_float_generator", "x": 230, "y": 588, "uid": 38, "state": { "val": 1 }, "title": "Saturation" }, { "plugin": "knob_float_generator", "x": 309, "y": 588, "uid": 39, "state": { "val": 1 }, "title": "Luminosity" }, { "plugin": "knob_float_generator", "x": 390, "y": 588, "uid": 40, "state": { "val": 1 }, "title": "Alpha" }, { "plugin": "blend_mode_generator", "x": 42, "y": 661, "uid": 41, "state": { "mode": 4 } }, { "plugin": "knob_float_generator", "x": 199, "y": 653, "uid": 42, "state": { "val": 1 }, "title": "Ambient Hue" }, { "plugin": "knob_float_generator", "x": 291, "y": 653, "uid": 43, "state": { "val": 1 }, "title": "Ambient Sat" }, { "plugin": "knob_float_generator", "x": 379, "y": 653, "uid": 44, "state": { "val": 0 }, "title": "Ambient Lum" }, { "plugin": "url_texture_generator", "x": 38, "y": 586, "uid": 45, "state": { "url": "/data/image/f0e870569e5a143a8d3be0722e38e523141e4248.png" }, "title": "Texture" }, { "plugin": "material_texture_modulator", "x": 201, "y": 725, "uid": 46, "open": false }, { "plugin": "register_global_read", "x": 396, "y": 801, "uid": 47, "open": false, "dsid": 9, "state": { "slot_id": 0 }, "title": "light", "dyn_out": [ { "name": "value", "dt": 13, "desc": "", "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 34, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 36, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 7, "dst_nuid": 4, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 33, "dst_nuid": 4, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 9, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 18, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 13, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 20, "dst_nuid": 13, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 16, "dst_nuid": 14, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 17, "dst_nuid": 14, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 21, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 24, "dst_nuid": 23, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 25, "dst_nuid": 23, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 26, "dst_nuid": 23, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 27, "dst_nuid": 23, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 28, "dst_nuid": 23, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 29, "dst_nuid": 23, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 23, "dst_nuid": 30, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 31, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 37, "dst_nuid": 36, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 38, "dst_nuid": 36, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 39, "dst_nuid": 36, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 40, "dst_nuid": 36, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 41, "dst_nuid": 36, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 44, "dst_nuid": 36, "src_slot": 0, "dst_slot": 7, "dst_dyn": true }, { "src_nuid": 43, "dst_nuid": 36, "src_slot": 0, "dst_slot": 6, "dst_dyn": true }, { "src_nuid": 42, "dst_nuid": 36, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 47, "dst_nuid": 36, "src_slot": 0, "dst_slot": 9, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 45, "dst_nuid": 46, "src_slot": 0, "dst_slot": 2 } ] } } ], "conns": [] }, "registers": [ { "id": "camera", "dt": 8 }, { "id": "lightx", "dt": 8 }, { "id": "lighty", "dt": 8 }, { "id": "lightz", "dt": 8 }, { "id": "light", "dt": 8 }, { "id": "shinyness", "dt": 8 }, { "id": "matrix", "dt": 8 } ] } ================================================ FILE: browser/patches/newset_camera_setup.json ================================================ { "abs_t": 32.9, "active_graph": 0, "graph_uid": 5, "root": { "node_uid": 23, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 344, "y": 267, "uid": 17, "open": false, "dsid": 6, "state": { "enabled": true, "input_sids": { "0": 0, "1": 1, "2": 2, "25": 5 }, "output_sids": { "3": 3 } }, "title": "Camera", "graph": { "node_uid": 26, "uid": 4, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 74, "y": 173, "uid": 0, "dsid": 16, "state": { "slot_id": 0 }, "title": "rotation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 129, "y": 89, "uid": 1, "dsid": 16, "state": { "slot_id": 0 }, "title": "elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 52, "y": 48, "uid": 2, "dsid": 16, "state": { "slot_id": 0 }, "title": "dolly", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 558, "y": 35, "uid": 3, "dsid": 16, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "input", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "perspective_camera", "x": 448, "y": 75, "uid": 4 }, { "plugin": "vector", "x": 218, "y": 28, "uid": 5 }, { "plugin": "rotation_xyz_matrix", "x": 160, "y": 153, "uid": 6 }, { "plugin": "vector_transform", "x": 342, "y": 77, "uid": 7 }, { "plugin": "vector", "x": 219, "y": 267, "uid": 21 }, { "plugin": "vector_transform", "x": 341, "y": 190, "uid": 22 }, { "plugin": "const_float_generator", "x": 104, "y": 287, "uid": 23, "state": { "val": 0.5 } }, { "plugin": "negate_modulator", "x": 132, "y": 33, "uid": 24 }, { "plugin": "input_proxy", "x": 92, "y": 457, "uid": 25, "dsid": 2, "state": { "slot_id": 0 }, "title": "target elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 7, "dst_nuid": 4, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 21, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 22, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 22, "dst_nuid": 4, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 0, "dst_nuid": 6, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 2, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "rotation", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "elevation", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "dolly", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "target elevation", "dt": 0, "uid": 5, "index": 3, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 145, "y": 266, "uid": 18, "state": { "val": -7.2, "min": -180, "max": 180 }, "title": "Rotation" }, { "plugin": "slider_float_generator", "x": 145, "y": 336, "uid": 19, "state": { "val": -0.8, "min": -20, "max": 20 }, "title": "Elevation" }, { "plugin": "slider_float_generator", "x": 145, "y": 410, "uid": 20, "state": { "val": 2.9, "min": 0, "max": 10 }, "title": "Dolly" }, { "plugin": "register_global_write", "x": 421, "y": 267, "uid": 21, "open": false, "dsid": 3, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "value", "dt": 8, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "slider_float_generator", "x": 145, "y": 486, "uid": 22, "state": { "val": 0, "min": 0, "max": 10 }, "title": "Target elevation" } ], "conns": [ { "src_nuid": 18, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 20, "dst_nuid": 17, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 17, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 22, "dst_nuid": 17, "src_slot": 0, "dst_slot": 3, "dst_dyn": true } ] }, "registers": [ { "id": "camera", "dt": 8 }, { "id": "shinyness", "dt": 8 } ] } ================================================ FILE: browser/patches/newset_matrix_transform_setup.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 5, "root": { "node_uid": 14, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 517, "y": 87, "uid": 0, "open": false, "dsid": 4, "state": { "enabled": true, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "Rotate", "graph": { "node_uid": 21, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 367, "y": 174, "uid": 0 }, { "plugin": "output_proxy", "x": 485, "y": 174, "uid": 1, "dsid": 6, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 80, "uid": 8, "dsid": 6, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 170, "uid": 9, "dsid": 6, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 46, "y": 257, "uid": 10, "dsid": 6, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 40, "y": 386, "uid": 11, "state": { "val": 180 } }, { "plugin": "const_float_generator", "x": 15, "y": 317, "uid": 12, "state": { "val": 360 } }, { "plugin": "multiply_modulator", "x": 165, "y": 80, "uid": 15 }, { "plugin": "subtract_modulator", "x": 260, "y": 105, "uid": 16 }, { "plugin": "multiply_modulator", "x": 165, "y": 170, "uid": 17 }, { "plugin": "subtract_modulator", "x": 260, "y": 195, "uid": 18 }, { "plugin": "multiply_modulator", "x": 163, "y": 257, "uid": 19 }, { "plugin": "subtract_modulator", "x": 258, "y": 282, "uid": 20 } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 17, "dst_nuid": 18, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 12, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 12, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 11, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 18, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 11, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 16, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 18, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 20, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2 } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 226, "y": 78, "uid": 1, "state": { "val": 0 }, "title": "Rotate X" }, { "plugin": "knob_float_generator", "x": 226, "y": 151, "uid": 2, "state": { "val": 0 }, "title": "Rotate Y" }, { "plugin": "knob_float_generator", "x": 226, "y": 225, "uid": 3, "state": { "val": 0 }, "title": "Rotate Z" }, { "plugin": "graph", "x": 515, "y": 150, "uid": 4, "open": false, "dsid": 8, "state": { "enabled": true, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 2, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 189, "y": 49, "uid": 0 }, { "plugin": "output_proxy", "x": 278, "y": 49, "uid": 2, "dsid": 5, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 73, "y": 49, "uid": 3 }, { "plugin": "input_proxy", "x": 7, "y": 9, "uid": 13, "dsid": 5, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 69, "uid": 14, "dsid": 5, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 132, "uid": 15, "dsid": 5, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 516, "y": 119, "uid": 5, "open": false, "dsid": 8, "state": { "enabled": true, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 3, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 291, "y": 50, "uid": 2, "dsid": 7, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 74, "y": 50, "uid": 3 }, { "plugin": "input_proxy", "x": 8, "y": 10, "uid": 13, "dsid": 7, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 70, "uid": 14, "dsid": 7, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 129, "uid": 15, "dsid": 7, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 191, "y": 50, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 313, "y": 82, "uid": 6, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position X" }, { "plugin": "slider_float_generator", "x": 313, "y": 143, "uid": 7, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Y" }, { "plugin": "slider_float_generator", "x": 313, "y": 205, "uid": 8, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Z" }, { "plugin": "const_float_generator", "x": 116, "y": 86, "uid": 9, "state": { "val": 1 }, "title": "Scale X" }, { "plugin": "const_float_generator", "x": 115, "y": 145, "uid": 10, "state": { "val": 1 }, "title": "Scale Y" }, { "plugin": "const_float_generator", "x": 113, "y": 205, "uid": 11, "state": { "val": 1 }, "title": "Scale Z" }, { "plugin": "graph", "x": 516, "y": 182, "uid": 12, "open": false, "dsid": 4, "state": { "enabled": true, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 4, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 274, "y": 13, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 92, "y": 13, "uid": 1 }, { "plugin": "output_proxy", "x": 394, "y": 13, "uid": 2, "dsid": 5, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 197, "y": 14, "uid": 3, "dsid": 5, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 13, "uid": 4, "dsid": 5, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 71, "uid": 5, "dsid": 5, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "register_global_write", "x": 516, "y": 216, "uid": 13, "open": false, "dsid": 2, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "value", "dt": 4, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 7, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 10, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 11, "dst_nuid": 4, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 0, "dst_nuid": 12, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 12, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true } ] }, "registers": [ { "id": "matrix", "dt": 8 } ] } ================================================ FILE: browser/patches/newset_point_light.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 10, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 606, "y": 148, "uid": 0, "open": false, "dsid": 14, "state": { "enabled": true, "input_sids": { "14": 2, "15": 3, "16": 4, "17": 5, "18": 6, "19": 7 }, "output_sids": { "27": 12 } }, "title": "Light chain", "graph": { "node_uid": 35, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "light_type_modulator", "x": 762, "y": 207, "uid": 0 }, { "plugin": "light_position_modulator", "x": 604, "y": 215, "uid": 2 }, { "plugin": "light_diffuse_color_modulator", "x": 200, "y": 217, "uid": 3 }, { "plugin": "light_intensity_modulator", "x": 430, "y": 219, "uid": 5 }, { "plugin": "light_specular_color_modulator", "x": 309, "y": 219, "uid": 6 }, { "plugin": "vector", "x": 494, "y": 380, "uid": 7 }, { "plugin": "input_proxy", "x": 361, "y": 467, "uid": 14, "dsid": 21, "state": { "slot_id": 0 }, "title": "Pos x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 383, "y": 549, "uid": 15, "dsid": 22, "state": { "slot_id": 0 }, "title": "Pos y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 412, "y": 627, "uid": 16, "dsid": 23, "state": { "slot_id": 0 }, "title": "Pos z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 350, "y": 358, "uid": 17, "dsid": 21, "state": { "slot_id": 0 }, "title": "intensity", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 196, "y": 340, "uid": 18, "dsid": 21, "state": { "slot_id": 0 }, "title": "specular color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 93, "y": 237, "uid": 19, "dsid": 22, "state": { "slot_id": 0 }, "title": "diffuse color", "dyn_out": [ { "name": "output", "dt": 3, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 900, "y": 133, "uid": 27, "dsid": 20, "state": { "slot_id": 0 }, "title": "light", "dyn_in": [ { "name": "input", "dt": 13, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "light_type_generator", "x": 618, "y": 302, "uid": 29, "state": { "type": 0 } }, { "plugin": "register_global_write", "x": 471, "y": 481, "uid": 32, "dsid": 2, "state": { "slot_id": 0 }, "title": "lightx", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "register_global_write", "x": 492, "y": 561, "uid": 33, "dsid": 3, "state": { "slot_id": 0 }, "title": "lighty", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "register_global_write", "x": 511, "y": 630, "uid": 34, "dsid": 3, "state": { "slot_id": 0 }, "title": "lightz", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 3, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 16, "dst_nuid": 7, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 17, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 18, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 29, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 0, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 15, "dst_nuid": 33, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 16, "dst_nuid": 34, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 1 } ] }, "dyn_in": [ { "name": "Pos x", "dt": 0, "uid": 2, "index": 0, "type": 0, "is_connected": true }, { "name": "Pos y", "dt": 0, "uid": 3, "index": 1, "type": 0, "is_connected": true }, { "name": "Pos z", "dt": 0, "uid": 4, "index": 2, "type": 0, "is_connected": true }, { "name": "intensity", "dt": 0, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "specular color", "dt": 3, "uid": 6, "index": 4, "type": 0, "is_connected": true }, { "name": "diffuse color", "dt": 3, "uid": 7, "index": 5, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "light", "dt": 13, "uid": 12, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 218, "y": 141, "uid": 1, "state": { "val": 1.26, "min": 0, "max": 2 }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 219, "y": 216, "uid": 2, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light position X" }, { "plugin": "slider_float_generator", "x": 218, "y": 289, "uid": 3, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light position Y" }, { "plugin": "slider_float_generator", "x": 218, "y": 359, "uid": 4, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Light position Z" }, { "plugin": "color_picker", "x": 416, "y": 141, "uid": 5, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Diffuse color" }, { "plugin": "color_picker", "x": 417, "y": 276, "uid": 6, "state": { "hue": 0, "sat": 0, "lum": 1 }, "title": "Specular color" }, { "plugin": "register_global_write", "x": 607, "y": 187, "uid": 7, "open": false, "dsid": 12, "state": { "slot_id": 0 }, "title": "light", "dyn_in": [ { "name": "value", "dt": 13, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "knob_float_generator", "x": 131, "y": 143, "uid": 8, "state": { "val": 0.4399999999999997 }, "title": "shinyness" }, { "plugin": "register_global_write", "x": 608, "y": 222, "uid": 9, "dsid": 12, "state": { "slot_id": 0 }, "title": "shinyness", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 0, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_dyn": true } ] }, "registers": [ { "id": "lightx", "dt": 8 }, { "id": "lighty", "dt": 8 }, { "id": "lightz", "dt": 8 }, { "id": "light", "dt": 8 }, { "id": "shinyness", "dt": 8 } ] } ================================================ FILE: browser/patches/newset_synch_add.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 1791, "root": { "node_uid": 226, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "register_global_read", "x": 282, "y": 457, "uid": 221, "dsid": 2, "state": { "slot_id": 0 }, "title": "synch", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "const_float_generator", "x": 308, "y": 540, "uid": 222, "state": { "val": 1 }, "title": "Base value" }, { "plugin": "add_modulator", "x": 440, "y": 498, "uid": 223, "open": false }, { "plugin": "lowpass_filter_modulator", "x": 530, "y": 489, "uid": 224 }, { "plugin": "knob_float_generator", "x": 441, "y": 531, "uid": 225, "state": { "val": 0.8400000000000004 }, "title": "Filter" } ], "conns": [ { "src_nuid": 221, "dst_nuid": 223, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 222, "dst_nuid": 223, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 223, "dst_nuid": 224, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 225, "dst_nuid": 224, "src_slot": 0, "dst_slot": 1 } ] }, "registers": [ { "id": "amps", "dt": 0 }, { "id": "bd", "dt": 0 }, { "id": "sd", "dt": 0 }, { "id": "synch", "dt": 0 }, { "id": "camera", "dt": 8 }, { "id": "matrix", "dt": 8 }, { "id": "lightx", "dt": 8 }, { "id": "lighty", "dt": 8 }, { "id": "lightz", "dt": 8 }, { "id": "light", "dt": 8 }, { "id": "shinyness", "dt": 8 } ] } ================================================ FILE: browser/patches/newset_synch_substract.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 1, "root": { "node_uid": 6, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "register_global_read", "x": 402, "y": 326, "uid": 0, "dsid": 3, "state": { "slot_id": 0 }, "title": "synch", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "const_float_generator", "x": 370, "y": 389, "uid": 1, "state": { "val": 1 }, "title": "Base value" }, { "plugin": "lowpass_filter_modulator", "x": 581, "y": 364, "uid": 3 }, { "plugin": "knob_float_generator", "x": 483, "y": 408, "uid": 4, "state": { "val": 0.8400000000000004 }, "title": "Filter" }, { "plugin": "subtract_modulator", "x": 484, "y": 367, "uid": 5, "open": false } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 } ] }, "registers": [ { "id": "synch", "dt": 8 } ] } ================================================ FILE: browser/patches/newset_synch_synchtrack.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 11, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "url_audio_generator", "x": 11, "y": 48, "uid": 0, "state": { "url": "data/demos/radix/tiger_timing" } }, { "plugin": "audio_player", "x": 559, "y": 175, "uid": 1 }, { "plugin": "toggle_button", "x": 412, "y": 108, "uid": 2, "open": false, "state": { "enabled": true }, "title": "Play" }, { "plugin": "toggle_button", "x": 412, "y": 152, "uid": 3, "open": false, "state": { "enabled": false }, "title": "Mute audio" }, { "plugin": "knob_float_generator", "x": 413, "y": 189, "uid": 4, "open": false, "state": { "val": 0.49999999999999956 }, "title": "Volume" }, { "plugin": "audio_get_duration_modulator", "x": 333, "y": 225, "uid": 5, "open": false }, { "plugin": "knob_float_generator", "x": 321, "y": 150, "uid": 6, "state": { "val": 0 }, "title": "Position" }, { "plugin": "multiply_modulator", "x": 426, "y": 225, "uid": 7, "open": false }, { "plugin": "graph", "x": 176, "y": 40, "uid": 8, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "9": 0, "10": 1 }, "output_sids": { "12": 3 } }, "title": "Synchtrack for audio", "graph": { "node_uid": 17, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "audio_get_current_time_modulator", "x": 109, "y": 258, "uid": 1 }, { "plugin": "const_float_generator", "x": 109, "y": 190, "uid": 5, "state": { "val": 30 } }, { "plugin": "multiply_modulator", "x": 252, "y": 179, "uid": 6 }, { "plugin": "multiply_modulator", "x": 455, "y": 168, "uid": 8, "title": "Amp signal" }, { "plugin": "input_proxy", "x": 26, "y": 259, "uid": 9, "dsid": 3, "state": { "slot_id": 0 }, "title": "audio", "dyn_out": [ { "name": "output", "dt": 10, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 247, "y": 257, "uid": 10, "dsid": 3, "state": { "slot_id": 0 }, "title": "Amp amount", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 562, "y": 169, "uid": 12, "dsid": 3, "state": { "slot_id": 0 }, "title": "synch", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "url_json_generator", "x": 10, "y": 40, "uid": 13, "state": { "url": "data/demos/radix/tiger-drums-bd.json" } }, { "plugin": "member_to_typed_array_modulator", "x": 151, "y": 62, "uid": 14, "state": { "datatype": 6 } }, { "plugin": "label_generator", "x": 11, "y": 124, "uid": 15, "state": { "text": "data" } }, { "plugin": "array_get_modulator", "x": 360, "y": 133, "uid": 16 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "offset": 3 }, { "src_nuid": 5, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 14, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 14, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "audio", "dt": 10, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "Amp amount", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "synch", "dt": 0, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "const_float_generator", "x": 10, "y": 115, "uid": 9, "state": { "val": 100 }, "title": "Amp" }, { "plugin": "register_global_write", "x": 370, "y": 40, "uid": 10, "dsid": 5, "state": { "slot_id": 0 }, "title": "synch", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 0, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 0, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_dyn": true, "offset": 2 } ] }, "registers": [ { "id": "synch", "dt": 8 } ] } ================================================ FILE: browser/patches/newset_transform_translate.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 5, "root": { "node_uid": 14, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 328, "y": 83, "uid": 5, "open": false, "dsid": 8, "state": { "enabled": true, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 3, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 291, "y": 50, "uid": 2, "dsid": 7, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 74, "y": 50, "uid": 3 }, { "plugin": "input_proxy", "x": 8, "y": 10, "uid": 13, "dsid": 7, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 70, "uid": 14, "dsid": 7, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 129, "uid": 15, "dsid": 7, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 191, "y": 50, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 131, "y": 80, "uid": 6, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position X" }, { "plugin": "slider_float_generator", "x": 131, "y": 141, "uid": 7, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Y" }, { "plugin": "slider_float_generator", "x": 131, "y": 203, "uid": 8, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Z" }, { "plugin": "register_global_write", "x": 328, "y": 118, "uid": 13, "open": false, "dsid": 2, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "value", "dt": 4, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] } ], "conns": [ { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 7, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true } ] }, "registers": [ { "id": "matrix", "dt": 8 } ] } ================================================ FILE: browser/patches/patches.json ================================================ { "EXAMPLES": { "Rotating box": { "name": "_example-rotating-cube" }, "Gaze click: Button shows a screen": { "name": "_example-gaze-button" }, "Gaze click: switch object position": { "name": "_example-switch-box-position-on-gaze-click" }, "Inputs to Array": { "name": "_example-inputs-to-array" }, "Spawn particles from mesh": { "name": "_example-particle-spawn-from-mesh" } }, "COMPONENTS: Wobble": { "Wobble on Y axis": { "name": "components/wobble-y-axis", "type": "entity_component" } }, "COMPONENTS: Rotation": { "Rotation on Y axis": { "name": "components/rotation-y-axis", "type": "entity_component" }, "Rotation on all axes": { "name": "components/rotation-all-axes", "type": "entity_component" } }, "OBJECTS: BASIC": { "3D model": { "name": "_add-3d-model", "type": "entity" }, "Box": { "name": "_add-box", "type": "entity" }, "360 photo": { "name": "_add-360-photo", "type": "entity" }, "Sphere": { "name": "_add-sphere", "type": "entity" }, "Dodecahedron": { "name": "_add-dodecahedron", "type": "entity" }, "Plane": { "name": "_add-plane-no-shading", "type": "entity" }, "Cylinder": { "name": "_add-cylinder", "type": "entity" }, "Torus": { "name": "_add-torus", "type": "entity" }, "Ring": { "name": "_add-ring", "type": "entity" }, "Sky sphere": { "name": "_add-sky-sphere", "type": "entity" }, "Floor": { "name": "_add-floor", "type": "entity" }, "Room": { "name": "_add-room", "type": "entity" }, "Text": { "name": "_add-text", "type": "entity" }, "Stereo Cubemap": { "name": "_add_stereo_cubemap", "type": "entity" } }, "OBJECTS: ISLAND": { "Base Rock": { "name": "_add_object_preset_island-valley-baserock", "type": "entity" }, "Leaf Tree": { "name": "_add_object_preset_island-leaftreea", "type": "entity" }, "Palm Tree": { "name": "_add_object_preset_island-palmtree", "type": "entity" }, "Low Stone A": { "name": "_add_object_preset_island-stone-a", "type": "entity" }, "Low Stone B": { "name": "_add_object_preset_island-stone-c", "type": "entity" }, "High Stone A": { "name": "_add_object_preset_island-stone-b", "type": "entity" }, "High Stone B": { "name": "_add_object_preset_island-stone-d", "type": "entity" } }, "OBJECTS: MOUNTAIN": { "Mountain": { "name": "_add_object_preset_Mountain_02", "type": "entity" }, "Pine Tree": { "name": "_add_object_preset_Mountain_PineTree_02", "type": "entity" }, "Bush": { "name": "_add_object_preset_Mountain_bush_01", "type": "entity" }, "Crystal": { "name": "_add_object_preset_Mountain_crystal_01", "type": "entity" }, "Green": { "name": "_add_object_preset_Mountain_green_01", "type": "entity" }, "Plump Tree": { "name": "_add_object_preset_Mountain_plumptree_01", "type": "entity" }, "Plump Tree 2": { "name": "_add_object_preset_Mountain_plumptree_02", "type": "entity" }, "Rocks": { "name": "_add_object_preset_Mountain_rocks_01", "type": "entity" }, "Telescope": { "name": "_add_object_preset_Mountain_scope_01", "type": "entity" }, "Shroom": { "name": "_add_object_preset_Mountain_shroom_01", "type": "entity" }, "Small Base": { "name": "_add_object_preset_Mountain_small_base_01", "type": "entity" }, "Small Base 2": { "name": "_add_object_preset_Mountain_small_base_02", "type": "entity" }, "Water": { "name": "_add_object_preset_Mountain_water_02", "type": "entity" } }, "OBJECTS: LAB": { "Lab": { "name": "_add_object_preset_Labv9", "type": "entity" }, "Genius": { "name": "_add_object_preset_Labv4-Genius_02", "type": "entity" }, "Happy Dude": { "name": "_add_object_preset_Labv4_Happy_02", "type": "entity" }, "Ceiling Lights": { "name": "_add_object_preset_Labv8lights", "type": "entity" }, "Television": { "name": "_add_object_preset_LabvTV", "type": "entity" }, "Boom Box": { "name": "_add_object_preset_Labvboombox", "type": "entity" }, "Box": { "name": "_add_object_preset_Labvbox", "type": "entity" }, "Desk": { "name": "_add_object_preset_Labvdesk", "type": "entity" }, "Glasses": { "name": "_add_object_preset_Labvglasses", "type": "entity" }, "Globe": { "name": "_add_object_preset_Labvglobe", "type": "entity" }, "Light": { "name": "_add_object_preset_Labvlight2", "type": "entity" }, "Mic": { "name": "_add_object_preset_Labvmic", "type": "entity" }, "Rocket": { "name": "_add_object_preset_Labvrocket", "type": "entity" }, "Stool": { "name": "_add_object_preset_Labvstool", "type": "entity" }, "Trash": { "name": "_add_object_preset_Labvtrash", "type": "entity" }, "Wrench": { "name": "_add_object_preset_Labvwrench", "type": "entity" }, "Zapper": { "name": "_add_object_preset_Labvzapper", "type": "entity" } }, "LIGHTS": { "Point light": { "name": "_add-point-light", "type": "entity" } }, "PARTICLES": { "Particle emitter": { "name": "_add-particle-emitter", "type": "entity" }, "Geometry as particles": { "name": "_add-particle-geometry", "type": "entity" } }, "INTERACTION": { "Increment / Decrement Value on Trigger": { "name": "_increment_or_decrement_on_trigger" }, "WASD+ZC Keyboard Movement": { "name": "wasdzc-keyboard-movement" }, "HTC Vive Controllers": { "name": "vive-hands" } }, "MUSIC AND SOUND": { "Play music or sound": { "name": "_audio-player" }, "Play music + FFT output": { "name": "_audio-player-and-fft" } }, "TIME & ANIMATION ": { "Basic clock": { "name": "_basic-clock" }, "Animate on Trigger": { "name": "_animate-on-trigger" }, "Oscillate between 2 values": { "name": "_oscillate-between-2-values" }, "Oscillate 2 values with in tween": { "name": "_oscillate-with-in-tween" }, "Oscillate 2 values with out tween": { "name": "_oscillate-with-out-tween" }, "Oscillate with a sawtooth": { "name": "_oscillate-sawtooth" }, "Oscillate with a triangle": { "name": "time_oscillate_with_triangle" }, "Stopwatch": { "name": "_stopwatch" }, "Timer from 0 to 1": { "name": "time_timer_from_0_to_1" }, "Timer from 1 to 0": { "name": "time_timer_from_1_to_0" }, "Circular motion to XYZ": { "name": "time_circular_motion_to_xyz" }, "Shaky random between 0 & 1": { "name": "time_shaky_random" }, "Random with speed": { "name": "util_random_with_speed" }, "Move in a circle and turn": { "name": "_animation-move-in-a-circle-and-turn" } }, "UTILS": { "4 step stepsequencer": { "name": "util_4_step_stepsequencer" }, "1 step stepsequencer": { "name": "util_1_step_stepsequencer" }, "9 step stepsequencer": { "name": "util_9_step_stepsequencer" }, "Display number": { "name": "_util-display-number", "type": "patch" } } } ================================================ FILE: browser/patches/shader_fog.json ================================================ { "abs_t": 83.893, "active_graph": 0, "graph_uid": 25, "root": { "node_uid": 16, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "from_mesh_custom_shader", "x": 683, "y": 324, "uid": 13, "dsid": 2, "state": { "vs_src": "void main(void) {\n vec4 tp = m_mat * vec4(v_pos, 1.0);\n\n tp = v_mat * tp;\n gl_Position = p_mat * tp;\n f_col = d_col;\n f_norm = n_mat * v_norm;\n f_uv0 = v_uv0;\n}", "ps_src": "void main(void) {\n float d = clamp((gl_FragCoord.z / gl_FragCoord.w) * fd, 0.0, 1.0);\n vec4 fc = vec4(0.0, 0.0, 0.0, f_col.a);\n \n fc.rgb = f_col.rgb;\n fc *= texture2D(d_tex, f_uv0.st);\n fc.rgb += a_col.rgb;\n fc.rbg = mix(fog_color.rbg, fc.rgb, 1.0 - d);\n \n gl_FragColor = fc; // vec4(d, d, d, 1.0);\n}", "changed": true, "slot_ids": { "fog_color": { "id": 0, "dt": { "id": 3, "name": "Color" }, "uniform": {} }, "fd": { "id": 1, "dt": { "id": 0, "name": "Float" }, "uniform": {} } } }, "dyn_in": [ { "name": "fog_color", "dt": 3, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "fd", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true } ] }, { "plugin": "knob_float_generator", "x": 546, "y": 562, "uid": 14, "state": { "val": 0.94 }, "title": "Fog dist" }, { "plugin": "color_picker", "x": 285, "y": 466, "uid": 15, "state": { "hue": 0, "sat": 0.2, "lum": 0.43999999999999995 } } ], "conns": [ { "src_nuid": 15, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 1, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/synch_add.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 1791, "root": { "node_uid": 226, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "register_global_read", "x": 282, "y": 457, "uid": 221, "dsid": 2, "state": { "slot_id": 0 }, "title": "synch", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "const_float_generator", "x": 308, "y": 540, "uid": 222, "state": { "val": 1 }, "title": "Base value" }, { "plugin": "add_modulator", "x": 440, "y": 498, "uid": 223, "open": false }, { "plugin": "lowpass_filter_modulator", "x": 530, "y": 489, "uid": 224 }, { "plugin": "knob_float_generator", "x": 441, "y": 531, "uid": 225, "state": { "val": 0.8400000000000004 }, "title": "Filter" } ], "conns": [ { "src_nuid": 221, "dst_nuid": 223, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 222, "dst_nuid": 223, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 223, "dst_nuid": 224, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 225, "dst_nuid": 224, "src_slot": 0, "dst_slot": 1 } ] }, "registers": [ { "id": "amps", "dt": 0 }, { "id": "bd", "dt": 0 }, { "id": "sd", "dt": 0 }, { "id": "synch", "dt": 0 }, { "id": "camera", "dt": 8 }, { "id": "matrix", "dt": 8 }, { "id": "lightx", "dt": 8 }, { "id": "lighty", "dt": 8 }, { "id": "lightz", "dt": 8 }, { "id": "light", "dt": 8 }, { "id": "shinyness", "dt": 8 } ] } ================================================ FILE: browser/patches/synch_substract.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 1, "root": { "node_uid": 6, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "register_global_read", "x": 402, "y": 326, "uid": 0, "dsid": 3, "state": { "slot_id": 0 }, "title": "synch", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "const_float_generator", "x": 370, "y": 389, "uid": 1, "state": { "val": 1 }, "title": "Base value" }, { "plugin": "lowpass_filter_modulator", "x": 581, "y": 364, "uid": 3 }, { "plugin": "knob_float_generator", "x": 483, "y": 408, "uid": 4, "state": { "val": 0.8400000000000004 }, "title": "Filter" }, { "plugin": "subtract_modulator", "x": 484, "y": 367, "uid": 5, "open": false } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 } ] }, "registers": [ { "id": "synch", "dt": 8 } ] } ================================================ FILE: browser/patches/synch_synchtrack.json ================================================ { "abs_t": 69.067, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 31, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "url_audio_generator", "x": 58, "y": 126, "uid": 20, "state": { "url": "data/audio" } }, { "plugin": "audio_player", "x": 606, "y": 253, "uid": 21 }, { "plugin": "toggle_button", "x": 459, "y": 186, "uid": 22, "open": false, "state": { "enabled": true }, "title": "Play" }, { "plugin": "toggle_button", "x": 459, "y": 230, "uid": 23, "open": false, "state": { "enabled": false }, "title": "Mute audio" }, { "plugin": "knob_float_generator", "x": 460, "y": 267, "uid": 24, "open": false, "state": { "val": 0.49999999999999956 }, "title": "Volume" }, { "plugin": "audio_get_duration_modulator", "x": 380, "y": 303, "uid": 25, "open": false }, { "plugin": "knob_float_generator", "x": 368, "y": 228, "uid": 26, "state": { "val": 0 }, "title": "Position" }, { "plugin": "multiply_modulator", "x": 473, "y": 303, "uid": 27, "open": false }, { "plugin": "graph", "x": 223, "y": 118, "uid": 28, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "9": 0, "10": 1 }, "output_sids": { "12": 3 } }, "title": "Synchtrack for audio", "graph": { "node_uid": 17, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "audio_get_current_time_modulator", "x": 109, "y": 258, "uid": 1 }, { "plugin": "const_float_generator", "x": 109, "y": 190, "uid": 5, "state": { "val": 30 } }, { "plugin": "multiply_modulator", "x": 252, "y": 179, "uid": 6 }, { "plugin": "multiply_modulator", "x": 455, "y": 168, "uid": 8, "title": "Amp signal" }, { "plugin": "input_proxy", "x": 26, "y": 259, "uid": 9, "dsid": 4, "state": { "slot_id": 0 }, "title": "audio", "dyn_out": [ { "name": "output", "dt": 10, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 247, "y": 257, "uid": 10, "dsid": 4, "state": { "slot_id": 0 }, "title": "Amp amount", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 562, "y": 169, "uid": 12, "dsid": 4, "state": { "slot_id": 0 }, "title": "synch", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "url_json_generator", "x": 10, "y": 40, "uid": 13, "state": { "url": "data/demos/radix/tiger-drums-bd.json" } }, { "plugin": "member_to_typed_array_modulator", "x": 151, "y": 62, "uid": 14, "state": { "datatype": 6 } }, { "plugin": "label_generator", "x": 11, "y": 124, "uid": 15, "state": { "text": "data" } }, { "plugin": "array_get_modulator", "x": 360, "y": 133, "uid": 16 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "offset": 3 }, { "src_nuid": 5, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 14, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 14, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "audio", "dt": 10, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "Amp amount", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "synch", "dt": 0, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "const_float_generator", "x": 57, "y": 193, "uid": 29, "state": { "val": 100 }, "title": "Amp" }, { "plugin": "register_global_write", "x": 417, "y": 118, "uid": 30, "dsid": 5, "state": { "slot_id": 0 }, "title": "synch", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false } ] } ], "conns": [ { "src_nuid": 20, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 22, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 24, "dst_nuid": 21, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 27, "dst_nuid": 21, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 25, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 26, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 29, "dst_nuid": 28, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 28, "dst_nuid": 30, "src_slot": 0, "dst_slot": 0, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 20, "dst_nuid": 28, "src_slot": 0, "dst_slot": 0, "dst_dyn": true, "offset": 2 } ] }, "registers": [ { "id": "synch", "dt": 8 } ] } ================================================ FILE: browser/patches/template_master_camera_and_master_time.json ================================================ { "abs_t": 1599.782, "active_graph": 0, "graph_uid": 9, "root": { "node_uid": 63, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 743, "y": 251, "uid": 55, "dsid": 6, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "0": 0, "1": 1, "2": 2, "25": 5 }, "output_sids": { "3": 3 } }, "title": "Master Camera", "graph": { "node_uid": 26, "uid": 7, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 74, "y": 173, "uid": 0, "dsid": 18, "state": { "slot_id": 0 }, "title": "rotation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 129, "y": 89, "uid": 1, "dsid": 18, "state": { "slot_id": 0 }, "title": "elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 52, "y": 48, "uid": 2, "dsid": 18, "state": { "slot_id": 0 }, "title": "dolly", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 558, "y": 35, "uid": 3, "dsid": 18, "state": { "slot_id": 0 }, "title": "camera", "dyn_in": [ { "name": "input", "dt": 6, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "perspective_camera", "x": 448, "y": 75, "uid": 4 }, { "plugin": "vector", "x": 218, "y": 28, "uid": 5 }, { "plugin": "rotation_xyz_matrix", "x": 160, "y": 153, "uid": 6 }, { "plugin": "vector_transform", "x": 342, "y": 77, "uid": 7 }, { "plugin": "vector", "x": 219, "y": 267, "uid": 21 }, { "plugin": "vector_transform", "x": 341, "y": 190, "uid": 22 }, { "plugin": "const_float_generator", "x": 104, "y": 287, "uid": 23, "state": { "val": 0.5 } }, { "plugin": "negate_modulator", "x": 132, "y": 33, "uid": 24 }, { "plugin": "input_proxy", "x": 92, "y": 457, "uid": 25, "dsid": 4, "state": { "slot_id": 0 }, "title": "target elevation", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 7, "dst_nuid": 4, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 21, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 22, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 21, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 22, "dst_nuid": 4, "src_slot": 0, "dst_slot": 4 }, { "src_nuid": 0, "dst_nuid": 6, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 1, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 24, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 2, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 21, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "rotation", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "elevation", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "dolly", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "target elevation", "dt": 0, "uid": 5, "index": 3, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "camera", "dt": 6, "uid": 3, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 524, "y": 208, "uid": 56, "state": { "val": -7.2, "min": -180, "max": 180 }, "title": "Rotation" }, { "plugin": "slider_float_generator", "x": 524, "y": 291, "uid": 57, "state": { "val": -0.8, "min": -20, "max": 20 }, "title": "Elevation" }, { "plugin": "slider_float_generator", "x": 524, "y": 374, "uid": 58, "state": { "val": 2.9, "min": 0, "max": 10 }, "title": "Dolly" }, { "plugin": "slider_float_generator", "x": 525, "y": 456, "uid": 59, "state": { "val": 0, "min": 0, "max": 10 }, "title": "target elevation" }, { "plugin": "graph", "x": 728, "y": 573, "uid": 60, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "7": 1 }, "output_sids": { "6": 0 } }, "title": "Master time", "graph": { "node_uid": 9, "uid": 8, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "delta_t_generator", "x": 7, "y": 7, "uid": 0 }, { "plugin": "accumulate_modulator", "x": 181, "y": 7, "uid": 1, "state": { "value": 11.911499999999842 } }, { "plugin": "multiply_modulator", "x": 101, "y": 7, "uid": 2 }, { "plugin": "output_proxy", "x": 283, "y": 7, "uid": 6, "dsid": 8, "state": { "slot_id": 0 }, "title": "time", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 23, "y": 66, "uid": 7, "dsid": 6, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 97, "y": 93, "uid": 8, "state": { "val": 0 } } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "time", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 526, "y": 593, "uid": 61, "state": { "val": 0.5, "min": 0, "max": 1 }, "title": "Time speed" }, { "plugin": "float_display", "x": 902, "y": 515, "uid": 62 } ], "conns": [ { "src_nuid": 56, "dst_nuid": 55, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 57, "dst_nuid": 55, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 58, "dst_nuid": 55, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 59, "dst_nuid": 55, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 61, "dst_nuid": 60, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 60, "dst_nuid": 62, "src_slot": 0, "dst_slot": 0, "src_dyn": true } ] } } ================================================ FILE: browser/patches/three_ambient_light.json ================================================ { "abs_t": 280.089, "active_graph": "root", "graph_uid": "TI6whDg9VfHH", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 334, "y": 390, "uid": "ETIhnzRa27tx", "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": { "2TBEHlKpKdeZ": "547odbJKrTzG" } }, "title": "Ambient light", "graph": { "uid": "9aW6RLPBpvQF", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "output_proxy", "x": 1110, "y": 223, "uid": "2TBEHlKpKdeZ", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "vSy6Gj4JSPYs", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 306, "y": 399, "uid": "kwCMxOSQcv8Z", "state": { "val": -0.1, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 303, "y": 466, "uid": "di2viokfSGiQ", "state": { "val": 0, "min": -2, "max": 2 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 301, "y": 532, "uid": "zZZzs4Fc3j0o", "state": { "val": 2, "min": -1, "max": 2 }, "title": "Z" }, { "plugin": "vector", "x": 645, "y": 384, "uid": "BaEgQmBUtKu4", "title": "Position" }, { "plugin": "vector", "x": 639, "y": 560, "uid": "mL3vPhPmtWkQ", "title": "Scale" }, { "plugin": "vector", "x": 634, "y": 458, "uid": "2wcPGgtDHKG1", "title": "Rotation" }, { "plugin": "const_float_generator", "x": 476, "y": 708, "uid": "jDHmWr3I6hvJ", "state": { "val": 1 }, "title": "XYZ" }, { "plugin": "knob_float_generator", "x": 304, "y": 637, "uid": "uiguJdrTgGpU", "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 301, "y": 700, "uid": "m74Pb6oQAhbZ", "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 299, "y": 756, "uid": "kC2dWfRFYFZ3", "state": { "val": 0 }, "title": "Z" }, { "plugin": "three_ambient_light", "x": 877, "y": 293, "uid": "8mTl4shEDODm" }, { "plugin": "annotation", "x": 282, "y": 100, "uid": "Dxg4WIHRiSQJ", "state": { "text": "How is this supposed to work?\n\nAmbient light should have a light color + intensity settings right?\n\n", "width": 202, "height": 98 } } ], "conns": [ { "src_nuid": "kwCMxOSQcv8Z", "dst_nuid": "BaEgQmBUtKu4", "src_slot": 0, "dst_slot": 0, "uid": "LuuisWChGil7", "src_connected": true, "dst_connected": true }, { "src_nuid": "di2viokfSGiQ", "dst_nuid": "BaEgQmBUtKu4", "src_slot": 0, "dst_slot": 1, "uid": "vETJj5adtnNY", "src_connected": true, "dst_connected": true }, { "src_nuid": "zZZzs4Fc3j0o", "dst_nuid": "BaEgQmBUtKu4", "src_slot": 0, "dst_slot": 2, "uid": "nmjilnAAqqAS", "src_connected": true, "dst_connected": true }, { "src_nuid": "jDHmWr3I6hvJ", "dst_nuid": "mL3vPhPmtWkQ", "src_slot": 0, "dst_slot": 0, "uid": "Zx6Zyo53OZjG", "src_connected": true, "dst_connected": true }, { "src_nuid": "jDHmWr3I6hvJ", "dst_nuid": "mL3vPhPmtWkQ", "src_slot": 0, "dst_slot": 1, "uid": "OS0Iedx68c3G", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "jDHmWr3I6hvJ", "dst_nuid": "mL3vPhPmtWkQ", "src_slot": 0, "dst_slot": 2, "uid": "p73G40IW8coz", "src_connected": true, "dst_connected": true }, { "src_nuid": "uiguJdrTgGpU", "dst_nuid": "2wcPGgtDHKG1", "src_slot": 0, "dst_slot": 0, "uid": "oMxwXmq6E9Yv", "src_connected": true, "dst_connected": true }, { "src_nuid": "m74Pb6oQAhbZ", "dst_nuid": "2wcPGgtDHKG1", "src_slot": 0, "dst_slot": 1, "uid": "JAofaGhIpjUJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "kC2dWfRFYFZ3", "dst_nuid": "2wcPGgtDHKG1", "src_slot": 0, "dst_slot": 2, "uid": "y7CcQODl7SSy", "src_connected": true, "dst_connected": true }, { "src_nuid": "8mTl4shEDODm", "dst_nuid": "2TBEHlKpKdeZ", "src_slot": 0, "dst_slot": 0, "uid": "J55ZnaX4GoAt", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "mL3vPhPmtWkQ", "dst_nuid": "8mTl4shEDODm", "src_slot": 0, "dst_slot": 2, "uid": "EtAyGxpvHFbL", "src_connected": true, "dst_connected": true }, { "src_nuid": "2wcPGgtDHKG1", "dst_nuid": "8mTl4shEDODm", "src_slot": 0, "dst_slot": 1, "uid": "RweZ2X8TzwNM", "src_connected": true, "dst_connected": true }, { "src_nuid": "BaEgQmBUtKu4", "dst_nuid": "8mTl4shEDODm", "src_slot": 0, "dst_slot": 0, "uid": "dMbktjRvPIcn", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "547odbJKrTzG", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } } ================================================ FILE: browser/patches/three_base.json ================================================ { "abs_t": 206.702, "active_graph": "root", "graph_uid": "TI6whDg9VfHH", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "three_scene", "x": 464, "y": 410, "uid": "y3ivxOrvIAAj", "dyn_in": [ { "type": 0, "name": "0", "dt": 21, "uid": "w4Hhf8HGnW3E", "dynamic": true, "index": 0, "is_connected": true }, { "type": 0, "name": "1", "dt": 21, "uid": "DAJQljPelpbx", "dynamic": true, "index": 1, "is_connected": false } ] }, { "plugin": "three_webgl_renderer", "x": 633, "y": 347, "uid": "M6rxztB9mIlj", "state": { "always_update": true } }, { "plugin": "graph", "x": 239, "y": 328, "uid": "9CoRLTlaVlKf", "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": { "gQw2ofn97gPK": "547odbJKrTzG" } }, "title": "Directional light", "graph": { "uid": "qTbVdGEGtlj7", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "output_proxy", "x": 1110, "y": 223, "uid": "gQw2ofn97gPK", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "vSy6Gj4JSPYs", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "three_directional_light", "x": 831, "y": 306, "uid": "fvJTRAjWqkAJ" }, { "plugin": "const_float_generator", "x": 619, "y": 270, "uid": "UppO4JH6PR8C", "state": { "val": 1 }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 306, "y": 399, "uid": "n5Bj6yfEgS2F", "state": { "val": 0, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 303, "y": 466, "uid": "oJ9Ib6bXFRjh", "state": { "val": 0, "min": -2, "max": 2 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 301, "y": 532, "uid": "5zWy3Vvqu2Vj", "state": { "val": 2, "min": -1, "max": 2 }, "title": "Z" }, { "plugin": "vector", "x": 639, "y": 472, "uid": "iMrWPDzp0HDp", "open": false, "title": "Position" }, { "plugin": "vector", "x": 639, "y": 560, "uid": "dU71V7tUtX39", "open": false, "title": "Scale" }, { "plugin": "vector", "x": 642, "y": 524, "uid": "FhDfRmby0oWX", "open": false, "title": "Rotation" }, { "plugin": "const_float_generator", "x": 476, "y": 708, "uid": "JD09VgK0ORLF", "state": { "val": 1 }, "title": "XYZ" }, { "plugin": "knob_float_generator", "x": 304, "y": 637, "uid": "RaWIFEHnuPkE", "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 301, "y": 700, "uid": "4espaeyWAvzl", "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 299, "y": 756, "uid": "T6arHu2R2akL", "state": { "val": 0 }, "title": "Z" }, { "plugin": "toggle_button", "x": 728, "y": 366, "uid": "GV2WOHyR70mb", "state": { "enabled": true } } ], "conns": [ { "src_nuid": "UppO4JH6PR8C", "dst_nuid": "fvJTRAjWqkAJ", "src_slot": 0, "dst_slot": 0, "uid": "ynZ4PkSK1BGl", "src_connected": true, "dst_connected": true }, { "src_nuid": "n5Bj6yfEgS2F", "dst_nuid": "iMrWPDzp0HDp", "src_slot": 0, "dst_slot": 0, "uid": "LuuisWChGil7", "src_connected": true, "dst_connected": true }, { "src_nuid": "oJ9Ib6bXFRjh", "dst_nuid": "iMrWPDzp0HDp", "src_slot": 0, "dst_slot": 1, "uid": "vETJj5adtnNY", "src_connected": true, "dst_connected": true }, { "src_nuid": "5zWy3Vvqu2Vj", "dst_nuid": "iMrWPDzp0HDp", "src_slot": 0, "dst_slot": 2, "uid": "nmjilnAAqqAS", "src_connected": true, "dst_connected": true }, { "src_nuid": "JD09VgK0ORLF", "dst_nuid": "dU71V7tUtX39", "src_slot": 0, "dst_slot": 0, "uid": "Zx6Zyo53OZjG", "src_connected": true, "dst_connected": true }, { "src_nuid": "JD09VgK0ORLF", "dst_nuid": "dU71V7tUtX39", "src_slot": 0, "dst_slot": 1, "uid": "OS0Iedx68c3G", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "JD09VgK0ORLF", "dst_nuid": "dU71V7tUtX39", "src_slot": 0, "dst_slot": 2, "uid": "p73G40IW8coz", "src_connected": true, "dst_connected": true }, { "src_nuid": "RaWIFEHnuPkE", "dst_nuid": "FhDfRmby0oWX", "src_slot": 0, "dst_slot": 0, "uid": "oMxwXmq6E9Yv", "src_connected": true, "dst_connected": true }, { "src_nuid": "4espaeyWAvzl", "dst_nuid": "FhDfRmby0oWX", "src_slot": 0, "dst_slot": 1, "uid": "JAofaGhIpjUJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "T6arHu2R2akL", "dst_nuid": "FhDfRmby0oWX", "src_slot": 0, "dst_slot": 2, "uid": "y7CcQODl7SSy", "src_connected": true, "dst_connected": true }, { "src_nuid": "iMrWPDzp0HDp", "dst_nuid": "fvJTRAjWqkAJ", "src_slot": 0, "dst_slot": 1, "uid": "2x3eRyU5SDWl", "src_connected": true, "dst_connected": true }, { "src_nuid": "FhDfRmby0oWX", "dst_nuid": "fvJTRAjWqkAJ", "src_slot": 0, "dst_slot": 2, "uid": "94PZMYu2YD0S", "src_connected": true, "dst_connected": true }, { "src_nuid": "dU71V7tUtX39", "dst_nuid": "fvJTRAjWqkAJ", "src_slot": 0, "dst_slot": 3, "uid": "7R8EspyYchdw", "src_connected": true, "dst_connected": true }, { "src_nuid": "GV2WOHyR70mb", "dst_nuid": "fvJTRAjWqkAJ", "src_slot": 0, "dst_slot": 4, "uid": "0Ccx9SoUN7nS", "src_connected": true, "dst_connected": true }, { "src_nuid": "fvJTRAjWqkAJ", "dst_nuid": "gQw2ofn97gPK", "src_slot": 0, "dst_slot": 0, "uid": "GneZHvJz4rZT", "src_connected": true, "dst_connected": true, "dst_dyn": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "547odbJKrTzG", "dynamic": true, "type": 1, "is_connected": true } ] }, { "plugin": "graph", "x": 240, "y": 254, "uid": "h0RBsP4aFUBz", "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": { "fEG5xoCCwyYh": "8GpdZjiiiEQa" } }, "title": "VR camera", "graph": { "uid": "x4ehnPwqoNr4", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_vr_camera", "x": 899, "y": 233, "uid": "BJVbkRMKlKHl" }, { "plugin": "output_proxy", "x": 1077, "y": 294, "uid": "fEG5xoCCwyYh", "title": "camera", "dyn_in": [ { "name": "output", "dt": 6, "def": null, "uid": "uyyGR7LQwSEh", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 443, "y": 217, "uid": "JUTYouXSzZsU", "state": { "val": 0, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 440, "y": 284, "uid": "i2OuDdmubj0J", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 438, "y": 350, "uid": "CEEKYzcvgLB5", "state": { "val": 2, "min": -2, "max": 2 }, "title": "Z" }, { "plugin": "vector", "x": 736, "y": 244, "uid": "kycPutnUNvGK" }, { "plugin": "const_float_generator", "x": 772, "y": 183, "uid": "Mnjd6YiiizvP", "state": { "val": 45 }, "title": "FOV" } ], "conns": [ { "src_nuid": "BJVbkRMKlKHl", "dst_nuid": "fEG5xoCCwyYh", "src_slot": 0, "dst_slot": 0, "uid": "JsoCbqqXFrqv", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "JUTYouXSzZsU", "dst_nuid": "kycPutnUNvGK", "src_slot": 0, "dst_slot": 0, "uid": "SLv1XBnHMxMi", "src_connected": true, "dst_connected": true }, { "src_nuid": "i2OuDdmubj0J", "dst_nuid": "kycPutnUNvGK", "src_slot": 0, "dst_slot": 1, "uid": "I9a5nju0SzbI", "src_connected": true, "dst_connected": true }, { "src_nuid": "CEEKYzcvgLB5", "dst_nuid": "kycPutnUNvGK", "src_slot": 0, "dst_slot": 2, "uid": "ND97vtAXhssC", "src_connected": true, "dst_connected": true }, { "src_nuid": "kycPutnUNvGK", "dst_nuid": "BJVbkRMKlKHl", "src_slot": 0, "dst_slot": 0, "uid": "Dz79JT5WRnA5", "src_connected": true, "dst_connected": true }, { "src_nuid": "Mnjd6YiiizvP", "dst_nuid": "BJVbkRMKlKHl", "src_slot": 0, "dst_slot": 1, "uid": "eZFW97ARUAgE", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "camera", "dt": 6, "index": 0, "uid": "8GpdZjiiiEQa", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [ { "src_nuid": "9CoRLTlaVlKf", "dst_nuid": "y3ivxOrvIAAj", "src_slot": 0, "dst_slot": 0, "uid": "2UcAMegYqiGI", "src_connected": true, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": "y3ivxOrvIAAj", "dst_nuid": "M6rxztB9mIlj", "src_slot": 0, "dst_slot": 1, "uid": "HL8XwBYW3z32", "src_connected": true, "dst_connected": true }, { "src_nuid": "h0RBsP4aFUBz", "dst_nuid": "M6rxztB9mIlj", "src_slot": 0, "dst_slot": 0, "uid": "qJZmAGsusJ5d", "src_connected": true, "dst_connected": true, "src_dyn": true } ] } } ================================================ FILE: browser/patches/three_box.json ================================================ { "abs_t": 277.623, "active_graph": "root", "graph_uid": "TI6whDg9VfHH", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 208, "y": 324, "uid": "OgEjxS1jpWWB", "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": { "Gw4uKJGQjgWn": "mh0rTKkFm0nD" } }, "title": "Box", "graph": { "uid": "NLZOLnNvJZiS", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_geometry_box", "x": 554, "y": 338, "uid": "YKKM9Y3iFjRm" }, { "plugin": "three_mesh", "x": 1057, "y": 390, "uid": "4I5bwgLJeeVV" }, { "plugin": "output_proxy", "x": 1269, "y": 390, "uid": "Gw4uKJGQjgWn", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "bEdPpC9C6Rh1", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 100, "y": 418, "uid": "1hQvgkrYzbad", "state": { "val": 0, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 97, "y": 485, "uid": "yyDTw1fBl9DT", "state": { "val": 0, "min": -2, "max": 2 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 95, "y": 551, "uid": "GQl4ayL5fXLb", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Z" }, { "plugin": "vector", "x": 441, "y": 467, "uid": "zu8v9YoyjUX8", "open": false, "title": "Position" }, { "plugin": "three_material", "x": 575, "y": 61, "uid": "kTrue5YTevjE" }, { "plugin": "url_texture_generator", "x": 194, "y": 64, "uid": "PsMokHxycgXh", "state": { "url": "/data/image/86b4f99c40c9b047957cc6c5c3364a070cb3c101.png" }, "title": "Box texture" }, { "plugin": "toggle_button", "x": 943, "y": 320, "uid": "Z3JMMdr9M8pM", "state": { "enabled": true }, "title": "Visible" }, { "plugin": "vector", "x": 503, "y": 763, "uid": "KOZeDEIu4knT", "open": false, "title": "Scale" }, { "plugin": "vector", "x": 236, "y": 671, "uid": "t1TFvhCAXw1a", "open": false, "title": "Rotation" }, { "plugin": "const_float_generator", "x": 343, "y": 795, "uid": "6g0qpOmHxG0y", "state": { "val": 0.6 }, "title": "XYZ" }, { "plugin": "knob_float_generator", "x": 98, "y": 656, "uid": "l6VmoftKGl83", "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 95, "y": 719, "uid": "Bx15C6yOAYwf", "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 93, "y": 775, "uid": "PBrpSnD5LqtH", "state": { "val": 0 }, "title": "Z" } ], "conns": [ { "src_nuid": "YKKM9Y3iFjRm", "dst_nuid": "4I5bwgLJeeVV", "src_slot": 0, "dst_slot": 0, "uid": "8wg8q02esLtU", "src_connected": true, "dst_connected": true }, { "src_nuid": "4I5bwgLJeeVV", "dst_nuid": "Gw4uKJGQjgWn", "src_slot": 0, "dst_slot": 0, "uid": "zRsWgnCa23py", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "zu8v9YoyjUX8", "dst_nuid": "4I5bwgLJeeVV", "src_slot": 0, "dst_slot": 2, "uid": "MbBT90ihyYHM", "src_connected": true, "dst_connected": true }, { "src_nuid": "kTrue5YTevjE", "dst_nuid": "4I5bwgLJeeVV", "src_slot": 0, "dst_slot": 1, "uid": "KrguMemLb6DB", "src_connected": true, "dst_connected": true }, { "src_nuid": "PsMokHxycgXh", "dst_nuid": "kTrue5YTevjE", "src_slot": 0, "dst_slot": 0, "uid": "dRTv7NFd67AJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "Z3JMMdr9M8pM", "dst_nuid": "4I5bwgLJeeVV", "src_slot": 0, "dst_slot": 5, "uid": "UiT1XfddE4s9", "src_connected": true, "dst_connected": true }, { "src_nuid": "6g0qpOmHxG0y", "dst_nuid": "KOZeDEIu4knT", "src_slot": 0, "dst_slot": 0, "uid": "Zx6Zyo53OZjG", "src_connected": true, "dst_connected": true }, { "src_nuid": "6g0qpOmHxG0y", "dst_nuid": "KOZeDEIu4knT", "src_slot": 0, "dst_slot": 1, "uid": "OS0Iedx68c3G", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "6g0qpOmHxG0y", "dst_nuid": "KOZeDEIu4knT", "src_slot": 0, "dst_slot": 2, "uid": "p73G40IW8coz", "src_connected": true, "dst_connected": true }, { "src_nuid": "KOZeDEIu4knT", "dst_nuid": "4I5bwgLJeeVV", "src_slot": 0, "dst_slot": 4, "uid": "3DlUOn8efiMt", "src_connected": true, "dst_connected": true }, { "src_nuid": "t1TFvhCAXw1a", "dst_nuid": "4I5bwgLJeeVV", "src_slot": 0, "dst_slot": 3, "uid": "XWlxV8bcX3pC", "src_connected": true, "dst_connected": true }, { "src_nuid": "l6VmoftKGl83", "dst_nuid": "t1TFvhCAXw1a", "src_slot": 0, "dst_slot": 0, "uid": "oMxwXmq6E9Yv", "src_connected": true, "dst_connected": true }, { "src_nuid": "Bx15C6yOAYwf", "dst_nuid": "t1TFvhCAXw1a", "src_slot": 0, "dst_slot": 1, "uid": "JAofaGhIpjUJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "PBrpSnD5LqtH", "dst_nuid": "t1TFvhCAXw1a", "src_slot": 0, "dst_slot": 2, "uid": "y7CcQODl7SSy", "src_connected": true, "dst_connected": true }, { "src_nuid": "1hQvgkrYzbad", "dst_nuid": "zu8v9YoyjUX8", "src_slot": 0, "dst_slot": 0, "uid": "LuuisWChGil7", "src_connected": true, "dst_connected": true }, { "src_nuid": "yyDTw1fBl9DT", "dst_nuid": "zu8v9YoyjUX8", "src_slot": 0, "dst_slot": 1, "uid": "vETJj5adtnNY", "src_connected": true, "dst_connected": true }, { "src_nuid": "GQl4ayL5fXLb", "dst_nuid": "zu8v9YoyjUX8", "src_slot": 0, "dst_slot": 2, "uid": "nmjilnAAqqAS", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "mh0rTKkFm0nD", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } } ================================================ FILE: browser/patches/three_circle.json ================================================ { "abs_t": 199.751, "active_graph": "root", "graph_uid": "TI6whDg9VfHH", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 343, "y": 179, "uid": "cu4sqKNXXa92", "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": { "YyeA6e9DTgAu": "mh0rTKkFm0nD" } }, "title": "Circle", "graph": { "uid": "BVq8nOGwJ8gG", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_mesh", "x": 1057, "y": 390, "uid": "1I2Q44vqvHFX" }, { "plugin": "output_proxy", "x": 1269, "y": 390, "uid": "YyeA6e9DTgAu", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "bEdPpC9C6Rh1", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 100, "y": 418, "uid": "mqFImfS6JkaI", "state": { "val": 0, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 97, "y": 485, "uid": "dSLD1FAFvezQ", "state": { "val": 0, "min": -2, "max": 2 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 95, "y": 551, "uid": "M4u3PyCopmnI", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Z" }, { "plugin": "vector", "x": 441, "y": 467, "uid": "Ld4URWNKQNkS", "open": false, "title": "Position" }, { "plugin": "url_texture_generator", "x": 194, "y": 64, "uid": "mtQmDjxJiUx9", "state": { "url": "/data/image/a0ef7a98fe6f899443d2f5bf97b606bc2a94176a.png" }, "title": "Box texture" }, { "plugin": "toggle_button", "x": 943, "y": 320, "uid": "r9yx7l9Psgxo", "state": { "enabled": true }, "title": "Visible" }, { "plugin": "vector", "x": 503, "y": 763, "uid": "tln5gTDkDPeU", "open": false, "title": "Scale" }, { "plugin": "vector", "x": 236, "y": 671, "uid": "2saHKIa786i7", "open": false, "title": "Rotation" }, { "plugin": "const_float_generator", "x": 343, "y": 795, "uid": "e9KC5m4QCFTH", "state": { "val": 0.5 }, "title": "XYZ" }, { "plugin": "knob_float_generator", "x": 98, "y": 656, "uid": "Ec3dUhBXcG6p", "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 95, "y": 719, "uid": "8RIzSPZbZl50", "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 93, "y": 775, "uid": "7so9INNZQNGs", "state": { "val": 0 }, "title": "Z" }, { "plugin": "three_material_lambert", "x": 687, "y": 197, "uid": "R60QCRDbmCZA" }, { "plugin": "annotation", "x": 485, "y": 809, "uid": "qG7ehOJhKt4C", "state": { "text": "Radius vs Scale??\n", "width": 206, "height": 42 } }, { "plugin": "three_geometry_circle", "x": 743, "y": 324, "uid": "B7xtvv0xVr4X" }, { "plugin": "const_float_generator", "x": 580, "y": 352, "uid": "VF6IPdgcQYY9", "state": { "val": 1 } }, { "plugin": "const_float_generator", "x": 577, "y": 422, "uid": "2UD9ffTeSue0", "state": { "val": 64 } } ], "conns": [ { "src_nuid": "1I2Q44vqvHFX", "dst_nuid": "YyeA6e9DTgAu", "src_slot": 0, "dst_slot": 0, "uid": "zRsWgnCa23py", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "Ld4URWNKQNkS", "dst_nuid": "1I2Q44vqvHFX", "src_slot": 0, "dst_slot": 2, "uid": "MbBT90ihyYHM", "src_connected": true, "dst_connected": true }, { "src_nuid": "r9yx7l9Psgxo", "dst_nuid": "1I2Q44vqvHFX", "src_slot": 0, "dst_slot": 5, "uid": "UiT1XfddE4s9", "src_connected": true, "dst_connected": true }, { "src_nuid": "e9KC5m4QCFTH", "dst_nuid": "tln5gTDkDPeU", "src_slot": 0, "dst_slot": 0, "uid": "Zx6Zyo53OZjG", "src_connected": true, "dst_connected": true }, { "src_nuid": "e9KC5m4QCFTH", "dst_nuid": "tln5gTDkDPeU", "src_slot": 0, "dst_slot": 1, "uid": "OS0Iedx68c3G", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "e9KC5m4QCFTH", "dst_nuid": "tln5gTDkDPeU", "src_slot": 0, "dst_slot": 2, "uid": "p73G40IW8coz", "src_connected": true, "dst_connected": true }, { "src_nuid": "tln5gTDkDPeU", "dst_nuid": "1I2Q44vqvHFX", "src_slot": 0, "dst_slot": 4, "uid": "3DlUOn8efiMt", "src_connected": true, "dst_connected": true }, { "src_nuid": "2saHKIa786i7", "dst_nuid": "1I2Q44vqvHFX", "src_slot": 0, "dst_slot": 3, "uid": "XWlxV8bcX3pC", "src_connected": true, "dst_connected": true }, { "src_nuid": "Ec3dUhBXcG6p", "dst_nuid": "2saHKIa786i7", "src_slot": 0, "dst_slot": 0, "uid": "oMxwXmq6E9Yv", "src_connected": true, "dst_connected": true }, { "src_nuid": "8RIzSPZbZl50", "dst_nuid": "2saHKIa786i7", "src_slot": 0, "dst_slot": 1, "uid": "JAofaGhIpjUJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "7so9INNZQNGs", "dst_nuid": "2saHKIa786i7", "src_slot": 0, "dst_slot": 2, "uid": "y7CcQODl7SSy", "src_connected": true, "dst_connected": true }, { "src_nuid": "mqFImfS6JkaI", "dst_nuid": "Ld4URWNKQNkS", "src_slot": 0, "dst_slot": 0, "uid": "LuuisWChGil7", "src_connected": true, "dst_connected": true }, { "src_nuid": "dSLD1FAFvezQ", "dst_nuid": "Ld4URWNKQNkS", "src_slot": 0, "dst_slot": 1, "uid": "vETJj5adtnNY", "src_connected": true, "dst_connected": true }, { "src_nuid": "M4u3PyCopmnI", "dst_nuid": "Ld4URWNKQNkS", "src_slot": 0, "dst_slot": 2, "uid": "nmjilnAAqqAS", "src_connected": true, "dst_connected": true }, { "src_nuid": "mtQmDjxJiUx9", "dst_nuid": "R60QCRDbmCZA", "src_slot": 0, "dst_slot": 0, "uid": "M46o8TQTKZCl", "src_connected": true, "dst_connected": true }, { "src_nuid": "R60QCRDbmCZA", "dst_nuid": "1I2Q44vqvHFX", "src_slot": 0, "dst_slot": 1, "uid": "hg54OEOqnkC2", "src_connected": true, "dst_connected": true }, { "src_nuid": "B7xtvv0xVr4X", "dst_nuid": "1I2Q44vqvHFX", "src_slot": 0, "dst_slot": 0, "uid": "Ql8lWL4bqxIB", "src_connected": true, "dst_connected": true }, { "src_nuid": "VF6IPdgcQYY9", "dst_nuid": "B7xtvv0xVr4X", "src_slot": 0, "dst_slot": 0, "uid": "8p4wjT3bYV1k", "src_connected": true, "dst_connected": true }, { "src_nuid": "2UD9ffTeSue0", "dst_nuid": "B7xtvv0xVr4X", "src_slot": 0, "dst_slot": 1, "uid": "6ZefEmIgPucL", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "mh0rTKkFm0nD", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } } ================================================ FILE: browser/patches/three_cylinder.json ================================================ { "abs_t": 216.269, "active_graph": "root", "graph_uid": "TI6whDg9VfHH", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 251, "y": 244, "uid": "ZCaMnd8G6s2f", "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": { "Cm6f8rtr1iVI": "mh0rTKkFm0nD" } }, "title": "Cylinder", "graph": { "uid": "LTjD2JhmNnv4", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_mesh", "x": 1057, "y": 390, "uid": "l8whsUFFq6Mt" }, { "plugin": "output_proxy", "x": 1269, "y": 390, "uid": "Cm6f8rtr1iVI", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "bEdPpC9C6Rh1", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 100, "y": 418, "uid": "yrsHaUuJ9S0c", "state": { "val": 0, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 97, "y": 485, "uid": "VbkpCdIhq5y7", "state": { "val": 0, "min": -2, "max": 2 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 95, "y": 551, "uid": "7Z9ttLRFgpAa", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Z" }, { "plugin": "vector", "x": 441, "y": 467, "uid": "GfvESOPSWsHN", "open": false, "title": "Position" }, { "plugin": "url_texture_generator", "x": 194, "y": 64, "uid": "aYh1sdBe4USU", "state": { "url": "/data/image/a0ef7a98fe6f899443d2f5bf97b606bc2a94176a.png" }, "title": "Box texture" }, { "plugin": "toggle_button", "x": 943, "y": 320, "uid": "vFzQT3JhyVuA", "state": { "enabled": true }, "title": "Visible" }, { "plugin": "vector", "x": 503, "y": 763, "uid": "junhAhI1VInp", "open": false, "title": "Scale" }, { "plugin": "vector", "x": 236, "y": 671, "uid": "lmZdmTOP7rBZ", "open": false, "title": "Rotation" }, { "plugin": "const_float_generator", "x": 343, "y": 795, "uid": "ewiXTX6luWIz", "state": { "val": 0.5 }, "title": "XYZ" }, { "plugin": "knob_float_generator", "x": 98, "y": 656, "uid": "9uvO6OEZMHy2", "state": { "val": 0.4700000000000001 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 95, "y": 719, "uid": "DTyW9vqjvK7V", "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 93, "y": 775, "uid": "YaN1ttDMtY14", "state": { "val": 0 }, "title": "Z" }, { "plugin": "three_material_lambert", "x": 687, "y": 197, "uid": "wcOMTgllUY1L" }, { "plugin": "const_float_generator", "x": 547, "y": 326, "uid": "Rl4KgbLJJwQf", "state": { "val": 1 }, "title": "Radius top" }, { "plugin": "const_float_generator", "x": 543, "y": 375, "uid": "hvbMYTZIYpy1", "state": { "val": 1 }, "title": "Radius bottom" }, { "plugin": "annotation", "x": 485, "y": 809, "uid": "JrGslgv9dMx0", "state": { "text": "Radius vs Scale??\n", "width": 206, "height": 42 } }, { "plugin": "three_geometry_cylinder", "x": 734, "y": 342, "uid": "wTXVxzhmulYW" }, { "plugin": "const_float_generator", "x": 542, "y": 422, "uid": "ftujgzHJI1yU", "state": { "val": 1 }, "title": "Height" }, { "plugin": "const_float_generator", "x": 539, "y": 480, "uid": "q77FPsVMlLXm", "state": { "val": 16 }, "title": "Radius Segments" }, { "plugin": "const_float_generator", "x": 532, "y": 533, "uid": "Nx1klZY2FyyX", "state": { "val": 16 }, "title": "Height Segments" }, { "plugin": "toggle_button", "x": 553, "y": 585, "uid": "38mCU3eDC4eX", "state": { "enabled": false }, "title": "openEnded" } ], "conns": [ { "src_nuid": "l8whsUFFq6Mt", "dst_nuid": "Cm6f8rtr1iVI", "src_slot": 0, "dst_slot": 0, "uid": "zRsWgnCa23py", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "GfvESOPSWsHN", "dst_nuid": "l8whsUFFq6Mt", "src_slot": 0, "dst_slot": 2, "uid": "MbBT90ihyYHM", "src_connected": true, "dst_connected": true }, { "src_nuid": "vFzQT3JhyVuA", "dst_nuid": "l8whsUFFq6Mt", "src_slot": 0, "dst_slot": 5, "uid": "UiT1XfddE4s9", "src_connected": true, "dst_connected": true }, { "src_nuid": "ewiXTX6luWIz", "dst_nuid": "junhAhI1VInp", "src_slot": 0, "dst_slot": 0, "uid": "Zx6Zyo53OZjG", "src_connected": true, "dst_connected": true }, { "src_nuid": "ewiXTX6luWIz", "dst_nuid": "junhAhI1VInp", "src_slot": 0, "dst_slot": 1, "uid": "OS0Iedx68c3G", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "ewiXTX6luWIz", "dst_nuid": "junhAhI1VInp", "src_slot": 0, "dst_slot": 2, "uid": "p73G40IW8coz", "src_connected": true, "dst_connected": true }, { "src_nuid": "junhAhI1VInp", "dst_nuid": "l8whsUFFq6Mt", "src_slot": 0, "dst_slot": 4, "uid": "3DlUOn8efiMt", "src_connected": true, "dst_connected": true }, { "src_nuid": "lmZdmTOP7rBZ", "dst_nuid": "l8whsUFFq6Mt", "src_slot": 0, "dst_slot": 3, "uid": "XWlxV8bcX3pC", "src_connected": true, "dst_connected": true }, { "src_nuid": "9uvO6OEZMHy2", "dst_nuid": "lmZdmTOP7rBZ", "src_slot": 0, "dst_slot": 0, "uid": "oMxwXmq6E9Yv", "src_connected": true, "dst_connected": true }, { "src_nuid": "DTyW9vqjvK7V", "dst_nuid": "lmZdmTOP7rBZ", "src_slot": 0, "dst_slot": 1, "uid": "JAofaGhIpjUJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "YaN1ttDMtY14", "dst_nuid": "lmZdmTOP7rBZ", "src_slot": 0, "dst_slot": 2, "uid": "y7CcQODl7SSy", "src_connected": true, "dst_connected": true }, { "src_nuid": "yrsHaUuJ9S0c", "dst_nuid": "GfvESOPSWsHN", "src_slot": 0, "dst_slot": 0, "uid": "LuuisWChGil7", "src_connected": true, "dst_connected": true }, { "src_nuid": "VbkpCdIhq5y7", "dst_nuid": "GfvESOPSWsHN", "src_slot": 0, "dst_slot": 1, "uid": "vETJj5adtnNY", "src_connected": true, "dst_connected": true }, { "src_nuid": "7Z9ttLRFgpAa", "dst_nuid": "GfvESOPSWsHN", "src_slot": 0, "dst_slot": 2, "uid": "nmjilnAAqqAS", "src_connected": true, "dst_connected": true }, { "src_nuid": "aYh1sdBe4USU", "dst_nuid": "wcOMTgllUY1L", "src_slot": 0, "dst_slot": 0, "uid": "M46o8TQTKZCl", "src_connected": true, "dst_connected": true }, { "src_nuid": "wcOMTgllUY1L", "dst_nuid": "l8whsUFFq6Mt", "src_slot": 0, "dst_slot": 1, "uid": "hg54OEOqnkC2", "src_connected": true, "dst_connected": true }, { "src_nuid": "wTXVxzhmulYW", "dst_nuid": "l8whsUFFq6Mt", "src_slot": 0, "dst_slot": 0, "uid": "SdHciPCUdoJB", "src_connected": true, "dst_connected": true }, { "src_nuid": "Rl4KgbLJJwQf", "dst_nuid": "wTXVxzhmulYW", "src_slot": 0, "dst_slot": 0, "uid": "a3PHgsuze08Q", "src_connected": true, "dst_connected": true }, { "src_nuid": "hvbMYTZIYpy1", "dst_nuid": "wTXVxzhmulYW", "src_slot": 0, "dst_slot": 1, "uid": "5ZrMFg0jB78C", "src_connected": true, "dst_connected": true }, { "src_nuid": "ftujgzHJI1yU", "dst_nuid": "wTXVxzhmulYW", "src_slot": 0, "dst_slot": 2, "uid": "vu2l5RFGcWXG", "src_connected": true, "dst_connected": true }, { "src_nuid": "q77FPsVMlLXm", "dst_nuid": "wTXVxzhmulYW", "src_slot": 0, "dst_slot": 3, "uid": "mqgs2ASFzSRm", "src_connected": true, "dst_connected": true }, { "src_nuid": "Nx1klZY2FyyX", "dst_nuid": "wTXVxzhmulYW", "src_slot": 0, "dst_slot": 4, "uid": "CjLU9NazJOF9", "src_connected": true, "dst_connected": true }, { "src_nuid": "38mCU3eDC4eX", "dst_nuid": "wTXVxzhmulYW", "src_slot": 0, "dst_slot": 5, "uid": "QpSIDvbYJjrc", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "mh0rTKkFm0nD", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } } ================================================ FILE: browser/patches/three_directional_light.json ================================================ { "abs_t": 255.337, "active_graph": "root", "graph_uid": "TI6whDg9VfHH", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 110, "y": 210, "uid": "rzCuIVwQdNMn", "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": { "CpCjYdqPrFLH": "547odbJKrTzG" } }, "title": "Directional light", "graph": { "uid": "BZANvKRLi0rS", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "output_proxy", "x": 1110, "y": 223, "uid": "CpCjYdqPrFLH", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "vSy6Gj4JSPYs", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "three_directional_light", "x": 831, "y": 306, "uid": "60mXmQJMMT3b" }, { "plugin": "const_float_generator", "x": 619, "y": 270, "uid": "UqxYRwZ2kmpH", "state": { "val": 1 }, "title": "Intensity" }, { "plugin": "slider_float_generator", "x": 306, "y": 399, "uid": "h3bavAJO540Y", "state": { "val": 0, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 303, "y": 466, "uid": "XE312yfqrSJt", "state": { "val": 0, "min": -2, "max": 2 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 301, "y": 532, "uid": "2EszqectGMSA", "state": { "val": 2, "min": -1, "max": 2 }, "title": "Z" }, { "plugin": "vector", "x": 639, "y": 472, "uid": "wJ0qjuVpfpm3", "open": false, "title": "Position" }, { "plugin": "vector", "x": 639, "y": 560, "uid": "5Db94QrW1GMj", "open": false, "title": "Scale" }, { "plugin": "vector", "x": 642, "y": 524, "uid": "4ns9TIYjIdiR", "open": false, "title": "Rotation" }, { "plugin": "const_float_generator", "x": 476, "y": 708, "uid": "58WAzSCQRNuu", "state": { "val": 1 }, "title": "XYZ" }, { "plugin": "knob_float_generator", "x": 304, "y": 637, "uid": "LzNjycd9TaMh", "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 301, "y": 700, "uid": "yibBQBDNQ2AT", "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 299, "y": 756, "uid": "F1Npc5NYLq6u", "state": { "val": 0 }, "title": "Z" }, { "plugin": "toggle_button", "x": 728, "y": 366, "uid": "9sSEBj3n516K", "state": { "enabled": true } } ], "conns": [ { "src_nuid": "UqxYRwZ2kmpH", "dst_nuid": "60mXmQJMMT3b", "src_slot": 0, "dst_slot": 0, "uid": "ynZ4PkSK1BGl", "src_connected": true, "dst_connected": true }, { "src_nuid": "h3bavAJO540Y", "dst_nuid": "wJ0qjuVpfpm3", "src_slot": 0, "dst_slot": 0, "uid": "LuuisWChGil7", "src_connected": true, "dst_connected": true }, { "src_nuid": "XE312yfqrSJt", "dst_nuid": "wJ0qjuVpfpm3", "src_slot": 0, "dst_slot": 1, "uid": "vETJj5adtnNY", "src_connected": true, "dst_connected": true }, { "src_nuid": "2EszqectGMSA", "dst_nuid": "wJ0qjuVpfpm3", "src_slot": 0, "dst_slot": 2, "uid": "nmjilnAAqqAS", "src_connected": true, "dst_connected": true }, { "src_nuid": "58WAzSCQRNuu", "dst_nuid": "5Db94QrW1GMj", "src_slot": 0, "dst_slot": 0, "uid": "Zx6Zyo53OZjG", "src_connected": true, "dst_connected": true }, { "src_nuid": "58WAzSCQRNuu", "dst_nuid": "5Db94QrW1GMj", "src_slot": 0, "dst_slot": 1, "uid": "OS0Iedx68c3G", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "58WAzSCQRNuu", "dst_nuid": "5Db94QrW1GMj", "src_slot": 0, "dst_slot": 2, "uid": "p73G40IW8coz", "src_connected": true, "dst_connected": true }, { "src_nuid": "LzNjycd9TaMh", "dst_nuid": "4ns9TIYjIdiR", "src_slot": 0, "dst_slot": 0, "uid": "oMxwXmq6E9Yv", "src_connected": true, "dst_connected": true }, { "src_nuid": "yibBQBDNQ2AT", "dst_nuid": "4ns9TIYjIdiR", "src_slot": 0, "dst_slot": 1, "uid": "JAofaGhIpjUJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "F1Npc5NYLq6u", "dst_nuid": "4ns9TIYjIdiR", "src_slot": 0, "dst_slot": 2, "uid": "y7CcQODl7SSy", "src_connected": true, "dst_connected": true }, { "src_nuid": "wJ0qjuVpfpm3", "dst_nuid": "60mXmQJMMT3b", "src_slot": 0, "dst_slot": 1, "uid": "2x3eRyU5SDWl", "src_connected": true, "dst_connected": true }, { "src_nuid": "4ns9TIYjIdiR", "dst_nuid": "60mXmQJMMT3b", "src_slot": 0, "dst_slot": 2, "uid": "94PZMYu2YD0S", "src_connected": true, "dst_connected": true }, { "src_nuid": "5Db94QrW1GMj", "dst_nuid": "60mXmQJMMT3b", "src_slot": 0, "dst_slot": 3, "uid": "7R8EspyYchdw", "src_connected": true, "dst_connected": true }, { "src_nuid": "9sSEBj3n516K", "dst_nuid": "60mXmQJMMT3b", "src_slot": 0, "dst_slot": 4, "uid": "0Ccx9SoUN7nS", "src_connected": true, "dst_connected": true }, { "src_nuid": "60mXmQJMMT3b", "dst_nuid": "CpCjYdqPrFLH", "src_slot": 0, "dst_slot": 0, "uid": "GneZHvJz4rZT", "src_connected": true, "dst_connected": true, "dst_dyn": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "547odbJKrTzG", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } } ================================================ FILE: browser/patches/three_dodecahedron.json ================================================ { "abs_t": 226.303, "active_graph": "root", "graph_uid": "TI6whDg9VfHH", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 200, "y": 300, "uid": "ASy8E1BHd7A3", "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": { "G6MqByPr1xDl": "mh0rTKkFm0nD" } }, "title": "Dodecahedron", "graph": { "uid": "191JQlHe3z87", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_mesh", "x": 1057, "y": 390, "uid": "uLXvxVwEiPUm" }, { "plugin": "output_proxy", "x": 1269, "y": 390, "uid": "G6MqByPr1xDl", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "bEdPpC9C6Rh1", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 100, "y": 418, "uid": "69iDAEtlxpF1", "state": { "val": 0, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 97, "y": 485, "uid": "DBfK3ACi5Ilz", "state": { "val": 0, "min": -2, "max": 2 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 95, "y": 551, "uid": "ffzr2I234a1H", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Z" }, { "plugin": "vector", "x": 441, "y": 467, "uid": "p5Ly27Pb4pam", "open": false, "title": "Position" }, { "plugin": "url_texture_generator", "x": 194, "y": 64, "uid": "WrKMGrGWFhI6", "state": { "url": "/data/image/a0ef7a98fe6f899443d2f5bf97b606bc2a94176a.png" }, "title": "Box texture" }, { "plugin": "toggle_button", "x": 943, "y": 320, "uid": "LXsCs5b94Of5", "state": { "enabled": true }, "title": "Visible" }, { "plugin": "vector", "x": 503, "y": 763, "uid": "gb32eXALoZuz", "open": false, "title": "Scale" }, { "plugin": "vector", "x": 236, "y": 671, "uid": "RyptkmGcsonn", "open": false, "title": "Rotation" }, { "plugin": "const_float_generator", "x": 343, "y": 795, "uid": "7eAuGQoqBMIi", "state": { "val": 0.1 }, "title": "XYZ" }, { "plugin": "knob_float_generator", "x": 98, "y": 656, "uid": "k2uVOl3Md9xn", "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 95, "y": 719, "uid": "OHMVClw1okTR", "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 93, "y": 775, "uid": "Nsv0dM1FWVNe", "state": { "val": 0 }, "title": "Z" }, { "plugin": "three_material_lambert", "x": 687, "y": 197, "uid": "OjnsxMzhF28Q" }, { "plugin": "three_geometry_dodecahedron", "x": 672, "y": 342, "uid": "G51Vk4iIHiYo" }, { "plugin": "const_float_generator", "x": 535, "y": 327, "uid": "mTS2C4YoGooy", "state": { "val": 3 }, "title": "Radius" }, { "plugin": "const_float_generator", "x": 529, "y": 375, "uid": "b8ThJav9e3zJ", "state": { "val": 1 }, "title": "Detail" }, { "plugin": "annotation", "x": 667, "y": 408, "uid": "ec2HSCBILsXS", "state": { "text": "Detail here is a bit weird?\neven 1 seems to be quite high detail.\n", "width": 212, "height": 48 } }, { "plugin": "annotation", "x": 485, "y": 809, "uid": "pua2f65zUFku", "state": { "text": "Radius vs Scale??\n", "width": 206, "height": 42 } } ], "conns": [ { "src_nuid": "uLXvxVwEiPUm", "dst_nuid": "G6MqByPr1xDl", "src_slot": 0, "dst_slot": 0, "uid": "zRsWgnCa23py", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "p5Ly27Pb4pam", "dst_nuid": "uLXvxVwEiPUm", "src_slot": 0, "dst_slot": 2, "uid": "MbBT90ihyYHM", "src_connected": true, "dst_connected": true }, { "src_nuid": "LXsCs5b94Of5", "dst_nuid": "uLXvxVwEiPUm", "src_slot": 0, "dst_slot": 5, "uid": "UiT1XfddE4s9", "src_connected": true, "dst_connected": true }, { "src_nuid": "7eAuGQoqBMIi", "dst_nuid": "gb32eXALoZuz", "src_slot": 0, "dst_slot": 0, "uid": "Zx6Zyo53OZjG", "src_connected": true, "dst_connected": true }, { "src_nuid": "7eAuGQoqBMIi", "dst_nuid": "gb32eXALoZuz", "src_slot": 0, "dst_slot": 1, "uid": "OS0Iedx68c3G", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "7eAuGQoqBMIi", "dst_nuid": "gb32eXALoZuz", "src_slot": 0, "dst_slot": 2, "uid": "p73G40IW8coz", "src_connected": true, "dst_connected": true }, { "src_nuid": "gb32eXALoZuz", "dst_nuid": "uLXvxVwEiPUm", "src_slot": 0, "dst_slot": 4, "uid": "3DlUOn8efiMt", "src_connected": true, "dst_connected": true }, { "src_nuid": "RyptkmGcsonn", "dst_nuid": "uLXvxVwEiPUm", "src_slot": 0, "dst_slot": 3, "uid": "XWlxV8bcX3pC", "src_connected": true, "dst_connected": true }, { "src_nuid": "k2uVOl3Md9xn", "dst_nuid": "RyptkmGcsonn", "src_slot": 0, "dst_slot": 0, "uid": "oMxwXmq6E9Yv", "src_connected": true, "dst_connected": true }, { "src_nuid": "OHMVClw1okTR", "dst_nuid": "RyptkmGcsonn", "src_slot": 0, "dst_slot": 1, "uid": "JAofaGhIpjUJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "Nsv0dM1FWVNe", "dst_nuid": "RyptkmGcsonn", "src_slot": 0, "dst_slot": 2, "uid": "y7CcQODl7SSy", "src_connected": true, "dst_connected": true }, { "src_nuid": "69iDAEtlxpF1", "dst_nuid": "p5Ly27Pb4pam", "src_slot": 0, "dst_slot": 0, "uid": "LuuisWChGil7", "src_connected": true, "dst_connected": true }, { "src_nuid": "DBfK3ACi5Ilz", "dst_nuid": "p5Ly27Pb4pam", "src_slot": 0, "dst_slot": 1, "uid": "vETJj5adtnNY", "src_connected": true, "dst_connected": true }, { "src_nuid": "ffzr2I234a1H", "dst_nuid": "p5Ly27Pb4pam", "src_slot": 0, "dst_slot": 2, "uid": "nmjilnAAqqAS", "src_connected": true, "dst_connected": true }, { "src_nuid": "WrKMGrGWFhI6", "dst_nuid": "OjnsxMzhF28Q", "src_slot": 0, "dst_slot": 0, "uid": "M46o8TQTKZCl", "src_connected": true, "dst_connected": true }, { "src_nuid": "OjnsxMzhF28Q", "dst_nuid": "uLXvxVwEiPUm", "src_slot": 0, "dst_slot": 1, "uid": "hg54OEOqnkC2", "src_connected": true, "dst_connected": true }, { "src_nuid": "G51Vk4iIHiYo", "dst_nuid": "uLXvxVwEiPUm", "src_slot": 0, "dst_slot": 0, "uid": "nncNQZLooEDD", "src_connected": true, "dst_connected": true }, { "src_nuid": "mTS2C4YoGooy", "dst_nuid": "G51Vk4iIHiYo", "src_slot": 0, "dst_slot": 0, "uid": "HGTJBu0IMMBv", "src_connected": true, "dst_connected": true }, { "src_nuid": "b8ThJav9e3zJ", "dst_nuid": "G51Vk4iIHiYo", "src_slot": 0, "dst_slot": 1, "uid": "dwLKaAbUWL5f", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "mh0rTKkFm0nD", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } } ================================================ FILE: browser/patches/three_obj_loader.json ================================================ { "abs_t": 14.223, "active_graph": "root", "graph_uid": "MUi1NRN53bUh", "root": { "uid": "root", "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 80, "y": 187, "uid": "nv3XeKFMHdTv", "state": { "always_update": true, "input_sids": {}, "output_sids": { "tSKzgW8szxnl": "1TMlCKkGrwfO" } }, "title": "OBJ loader", "graph": { "uid": "tPJpWHVbluXb", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_loader_objmtl", "x": 1810, "y": 208, "uid": "C9sT6VIJPoCG", "state": { "url": "https://beta.vrsites.com/files/Murugo/bowser_peace.obj" }, "dyn_in": [ { "dt": 12, "uid": "aVQsCHhodVrcmat-bowser-body-m-eye", "name": "mat-bowser-body-m-eye", "dynamic": true, "type": 0, "index": 0, "is_connected": true }, { "dt": 12, "uid": "aVQsCHhodVrcmat-bowser-body-m-body", "name": "mat-bowser-body-m-body", "dynamic": true, "type": 0, "index": 1, "is_connected": true } ] }, { "plugin": "const_text_generator", "x": 933, "y": 114, "uid": "o8s9dECeWzq9", "state": { "text": "https://beta.vrsites.com/files/Murugo/bowser_peace.obj", "width": 255, "height": 229 } }, { "plugin": "three_material_phong", "x": 1422, "y": 501, "uid": "qtqXSojM1zrv" }, { "plugin": "url_texture_generator", "x": 1121, "y": 489, "uid": "O0173cSkHemR", "state": { "url": "/data/image/3620b475c9d54750238259412ea2f5550e82690a.png" } }, { "plugin": "slider_float_generator", "x": 566, "y": 447, "uid": "lP7vAKX8V8mv", "state": { "val": -0.26271186, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 563, "y": 514, "uid": "o8uhI9Tb6W7K", "state": { "val": -0.3220339, "min": -2, "max": 2 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 561, "y": 580, "uid": "10KDYLAY8m30", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Z" }, { "plugin": "vector", "x": 907, "y": 496, "uid": "jwwcz9bgAc5l", "title": "Position" }, { "plugin": "vector", "x": 969, "y": 792, "uid": "2IvEXe5HeKoR", "title": "Scale" }, { "plugin": "vector", "x": 702, "y": 700, "uid": "cHEuXyDh5tBu", "title": "Rotation" }, { "plugin": "const_float_generator", "x": 809, "y": 824, "uid": "E2Lamzl0UZZ5", "state": { "val": 0.05 }, "title": "XYZ" }, { "plugin": "knob_float_generator", "x": 564, "y": 685, "uid": "gSreAYoGr6XJ", "state": { "val": 0.27000000000000013 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 561, "y": 748, "uid": "hARBa2VXKsBy", "state": { "val": 1 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 559, "y": 804, "uid": "dLuqRd7iJ6sO", "state": { "val": 0 }, "title": "Z" }, { "plugin": "color_picker", "x": 1061, "y": 884, "uid": "1PGm2HnrOC5u", "state": { "hue": 0.71, "sat": 0.1, "lum": 0.76 } }, { "plugin": "three_material_phong", "x": 1424, "y": 818, "uid": "2y9cqp5MSUNP" }, { "plugin": "url_texture_generator", "x": 1019, "y": 1055, "uid": "69EnTBdB2Ef2", "state": { "url": "/data/image/e067e0db2aa5ea6d68e52c1ffaa76573506915f2.png" } }, { "plugin": "color_picker", "x": 1243, "y": 1124, "uid": "Fj7sEsr6V5xk", "state": { "hue": 0.71, "sat": 0, "lum": 0.91 } }, { "plugin": "output_proxy", "x": 2282, "y": 184, "uid": "tSKzgW8szxnl", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "pdxePMgTTTRg", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "toggle_button", "x": 1610, "y": 298, "uid": "hk7bdvpvdhKs", "state": { "enabled": true }, "title": "Visible" } ], "conns": [ { "src_nuid": "o8s9dECeWzq9", "dst_nuid": "C9sT6VIJPoCG", "src_slot": 0, "dst_slot": 0, "uid": "DMn1LF8qXoJK", "src_connected": true, "dst_connected": true }, { "src_nuid": "2y9cqp5MSUNP", "dst_nuid": "C9sT6VIJPoCG", "src_slot": 0, "dst_slot": 0, "uid": "Yfq8hVb8JsYs", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "jwwcz9bgAc5l", "dst_nuid": "C9sT6VIJPoCG", "src_slot": 0, "dst_slot": 1, "uid": "jKYwADE3O0Vb", "src_connected": true, "dst_connected": true }, { "src_nuid": "qtqXSojM1zrv", "dst_nuid": "C9sT6VIJPoCG", "src_slot": 0, "dst_slot": 1, "uid": "SJskaU7FDotB", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "cHEuXyDh5tBu", "dst_nuid": "C9sT6VIJPoCG", "src_slot": 0, "dst_slot": 2, "uid": "Bqo30ENERkmv", "src_connected": true, "dst_connected": true }, { "src_nuid": "2IvEXe5HeKoR", "dst_nuid": "C9sT6VIJPoCG", "src_slot": 0, "dst_slot": 3, "uid": "oP27gxtYqlvA", "src_connected": true, "dst_connected": true }, { "src_nuid": "O0173cSkHemR", "dst_nuid": "qtqXSojM1zrv", "src_slot": 0, "dst_slot": 0, "uid": "71lHKWGKSdXf", "src_connected": true, "dst_connected": true }, { "src_nuid": "1PGm2HnrOC5u", "dst_nuid": "qtqXSojM1zrv", "src_slot": 0, "dst_slot": 1, "uid": "LDk7Tkeqq0Om", "src_connected": true, "dst_connected": true }, { "src_nuid": "lP7vAKX8V8mv", "dst_nuid": "jwwcz9bgAc5l", "src_slot": 0, "dst_slot": 0, "uid": "D8Y5utiigWu8", "src_connected": true, "dst_connected": true }, { "src_nuid": "o8uhI9Tb6W7K", "dst_nuid": "jwwcz9bgAc5l", "src_slot": 0, "dst_slot": 1, "uid": "KVx7nIn9Gk4I", "src_connected": true, "dst_connected": true }, { "src_nuid": "10KDYLAY8m30", "dst_nuid": "jwwcz9bgAc5l", "src_slot": 0, "dst_slot": 2, "uid": "wLEvPUHZIcoO", "src_connected": true, "dst_connected": true }, { "src_nuid": "E2Lamzl0UZZ5", "dst_nuid": "2IvEXe5HeKoR", "src_slot": 0, "dst_slot": 0, "uid": "vb0DxxO6VVJX", "src_connected": true, "dst_connected": true }, { "src_nuid": "E2Lamzl0UZZ5", "dst_nuid": "2IvEXe5HeKoR", "src_slot": 0, "dst_slot": 1, "uid": "BlhriHs2VUwh", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "E2Lamzl0UZZ5", "dst_nuid": "2IvEXe5HeKoR", "src_slot": 0, "dst_slot": 2, "uid": "66XOcidce7hW", "src_connected": true, "dst_connected": true }, { "src_nuid": "gSreAYoGr6XJ", "dst_nuid": "cHEuXyDh5tBu", "src_slot": 0, "dst_slot": 0, "uid": "aG1i3FdxbWlp", "src_connected": true, "dst_connected": true }, { "src_nuid": "dLuqRd7iJ6sO", "dst_nuid": "cHEuXyDh5tBu", "src_slot": 0, "dst_slot": 2, "uid": "OF8pSkYUhNYD", "src_connected": true, "dst_connected": true }, { "src_nuid": "69EnTBdB2Ef2", "dst_nuid": "2y9cqp5MSUNP", "src_slot": 0, "dst_slot": 0, "uid": "DgtCDjjBWFHU", "src_connected": true, "dst_connected": true }, { "src_nuid": "Fj7sEsr6V5xk", "dst_nuid": "2y9cqp5MSUNP", "src_slot": 0, "dst_slot": 1, "uid": "zNbkeDpp4K26", "src_connected": true, "dst_connected": true }, { "src_nuid": "C9sT6VIJPoCG", "dst_nuid": "tSKzgW8szxnl", "src_slot": 0, "dst_slot": 0, "uid": "x4LV116lxfRP", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "hk7bdvpvdhKs", "dst_nuid": "C9sT6VIJPoCG", "src_slot": 0, "dst_slot": 5, "uid": "FEfUCoS7iVXB", "src_connected": true, "dst_connected": true }, { "src_nuid": "hARBa2VXKsBy", "dst_nuid": "cHEuXyDh5tBu", "src_slot": 0, "dst_slot": 1, "uid": "r3dWxFBYnnIz", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "1TMlCKkGrwfO", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } } ================================================ FILE: browser/patches/three_plane_basic.json ================================================ { "abs_t": 244.971, "active_graph": "root", "graph_uid": "TI6whDg9VfHH", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 359, "y": 344, "uid": "lem9cU46wcpG", "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": { "bF38HLzxbf14": "mh0rTKkFm0nD" } }, "title": "Plane (basic material)", "graph": { "uid": "ABAuyBeccEvs", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_mesh", "x": 1057, "y": 390, "uid": "muOUVUrWxDs2" }, { "plugin": "output_proxy", "x": 1269, "y": 390, "uid": "bF38HLzxbf14", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "bEdPpC9C6Rh1", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 100, "y": 418, "uid": "hJCtQOnzpnCg", "state": { "val": 0, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 97, "y": 485, "uid": "gb3R8J09RJGW", "state": { "val": 0, "min": -2, "max": 2 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 95, "y": 551, "uid": "roeLp1eZMjHe", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Z" }, { "plugin": "vector", "x": 441, "y": 467, "uid": "a8wJScwnzsOV", "open": false, "title": "Position" }, { "plugin": "url_texture_generator", "x": 194, "y": 64, "uid": "xzra1rEc1V9G", "state": { "url": "/data/image/86b4f99c40c9b047957cc6c5c3364a070cb3c101.png" }, "title": "Box texture" }, { "plugin": "toggle_button", "x": 943, "y": 320, "uid": "GouIJ4O7s5WH", "state": { "enabled": true }, "title": "Visible" }, { "plugin": "vector", "x": 503, "y": 763, "uid": "3UTelxL81ywd", "open": false, "title": "Scale" }, { "plugin": "vector", "x": 236, "y": 671, "uid": "VKR5IqMxzC6A", "open": false, "title": "Rotation" }, { "plugin": "const_float_generator", "x": 343, "y": 795, "uid": "nG0NsSe1F3fb", "state": { "val": 0.4 }, "title": "XYZ" }, { "plugin": "knob_float_generator", "x": 98, "y": 656, "uid": "9MDh739CO590", "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 95, "y": 719, "uid": "1Co3kqNJfQAh", "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 93, "y": 775, "uid": "w8Tj4lniCqfh", "state": { "val": 0 }, "title": "Z" }, { "plugin": "three_geometry_plane", "x": 546, "y": 347, "uid": "vDpbmXghWuRK" }, { "plugin": "three_material", "x": 664, "y": 235, "uid": "mpyFKtinHERW" } ], "conns": [ { "src_nuid": "muOUVUrWxDs2", "dst_nuid": "bF38HLzxbf14", "src_slot": 0, "dst_slot": 0, "uid": "zRsWgnCa23py", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "a8wJScwnzsOV", "dst_nuid": "muOUVUrWxDs2", "src_slot": 0, "dst_slot": 2, "uid": "MbBT90ihyYHM", "src_connected": true, "dst_connected": true }, { "src_nuid": "GouIJ4O7s5WH", "dst_nuid": "muOUVUrWxDs2", "src_slot": 0, "dst_slot": 5, "uid": "UiT1XfddE4s9", "src_connected": true, "dst_connected": true }, { "src_nuid": "nG0NsSe1F3fb", "dst_nuid": "3UTelxL81ywd", "src_slot": 0, "dst_slot": 0, "uid": "Zx6Zyo53OZjG", "src_connected": true, "dst_connected": true }, { "src_nuid": "nG0NsSe1F3fb", "dst_nuid": "3UTelxL81ywd", "src_slot": 0, "dst_slot": 1, "uid": "OS0Iedx68c3G", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "nG0NsSe1F3fb", "dst_nuid": "3UTelxL81ywd", "src_slot": 0, "dst_slot": 2, "uid": "p73G40IW8coz", "src_connected": true, "dst_connected": true }, { "src_nuid": "3UTelxL81ywd", "dst_nuid": "muOUVUrWxDs2", "src_slot": 0, "dst_slot": 4, "uid": "3DlUOn8efiMt", "src_connected": true, "dst_connected": true }, { "src_nuid": "VKR5IqMxzC6A", "dst_nuid": "muOUVUrWxDs2", "src_slot": 0, "dst_slot": 3, "uid": "XWlxV8bcX3pC", "src_connected": true, "dst_connected": true }, { "src_nuid": "9MDh739CO590", "dst_nuid": "VKR5IqMxzC6A", "src_slot": 0, "dst_slot": 0, "uid": "oMxwXmq6E9Yv", "src_connected": true, "dst_connected": true }, { "src_nuid": "1Co3kqNJfQAh", "dst_nuid": "VKR5IqMxzC6A", "src_slot": 0, "dst_slot": 1, "uid": "JAofaGhIpjUJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "w8Tj4lniCqfh", "dst_nuid": "VKR5IqMxzC6A", "src_slot": 0, "dst_slot": 2, "uid": "y7CcQODl7SSy", "src_connected": true, "dst_connected": true }, { "src_nuid": "hJCtQOnzpnCg", "dst_nuid": "a8wJScwnzsOV", "src_slot": 0, "dst_slot": 0, "uid": "LuuisWChGil7", "src_connected": true, "dst_connected": true }, { "src_nuid": "gb3R8J09RJGW", "dst_nuid": "a8wJScwnzsOV", "src_slot": 0, "dst_slot": 1, "uid": "vETJj5adtnNY", "src_connected": true, "dst_connected": true }, { "src_nuid": "roeLp1eZMjHe", "dst_nuid": "a8wJScwnzsOV", "src_slot": 0, "dst_slot": 2, "uid": "nmjilnAAqqAS", "src_connected": true, "dst_connected": true }, { "src_nuid": "vDpbmXghWuRK", "dst_nuid": "muOUVUrWxDs2", "src_slot": 0, "dst_slot": 0, "uid": "CpczJ00qqaEm", "src_connected": true, "dst_connected": true }, { "src_nuid": "xzra1rEc1V9G", "dst_nuid": "mpyFKtinHERW", "src_slot": 0, "dst_slot": 0, "uid": "hITarW4B8jpa", "src_connected": true, "dst_connected": true }, { "src_nuid": "mpyFKtinHERW", "dst_nuid": "muOUVUrWxDs2", "src_slot": 0, "dst_slot": 1, "uid": "KoLfW3krtROx", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "mh0rTKkFm0nD", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } } ================================================ FILE: browser/patches/three_plane_lambert.json ================================================ { "abs_t": 233.887, "active_graph": "root", "graph_uid": "TI6whDg9VfHH", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 311, "y": 282, "uid": "KaIlS7h7zt2C", "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": { "dcsof4rW2C9s": "mh0rTKkFm0nD" } }, "title": "Plane (lambert material)", "graph": { "uid": "umMFaPLMkYsk", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_mesh", "x": 1057, "y": 390, "uid": "EOBhj8soVbo6" }, { "plugin": "output_proxy", "x": 1269, "y": 390, "uid": "dcsof4rW2C9s", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "bEdPpC9C6Rh1", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 100, "y": 418, "uid": "yKIBFJncGGS6", "state": { "val": 0, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 97, "y": 485, "uid": "Rmvr39EHS3As", "state": { "val": 0, "min": -2, "max": 2 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 95, "y": 551, "uid": "rM2fJr161HJD", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Z" }, { "plugin": "vector", "x": 441, "y": 467, "uid": "W4EJR6c9u34P", "open": false, "title": "Position" }, { "plugin": "url_texture_generator", "x": 194, "y": 64, "uid": "QTvr7r2tdBPp", "state": { "url": "/data/image/86b4f99c40c9b047957cc6c5c3364a070cb3c101.png" }, "title": "Box texture" }, { "plugin": "toggle_button", "x": 943, "y": 320, "uid": "RBZYm3j56Ui0", "state": { "enabled": true }, "title": "Visible" }, { "plugin": "vector", "x": 503, "y": 763, "uid": "phqwwZ9bDBkg", "open": false, "title": "Scale" }, { "plugin": "vector", "x": 236, "y": 671, "uid": "JBErjUSCrWFr", "open": false, "title": "Rotation" }, { "plugin": "const_float_generator", "x": 343, "y": 795, "uid": "XEU7UCJZ86Go", "state": { "val": 0.4 }, "title": "XYZ" }, { "plugin": "knob_float_generator", "x": 98, "y": 656, "uid": "fhnkYZrpm1AI", "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 95, "y": 719, "uid": "5RGhXAXRBhs7", "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 93, "y": 775, "uid": "VL0o8P7Igb6K", "state": { "val": 0 }, "title": "Z" }, { "plugin": "three_geometry_plane", "x": 698, "y": 340, "uid": "8LEIAian9Cw5" }, { "plugin": "three_material_lambert", "x": 694, "y": 260, "uid": "Viu4rQaezA7L" } ], "conns": [ { "src_nuid": "EOBhj8soVbo6", "dst_nuid": "dcsof4rW2C9s", "src_slot": 0, "dst_slot": 0, "uid": "zRsWgnCa23py", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "W4EJR6c9u34P", "dst_nuid": "EOBhj8soVbo6", "src_slot": 0, "dst_slot": 2, "uid": "MbBT90ihyYHM", "src_connected": true, "dst_connected": true }, { "src_nuid": "RBZYm3j56Ui0", "dst_nuid": "EOBhj8soVbo6", "src_slot": 0, "dst_slot": 5, "uid": "UiT1XfddE4s9", "src_connected": true, "dst_connected": true }, { "src_nuid": "XEU7UCJZ86Go", "dst_nuid": "phqwwZ9bDBkg", "src_slot": 0, "dst_slot": 0, "uid": "Zx6Zyo53OZjG", "src_connected": true, "dst_connected": true }, { "src_nuid": "XEU7UCJZ86Go", "dst_nuid": "phqwwZ9bDBkg", "src_slot": 0, "dst_slot": 1, "uid": "OS0Iedx68c3G", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "XEU7UCJZ86Go", "dst_nuid": "phqwwZ9bDBkg", "src_slot": 0, "dst_slot": 2, "uid": "p73G40IW8coz", "src_connected": true, "dst_connected": true }, { "src_nuid": "phqwwZ9bDBkg", "dst_nuid": "EOBhj8soVbo6", "src_slot": 0, "dst_slot": 4, "uid": "3DlUOn8efiMt", "src_connected": true, "dst_connected": true }, { "src_nuid": "JBErjUSCrWFr", "dst_nuid": "EOBhj8soVbo6", "src_slot": 0, "dst_slot": 3, "uid": "XWlxV8bcX3pC", "src_connected": true, "dst_connected": true }, { "src_nuid": "fhnkYZrpm1AI", "dst_nuid": "JBErjUSCrWFr", "src_slot": 0, "dst_slot": 0, "uid": "oMxwXmq6E9Yv", "src_connected": true, "dst_connected": true }, { "src_nuid": "5RGhXAXRBhs7", "dst_nuid": "JBErjUSCrWFr", "src_slot": 0, "dst_slot": 1, "uid": "JAofaGhIpjUJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "VL0o8P7Igb6K", "dst_nuid": "JBErjUSCrWFr", "src_slot": 0, "dst_slot": 2, "uid": "y7CcQODl7SSy", "src_connected": true, "dst_connected": true }, { "src_nuid": "yKIBFJncGGS6", "dst_nuid": "W4EJR6c9u34P", "src_slot": 0, "dst_slot": 0, "uid": "LuuisWChGil7", "src_connected": true, "dst_connected": true }, { "src_nuid": "Rmvr39EHS3As", "dst_nuid": "W4EJR6c9u34P", "src_slot": 0, "dst_slot": 1, "uid": "vETJj5adtnNY", "src_connected": true, "dst_connected": true }, { "src_nuid": "rM2fJr161HJD", "dst_nuid": "W4EJR6c9u34P", "src_slot": 0, "dst_slot": 2, "uid": "nmjilnAAqqAS", "src_connected": true, "dst_connected": true }, { "src_nuid": "8LEIAian9Cw5", "dst_nuid": "EOBhj8soVbo6", "src_slot": 0, "dst_slot": 0, "uid": "CpczJ00qqaEm", "src_connected": true, "dst_connected": true }, { "src_nuid": "QTvr7r2tdBPp", "dst_nuid": "Viu4rQaezA7L", "src_slot": 0, "dst_slot": 0, "uid": "M46o8TQTKZCl", "src_connected": true, "dst_connected": true }, { "src_nuid": "Viu4rQaezA7L", "dst_nuid": "EOBhj8soVbo6", "src_slot": 0, "dst_slot": 1, "uid": "hg54OEOqnkC2", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "mh0rTKkFm0nD", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } } ================================================ FILE: browser/patches/three_point_light.json ================================================ { "abs_t": 288.29, "active_graph": "root", "graph_uid": "TI6whDg9VfHH", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 288, "y": 426, "uid": "U31AITP6oikS", "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": { "2X7kz5oxR4Np": "547odbJKrTzG" } }, "title": "Point light", "graph": { "uid": "DebjJSbmoYci", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "output_proxy", "x": 1110, "y": 223, "uid": "2X7kz5oxR4Np", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "vSy6Gj4JSPYs", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 306, "y": 399, "uid": "T2PfT2sS24YL", "state": { "val": -0.1, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 303, "y": 466, "uid": "J0tDdnNq5Xag", "state": { "val": 0, "min": -2, "max": 2 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 301, "y": 532, "uid": "2jWWH8FrZvYk", "state": { "val": 2, "min": -1, "max": 2 }, "title": "Z" }, { "plugin": "vector", "x": 645, "y": 384, "uid": "x8TTevSQ6fra", "title": "Position" }, { "plugin": "vector", "x": 639, "y": 560, "uid": "u4za6r22HV6U", "title": "Scale" }, { "plugin": "vector", "x": 634, "y": 458, "uid": "DatxkFfN7zFK", "title": "Rotation" }, { "plugin": "const_float_generator", "x": 476, "y": 708, "uid": "tsIbmO65vL7t", "state": { "val": 1 }, "title": "XYZ" }, { "plugin": "knob_float_generator", "x": 304, "y": 637, "uid": "xSREktmMtEXu", "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 301, "y": 700, "uid": "PoAOIc3iNseu", "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 299, "y": 756, "uid": "h4240z6xBqaZ", "state": { "val": 0 }, "title": "Z" }, { "plugin": "three_point_light", "x": 867, "y": 322, "uid": "PA6GO5Ub9HSQ" }, { "plugin": "const_float_generator", "x": 702, "y": 273, "uid": "tb3iWnDC6Row", "state": { "val": 1 }, "title": "Intensity" }, { "plugin": "annotation", "x": 228, "y": 159, "uid": "4vweKzjjJoCC", "state": { "text": "Can't make Point light work.\nAnyone?", "width": 189, "height": 92 } } ], "conns": [ { "src_nuid": "T2PfT2sS24YL", "dst_nuid": "x8TTevSQ6fra", "src_slot": 0, "dst_slot": 0, "uid": "LuuisWChGil7", "src_connected": true, "dst_connected": true }, { "src_nuid": "J0tDdnNq5Xag", "dst_nuid": "x8TTevSQ6fra", "src_slot": 0, "dst_slot": 1, "uid": "vETJj5adtnNY", "src_connected": true, "dst_connected": true }, { "src_nuid": "2jWWH8FrZvYk", "dst_nuid": "x8TTevSQ6fra", "src_slot": 0, "dst_slot": 2, "uid": "nmjilnAAqqAS", "src_connected": true, "dst_connected": true }, { "src_nuid": "tsIbmO65vL7t", "dst_nuid": "u4za6r22HV6U", "src_slot": 0, "dst_slot": 0, "uid": "Zx6Zyo53OZjG", "src_connected": true, "dst_connected": true }, { "src_nuid": "tsIbmO65vL7t", "dst_nuid": "u4za6r22HV6U", "src_slot": 0, "dst_slot": 1, "uid": "OS0Iedx68c3G", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "tsIbmO65vL7t", "dst_nuid": "u4za6r22HV6U", "src_slot": 0, "dst_slot": 2, "uid": "p73G40IW8coz", "src_connected": true, "dst_connected": true }, { "src_nuid": "xSREktmMtEXu", "dst_nuid": "DatxkFfN7zFK", "src_slot": 0, "dst_slot": 0, "uid": "oMxwXmq6E9Yv", "src_connected": true, "dst_connected": true }, { "src_nuid": "PoAOIc3iNseu", "dst_nuid": "DatxkFfN7zFK", "src_slot": 0, "dst_slot": 1, "uid": "JAofaGhIpjUJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "h4240z6xBqaZ", "dst_nuid": "DatxkFfN7zFK", "src_slot": 0, "dst_slot": 2, "uid": "y7CcQODl7SSy", "src_connected": true, "dst_connected": true }, { "src_nuid": "PA6GO5Ub9HSQ", "dst_nuid": "2X7kz5oxR4Np", "src_slot": 0, "dst_slot": 0, "uid": "4cgiJstG5zSU", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "x8TTevSQ6fra", "dst_nuid": "PA6GO5Ub9HSQ", "src_slot": 0, "dst_slot": 3, "uid": "M2k7sKIBreZJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "DatxkFfN7zFK", "dst_nuid": "PA6GO5Ub9HSQ", "src_slot": 0, "dst_slot": 4, "uid": "vc1VPHZenmNx", "src_connected": true, "dst_connected": true }, { "src_nuid": "u4za6r22HV6U", "dst_nuid": "PA6GO5Ub9HSQ", "src_slot": 0, "dst_slot": 5, "uid": "4Y1wGyUYKBGr", "src_connected": true, "dst_connected": true }, { "src_nuid": "tb3iWnDC6Row", "dst_nuid": "PA6GO5Ub9HSQ", "src_slot": 0, "dst_slot": 0, "uid": "1nU0uv4JVEDG", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "547odbJKrTzG", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } } ================================================ FILE: browser/patches/three_position_rotation_scale.json ================================================ { "abs_t": 80.562, "active_graph": "root", "graph_uid": "MUi1NRN53bUh", "root": { "uid": "root", "parent_uid": -1, "nodes": [ { "plugin": "slider_float_generator", "x": 99, "y": 231, "uid": "DzNSrVBlzYyw", "state": { "val": 0, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 96, "y": 298, "uid": "srA4RljtqBYa", "state": { "val": 0, "min": -2, "max": 2 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 94, "y": 364, "uid": "1Jtbdi67JtfY", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Z" }, { "plugin": "vector", "x": 542, "y": 246, "uid": "Yerg2g8jrrjK", "title": "Position" }, { "plugin": "vector", "x": 555, "y": 424, "uid": "5zBukuZaNcLg", "title": "Scale" }, { "plugin": "vector", "x": 543, "y": 325, "uid": "YRYs124ft7mW", "title": "Rotation" }, { "plugin": "const_float_generator", "x": 403, "y": 497, "uid": "2LFjrSvDZq3Q", "state": { "val": 0.4 }, "title": "XYZ" }, { "plugin": "slider_float_generator", "x": 72, "y": 456, "uid": "flyTpK3YMWH0", "state": { "val": 0, "min": -5, "max": 5 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 69, "y": 523, "uid": "0FAW3eFwq3v9", "state": { "val": 0, "min": -5, "max": 5 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 67, "y": 589, "uid": "xVZWXfnpt98K", "state": { "val": 0, "min": -5, "max": 5 }, "title": "Z" } ], "conns": [ { "src_nuid": "DzNSrVBlzYyw", "dst_nuid": "Yerg2g8jrrjK", "src_slot": 0, "dst_slot": 0, "uid": "uPOkjA3S4Jpo", "src_connected": true, "dst_connected": true }, { "src_nuid": "srA4RljtqBYa", "dst_nuid": "Yerg2g8jrrjK", "src_slot": 0, "dst_slot": 1, "uid": "TJQC8fKp7i44", "src_connected": true, "dst_connected": true }, { "src_nuid": "1Jtbdi67JtfY", "dst_nuid": "Yerg2g8jrrjK", "src_slot": 0, "dst_slot": 2, "uid": "LjwzAKQFfYFn", "src_connected": true, "dst_connected": true }, { "src_nuid": "2LFjrSvDZq3Q", "dst_nuid": "5zBukuZaNcLg", "src_slot": 0, "dst_slot": 0, "uid": "Fkqyp2DiLKtX", "src_connected": true, "dst_connected": true }, { "src_nuid": "2LFjrSvDZq3Q", "dst_nuid": "5zBukuZaNcLg", "src_slot": 0, "dst_slot": 1, "uid": "PKiOPBfDD6Ak", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "2LFjrSvDZq3Q", "dst_nuid": "5zBukuZaNcLg", "src_slot": 0, "dst_slot": 2, "uid": "ym6iVJZfKeCK", "src_connected": true, "dst_connected": true }, { "src_nuid": "flyTpK3YMWH0", "dst_nuid": "YRYs124ft7mW", "src_slot": 0, "dst_slot": 0, "uid": "cRW74a3G5jAf", "src_connected": true, "dst_connected": true }, { "src_nuid": "0FAW3eFwq3v9", "dst_nuid": "YRYs124ft7mW", "src_slot": 0, "dst_slot": 1, "uid": "cnHzaNy5YMZo", "src_connected": true, "dst_connected": true }, { "src_nuid": "xVZWXfnpt98K", "dst_nuid": "YRYs124ft7mW", "src_slot": 0, "dst_slot": 2, "uid": "vLgmqNknlVhZ", "src_connected": true, "dst_connected": true } ] } } ================================================ FILE: browser/patches/three_sphere.json ================================================ { "abs_t": 262.355, "active_graph": "root", "graph_uid": "TI6whDg9VfHH", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 221, "y": 240, "uid": "J9dnwdsWM971", "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": { "OzjF6BlVhopv": "mh0rTKkFm0nD" } }, "title": "Sphere", "graph": { "uid": "kUKodUvwNp7a", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_mesh", "x": 1057, "y": 390, "uid": "kra7lxXtBXtw" }, { "plugin": "output_proxy", "x": 1269, "y": 390, "uid": "OzjF6BlVhopv", "title": "object3d", "dyn_in": [ { "name": "output", "dt": 21, "def": null, "uid": "bEdPpC9C6Rh1", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 100, "y": 418, "uid": "FbwG33UiJpA1", "state": { "val": 0, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 97, "y": 485, "uid": "sJGTQpgFCmF6", "state": { "val": 0, "min": -2, "max": 2 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 95, "y": 551, "uid": "9jrYteJx4mxd", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Z" }, { "plugin": "vector", "x": 441, "y": 467, "uid": "eFC8yqEjtGk8", "open": false, "title": "Position" }, { "plugin": "url_texture_generator", "x": 194, "y": 64, "uid": "Ad9MoQf1UEN0", "state": { "url": "/data/image/a0ef7a98fe6f899443d2f5bf97b606bc2a94176a.png" }, "title": "Box texture" }, { "plugin": "toggle_button", "x": 943, "y": 320, "uid": "yeur4Vur7Tho", "state": { "enabled": true }, "title": "Visible" }, { "plugin": "vector", "x": 503, "y": 763, "uid": "VTatipYNLPr1", "open": false, "title": "Scale" }, { "plugin": "vector", "x": 236, "y": 671, "uid": "TrMsY1yRN43z", "open": false, "title": "Rotation" }, { "plugin": "const_float_generator", "x": 343, "y": 795, "uid": "uHYY3yhwnnne", "state": { "val": 0.4 }, "title": "XYZ" }, { "plugin": "knob_float_generator", "x": 98, "y": 656, "uid": "O1lj2ZmCz727", "state": { "val": 0 }, "title": "X" }, { "plugin": "knob_float_generator", "x": 95, "y": 719, "uid": "RePm8TVYCJD6", "state": { "val": 0 }, "title": "Y" }, { "plugin": "knob_float_generator", "x": 93, "y": 775, "uid": "MvO7hSR1ou9I", "state": { "val": 0 }, "title": "Z" }, { "plugin": "three_geometry_sphere", "x": 595, "y": 249, "uid": "UY8sf48e7Vxm" }, { "plugin": "const_float_generator", "x": 433, "y": 248, "uid": "H49l6ai7iMFA", "state": { "val": 1 }, "title": "Radius" }, { "plugin": "const_float_generator", "x": 435, "y": 301, "uid": "XIUGcado485K", "state": { "val": 64 }, "title": "Segments" }, { "plugin": "three_material_lambert", "x": 613, "y": 128, "uid": "bur5StFrSRuU" } ], "conns": [ { "src_nuid": "kra7lxXtBXtw", "dst_nuid": "OzjF6BlVhopv", "src_slot": 0, "dst_slot": 0, "uid": "zRsWgnCa23py", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "eFC8yqEjtGk8", "dst_nuid": "kra7lxXtBXtw", "src_slot": 0, "dst_slot": 2, "uid": "MbBT90ihyYHM", "src_connected": true, "dst_connected": true }, { "src_nuid": "yeur4Vur7Tho", "dst_nuid": "kra7lxXtBXtw", "src_slot": 0, "dst_slot": 5, "uid": "UiT1XfddE4s9", "src_connected": true, "dst_connected": true }, { "src_nuid": "uHYY3yhwnnne", "dst_nuid": "VTatipYNLPr1", "src_slot": 0, "dst_slot": 0, "uid": "Zx6Zyo53OZjG", "src_connected": true, "dst_connected": true }, { "src_nuid": "uHYY3yhwnnne", "dst_nuid": "VTatipYNLPr1", "src_slot": 0, "dst_slot": 1, "uid": "OS0Iedx68c3G", "src_connected": true, "dst_connected": true, "offset": 1 }, { "src_nuid": "uHYY3yhwnnne", "dst_nuid": "VTatipYNLPr1", "src_slot": 0, "dst_slot": 2, "uid": "p73G40IW8coz", "src_connected": true, "dst_connected": true }, { "src_nuid": "VTatipYNLPr1", "dst_nuid": "kra7lxXtBXtw", "src_slot": 0, "dst_slot": 4, "uid": "3DlUOn8efiMt", "src_connected": true, "dst_connected": true }, { "src_nuid": "TrMsY1yRN43z", "dst_nuid": "kra7lxXtBXtw", "src_slot": 0, "dst_slot": 3, "uid": "XWlxV8bcX3pC", "src_connected": true, "dst_connected": true }, { "src_nuid": "O1lj2ZmCz727", "dst_nuid": "TrMsY1yRN43z", "src_slot": 0, "dst_slot": 0, "uid": "oMxwXmq6E9Yv", "src_connected": true, "dst_connected": true }, { "src_nuid": "RePm8TVYCJD6", "dst_nuid": "TrMsY1yRN43z", "src_slot": 0, "dst_slot": 1, "uid": "JAofaGhIpjUJ", "src_connected": true, "dst_connected": true }, { "src_nuid": "MvO7hSR1ou9I", "dst_nuid": "TrMsY1yRN43z", "src_slot": 0, "dst_slot": 2, "uid": "y7CcQODl7SSy", "src_connected": true, "dst_connected": true }, { "src_nuid": "FbwG33UiJpA1", "dst_nuid": "eFC8yqEjtGk8", "src_slot": 0, "dst_slot": 0, "uid": "LuuisWChGil7", "src_connected": true, "dst_connected": true }, { "src_nuid": "sJGTQpgFCmF6", "dst_nuid": "eFC8yqEjtGk8", "src_slot": 0, "dst_slot": 1, "uid": "vETJj5adtnNY", "src_connected": true, "dst_connected": true }, { "src_nuid": "9jrYteJx4mxd", "dst_nuid": "eFC8yqEjtGk8", "src_slot": 0, "dst_slot": 2, "uid": "nmjilnAAqqAS", "src_connected": true, "dst_connected": true }, { "src_nuid": "UY8sf48e7Vxm", "dst_nuid": "kra7lxXtBXtw", "src_slot": 0, "dst_slot": 0, "uid": "qJUj6fALecOx", "src_connected": true, "dst_connected": true }, { "src_nuid": "H49l6ai7iMFA", "dst_nuid": "UY8sf48e7Vxm", "src_slot": 0, "dst_slot": 0, "uid": "LjGAtZyqK41r", "src_connected": true, "dst_connected": true }, { "src_nuid": "XIUGcado485K", "dst_nuid": "UY8sf48e7Vxm", "src_slot": 0, "dst_slot": 1, "uid": "x6iVe9DW3eCj", "src_connected": true, "dst_connected": true }, { "src_nuid": "XIUGcado485K", "dst_nuid": "UY8sf48e7Vxm", "src_slot": 0, "dst_slot": 2, "uid": "QDlkhdaQEHL3", "src_connected": true, "dst_connected": true }, { "src_nuid": "bur5StFrSRuU", "dst_nuid": "kra7lxXtBXtw", "src_slot": 0, "dst_slot": 1, "uid": "x5owHyYcbb91", "src_connected": true, "dst_connected": true }, { "src_nuid": "Ad9MoQf1UEN0", "dst_nuid": "bur5StFrSRuU", "src_slot": 0, "dst_slot": 0, "uid": "B9EMXM19mTOs", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "object3d", "dt": 21, "index": 0, "uid": "mh0rTKkFm0nD", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } } ================================================ FILE: browser/patches/three_vr_camera.json ================================================ { "abs_t": 269.255, "active_graph": "root", "graph_uid": "TI6whDg9VfHH", "root": { "uid": "root", "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 261, "y": 265, "uid": "J0OKNbEI1crw", "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": {}, "output_sids": { "xC7Qj8U2KDwf": "8GpdZjiiiEQa" } }, "title": "VR camera", "graph": { "uid": "GXxlOVFrRAQA", "parent_uid": "root", "open": true, "nodes": [ { "plugin": "three_vr_camera", "x": 899, "y": 233, "uid": "hx7CYbhI78f1" }, { "plugin": "output_proxy", "x": 1077, "y": 294, "uid": "xC7Qj8U2KDwf", "title": "camera", "dyn_in": [ { "name": "output", "dt": 6, "def": null, "uid": "uyyGR7LQwSEh", "dynamic": true, "type": 0, "index": 0, "is_connected": true, "connected": true } ] }, { "plugin": "slider_float_generator", "x": 443, "y": 217, "uid": "c6270oRHynAB", "state": { "val": 0, "min": -1, "max": 1 }, "title": "X" }, { "plugin": "slider_float_generator", "x": 440, "y": 284, "uid": "E3XYUASCT7VY", "state": { "val": 0, "min": -1, "max": 1 }, "title": "Y" }, { "plugin": "slider_float_generator", "x": 438, "y": 350, "uid": "kTSZO6Hm038T", "state": { "val": 2, "min": -2, "max": 2 }, "title": "Z" }, { "plugin": "vector", "x": 736, "y": 244, "uid": "y6TtFMcMXmUn" }, { "plugin": "const_float_generator", "x": 772, "y": 183, "uid": "eguTXsRqSaX5", "state": { "val": 45 }, "title": "FOV" } ], "conns": [ { "src_nuid": "hx7CYbhI78f1", "dst_nuid": "xC7Qj8U2KDwf", "src_slot": 0, "dst_slot": 0, "uid": "JsoCbqqXFrqv", "src_connected": true, "dst_connected": true, "dst_dyn": true }, { "src_nuid": "c6270oRHynAB", "dst_nuid": "y6TtFMcMXmUn", "src_slot": 0, "dst_slot": 0, "uid": "SLv1XBnHMxMi", "src_connected": true, "dst_connected": true }, { "src_nuid": "E3XYUASCT7VY", "dst_nuid": "y6TtFMcMXmUn", "src_slot": 0, "dst_slot": 1, "uid": "I9a5nju0SzbI", "src_connected": true, "dst_connected": true }, { "src_nuid": "kTSZO6Hm038T", "dst_nuid": "y6TtFMcMXmUn", "src_slot": 0, "dst_slot": 2, "uid": "ND97vtAXhssC", "src_connected": true, "dst_connected": true }, { "src_nuid": "y6TtFMcMXmUn", "dst_nuid": "hx7CYbhI78f1", "src_slot": 0, "dst_slot": 0, "uid": "Dz79JT5WRnA5", "src_connected": true, "dst_connected": true }, { "src_nuid": "eguTXsRqSaX5", "dst_nuid": "hx7CYbhI78f1", "src_slot": 0, "dst_slot": 1, "uid": "eZFW97ARUAgE", "src_connected": true, "dst_connected": true } ] }, "dyn_out": [ { "name": "camera", "dt": 6, "index": 0, "uid": "8GpdZjiiiEQa", "dynamic": true, "type": 1, "is_connected": true } ] } ], "conns": [] } } ================================================ FILE: browser/patches/time_accumulating_time.json ================================================ { "abs_t": 4.628, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 4, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 662, "y": 456, "uid": 0, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "7": 1 }, "output_sids": { "6": 0 } }, "title": "Time", "graph": { "node_uid": 17, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "delta_t_generator", "x": 234, "y": 203, "uid": 0 }, { "plugin": "multiply_modulator", "x": 359, "y": 193, "uid": 2 }, { "plugin": "output_proxy", "x": 785, "y": 240, "uid": 6, "dsid": 8, "state": { "slot_id": 0 }, "title": "time", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 250, "y": 262, "uid": 7, "dsid": 6, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "register_local_read", "x": 376, "y": 310, "uid": 9, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "register_local_write", "x": 745, "y": 188, "uid": 10, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "add_modulator", "x": 484, "y": 223, "uid": 11 }, { "plugin": "if_else_modulator", "x": 604, "y": 249, "uid": 13 }, { "plugin": "const_float_generator", "x": 488, "y": 351, "uid": 14, "state": { "val": 0 }, "title": "Reset" }, { "plugin": "initialise_generator", "x": 520, "y": 160, "uid": 15 } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 11, "dst_nuid": 13, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 13, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 } ], "registers": [ { "id": "float", "dt": 0 } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "time", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 460, "y": 476, "uid": 1, "state": { "val": 0.36666666666666664, "min": 0, "max": 1 }, "title": "Speed" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/time_circular_motion_to_xyz.json ================================================ {"abs_t":639.665,"active_graph":0,"graph_uid":5,"root":{"node_uid":38,"uid":0,"parent_uid":-1,"nodes":[{"plugin":"graph","x":240,"y":29,"uid":18,"dsid":6,"state":{"enabled":true,"input_sids":{"11":1,"19":2},"output_sids":{"22":3,"23":4,"24":5}},"title":"Circular motion","graph":{"node_uid":25,"uid":2,"parent_uid":0,"nodes":[{"plugin":"const_float_generator","x":338,"y":416,"uid":1,"state":{"val":0.25}},{"plugin":"sine_modulator","x":476,"y":146,"uid":2},{"plugin":"multiply_modulator","x":292,"y":177,"uid":6},{"plugin":"delta_t_generator","x":212,"y":177,"uid":8},{"plugin":"accumulate_modulator","x":372,"y":177,"uid":9,"state":{"value":-204.69823999997405}},{"plugin":"input_proxy","x":141,"y":270,"uid":11,"dsid":8,"state":{"slot_id":0},"title":"speed","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"cosine_modulator","x":486,"y":230,"uid":12},{"plugin":"multiply_modulator","x":567,"y":143,"uid":16},{"plugin":"multiply_modulator","x":558,"y":225,"uid":17},{"plugin":"input_proxy","x":570,"y":391,"uid":19,"dsid":8,"state":{"slot_id":0},"title":"radius","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"sine_modulator","x":478,"y":305,"uid":20},{"plugin":"multiply_modulator","x":569,"y":302,"uid":21},{"plugin":"output_proxy","x":680,"y":174,"uid":22,"dsid":7,"state":{"slot_id":0},"title":"X","dyn_in":[{"name":"input","dt":0,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":694,"y":235,"uid":23,"dsid":8,"state":{"slot_id":0},"title":"Y","dyn_in":[{"name":"input","dt":0,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":666,"y":343,"uid":24,"dsid":8,"state":{"slot_id":0},"title":"Z","dyn_in":[{"name":"input","dt":0,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":9,"dst_nuid":2,"src_slot":"value","dst_slot":"time"},{"src_nuid":8,"dst_nuid":6,"src_slot":"seconds","dst_slot":"a"},{"src_nuid":6,"dst_nuid":9,"src_slot":"result","dst_slot":"value"},{"src_nuid":11,"dst_nuid":6,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true},{"src_nuid":9,"dst_nuid":12,"src_slot":"value","dst_slot":"time","offset":1},{"src_nuid":2,"dst_nuid":16,"src_slot":"value","dst_slot":"a"},{"src_nuid":12,"dst_nuid":17,"src_slot":"value","dst_slot":"a"},{"src_nuid":19,"dst_nuid":16,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true},{"src_nuid":19,"dst_nuid":17,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true,"offset":1},{"src_nuid":20,"dst_nuid":21,"src_slot":"value","dst_slot":"a"},{"src_nuid":19,"dst_nuid":21,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true,"offset":2},{"src_nuid":16,"dst_nuid":22,"src_slot":"result","dst_slot":0,"dst_connected":true,"dst_dyn":true},{"src_nuid":17,"dst_nuid":23,"src_slot":"result","dst_slot":0,"dst_connected":true,"dst_dyn":true},{"src_nuid":21,"dst_nuid":24,"src_slot":"result","dst_slot":0,"dst_connected":true,"dst_dyn":true}]},"dyn_in":[{"name":"speed","dt":0,"uid":1,"index":0,"type":0,"is_connected":true},{"name":"radius","dt":0,"uid":2,"index":1,"type":0,"is_connected":true}],"dyn_out":[{"name":"X","dt":0,"uid":3,"index":0,"type":1},{"name":"Y","dt":0,"uid":4,"index":1,"type":1},{"name":"Z","dt":0,"uid":5,"index":2,"type":1}]},{"plugin":"slider_float_generator","x":43,"y":29,"uid":19,"state":{"val":-0.32,"min":-2,"max":2},"title":"Speed"},{"plugin":"slider_float_generator","x":43,"y":97,"uid":20,"state":{"val":6,"min":0,"max":20},"title":"radius"}],"conns":[{"src_nuid":19,"dst_nuid":18,"src_slot":"value","dst_slot":0,"dst_dyn":true},{"src_nuid":20,"dst_nuid":18,"src_slot":"value","dst_slot":1,"dst_dyn":true}]}} ================================================ FILE: browser/patches/time_oscillate_2_values_in_tween.json ================================================ { "abs_t": 222.061, "active_graph": 0, "graph_uid": 4, "root": { "node_uid": 8, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 527, "y": 208, "uid": 2, "dsid": 10, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "28": 6, "41": 8, "42": 9 }, "output_sids": { "40": 7 } }, "title": "Oscillate with In tween", "graph": { "node_uid": 48, "uid": 2, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "delta_t_generator", "x": 62, "y": 232, "uid": 25 }, { "plugin": "multiply_modulator", "x": 187, "y": 222, "uid": 26 }, { "plugin": "input_proxy", "x": 78, "y": 291, "uid": 28, "dsid": 8, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "register_local_read", "x": 204, "y": 339, "uid": 29, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "register_local_write", "x": 589, "y": 178, "uid": 30, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "add_modulator", "x": 312, "y": 252, "uid": 31 }, { "plugin": "if_else_modulator", "x": 432, "y": 278, "uid": 32 }, { "plugin": "const_float_generator", "x": 316, "y": 380, "uid": 33, "state": { "val": 0 }, "title": "Reset" }, { "plugin": "initialise_generator", "x": 348, "y": 189, "uid": 34 }, { "plugin": "sine_modulator", "x": 550, "y": 289, "uid": 35 }, { "plugin": "subtract_modulator", "x": 664, "y": 404, "uid": 36 }, { "plugin": "convert_oscilator_unit_modulator", "x": 629, "y": 289, "uid": 37 }, { "plugin": "multiply_modulator", "x": 967, "y": 260, "uid": 38 }, { "plugin": "add_modulator", "x": 1067, "y": 301, "uid": 39 }, { "plugin": "output_proxy", "x": 1158, "y": 304, "uid": 40, "dsid": 10, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 538, "y": 399, "uid": 41, "dsid": 8, "state": { "slot_id": 0 }, "title": "Min", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 604, "y": 404, "uid": 42, "dsid": 8, "state": { "slot_id": 0 }, "title": "Max", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "tween_in_modulator", "x": 774, "y": 250, "uid": 47, "state": { "type": 0 } } ], "conns": [ { "src_nuid": 25, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 29, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 31, "dst_nuid": 32, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 33, "dst_nuid": 32, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 35, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 42, "dst_nuid": 36, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 36, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 36, "dst_nuid": 38, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 38, "dst_nuid": 39, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 41, "dst_nuid": 39, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 39, "dst_nuid": 40, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 32, "dst_nuid": 30, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 32, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 37, "dst_nuid": 47, "src_slot": 0, "dst_slot": 0, "dst_connected": false }, { "src_nuid": 47, "dst_nuid": 38, "src_slot": 0, "dst_slot": 0 } ], "registers": [ { "id": "float", "dt": 8 } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 6, "index": 0, "type": 0, "is_connected": true }, { "name": "Min", "dt": 0, "uid": 8, "index": 1, "type": 0, "is_connected": true }, { "name": "Max", "dt": 0, "uid": 9, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "float", "dt": 0, "uid": 7, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 333, "y": 208, "uid": 3, "state": { "val": 0.42, "min": 0, "max": 1 }, "title": "speed" }, { "plugin": "const_float_generator", "x": 332, "y": 272, "uid": 4, "state": { "val": 0 }, "title": "Min" }, { "plugin": "const_float_generator", "x": 420, "y": 272, "uid": 5, "state": { "val": 1 }, "title": "Max" } ], "conns": [ { "src_nuid": 3, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/time_oscillate_2_values_out_tween.json ================================================ { "abs_t": 222.061, "active_graph": 0, "graph_uid": 4, "root": { "node_uid": 8, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 527, "y": 208, "uid": 2, "dsid": 10, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "28": 6, "41": 8, "42": 9 }, "output_sids": { "40": 7 } }, "title": "Oscillate with Out tween", "graph": { "node_uid": 49, "uid": 2, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "delta_t_generator", "x": 62, "y": 232, "uid": 25 }, { "plugin": "multiply_modulator", "x": 187, "y": 222, "uid": 26 }, { "plugin": "input_proxy", "x": 78, "y": 291, "uid": 28, "dsid": 8, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "register_local_read", "x": 204, "y": 339, "uid": 29, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "register_local_write", "x": 589, "y": 178, "uid": 30, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "add_modulator", "x": 312, "y": 252, "uid": 31 }, { "plugin": "if_else_modulator", "x": 432, "y": 278, "uid": 32 }, { "plugin": "const_float_generator", "x": 316, "y": 380, "uid": 33, "state": { "val": 0 }, "title": "Reset" }, { "plugin": "initialise_generator", "x": 348, "y": 189, "uid": 34 }, { "plugin": "sine_modulator", "x": 550, "y": 289, "uid": 35 }, { "plugin": "subtract_modulator", "x": 664, "y": 404, "uid": 36 }, { "plugin": "convert_oscilator_unit_modulator", "x": 629, "y": 289, "uid": 37 }, { "plugin": "multiply_modulator", "x": 967, "y": 260, "uid": 38 }, { "plugin": "add_modulator", "x": 1067, "y": 301, "uid": 39 }, { "plugin": "output_proxy", "x": 1158, "y": 304, "uid": 40, "dsid": 10, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 538, "y": 399, "uid": 41, "dsid": 8, "state": { "slot_id": 0 }, "title": "Min", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 604, "y": 404, "uid": 42, "dsid": 8, "state": { "slot_id": 0 }, "title": "Max", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "tween_out_modulator", "x": 776, "y": 277, "uid": 48, "state": { "type": 0 } } ], "conns": [ { "src_nuid": 25, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 29, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 31, "dst_nuid": 32, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 33, "dst_nuid": 32, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 35, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 42, "dst_nuid": 36, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 36, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 36, "dst_nuid": 38, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 38, "dst_nuid": 39, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 41, "dst_nuid": 39, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 39, "dst_nuid": 40, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 32, "dst_nuid": 30, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 32, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 37, "dst_nuid": 48, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 48, "dst_nuid": 38, "src_slot": 0, "dst_slot": 0 } ], "registers": [ { "id": "float", "dt": 8 } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 6, "index": 0, "type": 0, "is_connected": true }, { "name": "Min", "dt": 0, "uid": 8, "index": 1, "type": 0, "is_connected": true }, { "name": "Max", "dt": 0, "uid": 9, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "float", "dt": 0, "uid": 7, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 333, "y": 208, "uid": 3, "state": { "val": 0.42, "min": 0, "max": 1 }, "title": "speed" }, { "plugin": "const_float_generator", "x": 332, "y": 272, "uid": 4, "state": { "val": 0 }, "title": "Min" }, { "plugin": "const_float_generator", "x": 420, "y": 272, "uid": 5, "state": { "val": 1 }, "title": "Max" } ], "conns": [ { "src_nuid": 3, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/time_oscillate_between_2_values.json ================================================ { "abs_t": 222.061, "active_graph": 0, "graph_uid": 3, "root": { "node_uid": 8, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 527, "y": 208, "uid": 2, "dsid": 10, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "28": 6, "41": 8, "42": 9 }, "output_sids": { "40": 7 } }, "title": "Oscillate", "graph": { "node_uid": 43, "uid": 2, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "delta_t_generator", "x": 62, "y": 232, "uid": 25 }, { "plugin": "multiply_modulator", "x": 187, "y": 222, "uid": 26 }, { "plugin": "input_proxy", "x": 78, "y": 291, "uid": 28, "dsid": 7, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "register_local_read", "x": 204, "y": 339, "uid": 29, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "register_local_write", "x": 589, "y": 178, "uid": 30, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "add_modulator", "x": 312, "y": 252, "uid": 31 }, { "plugin": "if_else_modulator", "x": 432, "y": 278, "uid": 32 }, { "plugin": "const_float_generator", "x": 316, "y": 380, "uid": 33, "state": { "val": 0 }, "title": "Reset" }, { "plugin": "initialise_generator", "x": 348, "y": 189, "uid": 34 }, { "plugin": "sine_modulator", "x": 550, "y": 289, "uid": 35 }, { "plugin": "subtract_modulator", "x": 664, "y": 404, "uid": 36 }, { "plugin": "convert_oscilator_unit_modulator", "x": 629, "y": 289, "uid": 37 }, { "plugin": "multiply_modulator", "x": 753, "y": 289, "uid": 38 }, { "plugin": "add_modulator", "x": 836, "y": 344, "uid": 39 }, { "plugin": "output_proxy", "x": 919, "y": 344, "uid": 40, "dsid": 9, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 538, "y": 399, "uid": 41, "dsid": 7, "state": { "slot_id": 0 }, "title": "Min", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 604, "y": 404, "uid": 42, "dsid": 7, "state": { "slot_id": 0 }, "title": "Max", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 25, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 29, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 31, "dst_nuid": 32, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 33, "dst_nuid": 32, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 35, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 42, "dst_nuid": 36, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 36, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 36, "dst_nuid": 38, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 38, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 38, "dst_nuid": 39, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 41, "dst_nuid": 39, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 39, "dst_nuid": 40, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 32, "dst_nuid": 30, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 32, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0, "dst_connected": false, "offset": 1 } ], "registers": [ { "id": "float", "dt": 8 } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 6, "index": 0, "type": 0, "is_connected": true }, { "name": "Min", "dt": 0, "uid": 8, "index": 1, "type": 0, "is_connected": true }, { "name": "Max", "dt": 0, "uid": 9, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "float", "dt": 0, "uid": 7, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 333, "y": 208, "uid": 3, "state": { "val": 0.42, "min": 0, "max": 1 }, "title": "speed" }, { "plugin": "const_float_generator", "x": 332, "y": 272, "uid": 4, "state": { "val": 0 }, "title": "Min" }, { "plugin": "const_float_generator", "x": 420, "y": 272, "uid": 5, "state": { "val": 1 }, "title": "Max" } ], "conns": [ { "src_nuid": 3, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/time_oscillate_with_sawtooth.json ================================================ { "abs_t": 222.061, "active_graph": 0, "graph_uid": 9, "root": { "node_uid": 20, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 651, "y": 426, "uid": 16, "dsid": 10, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "28": 6, "41": 8, "42": 9 }, "output_sids": { "40": 7 } }, "title": "Oscillate Sawtooth", "graph": { "node_uid": 48, "uid": 7, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "delta_t_generator", "x": 62, "y": 232, "uid": 25 }, { "plugin": "multiply_modulator", "x": 187, "y": 222, "uid": 26 }, { "plugin": "input_proxy", "x": 78, "y": 291, "uid": 28, "dsid": 8, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "register_local_read", "x": 204, "y": 339, "uid": 29, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "register_local_write", "x": 589, "y": 178, "uid": 30, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "add_modulator", "x": 312, "y": 252, "uid": 31 }, { "plugin": "if_else_modulator", "x": 432, "y": 278, "uid": 32 }, { "plugin": "const_float_generator", "x": 316, "y": 380, "uid": 33, "state": { "val": 0 }, "title": "Reset" }, { "plugin": "initialise_generator", "x": 348, "y": 189, "uid": 34 }, { "plugin": "subtract_modulator", "x": 664, "y": 404, "uid": 36 }, { "plugin": "convert_oscilator_unit_modulator", "x": 629, "y": 289, "uid": 37 }, { "plugin": "multiply_modulator", "x": 753, "y": 289, "uid": 38 }, { "plugin": "add_modulator", "x": 836, "y": 344, "uid": 39 }, { "plugin": "output_proxy", "x": 919, "y": 344, "uid": 40, "dsid": 10, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 538, "y": 399, "uid": 41, "dsid": 8, "state": { "slot_id": 0 }, "title": "Min", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 604, "y": 404, "uid": 42, "dsid": 8, "state": { "slot_id": 0 }, "title": "Max", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "sawtooth_modulator", "x": 543, "y": 286, "uid": 47 } ], "conns": [ { "src_nuid": 25, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 28, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 31, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 29, "dst_nuid": 31, "src_slot": 0, "dst_slot": 1, "src_dyn": true }, { "src_nuid": 31, "dst_nuid": 32, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 33, "dst_nuid": 32, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 42, "dst_nuid": 36, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 41, "dst_nuid": 36, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 36, "dst_nuid": 38, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 37, "dst_nuid": 38, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 38, "dst_nuid": 39, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 41, "dst_nuid": 39, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 39, "dst_nuid": 40, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 32, "dst_nuid": 30, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 32, "dst_nuid": 47, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 47, "dst_nuid": 37, "src_slot": 0, "dst_slot": 0 } ], "registers": [ { "id": "float", "dt": 8 } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 6, "index": 0, "type": 0, "is_connected": true }, { "name": "Min", "dt": 0, "uid": 8, "index": 1, "type": 0, "is_connected": true }, { "name": "Max", "dt": 0, "uid": 9, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "float", "dt": 0, "uid": 7, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 457, "y": 426, "uid": 17, "state": { "val": 0.42, "min": 0, "max": 1 }, "title": "speed" }, { "plugin": "const_float_generator", "x": 456, "y": 490, "uid": 18, "state": { "val": 0 }, "title": "Min" }, { "plugin": "const_float_generator", "x": 544, "y": 490, "uid": 19, "state": { "val": 1 }, "title": "Max" } ], "conns": [ { "src_nuid": 17, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 19, "dst_nuid": 16, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 18, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/time_oscillate_with_triangle.json ================================================ {"abs_t":222.061,"active_graph":0,"graph_uid":9,"root":{"node_uid":20,"uid":0,"parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":651,"y":426,"uid":16,"dsid":10,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"rt_filter":9729,"input_sids":{"28":6,"41":8,"42":9},"output_sids":{"40":7}},"title":"Oscillate Triangle","graph":{"node_uid":49,"uid":7,"parent_uid":0,"open":true,"nodes":[{"plugin":"delta_t_generator","x":62,"y":232,"uid":25},{"plugin":"multiply_modulator","x":187,"y":222,"uid":26},{"plugin":"input_proxy","x":78,"y":291,"uid":28,"dsid":8,"state":{"slot_id":0},"title":"Speed","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"register_local_read","x":204,"y":339,"uid":29,"dsid":1,"state":{"slot_id":0},"title":"float","dyn_out":[{"name":"value","dt":0,"desc":"","uid":0,"index":0,"type":1}]},{"plugin":"register_local_write","x":589,"y":178,"uid":30,"dsid":1,"state":{"slot_id":0},"title":"float","dyn_in":[{"name":"value","dt":0,"desc":"","uid":0,"index":0,"type":0,"is_connected":true}]},{"plugin":"add_modulator","x":312,"y":252,"uid":31},{"plugin":"if_else_modulator","x":432,"y":278,"uid":32},{"plugin":"const_float_generator","x":316,"y":380,"uid":33,"state":{"val":0},"title":"Reset"},{"plugin":"initialise_generator","x":348,"y":189,"uid":34},{"plugin":"subtract_modulator","x":664,"y":404,"uid":36},{"plugin":"convert_oscilator_unit_modulator","x":629,"y":289,"uid":37},{"plugin":"multiply_modulator","x":753,"y":289,"uid":38},{"plugin":"add_modulator","x":836,"y":344,"uid":39},{"plugin":"output_proxy","x":919,"y":344,"uid":40,"dsid":10,"state":{"slot_id":0},"title":"float","dyn_in":[{"name":"input","dt":0,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"input_proxy","x":538,"y":399,"uid":41,"dsid":8,"state":{"slot_id":0},"title":"Min","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":604,"y":404,"uid":42,"dsid":8,"state":{"slot_id":0},"title":"Max","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"triangle_modulator","x":552,"y":291,"uid":48}],"conns":[{"src_nuid":25,"dst_nuid":26,"src_slot":"seconds","dst_slot":"a"},{"src_nuid":28,"dst_nuid":26,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true},{"src_nuid":26,"dst_nuid":31,"src_slot":"result","dst_slot":"a"},{"src_nuid":29,"dst_nuid":31,"src_slot":0,"dst_slot":"b","src_dyn":true},{"src_nuid":31,"dst_nuid":32,"src_slot":"result","dst_slot":"false value"},{"src_nuid":34,"dst_nuid":32,"src_slot":"bool","dst_slot":"condition"},{"src_nuid":33,"dst_nuid":32,"src_slot":"value","dst_slot":"true value"},{"src_nuid":42,"dst_nuid":36,"src_slot":0,"dst_slot":"a","src_connected":true,"src_dyn":true},{"src_nuid":41,"dst_nuid":36,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true,"offset":1},{"src_nuid":36,"dst_nuid":38,"src_slot":"result","dst_slot":"b"},{"src_nuid":37,"dst_nuid":38,"src_slot":"value","dst_slot":"a"},{"src_nuid":38,"dst_nuid":39,"src_slot":"result","dst_slot":"a"},{"src_nuid":41,"dst_nuid":39,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true},{"src_nuid":39,"dst_nuid":40,"src_slot":"result","dst_slot":0,"dst_connected":true,"dst_dyn":true,"offset":1},{"src_nuid":32,"dst_nuid":30,"src_slot":"value","dst_slot":0,"dst_dyn":true},{"src_nuid":32,"dst_nuid":48,"src_slot":"value","dst_slot":"time","offset":1},{"src_nuid":48,"dst_nuid":37,"src_slot":"value","dst_slot":"value"}],"registers":[{"id":"float","dt":8}]},"dyn_in":[{"name":"Speed","dt":0,"uid":6,"index":0,"type":0,"is_connected":true},{"name":"Min","dt":0,"uid":8,"index":1,"type":0,"is_connected":true},{"name":"Max","dt":0,"uid":9,"index":2,"type":0,"is_connected":true}],"dyn_out":[{"name":"float","dt":0,"uid":7,"index":0,"type":1}]},{"plugin":"slider_float_generator","x":457,"y":426,"uid":17,"state":{"val":0.42,"min":0,"max":1},"title":"speed"},{"plugin":"const_float_generator","x":456,"y":490,"uid":18,"state":{"val":0},"title":"Min"},{"plugin":"const_float_generator","x":544,"y":490,"uid":19,"state":{"val":1},"title":"Max"}],"conns":[{"src_nuid":17,"dst_nuid":16,"src_slot":"value","dst_slot":0,"dst_dyn":true},{"src_nuid":19,"dst_nuid":16,"src_slot":"value","dst_slot":2,"dst_dyn":true},{"src_nuid":18,"dst_nuid":16,"src_slot":"value","dst_slot":1,"dst_dyn":true}]}} ================================================ FILE: browser/patches/time_shaky_random.json ================================================ {"abs_t":1672.846,"active_graph":0,"graph_uid":46,"root":{"node_uid":36,"uid":0,"parent_uid":-1,"open":true,"nodes":[{"plugin":"random_float_generator","x":436,"y":351,"uid":25,"open":false},{"plugin":"graph","x":311,"y":364,"uid":26,"open":false,"dsid":5,"state":{"enabled":true,"input_sids":{"13":1,"14":2,"15":3},"output_sids":{"12":0}},"title":"Oscillate","graph":{"node_uid":25,"uid":44,"parent_uid":0,"open":true,"nodes":[{"plugin":"sine_modulator","x":291,"y":9,"uid":1},{"plugin":"subtract_modulator","x":405,"y":124,"uid":4},{"plugin":"convert_oscilator_unit_modulator","x":370,"y":9,"uid":5},{"plugin":"multiply_modulator","x":494,"y":9,"uid":6},{"plugin":"add_modulator","x":577,"y":64,"uid":7},{"plugin":"output_proxy","x":660,"y":64,"uid":12,"dsid":12,"state":{"slot_id":0},"title":"float","dyn_in":[{"name":"input","dt":0,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"input_proxy","x":25,"y":67,"uid":13,"dsid":10,"state":{"slot_id":0},"title":"Speed","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":279,"y":119,"uid":14,"dsid":10,"state":{"slot_id":0},"title":"Min","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":345,"y":124,"uid":15,"dsid":10,"state":{"slot_id":0},"title":"Max","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"delta_t_generator","x":8,"y":9,"uid":18},{"plugin":"accumulate_modulator","x":187,"y":9,"uid":19,"state":{"value":36.434169999999725}},{"plugin":"multiply_modulator","x":102,"y":9,"uid":20},{"plugin":"const_float_generator","x":106,"y":111,"uid":24,"state":{"val":0},"title":"reset"}],"conns":[{"src_nuid":1,"dst_nuid":5,"src_slot":"value","dst_slot":"value"},{"src_nuid":4,"dst_nuid":6,"src_slot":"result","dst_slot":"b"},{"src_nuid":5,"dst_nuid":6,"src_slot":"value","dst_slot":"a"},{"src_nuid":6,"dst_nuid":7,"src_slot":"result","dst_slot":"a"},{"src_nuid":7,"dst_nuid":12,"src_slot":"result","dst_slot":0,"dst_connected":true,"dst_dyn":true,"offset":1},{"src_nuid":14,"dst_nuid":7,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true},{"src_nuid":14,"dst_nuid":4,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true,"offset":1},{"src_nuid":15,"dst_nuid":4,"src_slot":0,"dst_slot":"a","src_connected":true,"src_dyn":true},{"src_nuid":18,"dst_nuid":20,"src_slot":"seconds","dst_slot":"a"},{"src_nuid":20,"dst_nuid":19,"src_slot":"result","dst_slot":"value"},{"src_nuid":19,"dst_nuid":1,"src_slot":"value","dst_slot":"time"},{"src_nuid":13,"dst_nuid":20,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true},{"src_nuid":24,"dst_nuid":19,"src_slot":"value","dst_slot":"reset"}]},"dyn_in":[{"name":"Speed","dt":0,"uid":1,"index":0,"type":0,"is_connected":true,"connected":false},{"name":"Min","dt":0,"uid":2,"index":1,"type":0,"is_connected":true,"connected":false},{"name":"Max","dt":0,"uid":3,"index":2,"type":0,"is_connected":true,"connected":false}],"dyn_out":[{"name":"float","dt":0,"uid":0,"index":0,"type":1}]},{"plugin":"graph","x":311,"y":403,"uid":27,"open":false,"dsid":5,"state":{"enabled":true,"input_sids":{"13":1,"14":2,"15":3},"output_sids":{"12":0}},"title":"Oscillate","graph":{"node_uid":25,"uid":45,"parent_uid":0,"open":true,"nodes":[{"plugin":"sine_modulator","x":291,"y":9,"uid":1},{"plugin":"subtract_modulator","x":405,"y":124,"uid":4},{"plugin":"convert_oscilator_unit_modulator","x":370,"y":9,"uid":5},{"plugin":"multiply_modulator","x":494,"y":9,"uid":6},{"plugin":"add_modulator","x":577,"y":64,"uid":7},{"plugin":"output_proxy","x":660,"y":64,"uid":12,"dsid":13,"state":{"slot_id":0},"title":"float","dyn_in":[{"name":"input","dt":0,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"input_proxy","x":25,"y":67,"uid":13,"dsid":11,"state":{"slot_id":0},"title":"Speed","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":279,"y":119,"uid":14,"dsid":11,"state":{"slot_id":0},"title":"Min","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":345,"y":124,"uid":15,"dsid":11,"state":{"slot_id":0},"title":"Max","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"delta_t_generator","x":8,"y":9,"uid":18},{"plugin":"accumulate_modulator","x":187,"y":9,"uid":19,"state":{"value":46.93829999999937}},{"plugin":"multiply_modulator","x":102,"y":9,"uid":20},{"plugin":"const_float_generator","x":106,"y":111,"uid":24,"state":{"val":0},"title":"reset"}],"conns":[{"src_nuid":1,"dst_nuid":5,"src_slot":"value","dst_slot":"value"},{"src_nuid":4,"dst_nuid":6,"src_slot":"result","dst_slot":"b"},{"src_nuid":5,"dst_nuid":6,"src_slot":"value","dst_slot":"a"},{"src_nuid":6,"dst_nuid":7,"src_slot":"result","dst_slot":"a"},{"src_nuid":7,"dst_nuid":12,"src_slot":"result","dst_slot":0,"dst_connected":true,"dst_dyn":true,"offset":1},{"src_nuid":14,"dst_nuid":7,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true},{"src_nuid":14,"dst_nuid":4,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true,"offset":1},{"src_nuid":15,"dst_nuid":4,"src_slot":0,"dst_slot":"a","src_connected":true,"src_dyn":true},{"src_nuid":18,"dst_nuid":20,"src_slot":"seconds","dst_slot":"a"},{"src_nuid":20,"dst_nuid":19,"src_slot":"result","dst_slot":"value"},{"src_nuid":19,"dst_nuid":1,"src_slot":"value","dst_slot":"time"},{"src_nuid":13,"dst_nuid":20,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true},{"src_nuid":24,"dst_nuid":19,"src_slot":"value","dst_slot":"reset"}]},"dyn_in":[{"name":"Speed","dt":0,"uid":1,"index":0,"type":0,"is_connected":true},{"name":"Min","dt":0,"uid":2,"index":1,"type":0,"is_connected":true},{"name":"Max","dt":0,"uid":3,"index":2,"type":0,"is_connected":true}],"dyn_out":[{"name":"float","dt":0,"uid":0,"index":0,"type":1}]},{"plugin":"slider_float_generator","x":71,"y":445,"uid":28,"state":{"val":0.97,"min":0,"max":1},"title":"speed"},{"plugin":"const_float_generator","x":71,"y":512,"uid":29,"state":{"val":0.3},"title":"Min"},{"plugin":"const_float_generator","x":167,"y":512,"uid":30,"state":{"val":0.5},"title":"Max"},{"plugin":"const_float_generator","x":409,"y":415,"uid":31,"state":{"val":0.989}},{"plugin":"lowpass_filter_modulator","x":541,"y":349,"uid":32},{"plugin":"slider_float_generator","x":66,"y":301,"uid":33,"state":{"val":0.97,"min":0,"max":1},"title":"speed"},{"plugin":"const_float_generator","x":66,"y":376,"uid":34,"state":{"val":0.1},"title":"Min"},{"plugin":"const_float_generator","x":162,"y":376,"uid":35,"state":{"val":0.3},"title":"Max"}],"conns":[{"src_nuid":26,"dst_nuid":25,"src_slot":0,"dst_slot":"min","src_dyn":true},{"src_nuid":27,"dst_nuid":25,"src_slot":0,"dst_slot":"max","src_dyn":true},{"src_nuid":25,"dst_nuid":32,"src_slot":"value","dst_slot":"value"},{"src_nuid":28,"dst_nuid":27,"src_slot":"value","dst_slot":0,"dst_dyn":true},{"src_nuid":29,"dst_nuid":27,"src_slot":"value","dst_slot":1,"dst_dyn":true},{"src_nuid":30,"dst_nuid":27,"src_slot":"value","dst_slot":2,"dst_dyn":true},{"src_nuid":31,"dst_nuid":32,"src_slot":"value","dst_slot":"amount"},{"src_nuid":33,"dst_nuid":26,"src_slot":"value","dst_slot":0,"dst_connected":false,"dst_dyn":true},{"src_nuid":34,"dst_nuid":26,"src_slot":"value","dst_slot":1,"dst_connected":false,"dst_dyn":true},{"src_nuid":35,"dst_nuid":26,"src_slot":"value","dst_slot":2,"dst_connected":false,"dst_dyn":true}]}} ================================================ FILE: browser/patches/time_timer_from_0_to_1 (1).json ================================================ { "abs_t": 17.99, "active_graph": 2, "graph_uid": 3, "root": { "node_uid": 6, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 654, "y": 448, "uid": 4, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "7": 1 }, "output_sids": { "6": 0 } }, "title": "Time", "graph": { "node_uid": 15, "uid": 2, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "delta_t_generator", "x": 251, "y": 460, "uid": 0 }, { "plugin": "accumulate_modulator", "x": 425, "y": 460, "uid": 1, "state": { "value": 9.003499999999939 } }, { "plugin": "multiply_modulator", "x": 345, "y": 460, "uid": 2 }, { "plugin": "output_proxy", "x": 836, "y": 455, "uid": 6, "dsid": 7, "state": { "slot_id": 0 }, "title": "time", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 267, "y": 519, "uid": 7, "dsid": 5, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 341, "y": 546, "uid": 8, "state": { "val": 0 } }, { "plugin": "float_display", "x": 743, "y": 331, "uid": 9 }, { "plugin": "clamp_modulator", "x": 652, "y": 454, "uid": 10 }, { "plugin": "const_float_generator", "x": 461, "y": 610, "uid": 11, "state": { "val": 1 } }, { "plugin": "const_float_generator", "x": 457, "y": 549, "uid": 12, "state": { "val": 0 } } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 10, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 12, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 10, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 1, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "time", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 452, "y": 468, "uid": 5, "state": { "val": 0.5, "min": 0, "max": 1 }, "title": "Speed" } ], "conns": [ { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/time_timer_from_0_to_1 (2).json ================================================ { "abs_t": 10.327, "active_graph": 0, "graph_uid": 3, "root": { "node_uid": 7, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 654, "y": 448, "uid": 4, "dsid": 2, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "7": 1 }, "output_sids": { "6": 0 } }, "title": "Time", "graph": { "node_uid": 15, "uid": 2, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "delta_t_generator", "x": 251, "y": 460, "uid": 0 }, { "plugin": "accumulate_modulator", "x": 461, "y": 459, "uid": 1, "state": { "value": -2.620049999999984 } }, { "plugin": "multiply_modulator", "x": 345, "y": 460, "uid": 2 }, { "plugin": "output_proxy", "x": 836, "y": 455, "uid": 6, "dsid": 7, "state": { "slot_id": 0 }, "title": "time", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 267, "y": 519, "uid": 7, "dsid": 5, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 341, "y": 546, "uid": 8, "state": { "val": 1 } }, { "plugin": "float_display", "x": 743, "y": 331, "uid": 9 }, { "plugin": "clamp_modulator", "x": 652, "y": 454, "uid": 10 }, { "plugin": "const_float_generator", "x": 461, "y": 610, "uid": 11, "state": { "val": 1 } }, { "plugin": "const_float_generator", "x": 457, "y": 549, "uid": 12, "state": { "val": 0 } } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 10, "src_slot": 0, "dst_slot": 2 }, { "src_nuid": 12, "dst_nuid": 10, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 10, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 1, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "time", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 452, "y": 468, "uid": 5, "state": { "val": -0.35, "min": -0.5, "max": 0 }, "title": "Speed" }, { "plugin": "float_display", "x": 813, "y": 394, "uid": 6 } ], "conns": [ { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "src_dyn": true } ] } } ================================================ FILE: browser/patches/time_timer_from_0_to_1.json ================================================ {"abs_t":5.784,"active_graph":0,"graph_uid":4,"root":{"node_uid":8,"uid":0,"parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":657,"y":482,"uid":0,"dsid":5,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"rt_filter":9729,"input_sids":{"19":2,"30":3,"32":4},"output_sids":{"6":0}},"title":"Timer and stop","graph":{"node_uid":33,"uid":1,"parent_uid":0,"open":true,"nodes":[{"plugin":"output_proxy","x":817,"y":347,"uid":6,"dsid":8,"state":{"slot_id":0},"title":"time","dyn_in":[{"name":"input","dt":0,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"delta_t_generator","x":68,"y":274,"uid":17},{"plugin":"multiply_modulator","x":199,"y":272,"uid":18},{"plugin":"input_proxy","x":122,"y":333,"uid":19,"dsid":8,"state":{"slot_id":0},"title":"Speed","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"register_local_read","x":216,"y":389,"uid":20,"dsid":1,"state":{"slot_id":0},"title":"float","dyn_out":[{"name":"value","dt":0,"desc":"","uid":0,"index":0,"type":1}]},{"plugin":"register_local_write","x":813,"y":237,"uid":21,"dsid":1,"state":{"slot_id":0},"title":"float","dyn_in":[{"name":"value","dt":0,"desc":"","uid":0,"index":0,"type":0,"is_connected":true}]},{"plugin":"add_modulator","x":324,"y":302,"uid":22},{"plugin":"if_else_modulator","x":445,"y":322,"uid":23},{"plugin":"const_float_generator","x":328,"y":430,"uid":24,"state":{"val":0},"title":"Reset"},{"plugin":"initialise_generator","x":359,"y":236,"uid":25},{"plugin":"clamp_modulator","x":701,"y":347,"uid":26},{"plugin":"float_display","x":882,"y":300,"uid":29},{"plugin":"input_proxy","x":608,"y":495,"uid":30,"dsid":1,"state":{"slot_id":0},"title":"Min","dyn_out":[{"name":"input","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":606,"y":551,"uid":32,"dsid":2,"state":{"slot_id":0},"title":"Max","dyn_out":[{"name":"input","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]}],"conns":[{"src_nuid":17,"dst_nuid":18,"src_slot":"seconds","dst_slot":"a"},{"src_nuid":19,"dst_nuid":18,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true},{"src_nuid":18,"dst_nuid":22,"src_slot":"result","dst_slot":"a"},{"src_nuid":20,"dst_nuid":22,"src_slot":0,"dst_slot":"b","src_dyn":true},{"src_nuid":22,"dst_nuid":23,"src_slot":"result","dst_slot":"false value"},{"src_nuid":25,"dst_nuid":23,"src_slot":"bool","dst_slot":"condition"},{"src_nuid":24,"dst_nuid":23,"src_slot":"value","dst_slot":"true value"},{"src_nuid":23,"dst_nuid":26,"src_slot":"value","dst_slot":"value"},{"src_nuid":26,"dst_nuid":6,"src_slot":"result","dst_slot":0,"dst_connected":true,"dst_dyn":true,"offset":1},{"src_nuid":26,"dst_nuid":29,"src_slot":"result","dst_slot":"float","offset":2},{"src_nuid":23,"dst_nuid":21,"src_slot":"value","dst_slot":0,"dst_dyn":true,"offset":1},{"src_nuid":30,"dst_nuid":26,"src_slot":0,"dst_slot":"min","src_connected":true,"src_dyn":true},{"src_nuid":32,"dst_nuid":26,"src_slot":0,"dst_slot":"max","src_connected":true,"src_dyn":true}],"registers":[{"id":"float","dt":8}]},"dyn_in":[{"name":"Speed","dt":0,"uid":2,"index":0,"type":0,"is_connected":true},{"name":"Min","dt":0,"uid":3,"index":1,"type":0,"is_connected":true},{"name":"Max","dt":0,"uid":4,"index":2,"type":0,"is_connected":true}],"dyn_out":[{"name":"time","dt":0,"uid":0,"index":0,"type":1}]},{"plugin":"slider_float_generator","x":460,"y":482,"uid":1,"state":{"val":0.5,"min":0,"max":1},"title":"Speed"},{"plugin":"const_float_generator","x":550,"y":545,"uid":2,"state":{"val":1},"title":"Maximum"},{"plugin":"const_float_generator","x":460,"y":545,"uid":3,"state":{"val":0},"title":"Minimum"}],"conns":[{"src_nuid":1,"dst_nuid":0,"src_slot":"value","dst_slot":0,"dst_dyn":true},{"src_nuid":3,"dst_nuid":0,"src_slot":"value","dst_slot":1,"dst_dyn":true},{"src_nuid":2,"dst_nuid":0,"src_slot":"value","dst_slot":2,"dst_dyn":true}]}} ================================================ FILE: browser/patches/time_timer_from_1_to_0.json ================================================ {"abs_t":10.327,"active_graph":0,"graph_uid":3,"root":{"node_uid":7,"uid":0,"parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":654,"y":448,"uid":4,"dsid":2,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"rt_filter":9729,"input_sids":{"7":1},"output_sids":{"6":0}},"title":"Time","graph":{"node_uid":15,"uid":2,"parent_uid":0,"open":true,"nodes":[{"plugin":"delta_t_generator","x":251,"y":460,"uid":0},{"plugin":"accumulate_modulator","x":461,"y":459,"uid":1,"state":{"value":-2.620049999999984}},{"plugin":"multiply_modulator","x":345,"y":460,"uid":2},{"plugin":"output_proxy","x":836,"y":455,"uid":6,"dsid":7,"state":{"slot_id":0},"title":"time","dyn_in":[{"name":"input","dt":0,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"input_proxy","x":267,"y":519,"uid":7,"dsid":5,"state":{"slot_id":0},"title":"Speed","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"const_float_generator","x":341,"y":546,"uid":8,"state":{"val":1}},{"plugin":"float_display","x":743,"y":331,"uid":9},{"plugin":"clamp_modulator","x":652,"y":454,"uid":10},{"plugin":"const_float_generator","x":461,"y":610,"uid":11,"state":{"val":1}},{"plugin":"const_float_generator","x":457,"y":549,"uid":12,"state":{"val":0}}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"seconds","dst_slot":"a"},{"src_nuid":2,"dst_nuid":1,"src_slot":"result","dst_slot":"value"},{"src_nuid":7,"dst_nuid":2,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true},{"src_nuid":8,"dst_nuid":1,"src_slot":"value","dst_slot":"reset"},{"src_nuid":11,"dst_nuid":10,"src_slot":"value","dst_slot":"max"},{"src_nuid":12,"dst_nuid":10,"src_slot":"value","dst_slot":"min"},{"src_nuid":10,"dst_nuid":9,"src_slot":"result","dst_slot":"float"},{"src_nuid":10,"dst_nuid":6,"src_slot":"result","dst_slot":0,"dst_connected":true,"dst_dyn":true,"offset":1},{"src_nuid":1,"dst_nuid":10,"src_slot":"value","dst_slot":"value"}]},"dyn_in":[{"name":"Speed","dt":0,"uid":1,"index":0,"type":0,"is_connected":true}],"dyn_out":[{"name":"time","dt":0,"uid":0,"index":0,"type":1}]},{"plugin":"slider_float_generator","x":452,"y":468,"uid":5,"state":{"val":-0.35,"min":-0.5,"max":0},"title":"Speed"},{"plugin":"float_display","x":813,"y":394,"uid":6}],"conns":[{"src_nuid":5,"dst_nuid":4,"src_slot":"value","dst_slot":0,"dst_dyn":true},{"src_nuid":4,"dst_nuid":6,"src_slot":0,"dst_slot":"float","src_dyn":true}]}} ================================================ FILE: browser/patches/transform_circular_movement_to_xy.json ================================================ { "abs_t": 9.124, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 3, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 468, "y": 206, "uid": 0, "dsid": 6, "state": { "enabled": true, "input_sids": { "11": 1, "19": 2 }, "output_sids": { "21": 4, "22": 5 } }, "title": "Circular movement", "graph": { "node_uid": 23, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "const_float_generator", "x": 338, "y": 416, "uid": 1, "state": { "val": 0.25 } }, { "plugin": "sine_modulator", "x": 476, "y": 146, "uid": 2 }, { "plugin": "multiply_modulator", "x": 292, "y": 177, "uid": 6 }, { "plugin": "delta_t_generator", "x": 212, "y": 177, "uid": 8 }, { "plugin": "accumulate_modulator", "x": 372, "y": 177, "uid": 9, "state": { "value": -1160.7568400000366 } }, { "plugin": "input_proxy", "x": 141, "y": 270, "uid": 11, "dsid": 2, "state": { "slot_id": 0 }, "title": "speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "cosine_modulator", "x": 486, "y": 230, "uid": 12 }, { "plugin": "multiply_modulator", "x": 567, "y": 143, "uid": 16 }, { "plugin": "multiply_modulator", "x": 558, "y": 225, "uid": 17 }, { "plugin": "input_proxy", "x": 570, "y": 391, "uid": 19, "dsid": 2, "state": { "slot_id": 0 }, "title": "radius", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 664, "y": 145, "uid": 21, "dsid": 1, "state": { "slot_id": 0 }, "title": "x", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "output_proxy", "x": 669, "y": 227, "uid": 22, "dsid": 1, "state": { "slot_id": 0 }, "title": "y", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 9, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 11, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 2, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 12, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 19, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 16, "dst_nuid": 21, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 17, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "radius", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "x", "dt": 0, "uid": 4, "index": 0, "type": 1 }, { "name": "y", "dt": 0, "uid": 5, "index": 1, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 271, "y": 209, "uid": 1, "state": { "val": 0.44, "min": -2, "max": 2 }, "title": "Speed" }, { "plugin": "slider_float_generator", "x": 271, "y": 294, "uid": 2, "state": { "val": 1.1, "min": 0, "max": 10 }, "title": "Radius" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/util_1_step_stepsequencer.json ================================================ {"abs_t":0,"active_graph":0,"graph_uid":3,"root":{"node_uid":3,"uid":0,"parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":667,"y":200,"uid":0,"dsid":17,"state":{"enabled":true,"input_sids":{"36":13,"38":15,"39":16},"output_sids":{"27":6}},"title":"1 Step sequencer","graph":{"node_uid":40,"uid":1,"parent_uid":0,"open":true,"nodes":[{"plugin":"graph","x":570,"y":258,"uid":8,"dsid":5,"state":{"enabled":true,"input_sids":{"3":0,"4":1,"6":2,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":2,"parent_uid":1,"open":true,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1},{"plugin":"and_modulator","x":516,"y":256,"uid":2},{"plugin":"input_proxy","x":287,"y":223,"uid":3,"dsid":68,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":285,"uid":4,"dsid":68,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":290,"y":353,"uid":6,"dsid":68,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":68,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":68,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":6,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true},{"name":"clock","dt":0,"uid":2,"index":2,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":3,"index":3,"type":0,"is_connected":true}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"output_proxy","x":735,"y":284,"uid":27,"dsid":51,"state":{"slot_id":0},"title":"Scene","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"input_proxy","x":327,"y":314,"uid":36,"dsid":49,"state":{"slot_id":0},"title":"Time","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":448,"y":239,"uid":38,"dsid":51,"state":{"slot_id":0},"title":"Step 0","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":439,"y":355,"uid":39,"dsid":53,"state":{"slot_id":0},"title":"Step 1","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]}],"conns":[{"src_nuid":8,"dst_nuid":27,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":36,"dst_nuid":8,"src_slot":0,"dst_slot":0,"src_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":36,"dst_nuid":8,"src_slot":0,"dst_slot":2,"src_connected":true,"src_dyn":true,"dst_dyn":true,"offset":1},{"src_nuid":38,"dst_nuid":8,"src_slot":0,"dst_slot":1,"src_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":39,"dst_nuid":8,"src_slot":0,"dst_slot":3,"src_connected":true,"src_dyn":true,"dst_dyn":true}]},"dyn_in":[{"name":"Time","dt":0,"uid":13,"index":0,"type":0,"is_connected":false},{"name":"Step 0","dt":0,"uid":15,"index":1,"type":0,"is_connected":true},{"name":"Step 1","dt":0,"uid":16,"index":2,"type":0,"is_connected":true}],"dyn_out":[{"name":"Scene","dt":7,"uid":6,"index":0,"type":1}]},{"plugin":"const_float_generator","x":548,"y":261,"uid":1,"state":{"val":2},"title":"Scene off"},{"plugin":"const_float_generator","x":548,"y":207,"uid":2,"state":{"val":0},"title":"Scene on"}],"conns":[{"src_nuid":2,"dst_nuid":0,"src_slot":"value","dst_slot":1,"dst_dyn":true},{"src_nuid":1,"dst_nuid":0,"src_slot":"value","dst_slot":2,"dst_dyn":true}]}} ================================================ FILE: browser/patches/util_4_step_stepsequencer.json ================================================ {"abs_t":661.651,"active_graph":0,"graph_uid":246,"root":{"node_uid":153,"uid":0,"parent_uid":-1,"nodes":[{"plugin":"graph","x":324,"y":86,"uid":140,"dsid":13,"state":{"enabled":true,"input_sids":{"21":0,"22":1,"23":2,"24":3,"25":4,"34":11,"35":12},"output_sids":{"27":6,"28":7,"29":8,"30":9,"31":10}},"title":"Stepsequencer","graph":{"node_uid":36,"uid":178,"parent_uid":0,"nodes":[{"plugin":"clock_generator","x":113,"y":297,"uid":1},{"plugin":"modulate_modulator","x":264,"y":275,"uid":6},{"plugin":"graph","x":570,"y":258,"uid":8,"dsid":5,"state":{"enabled":true,"input_sids":{"3":0,"4":1,"6":2,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":186,"parent_uid":178,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0,"state":true},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1,"state":true},{"plugin":"and_modulator","x":516,"y":256,"uid":2,"state":true},{"plugin":"input_proxy","x":287,"y":223,"uid":3,"dsid":19,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":285,"uid":4,"dsid":19,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":290,"y":353,"uid":6,"dsid":19,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":19,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":19,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":6,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true},{"name":"clock","dt":0,"uid":2,"index":2,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":3,"index":3,"type":0,"is_connected":true}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"graph","x":569,"y":393,"uid":9,"dsid":5,"state":{"enabled":true,"input_sids":{"3":0,"4":1,"6":2,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":187,"parent_uid":178,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1,"state":true},{"plugin":"and_modulator","x":516,"y":256,"uid":2},{"plugin":"input_proxy","x":287,"y":223,"uid":3,"dsid":20,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":285,"uid":4,"dsid":20,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":290,"y":353,"uid":6,"dsid":20,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":20,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":20,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":6,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true},{"name":"clock","dt":0,"uid":2,"index":2,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":3,"index":3,"type":0,"is_connected":true}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"graph","x":568,"y":527,"uid":12,"dsid":5,"state":{"enabled":true,"input_sids":{"3":0,"4":1,"6":2,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":195,"parent_uid":178,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1,"state":true},{"plugin":"and_modulator","x":516,"y":256,"uid":2},{"plugin":"input_proxy","x":287,"y":223,"uid":3,"dsid":21,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":285,"uid":4,"dsid":21,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":290,"y":353,"uid":6,"dsid":21,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":21,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":21,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":6,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true},{"name":"clock","dt":0,"uid":2,"index":2,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":3,"index":3,"type":0,"is_connected":true}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"graph","x":565,"y":662,"uid":20,"dsid":5,"state":{"enabled":true,"input_sids":{"3":0,"4":1,"6":2,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":208,"parent_uid":178,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1,"state":true},{"plugin":"and_modulator","x":516,"y":256,"uid":2},{"plugin":"input_proxy","x":287,"y":223,"uid":3,"dsid":20,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":285,"uid":4,"dsid":20,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":290,"y":353,"uid":6,"dsid":20,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":20,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":20,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":6,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true},{"name":"clock","dt":0,"uid":2,"index":2,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":3,"index":3,"type":0,"is_connected":true}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"input_proxy","x":145,"y":560,"uid":21,"dsid":2,"state":{"slot_id":0},"title":"Loop point","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":464,"y":383,"uid":22,"dsid":2,"state":{"slot_id":0},"title":"Step 1","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":462,"y":511,"uid":23,"dsid":3,"state":{"slot_id":0},"title":"Step 2","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":465,"y":641,"uid":24,"dsid":3,"state":{"slot_id":0},"title":"Step 3","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":465,"y":777,"uid":25,"dsid":3,"state":{"slot_id":0},"title":"Step 4","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":706,"y":336,"uid":27,"dsid":2,"state":{"slot_id":0},"title":"scene 1","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":707,"y":419,"uid":28,"dsid":3,"state":{"slot_id":0},"title":"scene 2","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":708,"y":547,"uid":29,"dsid":3,"state":{"slot_id":0},"title":"scene 3","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":707,"y":627,"uid":30,"dsid":4,"state":{"slot_id":0},"title":"scene 4","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":183,"y":161,"uid":31,"dsid":2,"state":{"slot_id":0},"title":"Time display","dyn_in":[{"name":"input","dt":0,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"graph","x":143,"y":229,"uid":32,"dsid":2,"state":{"enabled":true,"input_sids":{"7":1},"output_sids":{"6":0}},"title":"Time","graph":{"node_uid":8,"uid":245,"parent_uid":178,"nodes":[{"plugin":"delta_t_generator","x":7,"y":7,"uid":0},{"plugin":"accumulate_modulator","x":181,"y":7,"uid":1,"state":{"value":3138.7310999999117}},{"plugin":"multiply_modulator","x":101,"y":7,"uid":2},{"plugin":"output_proxy","x":283,"y":7,"uid":6,"dsid":7,"state":{"slot_id":0},"title":"time","dyn_in":[{"name":"input","dt":0,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"input_proxy","x":23,"y":66,"uid":7,"dsid":5,"state":{"slot_id":0},"title":"Speed","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"seconds","dst_slot":"a"},{"src_nuid":2,"dst_nuid":1,"src_slot":"result","dst_slot":"value"},{"src_nuid":1,"dst_nuid":6,"src_slot":"value","dst_slot":0,"dst_connected":true,"dst_dyn":true,"offset":1},{"src_nuid":7,"dst_nuid":2,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true}]},"dyn_in":[{"name":"Speed","dt":0,"uid":1,"index":0,"type":0,"is_connected":true}],"dyn_out":[{"name":"time","dt":0,"uid":0,"index":0,"type":1}]},{"plugin":"input_proxy","x":100,"y":493,"uid":34,"dsid":2,"state":{"slot_id":0},"title":"speed","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":461,"y":216,"uid":35,"dsid":1,"state":{"slot_id":0},"title":"step 0","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]}],"conns":[{"src_nuid":6,"dst_nuid":9,"src_slot":"result","dst_slot":0,"dst_dyn":true},{"src_nuid":6,"dst_nuid":9,"src_slot":"result","dst_slot":2,"dst_dyn":true,"offset":1},{"src_nuid":6,"dst_nuid":12,"src_slot":"result","dst_slot":0,"dst_dyn":true,"offset":2},{"src_nuid":6,"dst_nuid":12,"src_slot":"result","dst_slot":2,"dst_dyn":true,"offset":3},{"src_nuid":6,"dst_nuid":8,"src_slot":"result","dst_slot":0,"dst_dyn":true,"offset":4},{"src_nuid":6,"dst_nuid":8,"src_slot":"result","dst_slot":2,"dst_dyn":true,"offset":5},{"src_nuid":6,"dst_nuid":20,"src_slot":"result","dst_slot":0,"dst_dyn":true,"offset":6},{"src_nuid":6,"dst_nuid":20,"src_slot":"result","dst_slot":2,"dst_dyn":true,"offset":7},{"src_nuid":21,"dst_nuid":6,"src_slot":0,"dst_slot":"limit","src_connected":true,"src_dyn":true},{"src_nuid":22,"dst_nuid":8,"src_slot":0,"dst_slot":3,"src_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":22,"dst_nuid":9,"src_slot":0,"dst_slot":1,"src_connected":true,"src_dyn":true,"dst_dyn":true,"offset":1},{"src_nuid":23,"dst_nuid":9,"src_slot":0,"dst_slot":3,"src_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":23,"dst_nuid":12,"src_slot":0,"dst_slot":1,"src_connected":true,"src_dyn":true,"dst_dyn":true,"offset":1},{"src_nuid":24,"dst_nuid":12,"src_slot":0,"dst_slot":3,"src_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":24,"dst_nuid":20,"src_slot":0,"dst_slot":1,"src_connected":true,"src_dyn":true,"dst_dyn":true,"offset":1},{"src_nuid":25,"dst_nuid":20,"src_slot":0,"dst_slot":3,"src_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":8,"dst_nuid":27,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":9,"dst_nuid":28,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":12,"dst_nuid":29,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":20,"dst_nuid":30,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":6,"dst_nuid":31,"src_slot":"result","dst_slot":0,"dst_connected":true,"dst_dyn":true,"offset":8},{"src_nuid":32,"dst_nuid":6,"src_slot":0,"dst_slot":"value","src_dyn":true},{"src_nuid":34,"dst_nuid":32,"src_slot":0,"dst_slot":0,"src_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":35,"dst_nuid":8,"src_slot":0,"dst_slot":1,"src_connected":true,"src_dyn":true,"dst_dyn":true}]},"dyn_in":[{"name":"Loop point","dt":0,"uid":0,"index":0,"type":0,"is_connected":true},{"name":"Step 1","dt":0,"uid":1,"index":1,"type":0,"is_connected":true},{"name":"Step 2","dt":0,"uid":2,"index":2,"type":0,"is_connected":true},{"name":"Step 3","dt":0,"uid":3,"index":3,"type":0,"is_connected":true},{"name":"Step 4","dt":0,"uid":4,"index":4,"type":0,"is_connected":true},{"name":"speed","dt":0,"uid":11,"index":5,"type":0,"is_connected":true},{"name":"step 0","dt":0,"uid":12,"index":6,"type":0,"is_connected":true}],"dyn_out":[{"name":"scene 1","dt":7,"uid":6,"index":0,"type":1},{"name":"scene 2","dt":7,"uid":7,"index":1,"type":1},{"name":"scene 3","dt":7,"uid":8,"index":2,"type":1},{"name":"scene 4","dt":7,"uid":9,"index":3,"type":1},{"name":"Time display","dt":0,"uid":10,"index":4,"type":1}]},{"plugin":"const_float_generator","x":117,"y":84,"uid":141,"state":{"val":16},"title":"Loop point"},{"plugin":"const_float_generator","x":213,"y":188,"uid":142,"state":{"val":4},"title":"Step 2 start"},{"plugin":"const_float_generator","x":213,"y":242,"uid":143,"state":{"val":8},"title":"Step 3 start"},{"plugin":"const_float_generator","x":213,"y":295,"uid":144,"state":{"val":12},"title":"Step 4 start"},{"plugin":"const_float_generator","x":213,"y":349,"uid":145,"state":{"val":16},"title":"End"},{"plugin":"float_display","x":213,"y":84,"uid":146,"title":"Time display"},{"plugin":"slider_float_generator","x":118,"y":8,"uid":151,"state":{"val":4.2,"min":0,"max":20},"title":"Speed"},{"plugin":"const_float_generator","x":213,"y":135,"uid":152,"state":{"val":0},"title":"Step 1 start"}],"conns":[{"src_nuid":141,"dst_nuid":140,"src_slot":"value","dst_slot":0,"dst_dyn":true},{"src_nuid":142,"dst_nuid":140,"src_slot":"value","dst_slot":1,"dst_dyn":true},{"src_nuid":143,"dst_nuid":140,"src_slot":"value","dst_slot":2,"dst_dyn":true},{"src_nuid":144,"dst_nuid":140,"src_slot":"value","dst_slot":3,"dst_dyn":true},{"src_nuid":145,"dst_nuid":140,"src_slot":"value","dst_slot":4,"dst_dyn":true},{"src_nuid":140,"dst_nuid":146,"src_slot":4,"dst_slot":"float","src_dyn":true},{"src_nuid":151,"dst_nuid":140,"src_slot":"value","dst_slot":5,"dst_dyn":true},{"src_nuid":152,"dst_nuid":140,"src_slot":"value","dst_slot":6,"dst_dyn":true}]}} ================================================ FILE: browser/patches/util_8_step_stepsequencer.json ================================================ { "abs_t": 11.448, "active_graph": 0, "graph_uid": 11, "root": { "node_uid": 13, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 321, "y": 123, "uid": 0, "dsid": 22, "state": { "enabled": true, "input_sids": { "21": 0, "22": 1, "23": 2, "24": 3, "34": 11, "35": 12, "36": 13, "37": 14, "38": 15, "39": 16 }, "output_sids": { "27": 6, "28": 7, "29": 8, "30": 9, "44": 17, "45": 18, "46": 19, "47": 20, "48": 21 } }, "title": "Stepsequencer", "graph": { "node_uid": 49, "uid": 1, "parent_uid": 0, "nodes": [ { "plugin": "modulate_modulator", "x": 313, "y": 841, "uid": 6 }, { "plugin": "graph", "x": 570, "y": 258, "uid": 8, "dsid": 5, "state": { "enabled": true, "input_sids": { "3": 0, "4": 1, "6": 2, "7": 3 }, "output_sids": { "8": 4 } }, "title": "more/less/and", "graph": { "node_uid": 9, "uid": 2, "parent_uid": 1, "nodes": [ { "plugin": "more_than_modulator", "x": 380, "y": 230, "uid": 0, "state": true }, { "plugin": "less_than_modulator", "x": 378, "y": 330, "uid": 1 }, { "plugin": "and_modulator", "x": 516, "y": 256, "uid": 2 }, { "plugin": "input_proxy", "x": 287, "y": 223, "uid": 3, "dsid": 20, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 285, "uid": 4, "dsid": 20, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 290, "y": 353, "uid": 6, "dsid": 20, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 418, "uid": 7, "dsid": 20, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 612, "y": 253, "uid": 8, "dsid": 20, "state": { "slot_id": 0 }, "title": "bool", "dyn_in": [ { "name": "input", "dt": 7, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "clock", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "constant", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "clock", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "constant", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "bool", "dt": 7, "uid": 4, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 569, "y": 393, "uid": 9, "dsid": 5, "state": { "enabled": true, "input_sids": { "3": 0, "4": 1, "6": 2, "7": 3 }, "output_sids": { "8": 4 } }, "title": "more/less/and", "graph": { "node_uid": 9, "uid": 3, "parent_uid": 1, "nodes": [ { "plugin": "more_than_modulator", "x": 380, "y": 230, "uid": 0, "state": true }, { "plugin": "less_than_modulator", "x": 378, "y": 330, "uid": 1 }, { "plugin": "and_modulator", "x": 516, "y": 256, "uid": 2 }, { "plugin": "input_proxy", "x": 287, "y": 223, "uid": 3, "dsid": 21, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 285, "uid": 4, "dsid": 21, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 290, "y": 353, "uid": 6, "dsid": 21, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 418, "uid": 7, "dsid": 21, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 612, "y": 253, "uid": 8, "dsid": 21, "state": { "slot_id": 0 }, "title": "bool", "dyn_in": [ { "name": "input", "dt": 7, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "clock", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "constant", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "clock", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "constant", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "bool", "dt": 7, "uid": 4, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 568, "y": 527, "uid": 12, "dsid": 5, "state": { "enabled": true, "input_sids": { "3": 0, "4": 1, "6": 2, "7": 3 }, "output_sids": { "8": 4 } }, "title": "more/less/and", "graph": { "node_uid": 9, "uid": 4, "parent_uid": 1, "nodes": [ { "plugin": "more_than_modulator", "x": 380, "y": 230, "uid": 0, "state": true }, { "plugin": "less_than_modulator", "x": 378, "y": 330, "uid": 1 }, { "plugin": "and_modulator", "x": 516, "y": 256, "uid": 2 }, { "plugin": "input_proxy", "x": 287, "y": 223, "uid": 3, "dsid": 22, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 285, "uid": 4, "dsid": 22, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 290, "y": 353, "uid": 6, "dsid": 22, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 418, "uid": 7, "dsid": 22, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 612, "y": 253, "uid": 8, "dsid": 22, "state": { "slot_id": 0 }, "title": "bool", "dyn_in": [ { "name": "input", "dt": 7, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "clock", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "constant", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "clock", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "constant", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "bool", "dt": 7, "uid": 4, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 565, "y": 662, "uid": 20, "dsid": 5, "state": { "enabled": true, "input_sids": { "3": 0, "4": 1, "6": 2, "7": 3 }, "output_sids": { "8": 4 } }, "title": "more/less/and", "graph": { "node_uid": 9, "uid": 5, "parent_uid": 1, "nodes": [ { "plugin": "more_than_modulator", "x": 380, "y": 230, "uid": 0, "state": true }, { "plugin": "less_than_modulator", "x": 378, "y": 330, "uid": 1 }, { "plugin": "and_modulator", "x": 516, "y": 256, "uid": 2 }, { "plugin": "input_proxy", "x": 287, "y": 223, "uid": 3, "dsid": 21, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 285, "uid": 4, "dsid": 21, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 290, "y": 353, "uid": 6, "dsid": 21, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 418, "uid": 7, "dsid": 21, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 612, "y": 253, "uid": 8, "dsid": 21, "state": { "slot_id": 0 }, "title": "bool", "dyn_in": [ { "name": "input", "dt": 7, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "clock", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "constant", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "clock", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "constant", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "bool", "dt": 7, "uid": 4, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 260, "y": 635, "uid": 21, "dsid": 3, "state": { "slot_id": 0 }, "title": "Loop point", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 464, "y": 383, "uid": 22, "dsid": 3, "state": { "slot_id": 0 }, "title": "Step 1", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 462, "y": 511, "uid": 23, "dsid": 4, "state": { "slot_id": 0 }, "title": "Step 2", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 465, "y": 641, "uid": 24, "dsid": 4, "state": { "slot_id": 0 }, "title": "Step 3", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 706, "y": 336, "uid": 27, "dsid": 3, "state": { "slot_id": 0 }, "title": "scene 1", "dyn_in": [ { "name": "input", "dt": 7, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "output_proxy", "x": 707, "y": 419, "uid": 28, "dsid": 4, "state": { "slot_id": 0 }, "title": "scene 2", "dyn_in": [ { "name": "input", "dt": 7, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "output_proxy", "x": 708, "y": 547, "uid": 29, "dsid": 4, "state": { "slot_id": 0 }, "title": "scene 3", "dyn_in": [ { "name": "input", "dt": 7, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "output_proxy", "x": 707, "y": 627, "uid": 30, "dsid": 5, "state": { "slot_id": 0 }, "title": "scene 4", "dyn_in": [ { "name": "input", "dt": 7, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "graph", "x": 122, "y": 208, "uid": 32, "dsid": 2, "state": { "enabled": true, "input_sids": { "7": 1 }, "output_sids": { "6": 0 } }, "title": "Time", "graph": { "node_uid": 8, "uid": 6, "parent_uid": 1, "nodes": [ { "plugin": "delta_t_generator", "x": 7, "y": 7, "uid": 0 }, { "plugin": "accumulate_modulator", "x": 181, "y": 7, "uid": 1, "state": { "value": 8901.88200999996 } }, { "plugin": "multiply_modulator", "x": 101, "y": 7, "uid": 2 }, { "plugin": "output_proxy", "x": 283, "y": 7, "uid": 6, "dsid": 8, "state": { "slot_id": 0 }, "title": "time", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 23, "y": 66, "uid": 7, "dsid": 6, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "time", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 42, "y": 280, "uid": 34, "dsid": 3, "state": { "slot_id": 0 }, "title": "speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 461, "y": 216, "uid": 35, "dsid": 2, "state": { "slot_id": 0 }, "title": "step 0", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 475, "y": 976, "uid": 36, "dsid": 4, "state": { "slot_id": 0 }, "title": "Step 5", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 473, "y": 1104, "uid": 37, "dsid": 5, "state": { "slot_id": 0 }, "title": "Step 6", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 476, "y": 1234, "uid": 38, "dsid": 5, "state": { "slot_id": 0 }, "title": "Step 7", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 472, "y": 809, "uid": 39, "dsid": 3, "state": { "slot_id": 0 }, "title": "Step 4", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 572, "y": 810, "uid": 40, "dsid": 5, "state": { "enabled": true, "input_sids": { "3": 0, "4": 1, "6": 2, "7": 3 }, "output_sids": { "8": 4 } }, "title": "more/less/and", "graph": { "node_uid": 9, "uid": 7, "parent_uid": 1, "nodes": [ { "plugin": "more_than_modulator", "x": 380, "y": 230, "uid": 0, "state": true }, { "plugin": "less_than_modulator", "x": 378, "y": 330, "uid": 1 }, { "plugin": "and_modulator", "x": 516, "y": 256, "uid": 2 }, { "plugin": "input_proxy", "x": 287, "y": 223, "uid": 3, "dsid": 21, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 285, "uid": 4, "dsid": 21, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 290, "y": 353, "uid": 6, "dsid": 21, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 418, "uid": 7, "dsid": 21, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 612, "y": 253, "uid": 8, "dsid": 21, "state": { "slot_id": 0 }, "title": "bool", "dyn_in": [ { "name": "input", "dt": 7, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "clock", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false }, { "name": "constant", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true, "connected": false }, { "name": "clock", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true, "connected": false }, { "name": "constant", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "bool", "dt": 7, "uid": 4, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 571, "y": 945, "uid": 41, "dsid": 5, "state": { "enabled": true, "input_sids": { "3": 0, "4": 1, "6": 2, "7": 3 }, "output_sids": { "8": 4 } }, "title": "more/less/and", "graph": { "node_uid": 9, "uid": 8, "parent_uid": 1, "nodes": [ { "plugin": "more_than_modulator", "x": 380, "y": 230, "uid": 0, "state": true }, { "plugin": "less_than_modulator", "x": 378, "y": 330, "uid": 1 }, { "plugin": "and_modulator", "x": 516, "y": 256, "uid": 2 }, { "plugin": "input_proxy", "x": 287, "y": 223, "uid": 3, "dsid": 22, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 285, "uid": 4, "dsid": 22, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 290, "y": 353, "uid": 6, "dsid": 22, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 418, "uid": 7, "dsid": 22, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 612, "y": 253, "uid": 8, "dsid": 22, "state": { "slot_id": 0 }, "title": "bool", "dyn_in": [ { "name": "input", "dt": 7, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "clock", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false }, { "name": "constant", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true, "connected": false }, { "name": "clock", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true, "connected": false }, { "name": "constant", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "bool", "dt": 7, "uid": 4, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 570, "y": 1079, "uid": 42, "dsid": 5, "state": { "enabled": true, "input_sids": { "3": 0, "4": 1, "6": 2, "7": 3 }, "output_sids": { "8": 4 } }, "title": "more/less/and", "graph": { "node_uid": 9, "uid": 9, "parent_uid": 1, "nodes": [ { "plugin": "more_than_modulator", "x": 380, "y": 230, "uid": 0, "state": true }, { "plugin": "less_than_modulator", "x": 378, "y": 330, "uid": 1 }, { "plugin": "and_modulator", "x": 516, "y": 256, "uid": 2 }, { "plugin": "input_proxy", "x": 287, "y": 223, "uid": 3, "dsid": 23, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 285, "uid": 4, "dsid": 23, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 290, "y": 353, "uid": 6, "dsid": 23, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 418, "uid": 7, "dsid": 23, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 612, "y": 253, "uid": 8, "dsid": 23, "state": { "slot_id": 0 }, "title": "bool", "dyn_in": [ { "name": "input", "dt": 7, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "clock", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false }, { "name": "constant", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true, "connected": false }, { "name": "clock", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true, "connected": false }, { "name": "constant", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "bool", "dt": 7, "uid": 4, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 567, "y": 1214, "uid": 43, "dsid": 5, "state": { "enabled": true, "input_sids": { "3": 0, "4": 1, "6": 2, "7": 3 }, "output_sids": { "8": 4 } }, "title": "more/less/and", "graph": { "node_uid": 9, "uid": 10, "parent_uid": 1, "nodes": [ { "plugin": "more_than_modulator", "x": 380, "y": 230, "uid": 0, "state": true }, { "plugin": "less_than_modulator", "x": 378, "y": 330, "uid": 1, "state": true }, { "plugin": "and_modulator", "x": 516, "y": 256, "uid": 2, "state": true }, { "plugin": "input_proxy", "x": 287, "y": 223, "uid": 3, "dsid": 22, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 285, "uid": 4, "dsid": 22, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 290, "y": 353, "uid": 6, "dsid": 22, "state": { "slot_id": 0 }, "title": "clock", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 289, "y": 418, "uid": 7, "dsid": 22, "state": { "slot_id": 0 }, "title": "constant", "dyn_out": [ { "name": "output", "dt": 0, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 612, "y": 253, "uid": 8, "dsid": 22, "state": { "slot_id": 0 }, "title": "bool", "dyn_in": [ { "name": "input", "dt": 7, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "clock", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true, "connected": false }, { "name": "constant", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": false, "connected": false }, { "name": "clock", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true, "connected": false }, { "name": "constant", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "bool", "dt": 7, "uid": 4, "index": 0, "type": 1 } ] }, { "plugin": "output_proxy", "x": 707, "y": 884, "uid": 44, "dsid": 4, "state": { "slot_id": 0 }, "title": "scene 5", "dyn_in": [ { "name": "input", "dt": 7, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "output_proxy", "x": 708, "y": 967, "uid": 45, "dsid": 5, "state": { "slot_id": 0 }, "title": "scene 6", "dyn_in": [ { "name": "input", "dt": 7, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "output_proxy", "x": 709, "y": 1095, "uid": 46, "dsid": 5, "state": { "slot_id": 0 }, "title": "scene 7", "dyn_in": [ { "name": "input", "dt": 7, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "output_proxy", "x": 714, "y": 1240, "uid": 47, "dsid": 6, "state": { "slot_id": 0 }, "title": "scene 8", "dyn_in": [ { "name": "input", "dt": 7, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "output_proxy", "x": 265, "y": 169, "uid": 48, "dsid": 4, "state": { "slot_id": 0 }, "title": "Time display", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 6, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 9, "src_slot": 0, "dst_slot": 2, "dst_dyn": true, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_dyn": true, "offset": 2 }, { "src_nuid": 6, "dst_nuid": 12, "src_slot": 0, "dst_slot": 2, "dst_dyn": true, "offset": 3 }, { "src_nuid": 6, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "dst_dyn": true, "offset": 4 }, { "src_nuid": 6, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "dst_dyn": true, "offset": 5 }, { "src_nuid": 6, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0, "dst_dyn": true, "offset": 6 }, { "src_nuid": 6, "dst_nuid": 20, "src_slot": 0, "dst_slot": 2, "dst_dyn": true, "offset": 7 }, { "src_nuid": 21, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 22, "dst_nuid": 8, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 22, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 9, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 23, "dst_nuid": 12, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 24, "dst_nuid": 12, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 24, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 8, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 9, "dst_nuid": 28, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 12, "dst_nuid": 29, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 20, "dst_nuid": 30, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 32, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 34, "dst_nuid": 32, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 35, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 39, "dst_nuid": 20, "src_slot": 0, "dst_slot": 3, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 39, "dst_nuid": 40, "src_slot": 0, "dst_slot": 1, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 36, "dst_nuid": 40, "src_slot": 0, "dst_slot": 3, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 36, "dst_nuid": 41, "src_slot": 0, "dst_slot": 1, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 37, "dst_nuid": 41, "src_slot": 0, "dst_slot": 3, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 37, "dst_nuid": 42, "src_slot": 0, "dst_slot": 1, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 38, "dst_nuid": 42, "src_slot": 0, "dst_slot": 3, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 21, "dst_nuid": 43, "src_slot": 0, "dst_slot": 3, "src_connected": true, "dst_connected": false, "src_dyn": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 40, "src_slot": 0, "dst_slot": 0, "dst_connected": false, "dst_dyn": true, "offset": 8 }, { "src_nuid": 6, "dst_nuid": 40, "src_slot": 0, "dst_slot": 2, "dst_connected": false, "dst_dyn": true, "offset": 9 }, { "src_nuid": 6, "dst_nuid": 41, "src_slot": 0, "dst_slot": 0, "dst_connected": false, "dst_dyn": true, "offset": 10 }, { "src_nuid": 6, "dst_nuid": 41, "src_slot": 0, "dst_slot": 2, "dst_connected": false, "dst_dyn": true, "offset": 11 }, { "src_nuid": 6, "dst_nuid": 42, "src_slot": 0, "dst_slot": 0, "dst_connected": false, "dst_dyn": true, "offset": 12 }, { "src_nuid": 6, "dst_nuid": 42, "src_slot": 0, "dst_slot": 2, "dst_connected": false, "dst_dyn": true, "offset": 13 }, { "src_nuid": 6, "dst_nuid": 43, "src_slot": 0, "dst_slot": 0, "dst_connected": false, "dst_dyn": true, "offset": 14 }, { "src_nuid": 6, "dst_nuid": 43, "src_slot": 0, "dst_slot": 2, "dst_connected": false, "dst_dyn": true, "offset": 15 }, { "src_nuid": 40, "dst_nuid": 44, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 41, "dst_nuid": 45, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 42, "dst_nuid": 46, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 43, "dst_nuid": 47, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 48, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 16 } ] }, "dyn_in": [ { "name": "Loop point", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "Step 1", "dt": 0, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "Step 2", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "Step 3", "dt": 0, "uid": 3, "index": 3, "type": 0, "is_connected": true }, { "name": "speed", "dt": 0, "uid": 11, "index": 4, "type": 0, "is_connected": true }, { "name": "step 0", "dt": 0, "uid": 12, "index": 5, "type": 0, "is_connected": true }, { "name": "Step 5", "dt": 0, "uid": 13, "index": 6, "type": 0 }, { "name": "Step 6", "dt": 0, "uid": 14, "index": 7, "type": 0 }, { "name": "Step 7", "dt": 0, "uid": 15, "index": 8, "type": 0 }, { "name": "Step 4", "dt": 0, "uid": 16, "index": 9, "type": 0 } ], "dyn_out": [ { "name": "scene 1", "dt": 7, "uid": 6, "index": 0, "type": 1 }, { "name": "scene 2", "dt": 7, "uid": 7, "index": 1, "type": 1 }, { "name": "scene 3", "dt": 7, "uid": 8, "index": 2, "type": 1 }, { "name": "scene 4", "dt": 7, "uid": 9, "index": 3, "type": 1 }, { "name": "scene 5", "dt": 7, "uid": 17, "index": 4, "type": 1 }, { "name": "scene 6", "dt": 7, "uid": 18, "index": 5, "type": 1 }, { "name": "scene 7", "dt": 7, "uid": 19, "index": 6, "type": 1 }, { "name": "scene 8", "dt": 7, "uid": 20, "index": 7, "type": 1 }, { "name": "Time display", "dt": 0, "uid": 21, "index": 8, "type": 1 } ] }, { "plugin": "const_float_generator", "x": 212, "y": 600, "uid": 1, "state": { "val": 8 }, "title": "Loop point" }, { "plugin": "const_float_generator", "x": 210, "y": 225, "uid": 2, "state": { "val": 1 }, "title": "Step 2 start" }, { "plugin": "const_float_generator", "x": 210, "y": 279, "uid": 3, "state": { "val": 2 }, "title": "Step 3 start" }, { "plugin": "const_float_generator", "x": 210, "y": 332, "uid": 4, "state": { "val": 3 }, "title": "Step 4 start" }, { "plugin": "float_display", "x": 210, "y": 121, "uid": 6, "title": "Time display" }, { "plugin": "slider_float_generator", "x": 115, "y": 45, "uid": 7, "state": { "val": 2.12, "min": 0, "max": 4 }, "title": "Speed" }, { "plugin": "const_float_generator", "x": 210, "y": 172, "uid": 8, "state": { "val": 0 }, "title": "Step 1 start" }, { "plugin": "const_float_generator", "x": 210, "y": 389, "uid": 9, "state": { "val": 4 }, "title": "Step 4 start" }, { "plugin": "const_float_generator", "x": 210, "y": 443, "uid": 10, "state": { "val": 5 }, "title": "Step 4 start" }, { "plugin": "const_float_generator", "x": 211, "y": 497, "uid": 11, "state": { "val": 6 }, "title": "Step 4 start" }, { "plugin": "const_float_generator", "x": 213, "y": 547, "uid": 12, "state": { "val": 7 }, "title": "Step 4 start" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "dst_dyn": true }, { "src_nuid": 7, "dst_nuid": 0, "src_slot": 0, "dst_slot": 4, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 0, "src_slot": 0, "dst_slot": 5, "dst_dyn": true }, { "src_nuid": 0, "dst_nuid": 6, "src_slot": 8, "dst_slot": 0, "src_dyn": true } ] } } ================================================ FILE: browser/patches/util_9_step_stepsequencer.json ================================================ {"abs_t":765.807,"active_graph":0,"graph_uid":348,"root":{"node_uid":76,"uid":0,"parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":420,"y":131,"uid":60,"dsid":23,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"input_sids":{"21":0,"22":1,"23":2,"24":3,"25":4,"34":11,"35":12,"44":13,"45":14,"46":15,"47":16,"48":17},"output_sids":{"27":6,"28":7,"29":8,"30":9,"31":10,"50":18,"51":19,"52":20,"53":21,"54":22}},"title":"Stepsequencer","graph":{"node_uid":55,"uid":337,"parent_uid":0,"open":true,"nodes":[{"plugin":"modulate_modulator","x":264,"y":275,"uid":6},{"plugin":"graph","x":568,"y":245,"uid":8,"dsid":5,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"input_sids":{"3":0,"4":1,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":338,"parent_uid":337,"open":true,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1},{"plugin":"and_modulator","x":516,"y":256,"uid":2},{"plugin":"input_proxy","x":201,"y":213,"uid":3,"dsid":24,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":285,"uid":4,"dsid":24,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":24,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":24,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true},{"src_nuid":3,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true,"offset":1}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":3,"index":2,"type":0,"is_connected":true}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"graph","x":567,"y":376,"uid":9,"dsid":5,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"input_sids":{"3":0,"4":1,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":339,"parent_uid":337,"open":true,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1},{"plugin":"and_modulator","x":516,"y":256,"uid":2},{"plugin":"input_proxy","x":287,"y":223,"uid":3,"dsid":25,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":285,"uid":4,"dsid":25,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":25,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":25,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true},{"src_nuid":3,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true,"offset":1}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":3,"index":2,"type":0,"is_connected":true}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"graph","x":566,"y":510,"uid":12,"dsid":5,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"input_sids":{"3":0,"4":1,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":340,"parent_uid":337,"open":true,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1},{"plugin":"and_modulator","x":516,"y":256,"uid":2},{"plugin":"input_proxy","x":287,"y":223,"uid":3,"dsid":26,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":242,"y":292,"uid":4,"dsid":26,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":26,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":26,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true},{"src_nuid":3,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true,"offset":1}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":3,"index":2,"type":0,"is_connected":true}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"graph","x":564,"y":647,"uid":20,"dsid":5,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"input_sids":{"3":0,"4":1,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":341,"parent_uid":337,"open":true,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1},{"plugin":"and_modulator","x":516,"y":256,"uid":2},{"plugin":"input_proxy","x":287,"y":223,"uid":3,"dsid":25,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":285,"uid":4,"dsid":25,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":25,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":25,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true},{"src_nuid":3,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true,"offset":1}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true},{"name":"constant","dt":0,"uid":3,"index":2,"type":0,"is_connected":true}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"input_proxy","x":145,"y":560,"uid":21,"dsid":7,"state":{"slot_id":0},"title":"Loop point","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":455,"y":379,"uid":22,"dsid":7,"state":{"slot_id":0},"title":"Step 1","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":462,"y":511,"uid":23,"dsid":8,"state":{"slot_id":0},"title":"Step 2","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":465,"y":641,"uid":24,"dsid":8,"state":{"slot_id":0},"title":"Step 3","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":463,"y":744,"uid":25,"dsid":8,"state":{"slot_id":0},"title":"Step 4","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":792,"y":307,"uid":27,"dsid":7,"state":{"slot_id":0},"title":"scene 1","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":793,"y":390,"uid":28,"dsid":8,"state":{"slot_id":0},"title":"scene 2","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":794,"y":518,"uid":29,"dsid":8,"state":{"slot_id":0},"title":"scene 3","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":793,"y":598,"uid":30,"dsid":9,"state":{"slot_id":0},"title":"scene 4","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":131,"y":185,"uid":31,"dsid":7,"state":{"slot_id":0},"title":"Time display","dyn_in":[{"name":"input","dt":0,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"graph","x":159,"y":310,"uid":32,"open":false,"dsid":2,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"input_sids":{"7":1},"output_sids":{"6":0}},"title":"Time","graph":{"node_uid":8,"uid":342,"parent_uid":337,"open":true,"nodes":[{"plugin":"delta_t_generator","x":7,"y":7,"uid":0},{"plugin":"accumulate_modulator","x":181,"y":7,"uid":1,"state":{"value":23040.66376669547}},{"plugin":"multiply_modulator","x":101,"y":7,"uid":2},{"plugin":"output_proxy","x":283,"y":7,"uid":6,"dsid":12,"state":{"slot_id":0},"title":"time","dyn_in":[{"name":"input","dt":0,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"input_proxy","x":23,"y":66,"uid":7,"dsid":10,"state":{"slot_id":0},"title":"Speed","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"seconds","dst_slot":"a"},{"src_nuid":2,"dst_nuid":1,"src_slot":"result","dst_slot":"value"},{"src_nuid":1,"dst_nuid":6,"src_slot":"value","dst_slot":0,"dst_connected":true,"dst_dyn":true,"offset":1},{"src_nuid":7,"dst_nuid":2,"src_slot":0,"dst_slot":"b","src_connected":true,"src_dyn":true}]},"dyn_in":[{"name":"Speed","dt":0,"uid":1,"index":0,"type":0,"is_connected":true}],"dyn_out":[{"name":"time","dt":0,"uid":0,"index":0,"type":1}]},{"plugin":"input_proxy","x":80,"y":301,"uid":34,"dsid":7,"state":{"slot_id":0},"title":"speed","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":461,"y":216,"uid":35,"dsid":6,"state":{"slot_id":0},"title":"step 0","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"graph","x":564,"y":778,"uid":40,"dsid":5,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"input_sids":{"3":0,"4":1,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":343,"parent_uid":337,"open":true,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1},{"plugin":"and_modulator","x":516,"y":256,"uid":2},{"plugin":"input_proxy","x":201,"y":213,"uid":3,"dsid":25,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":285,"uid":4,"dsid":25,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":25,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":25,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true},{"src_nuid":3,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true,"offset":1}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true,"connected":false},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true,"connected":false},{"name":"constant","dt":0,"uid":3,"index":2,"type":0,"is_connected":true,"connected":false}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"graph","x":563,"y":909,"uid":41,"dsid":5,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"input_sids":{"3":0,"4":1,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":344,"parent_uid":337,"open":true,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1},{"plugin":"and_modulator","x":516,"y":256,"uid":2},{"plugin":"input_proxy","x":287,"y":223,"uid":3,"dsid":26,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":285,"uid":4,"dsid":26,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":26,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":26,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true},{"src_nuid":3,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true,"offset":1}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true,"connected":false},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true,"connected":false},{"name":"constant","dt":0,"uid":3,"index":2,"type":0,"is_connected":true,"connected":false}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"graph","x":562,"y":1043,"uid":42,"dsid":5,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"input_sids":{"3":0,"4":1,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":345,"parent_uid":337,"open":true,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1},{"plugin":"and_modulator","x":516,"y":256,"uid":2},{"plugin":"input_proxy","x":287,"y":223,"uid":3,"dsid":27,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":242,"y":292,"uid":4,"dsid":27,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":27,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":27,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true},{"src_nuid":3,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true,"offset":1}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true,"connected":false},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true,"connected":false},{"name":"constant","dt":0,"uid":3,"index":2,"type":0,"is_connected":true,"connected":false}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"graph","x":560,"y":1180,"uid":43,"dsid":5,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"input_sids":{"3":0,"4":1,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":346,"parent_uid":337,"open":true,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1},{"plugin":"and_modulator","x":516,"y":256,"uid":2},{"plugin":"input_proxy","x":287,"y":223,"uid":3,"dsid":26,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":285,"uid":4,"dsid":26,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":26,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":26,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true},{"src_nuid":3,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true,"offset":1}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true,"connected":false},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true,"connected":false},{"name":"constant","dt":0,"uid":3,"index":2,"type":0,"is_connected":true,"connected":false}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"input_proxy","x":450,"y":1031,"uid":44,"dsid":8,"state":{"slot_id":0},"title":"Step 6","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":457,"y":1163,"uid":45,"dsid":9,"state":{"slot_id":0},"title":"Step 7","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":460,"y":1293,"uid":46,"dsid":9,"state":{"slot_id":0},"title":"Step 8","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":458,"y":1396,"uid":47,"dsid":9,"state":{"slot_id":0},"title":"Step 9","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":456,"y":868,"uid":48,"dsid":7,"state":{"slot_id":0},"title":"step 5","dyn_out":[{"name":"output","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"graph","x":564,"y":1319,"uid":49,"dsid":5,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"input_sids":{"3":0,"4":1,"7":3},"output_sids":{"8":4}},"title":"more/less/and","graph":{"node_uid":9,"uid":347,"parent_uid":337,"open":true,"nodes":[{"plugin":"more_than_modulator","x":380,"y":230,"uid":0},{"plugin":"less_than_modulator","x":378,"y":330,"uid":1},{"plugin":"and_modulator","x":516,"y":256,"uid":2},{"plugin":"input_proxy","x":287,"y":223,"uid":3,"dsid":27,"state":{"slot_id":0},"title":"clock","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":285,"uid":4,"dsid":27,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":289,"y":418,"uid":7,"dsid":27,"state":{"slot_id":0},"title":"constant","dyn_out":[{"name":"output","dt":0,"uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":612,"y":253,"uid":8,"dsid":27,"state":{"slot_id":0},"title":"bool","dyn_in":[{"name":"input","dt":7,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":2,"src_slot":"bool","dst_slot":"a"},{"src_nuid":1,"dst_nuid":2,"src_slot":"bool","dst_slot":"b"},{"src_nuid":3,"dst_nuid":0,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true},{"src_nuid":4,"dst_nuid":0,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":7,"dst_nuid":1,"src_slot":0,"dst_slot":"reference","src_connected":true,"src_dyn":true},{"src_nuid":2,"dst_nuid":8,"src_slot":"bool","dst_slot":0,"dst_connected":true,"dst_dyn":true},{"src_nuid":3,"dst_nuid":1,"src_slot":0,"dst_slot":"value","src_connected":true,"src_dyn":true,"offset":1}]},"dyn_in":[{"name":"clock","dt":0,"uid":0,"index":0,"type":0,"is_connected":true,"connected":false},{"name":"constant","dt":0,"uid":1,"index":1,"type":0,"is_connected":true,"connected":false},{"name":"constant","dt":0,"uid":3,"index":2,"type":0,"is_connected":true,"connected":false}],"dyn_out":[{"name":"bool","dt":7,"uid":4,"index":0,"type":1}]},{"plugin":"output_proxy","x":798,"y":795,"uid":50,"dsid":8,"state":{"slot_id":0},"title":"scene 5","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":804,"y":915,"uid":51,"dsid":9,"state":{"slot_id":0},"title":"scene 6","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":806,"y":1056,"uid":52,"dsid":9,"state":{"slot_id":0},"title":"scene 7","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":802,"y":1189,"uid":53,"dsid":10,"state":{"slot_id":0},"title":"scene 8","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":807,"y":1330,"uid":54,"dsid":11,"state":{"slot_id":0},"title":"scene 9","dyn_in":[{"name":"input","dt":7,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]}],"conns":[{"src_nuid":6,"dst_nuid":9,"src_slot":"result","dst_slot":0,"dst_dyn":true},{"src_nuid":6,"dst_nuid":12,"src_slot":"result","dst_slot":0,"dst_dyn":true,"offset":1},{"src_nuid":6,"dst_nuid":8,"src_slot":"result","dst_slot":0,"dst_dyn":true,"offset":2},{"src_nuid":6,"dst_nuid":20,"src_slot":"result","dst_slot":0,"dst_dyn":true,"offset":3},{"src_nuid":21,"dst_nuid":6,"src_slot":0,"dst_slot":"limit","src_connected":true,"src_dyn":true},{"src_nuid":22,"dst_nuid":8,"src_slot":0,"dst_slot":2,"src_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":22,"dst_nuid":9,"src_slot":0,"dst_slot":1,"src_connected":true,"src_dyn":true,"dst_dyn":true,"offset":1},{"src_nuid":23,"dst_nuid":9,"src_slot":0,"dst_slot":2,"src_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":23,"dst_nuid":12,"src_slot":0,"dst_slot":1,"src_connected":true,"src_dyn":true,"dst_dyn":true,"offset":1},{"src_nuid":24,"dst_nuid":12,"src_slot":0,"dst_slot":2,"src_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":24,"dst_nuid":20,"src_slot":0,"dst_slot":1,"src_connected":true,"src_dyn":true,"dst_dyn":true,"offset":1},{"src_nuid":25,"dst_nuid":20,"src_slot":0,"dst_slot":2,"src_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":8,"dst_nuid":27,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":9,"dst_nuid":28,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":12,"dst_nuid":29,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":20,"dst_nuid":30,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":6,"dst_nuid":31,"src_slot":"result","dst_slot":0,"dst_connected":true,"dst_dyn":true,"offset":4},{"src_nuid":32,"dst_nuid":6,"src_slot":0,"dst_slot":"value","src_dyn":true},{"src_nuid":34,"dst_nuid":32,"src_slot":0,"dst_slot":0,"src_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":35,"dst_nuid":8,"src_slot":0,"dst_slot":1,"src_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":6,"dst_nuid":40,"src_slot":"result","dst_slot":0,"dst_connected":false,"dst_dyn":true,"offset":5},{"src_nuid":6,"dst_nuid":41,"src_slot":"result","dst_slot":0,"dst_connected":false,"dst_dyn":true,"offset":6},{"src_nuid":6,"dst_nuid":42,"src_slot":"result","dst_slot":0,"dst_connected":false,"dst_dyn":true,"offset":7},{"src_nuid":6,"dst_nuid":43,"src_slot":"result","dst_slot":0,"dst_connected":false,"dst_dyn":true,"offset":8},{"src_nuid":25,"dst_nuid":40,"src_slot":0,"dst_slot":1,"src_connected":true,"dst_connected":false,"src_dyn":true,"dst_dyn":true,"offset":1},{"src_nuid":48,"dst_nuid":40,"src_slot":0,"dst_slot":2,"src_connected":true,"dst_connected":false,"src_dyn":true,"dst_dyn":true},{"src_nuid":48,"dst_nuid":41,"src_slot":0,"dst_slot":1,"src_connected":true,"dst_connected":false,"src_dyn":true,"dst_dyn":true,"offset":1},{"src_nuid":44,"dst_nuid":41,"src_slot":0,"dst_slot":2,"src_connected":true,"dst_connected":false,"src_dyn":true,"dst_dyn":true},{"src_nuid":44,"dst_nuid":42,"src_slot":0,"dst_slot":1,"src_connected":true,"dst_connected":false,"src_dyn":true,"dst_dyn":true,"offset":1},{"src_nuid":45,"dst_nuid":42,"src_slot":0,"dst_slot":2,"src_connected":true,"dst_connected":false,"src_dyn":true,"dst_dyn":true},{"src_nuid":45,"dst_nuid":43,"src_slot":0,"dst_slot":1,"src_connected":true,"dst_connected":false,"src_dyn":true,"dst_dyn":true,"offset":1},{"src_nuid":46,"dst_nuid":43,"src_slot":0,"dst_slot":2,"src_connected":true,"dst_connected":false,"src_dyn":true,"dst_dyn":true},{"src_nuid":46,"dst_nuid":49,"src_slot":0,"dst_slot":1,"src_connected":true,"dst_connected":false,"src_dyn":true,"dst_dyn":true,"offset":1},{"src_nuid":47,"dst_nuid":49,"src_slot":0,"dst_slot":2,"src_connected":true,"dst_connected":false,"src_dyn":true,"dst_dyn":true},{"src_nuid":6,"dst_nuid":49,"src_slot":"result","dst_slot":0,"dst_connected":false,"dst_dyn":true,"offset":9},{"src_nuid":40,"dst_nuid":50,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":41,"dst_nuid":51,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":42,"dst_nuid":52,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":43,"dst_nuid":53,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":49,"dst_nuid":54,"src_slot":0,"dst_slot":0,"dst_connected":true,"src_dyn":true,"dst_dyn":true}]},"dyn_in":[{"name":"Loop point","dt":0,"uid":0,"index":0,"type":0,"is_connected":true},{"name":"Step 1","dt":0,"uid":1,"index":1,"type":0,"is_connected":true},{"name":"Step 2","dt":0,"uid":2,"index":2,"type":0,"is_connected":true},{"name":"Step 3","dt":0,"uid":3,"index":3,"type":0,"is_connected":true},{"name":"Step 4","dt":0,"uid":4,"index":4,"type":0,"is_connected":true},{"name":"speed","dt":0,"uid":11,"index":5,"type":0,"is_connected":true},{"name":"step 0","dt":0,"uid":12,"index":6,"type":0,"is_connected":true},{"name":"Step 6","dt":0,"uid":13,"index":7,"type":0,"is_connected":true},{"name":"Step 7","dt":0,"uid":14,"index":8,"type":0,"is_connected":true},{"name":"Step 8","dt":0,"uid":15,"index":9,"type":0,"is_connected":true},{"name":"Step 9","dt":0,"uid":16,"index":10,"type":0,"is_connected":true},{"name":"step 5","dt":0,"uid":17,"index":11,"type":0,"is_connected":true}],"dyn_out":[{"name":"scene 1","dt":7,"uid":6,"index":0,"type":1},{"name":"scene 2","dt":7,"uid":7,"index":1,"type":1},{"name":"scene 3","dt":7,"uid":8,"index":2,"type":1},{"name":"scene 4","dt":7,"uid":9,"index":3,"type":1},{"name":"Time display","dt":0,"uid":10,"index":4,"type":1},{"name":"scene 5","dt":7,"uid":18,"index":5,"type":1},{"name":"scene 6","dt":7,"uid":19,"index":6,"type":1},{"name":"scene 7","dt":7,"uid":20,"index":7,"type":1},{"name":"scene 8","dt":7,"uid":21,"index":8,"type":1},{"name":"scene 9","dt":7,"uid":22,"index":9,"type":1}]},{"plugin":"const_float_generator","x":94,"y":455,"uid":61,"state":{"val":36},"title":"Loop point"},{"plugin":"const_float_generator","x":264,"y":233,"uid":62,"state":{"val":4},"title":"Step 2 start"},{"plugin":"const_float_generator","x":264,"y":287,"uid":63,"state":{"val":8},"title":"Step 3 start"},{"plugin":"const_float_generator","x":263,"y":341,"uid":64,"state":{"val":12},"title":"Step 4 start"},{"plugin":"const_float_generator","x":264,"y":394,"uid":65,"state":{"val":16},"title":"Step 5 start"},{"plugin":"float_display","x":264,"y":129,"uid":66,"title":"Time display"},{"plugin":"slider_float_generator","x":169,"y":53,"uid":67,"state":{"val":3.333333333333333,"min":0,"max":20},"title":"Speed"},{"plugin":"const_float_generator","x":264,"y":180,"uid":68,"state":{"val":0},"title":"Step 1 start"},{"plugin":"const_float_generator","x":264,"y":532,"uid":71,"state":{"val":24},"title":"Step 7 start"},{"plugin":"const_float_generator","x":265,"y":599,"uid":72,"state":{"val":28},"title":"Step 8 start"},{"plugin":"const_float_generator","x":270,"y":659,"uid":73,"state":{"val":32},"title":"Step 9 start"},{"plugin":"const_float_generator","x":273,"y":719,"uid":74,"state":{"val":36},"title":"End"},{"plugin":"const_float_generator","x":264,"y":462,"uid":75,"state":{"val":20},"title":"Step 6 start"}],"conns":[{"src_nuid":61,"dst_nuid":60,"src_slot":"value","dst_slot":0,"dst_dyn":true},{"src_nuid":62,"dst_nuid":60,"src_slot":"value","dst_slot":1,"dst_dyn":true},{"src_nuid":63,"dst_nuid":60,"src_slot":"value","dst_slot":2,"dst_dyn":true},{"src_nuid":64,"dst_nuid":60,"src_slot":"value","dst_slot":3,"dst_dyn":true},{"src_nuid":60,"dst_nuid":66,"src_slot":4,"dst_slot":"float","src_dyn":true},{"src_nuid":67,"dst_nuid":60,"src_slot":"value","dst_slot":5,"dst_dyn":true},{"src_nuid":68,"dst_nuid":60,"src_slot":"value","dst_slot":6,"dst_dyn":true},{"src_nuid":65,"dst_nuid":60,"src_slot":"value","dst_slot":4,"dst_dyn":true},{"src_nuid":75,"dst_nuid":60,"src_slot":"value","dst_slot":11,"dst_dyn":true},{"src_nuid":71,"dst_nuid":60,"src_slot":"value","dst_slot":7,"dst_dyn":true},{"src_nuid":72,"dst_nuid":60,"src_slot":"value","dst_slot":8,"dst_dyn":true},{"src_nuid":73,"dst_nuid":60,"src_slot":"value","dst_slot":9,"dst_dyn":true},{"src_nuid":74,"dst_nuid":60,"src_slot":"value","dst_slot":10,"dst_dyn":true}]}} ================================================ FILE: browser/patches/util_accumulator.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 1, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 55, "y": 56, "uid": 0, "dsid": 2, "state": { "enabled": true, "input_sids": { "0": 0 }, "output_sids": { "1": 1 } }, "title": "Accumulator", "graph": { "node_uid": 5, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 38, "y": 150, "uid": 0, "dsid": 1, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 242, "y": 151, "uid": 1, "dsid": 1, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "register_local_read", "x": 54, "y": 69, "uid": 2, "dsid": 1, "state": { "slot_id": 0 }, "title": "state", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "add_modulator", "x": 132, "y": 104, "uid": 3 }, { "plugin": "register_local_write", "x": 241, "y": 73, "uid": 4, "dsid": 1, "state": { "slot_id": 0 }, "title": "state", "dyn_in": [ { "name": "value", "dt": 8, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 } ], "registers": [ { "id": "state", "dt": 0 } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0 } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] } ], "conns": [] } } ================================================ FILE: browser/patches/util_aspect_ratio.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 1, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 9, "y": 5, "uid": 0, "dsid": 1, "state": { "enabled": true, "input_sids": {}, "output_sids": { "5": 0 } }, "title": "Aspect ratio", "graph": { "node_uid": 6, "uid": 1, "parent_uid": 0, "nodes": [ { "plugin": "scale_matrix", "x": 394, "y": 19, "uid": 0 }, { "plugin": "vector", "x": 276, "y": 19, "uid": 1 }, { "plugin": "const_float_generator", "x": 10, "y": 6, "uid": 2, "state": { "val": 1 } }, { "plugin": "divide_modulator", "x": 159, "y": 101, "uid": 3 }, { "plugin": "aspect_ratio_generator", "x": 9, "y": 72, "uid": 4 }, { "plugin": "output_proxy", "x": 488, "y": 19, "uid": 5, "dsid": 12, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 3, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [] } } ================================================ FILE: browser/patches/util_clamped_accumulator.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 5, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 36, "y": 57, "uid": 0, "dsid": 4, "state": { "enabled": true, "input_sids": { "0": 0, "6": 2, "7": 3 }, "output_sids": { "1": 1 } }, "title": "Clamped accumulator", "graph": { "node_uid": 8, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "input_proxy", "x": 54, "y": 148, "uid": 0, "dsid": 2, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "output_proxy", "x": 358, "y": 153, "uid": 1, "dsid": 2, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "register_local_read", "x": 70, "y": 67, "uid": 2, "dsid": 1, "state": { "slot_id": 0 }, "title": "state", "dyn_out": [ { "name": "value", "dt": 0, "desc": "", "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "add_modulator", "x": 148, "y": 102, "uid": 3 }, { "plugin": "register_local_write", "x": 360, "y": 86, "uid": 4, "dsid": 1, "state": { "slot_id": 0 }, "title": "state", "dyn_in": [ { "name": "value", "dt": 8, "desc": "", "uid": 0, "index": 0, "type": 0, "is_connected": true } ] }, { "plugin": "clamp_modulator", "x": 237, "y": 154, "uid": 5 }, { "plugin": "input_proxy", "x": 55, "y": 213, "uid": 6, "dsid": 1, "state": { "slot_id": 0 }, "title": "min", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 134, "y": 268, "uid": 7, "dsid": 1, "state": { "slot_id": 0 }, "title": "max", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 0, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 5, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ], "registers": [ { "id": "state", "dt": 0 } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": false }, { "name": "min", "dt": 0, "uid": 2, "index": 1, "type": 0 }, { "name": "max", "dt": 0, "uid": 3, "index": 2, "type": 0 } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 1, "index": 0, "type": 1 } ] } ], "conns": [] } } ================================================ FILE: browser/patches/util_clone_material_with_new_texture.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 11, "root": { "node_uid": 85, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "material_clone_modulator", "x": 325, "y": 428, "uid": 82 }, { "plugin": "material_texture_modulator", "x": 430, "y": 428, "uid": 83 }, { "plugin": "url_texture_generator", "x": 321, "y": 481, "uid": 84, "state": { "url": "data/textures/" }, "title": "Image" } ], "conns": [ { "src_nuid": 82, "dst_nuid": 83, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 84, "dst_nuid": 83, "src_slot": 0, "dst_slot": 2 } ] } } ================================================ FILE: browser/patches/util_concatenate_x2.json ================================================ { "abs_t": 0, "active_graph": 1, "graph_uid": 2, "root": { "node_uid": 1, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 10, "y": 7, "uid": 0, "dsid": 4, "state": { "enabled": true, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 1, "parent_uid": 0, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 274, "y": 13, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 92, "y": 13, "uid": 1 }, { "plugin": "output_proxy", "x": 394, "y": 13, "uid": 2, "dsid": 2, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 197, "y": 14, "uid": 3, "dsid": 2, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 13, "uid": 4, "dsid": 2, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 71, "uid": 5, "dsid": 2, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0 }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0 }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0 } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [] } } ================================================ FILE: browser/patches/util_concatenate_x3.json ================================================ { "abs_t": 0, "active_graph": 1, "graph_uid": 2, "root": { "node_uid": 1, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 9, "y": 11, "uid": 0, "dsid": 5, "state": { "enabled": true, "input_sids": { "4": 1, "5": 2, "6": 3, "7": 4 }, "output_sids": { "3": 0 } }, "title": "Concatanate x 3", "graph": { "node_uid": 8, "uid": 1, "parent_uid": 0, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 341, "y": 9, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 230, "y": 9, "uid": 1 }, { "plugin": "concatenate_matrix_modulator", "x": 109, "y": 9, "uid": 2 }, { "plugin": "output_proxy", "x": 457, "y": 9, "uid": 3, "dsid": 3, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 260, "y": 87, "uid": 4, "dsid": 3, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 140, "y": 86, "uid": 5, "dsid": 3, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 11, "y": 9, "uid": 6, "dsid": 3, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 11, "y": 70, "uid": 7, "dsid": 3, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 0, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0 }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0 }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0 }, { "name": "matrix", "dt": 4, "uid": 4, "index": 3, "type": 0 } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [] } } ================================================ FILE: browser/patches/util_float_array_sequencer.json ================================================ { "abs_t": 131.008, "active_graph": 0, "graph_uid": 3, "root": { "node_uid": 7, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 490, "y": 327, "uid": 0, "dsid": 7, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "8": 1, "10": 2 }, "output_sids": { "18": 6 } }, "title": "Float sequence", "graph": { "node_uid": 19, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 286, "y": 104, "uid": 3, "dsid": 5, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 1, "15": 3 }, "output_sids": { "12": 0 } }, "title": "Oscillate", "graph": { "node_uid": 26, "uid": 2, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "multiply_modulator", "x": 544, "y": 40, "uid": 6 }, { "plugin": "output_proxy", "x": 637, "y": 40, "uid": 12, "dsid": 12, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 27, "y": 99, "uid": 13, "dsid": 10, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 476, "y": 102, "uid": 15, "dsid": 10, "state": { "slot_id": 0 }, "title": "Max", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "delta_t_generator", "x": 10, "y": 41, "uid": 18 }, { "plugin": "accumulate_modulator", "x": 203, "y": 41, "uid": 19, "state": { "value": 658.3121200000156 } }, { "plugin": "multiply_modulator", "x": 110, "y": 41, "uid": 20 }, { "plugin": "sawtooth_modulator", "x": 313, "y": 43, "uid": 24 }, { "plugin": "convert_oscilator_unit_modulator", "x": 411, "y": 44, "uid": 25 } ], "conns": [ { "src_nuid": 18, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 24, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Max", "dt": 0, "uid": 3, "index": 1, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "float", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "input_proxy", "x": 10, "y": 40, "uid": 8, "dsid": 5, "state": { "slot_id": 0 }, "title": "array", "dyn_out": [ { "name": "output", "dt": 17, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 203, "y": 107, "uid": 10, "dsid": 5, "state": { "slot_id": 0 }, "title": "speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "array_length_modulator", "x": 88, "y": 140, "uid": 12 }, { "plugin": "subtract_modulator", "x": 189, "y": 168, "uid": 13 }, { "plugin": "const_float_generator", "x": 66, "y": 208, "uid": 14, "state": { "val": 1 } }, { "plugin": "array_get_modulator", "x": 451, "y": 40, "uid": 15 }, { "plugin": "output_proxy", "x": 619, "y": 167, "uid": 18, "dsid": 1, "state": { "slot_id": 0 }, "title": "float", "dyn_in": [ { "name": "output", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "def": null, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 10, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 12, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "offset": 1 }, { "src_nuid": 15, "dst_nuid": 18, "src_slot": 1, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "array", "dt": 17, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "speed", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "float", "dt": 0, "uid": 6, "index": 0, "type": 1 } ] }, { "plugin": "float_display", "x": 665, "y": 328, "uid": 1 }, { "plugin": "slider_float_generator", "x": 289, "y": 409, "uid": 2, "state": { "val": 0.5, "min": 0, "max": 1 }, "title": "speed" }, { "plugin": "text_editor_generator", "x": 119, "y": 334, "uid": 3, "state": { "text": "{\n \"data\": [10, 20, 30, 40, 50, 60, 70, 80]\n}" } }, { "plugin": "parse_json_modulator", "x": 228, "y": 333, "uid": 4 }, { "plugin": "member_to_typed_array_modulator", "x": 326, "y": 333, "uid": 5, "state": { "datatype": 6 } }, { "plugin": "label_generator", "x": 179, "y": 389, "uid": 6, "state": { "text": "data" } } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_dyn": true } ] } } ================================================ FILE: browser/patches/util_float_array_sequencer_oscillator_out.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 3, "root": { "node_uid": 12, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 804, "y": 150, "uid": 0, "dsid": 6, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 4, "14": 5 }, "output_sids": { "7": 0 } }, "title": "Float sequence", "graph": { "node_uid": 16, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 208, "y": 40, "uid": 7, "dsid": 6, "state": { "slot_id": 0 }, "title": "float sequence", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 11, "y": 113, "uid": 13, "dsid": 3, "state": { "slot_id": 0 }, "title": "index", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 10, "y": 40, "uid": 14, "dsid": 1, "state": { "slot_id": 0 }, "title": "array", "dyn_out": [ { "name": "input", "dt": 17, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "array_get_modulator", "x": 111, "y": 40, "uid": 15 } ], "conns": [ { "src_nuid": 14, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 13, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "index", "dt": 0, "uid": 4, "index": 0, "type": 0, "is_connected": true }, { "name": "array", "dt": 17, "uid": 5, "index": 1, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "float sequence", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 641, "y": 71, "uid": 2, "dsid": 5, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 1, "15": 3 }, "output_sids": { "12": 0 } }, "title": "Oscillate", "graph": { "node_uid": 26, "uid": 2, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "multiply_modulator", "x": 542, "y": 43, "uid": 6 }, { "plugin": "output_proxy", "x": 634, "y": 44, "uid": 12, "dsid": 14, "state": { "slot_id": 0 }, "title": "index", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 27, "y": 99, "uid": 13, "dsid": 12, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 476, "y": 121, "uid": 15, "dsid": 12, "state": { "slot_id": 0 }, "title": "Max", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "delta_t_generator", "x": 10, "y": 41, "uid": 18 }, { "plugin": "accumulate_modulator", "x": 203, "y": 41, "uid": 19, "state": { "value": 636.8627766664778 } }, { "plugin": "multiply_modulator", "x": 110, "y": 41, "uid": 20 }, { "plugin": "sawtooth_modulator", "x": 313, "y": 43, "uid": 24 }, { "plugin": "convert_oscilator_unit_modulator", "x": 411, "y": 44, "uid": 25 } ], "conns": [ { "src_nuid": 18, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 24, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Max", "dt": 0, "uid": 3, "index": 1, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "index", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 429, "y": 26, "uid": 5, "state": { "val": 5, "min": "0", "max": "10" } }, { "plugin": "text_editor_generator", "x": 28, "y": 58, "uid": 6, "state": { "text": "{\n \"data\": [10, 20, 30, 40, 50, 60, 70, 80]\n}" } }, { "plugin": "parse_json_modulator", "x": 136, "y": 58, "uid": 7 }, { "plugin": "member_to_typed_array_modulator", "x": 247, "y": 58, "uid": 8, "state": { "datatype": 6 } }, { "plugin": "label_generator", "x": 132, "y": 116, "uid": 9, "state": { "text": "data" } }, { "plugin": "array_length_modulator", "x": 429, "y": 111, "uid": 10 } ], "conns": [ { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 6, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 8, "dst_nuid": 10, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 10, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 8, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "dst_dyn": true, "offset": 1 } ] } } ================================================ FILE: browser/patches/util_float_array_sequencer_with_interpolation.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 4, "root": { "node_uid": 37, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "slider_float_generator", "x": 383, "y": 263, "uid": 2, "state": { "val": 0.15, "min": 0, "max": 1 }, "title": "speed" }, { "plugin": "text_editor_generator", "x": 27, "y": 40, "uid": 4, "state": { "text": "{\n \"data\": [1.35, 1.35, 3.65, 3.65, 3.65]\n}" } }, { "plugin": "parse_json_modulator", "x": 135, "y": 40, "uid": 5 }, { "plugin": "member_to_typed_array_modulator", "x": 245, "y": 40, "uid": 6, "state": { "datatype": 6 } }, { "plugin": "label_generator", "x": 127, "y": 103, "uid": 7, "state": { "text": "data" } }, { "plugin": "graph", "x": 617, "y": 243, "uid": 9, "dsid": 5, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "input_sids": { "13": 1, "15": 3 }, "output_sids": { "12": 0 } }, "title": "Oscillate", "graph": { "node_uid": 26, "uid": 3, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "multiply_modulator", "x": 537, "y": 40, "uid": 6 }, { "plugin": "output_proxy", "x": 629, "y": 40, "uid": 12, "dsid": 17, "state": { "slot_id": 0 }, "title": "index", "dyn_in": [ { "name": "input", "dt": 0, "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 27, "y": 99, "uid": 13, "dsid": 15, "state": { "slot_id": 0 }, "title": "Speed", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 468, "y": 118, "uid": 15, "dsid": 15, "state": { "slot_id": 0 }, "title": "Max", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "delta_t_generator", "x": 10, "y": 41, "uid": 18 }, { "plugin": "accumulate_modulator", "x": 203, "y": 41, "uid": 19, "state": { "value": 3167.548350004012 } }, { "plugin": "multiply_modulator", "x": 110, "y": 41, "uid": 20 }, { "plugin": "sawtooth_modulator", "x": 308, "y": 41, "uid": 24 }, { "plugin": "convert_oscilator_unit_modulator", "x": 408, "y": 40, "uid": 25 } ], "conns": [ { "src_nuid": 18, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 25, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 24, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 24, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 15, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 6, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "Speed", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true, "connected": false }, { "name": "Max", "dt": 0, "uid": 3, "index": 1, "type": 0, "is_connected": true, "connected": false } ], "dyn_out": [ { "name": "index", "dt": 0, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "array_length_modulator", "x": 433, "y": 48, "uid": 11 }, { "plugin": "subtract_modulator", "x": 521, "y": 120, "uid": 12 }, { "plugin": "const_float_generator", "x": 383, "y": 183, "uid": 13, "state": { "val": 1 }, "title": "one" }, { "plugin": "floor_modulator", "x": 768, "y": 306, "uid": 15 }, { "plugin": "subtract_modulator", "x": 868, "y": 242, "uid": 16 }, { "plugin": "add_modulator", "x": 871, "y": 330, "uid": 17 }, { "plugin": "min_modulator", "x": 971, "y": 357, "uid": 18 }, { "plugin": "subtract_modulator", "x": 1145, "y": 72, "uid": 19 }, { "plugin": "multiply_modulator", "x": 963, "y": 180, "uid": 20 }, { "plugin": "pi_generator", "x": 904, "y": 165, "uid": 21 }, { "plugin": "cos_modulator", "x": 1056, "y": 180, "uid": 22 }, { "plugin": "multiply_modulator", "x": 1242, "y": 228, "uid": 23 }, { "plugin": "const_float_generator", "x": 1126, "y": 279, "uid": 24, "state": { "val": 0.5 } }, { "plugin": "array_get_modulator", "x": 1268, "y": 8, "uid": 25 }, { "plugin": "array_get_modulator", "x": 1057, "y": 399, "uid": 26 }, { "plugin": "subtract_modulator", "x": 1345, "y": 113, "uid": 27 }, { "plugin": "multiply_modulator", "x": 1440, "y": 61, "uid": 28 }, { "plugin": "multiply_modulator", "x": 1259, "y": 314, "uid": 29 }, { "plugin": "add_modulator", "x": 1534, "y": 185, "uid": 30 }, { "plugin": "float_display", "x": 1624, "y": 185, "uid": 35 } ], "conns": [ { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 5, "dst_nuid": 6, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 7, "dst_nuid": 6, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 11, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 12, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1, "dst_connected": false, "dst_dyn": true }, { "src_nuid": 2, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "dst_connected": false, "dst_dyn": true, "offset": 1 }, { "src_nuid": 9, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "offset": 1 }, { "src_nuid": 15, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 15, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 13, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 17, "dst_nuid": 18, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 12, "dst_nuid": 18, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 13, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "offset": 2 }, { "src_nuid": 16, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 21, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 20, "dst_nuid": 22, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 22, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 19, "dst_nuid": 23, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 24, "dst_nuid": 23, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 15, "dst_nuid": 25, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 6, "dst_nuid": 25, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 6, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0, "offset": 2 }, { "src_nuid": 18, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 23, "dst_nuid": 27, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 27, "src_slot": 0, "dst_slot": 0, "offset": 3 }, { "src_nuid": 27, "dst_nuid": 28, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 25, "dst_nuid": 28, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 26, "dst_nuid": 29, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 16, "dst_nuid": 29, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 28, "dst_nuid": 30, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 29, "dst_nuid": 30, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 30, "dst_nuid": 35, "src_slot": 0, "dst_slot": 0 } ] } } ================================================ FILE: browser/patches/util_get_mesh_from_scene.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 2, "root": { "node_uid": 1, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 470, "y": 310, "uid": 0, "dsid": 1, "state": { "enabled": true, "input_sids": {}, "output_sids": { "7": 0 } }, "title": "Get mesh", "graph": { "node_uid": 8, "uid": 1, "parent_uid": 0, "nodes": [ { "plugin": "url_scene_generator", "x": 122, "y": 46, "uid": 0, "state": { "url": "/data/scene/ladybug/scene.json" } }, { "plugin": "scene_get_mesh_count", "x": 227, "y": 268, "uid": 1 }, { "plugin": "subtract_modulator", "x": 362, "y": 287, "uid": 2 }, { "plugin": "const_float_generator", "x": 235, "y": 333, "uid": 3, "state": { "val": 1 } }, { "plugin": "scene_get_mesh_by_index", "x": 550, "y": 134, "uid": 4 }, { "plugin": "multiply_modulator", "x": 462, "y": 225, "uid": 5 }, { "plugin": "slider_float_generator", "x": 93, "y": 181, "uid": 6, "state": { "val": 3.4, "min": 0, "max": 5 }, "title": "Select mesh" }, { "plugin": "output_proxy", "x": 703, "y": 132, "uid": 7, "dsid": 8, "state": { "slot_id": 0 }, "title": "mesh", "dyn_in": [ { "name": "input", "dt": 9, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 0, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 1, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 3, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 2, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 4, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 6, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_out": [ { "name": "mesh", "dt": 9, "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [] } } ================================================ FILE: browser/patches/util_knob_with_min_max.json ================================================ { "abs_t": 0, "active_graph": 1, "graph_uid": 2, "root": { "node_uid": 2, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 98, "y": 7, "uid": 0, "dsid": 3, "state": { "enabled": true, "input_sids": { "9": 0 }, "output_sids": { "12": 2 } }, "title": "min max calc", "graph": { "node_uid": 13, "uid": 1, "parent_uid": 0, "nodes": [ { "plugin": "const_float_generator", "x": 27, "y": 190, "uid": 2, "state": { "val": -10 }, "title": "Maximum" }, { "plugin": "subtract_modulator", "x": 144, "y": 65, "uid": 3 }, { "plugin": "absolute_modulator", "x": 232, "y": 65, "uid": 4 }, { "plugin": "multiply_modulator", "x": 319, "y": 45, "uid": 5 }, { "plugin": "add_modulator", "x": 401, "y": 122, "uid": 7 }, { "plugin": "min_modulator", "x": 143, "y": 142, "uid": 8 }, { "plugin": "input_proxy", "x": 248, "y": 9, "uid": 9, "dsid": 4, "state": { "slot_id": 0 }, "title": "value", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 10, "y": 85, "uid": 11, "state": { "val": 10 }, "title": "Minimum" }, { "plugin": "output_proxy", "x": 486, "y": 122, "uid": 12, "dsid": 4, "state": { "slot_id": 0 }, "title": "value", "dyn_in": [ { "name": "input", "dt": 0, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] } ], "conns": [ { "src_nuid": 2, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 2, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 3, "dst_nuid": 4, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 5, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 5, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 9, "dst_nuid": 5, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0, "offset": 1 }, { "src_nuid": 7, "dst_nuid": 12, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "value", "dt": 0, "uid": 0, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "value", "dt": 0, "uid": 2, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 8, "y": 7, "uid": 1, "state": { "val": 0 } } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/util_random_with_speed.json ================================================ {"abs_t":166.41,"active_graph":0,"graph_uid":2,"root":{"node_uid":27,"uid":0,"parent_uid":-1,"open":true,"nodes":[{"plugin":"graph","x":451,"y":230,"uid":21,"dsid":7,"state":{"enabled":true,"always_update":true,"rt_width":512,"rt_height":512,"rt_filter":9729,"input_sids":{"18":0,"23":5,"24":6},"output_sids":{"21":3,"22":4}},"title":"Random with speed","graph":{"node_uid":25,"uid":1,"parent_uid":0,"open":true,"nodes":[{"plugin":"delta_t_generator","x":239,"y":280,"uid":0},{"plugin":"add_modulator","x":341,"y":304,"uid":1},{"plugin":"register_local_read","x":246,"y":355,"uid":2,"dsid":1,"state":{"slot_id":0},"title":"acc_time","dyn_out":[{"name":"value","dt":0,"desc":"","uid":0,"index":0,"type":1}]},{"plugin":"if_else_modulator","x":547,"y":379,"uid":3},{"plugin":"more_than_modulator","x":441,"y":342,"uid":4},{"plugin":"const_float_generator","x":216,"y":455,"uid":5,"state":{"val":1}},{"plugin":"divide_modulator","x":325,"y":479,"uid":7},{"plugin":"subtract_modulator","x":451,"y":471,"uid":8},{"plugin":"register_local_write","x":671,"y":379,"uid":9,"dsid":1,"state":{"slot_id":0},"title":"acc_time","dyn_in":[{"name":"value","dt":8,"desc":"","uid":0,"index":0,"type":0,"is_connected":true}]},{"plugin":"if_else_modulator","x":604,"y":559,"uid":10},{"plugin":"random_float_generator","x":486,"y":603,"uid":11},{"plugin":"register_local_write","x":874,"y":659,"uid":12,"dsid":1,"state":{"slot_id":0},"title":"random_val","dyn_in":[{"name":"value","dt":0,"desc":"","uid":0,"index":0,"type":0,"is_connected":true}]},{"plugin":"register_local_read","x":487,"y":700,"uid":13,"dsid":1,"state":{"slot_id":0},"title":"random_val","dyn_out":[{"name":"value","dt":0,"desc":"","uid":0,"index":0,"type":1}]},{"plugin":"float_display","x":1057,"y":479,"uid":14},{"plugin":"round_modulator","x":789,"y":549,"uid":17},{"plugin":"input_proxy","x":122,"y":597,"uid":18,"dsid":1,"state":{"slot_id":0},"title":"FPS","dyn_out":[{"name":"input","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"output_proxy","x":1006,"y":561,"uid":21,"dsid":1,"state":{"slot_id":0},"title":"integer","dyn_in":[{"name":"output","dt":0,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","def":null,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"output_proxy","x":1020,"y":677,"uid":22,"dsid":1,"state":{"slot_id":0},"title":"float","dyn_in":[{"name":"output","dt":0,"desc":"Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.","def":null,"uid":0,"index":0,"type":0,"connected":true,"is_connected":true}]},{"plugin":"input_proxy","x":203,"y":693,"uid":23,"dsid":1,"state":{"slot_id":0},"title":"Random min","dyn_out":[{"name":"input","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]},{"plugin":"input_proxy","x":275,"y":760,"uid":24,"dsid":1,"state":{"slot_id":0},"title":"Random max","dyn_out":[{"name":"input","dt":0,"desc":"Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.","uid":0,"index":0,"type":1,"connected":true}]}],"conns":[{"src_nuid":0,"dst_nuid":1,"src_slot":"seconds","dst_slot":"a"},{"src_nuid":2,"dst_nuid":1,"src_slot":0,"dst_slot":"b","src_dyn":true},{"src_nuid":1,"dst_nuid":4,"src_slot":"result","dst_slot":"value"},{"src_nuid":1,"dst_nuid":8,"src_slot":"result","dst_slot":"a","offset":1},{"src_nuid":1,"dst_nuid":3,"src_slot":"result","dst_slot":"false value","offset":2},{"src_nuid":4,"dst_nuid":3,"src_slot":"bool","dst_slot":"condition"},{"src_nuid":8,"dst_nuid":3,"src_slot":"result","dst_slot":"true value"},{"src_nuid":3,"dst_nuid":9,"src_slot":"value","dst_slot":0,"dst_dyn":true},{"src_nuid":7,"dst_nuid":4,"src_slot":"result","dst_slot":"reference"},{"src_nuid":4,"dst_nuid":10,"src_slot":"bool","dst_slot":"condition","offset":1},{"src_nuid":5,"dst_nuid":7,"src_slot":"value","dst_slot":"value"},{"src_nuid":7,"dst_nuid":8,"src_slot":"result","dst_slot":"b","offset":1},{"src_nuid":11,"dst_nuid":10,"src_slot":"value","dst_slot":"true value"},{"src_nuid":13,"dst_nuid":10,"src_slot":0,"dst_slot":"false value","src_dyn":true},{"src_nuid":10,"dst_nuid":12,"src_slot":"value","dst_slot":0,"dst_dyn":true},{"src_nuid":10,"dst_nuid":17,"src_slot":"value","dst_slot":"value","offset":1},{"src_nuid":17,"dst_nuid":14,"src_slot":"result","dst_slot":"float"},{"src_nuid":18,"dst_nuid":7,"src_slot":0,"dst_slot":"scalar","src_connected":true,"src_dyn":true},{"src_nuid":17,"dst_nuid":21,"src_slot":"result","dst_slot":0,"dst_connected":true,"dst_dyn":true,"offset":1},{"src_nuid":10,"dst_nuid":22,"src_slot":"value","dst_slot":0,"dst_connected":true,"dst_dyn":true,"offset":2},{"src_nuid":23,"dst_nuid":11,"src_slot":0,"dst_slot":"min","src_connected":true,"src_dyn":true},{"src_nuid":24,"dst_nuid":11,"src_slot":0,"dst_slot":"max","src_connected":true,"src_dyn":true}],"registers":[{"id":"acc_time","dt":8},{"id":"random_val","dt":8}]},"dyn_in":[{"name":"FPS","dt":0,"uid":0,"index":0,"type":0,"is_connected":true},{"name":"Random min","dt":0,"uid":5,"index":1,"type":0,"is_connected":true},{"name":"Random max","dt":0,"uid":6,"index":2,"type":0,"is_connected":true}],"dyn_out":[{"name":"integer","dt":0,"uid":3,"index":0,"type":1},{"name":"float","dt":0,"uid":4,"index":1,"type":1}]},{"plugin":"const_float_generator","x":324,"y":253,"uid":22,"state":{"val":10},"title":"FPS (speed)"},{"plugin":"const_float_generator","x":323,"y":309,"uid":23,"state":{"val":1},"title":"Min"},{"plugin":"const_float_generator","x":324,"y":368,"uid":24,"state":{"val":8},"title":"Max"}],"conns":[{"src_nuid":22,"dst_nuid":21,"src_slot":"value","dst_slot":0,"dst_dyn":true},{"src_nuid":23,"dst_nuid":21,"src_slot":"value","dst_slot":1,"dst_dyn":true},{"src_nuid":24,"dst_nuid":21,"src_slot":"value","dst_slot":2,"dst_dyn":true}],"registers":[{"id":"acc_time","dt":0},{"id":"random_val","dt":0},{"id":"random_value","dt":8}]}} ================================================ FILE: browser/patches/uv_offset.json ================================================ { "abs_t": 169.341, "active_graph": 0, "graph_uid": 4, "root": { "node_uid": 6, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 487, "y": 259, "uid": 2, "dsid": 3, "state": { "enabled": true, "input_sids": { "4": 1, "5": 2 }, "output_sids": { "3": 0 } }, "title": "UV Offset", "graph": { "node_uid": 6, "uid": 3, "parent_uid": 0, "nodes": [ { "plugin": "vector", "x": 387, "y": 149, "uid": 0 }, { "plugin": "output_proxy", "x": 610, "y": 210, "uid": 3, "dsid": 1, "state": { "slot_id": 0 }, "title": "vector", "dyn_in": [ { "name": "input", "dt": 5, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 282, "y": 131, "uid": 4, "dsid": 1, "state": { "slot_id": 0 }, "title": "X offset", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 284, "y": 191, "uid": 5, "dsid": 1, "state": { "slot_id": 0 }, "title": "Y offset", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "X offset", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y offset", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "vector", "dt": 5, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 290, "y": 259, "uid": 4, "state": { "val": 0, "min": 0, "max": 1 }, "title": "X offset" }, { "plugin": "slider_float_generator", "x": 291, "y": 323, "uid": 5, "state": { "val": 0, "min": 0, "max": 1 }, "title": "Y offset" } ], "conns": [ { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 5, "dst_nuid": 2, "src_slot": 0, "dst_slot": 1, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/uv_scale.json ================================================ { "abs_t": 258.268, "active_graph": 0, "graph_uid": 4, "root": { "node_uid": 6, "uid": 0, "parent_uid": -1, "nodes": [ { "plugin": "graph", "x": 497, "y": 245, "uid": 2, "dsid": 3, "state": { "enabled": true, "input_sids": { "4": 1 }, "output_sids": { "3": 0 } }, "title": "UV Scale", "graph": { "node_uid": 6, "uid": 3, "parent_uid": 0, "nodes": [ { "plugin": "vector", "x": 387, "y": 149, "uid": 0 }, { "plugin": "output_proxy", "x": 610, "y": 210, "uid": 3, "dsid": 1, "state": { "slot_id": 0 }, "title": "vector", "dyn_in": [ { "name": "input", "dt": 5, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 282, "y": 131, "uid": 4, "dsid": 1, "state": { "slot_id": 0 }, "title": "uv scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "offset": 1 } ] }, "dyn_in": [ { "name": "uv scale", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "vector", "dt": 5, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 290, "y": 259, "uid": 4, "state": { "val": 1, "min": 0, "max": 1 }, "title": "UV scale" } ], "conns": [ { "src_nuid": 4, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_dyn": true } ] } } ================================================ FILE: browser/patches/video_video_player.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 1, "root": { "node_uid": 6, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "video_player", "x": 421, "y": 226, "uid": 0 }, { "plugin": "toggle_button", "x": 269, "y": 277, "uid": 1, "state": { "enabled": true }, "title": "Play" }, { "plugin": "url_video_generator", "x": 269, "y": 218, "uid": 2, "state": { "url": "data/video/helicopter_la.ogv" } }, { "plugin": "knob_float_generator", "x": 301, "y": 400, "uid": 4, "state": { "val": 0.47 } }, { "plugin": "toggle_button", "x": 270, "y": 338, "uid": 5, "state": { "enabled": false }, "title": "Mute" } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 4, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 }, { "src_nuid": 5, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2 } ] } } ================================================ FILE: browser/patches/vive-hands.json ================================================ {"nodes":[{"plugin":"graph","x":325,"y":63,"uid":"kknZXAvU7D9s","state":{"always_update":true,"input_sids":{},"output_sids":{"dvXtpavBFd28":"HdZG8u7tn4da","kV8Zk8UnHm2u":"YYy8gFcf6BNz","3544qUK5LkxS":"wSgmRdx643NP","9zUgLb8sy9bH":"m8Q7AeWphBZA","mdWvswufmMvD":"Tzz5AjwEvyp8","Kqy6GD6BCNMZ":"fwQbGG75FamP","mfwwrFgTXMEW":"9aAx3ggtXRDu","SpetuBr6qKff":"JZAeaY663NSf","CCcfRF8HTxQW":"wRnwZkmxQ2hX","L9tGhMRjWKhd":"YkvN8q8pgwzp","yyNxk6qStVYB":"3P4Lbg4dCFmB","nLecEQ8DSQU6":"LYkndZNVst63","S4WwcNutHK2F":"R6m8Lu5Tsk3x","MBggYrXtHUxW":"Ca9KhGVPh74S","GhUQyw6N7Rys":"tZD4aVqpE8HA","MsPwFZxNMgmf":"p79EMRwXUV9n"}},"title":"Vive controllers","graph":{"uid":"k7RqVAFXV6YB","parent_uid":"root","open":true,"nodes":[{"plugin":"vive_controller","x":227,"y":177,"uid":"823nszbmDuwn"},{"plugin":"vive_controller","x":225,"y":680,"uid":"QErpNfg3sEeg"},{"plugin":"const_float_generator","x":60,"y":681,"uid":"jYx96JCfJxBC","state":{"val":1},"title":"Hand 1"},{"plugin":"const_float_generator","x":62,"y":167,"uid":"4WDRYzPeRyer","state":{"val":0},"title":"Hand 0"},{"plugin":"graph","x":745,"y":505,"uid":"dsheftXSF4cy","state":{"always_update":true,"input_sids":{"pGLyWtRrY3W7":"YcwHBd87r7TB","qdnJH2mMH9Ad":"6PBvFEnPszAB"},"output_sids":{"cbqJmWWfSeKJ":"mh0rTKkFm0nD"}},"title":"Vive controller","graph":{"uid":"QF2F9MdaqCmq","parent_uid":"k7RqVAFXV6YB","open":true,"nodes":[{"plugin":"three_mesh","x":1053,"y":281,"uid":"9wp7gJaRFMnE","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1200,"y":283,"uid":"cbqJmWWfSeKJ","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_material_phong","x":437,"y":327,"uid":"3S8hLMMxNG27","state":{}},{"plugin":"input_proxy","x":736,"y":441,"uid":"pGLyWtRrY3W7","title":"rotation","dyn_out":[{"name":"input","dt":5,"uid":"J5U3TQFSLTm8","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":763,"y":263,"uid":"wZvp6kDj99AP","state":{"url":"/data/fthr/assets/scene/vive2/vive2.obj"}},{"plugin":"url_texture_generator","x":166,"y":360,"uid":"p98nxuwKEs7B","state":{"url":"/data/image/404ff6790d55c6604147416956c5454cbbcf56cb.png"}},{"plugin":"toggle_button","x":775,"y":589,"uid":"zWXKFuXEtujF","state":{"enabled":false}},{"plugin":"input_proxy","x":730,"y":399,"uid":"qdnJH2mMH9Ad","title":"position","dyn_out":[{"name":"input","dt":5,"uid":"Pqq9t7vHP95W","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]}],"conns":[{"src_nuid":"9wp7gJaRFMnE","dst_nuid":"cbqJmWWfSeKJ","src_slot":"object3d","dst_slot":0,"uid":"Hy6eEmQtUDgK","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"3S8hLMMxNG27","dst_nuid":"9wp7gJaRFMnE","src_slot":"material","dst_slot":"material","uid":"59zUbtxjGdE2","src_connected":true,"dst_connected":true},{"src_nuid":"wZvp6kDj99AP","dst_nuid":"9wp7gJaRFMnE","src_slot":"geometry","dst_slot":"geometry","uid":"xSKwD8FwDUtg","src_connected":true,"dst_connected":true},{"src_nuid":"p98nxuwKEs7B","dst_nuid":"3S8hLMMxNG27","src_slot":"texture","dst_slot":"texture","uid":"zTRCUKjJxJP7","src_connected":true,"dst_connected":true},{"src_nuid":"zWXKFuXEtujF","dst_nuid":"9wp7gJaRFMnE","src_slot":"bool","dst_slot":"castShadow","uid":"VzC5Mp3DaxwN","src_connected":true,"dst_connected":true},{"src_nuid":"pGLyWtRrY3W7","dst_nuid":"9wp7gJaRFMnE","src_slot":0,"dst_slot":"rotation","uid":"Mvac7JHPsYzp","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"qdnJH2mMH9Ad","dst_nuid":"9wp7gJaRFMnE","src_slot":0,"dst_slot":"position","uid":"pewAdxF6hknY","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"zWXKFuXEtujF","dst_nuid":"9wp7gJaRFMnE","src_slot":"bool","dst_slot":"receiveShadow","uid":"QTMAeLtkqg23","src_connected":true,"dst_connected":true}]},"dyn_in":[{"name":"position","dt":5,"index":0,"uid":"6PBvFEnPszAB","dynamic":true,"type":0,"is_connected":true},{"name":"rotation","dt":5,"index":1,"uid":"YcwHBd87r7TB","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":697,"y":1115,"uid":"mjyj45KKkuat","state":{"always_update":true,"input_sids":{"32xAhjgzRH3v":"YcwHBd87r7TB","yajBkGerv34X":"6PBvFEnPszAB"},"output_sids":{"3mBfqSHrCeTz":"mh0rTKkFm0nD"}},"title":"Vive controller","graph":{"uid":"5BtQHFzVAS2E","parent_uid":"k7RqVAFXV6YB","open":true,"nodes":[{"plugin":"three_mesh","x":1292,"y":298,"uid":"wNYA8hpFyawq","state":{"position":{"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1},"quaternion":{"_x":0,"_y":0,"_z":0,"_w":1}}},{"plugin":"output_proxy","x":1439,"y":300,"uid":"3mBfqSHrCeTz","title":"object3d","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"bEdPpC9C6Rh1","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_material_phong","x":676,"y":344,"uid":"3FUxrFvSb3Z5","open":false,"state":{}},{"plugin":"input_proxy","x":975,"y":458,"uid":"32xAhjgzRH3v","title":"rotation","dyn_out":[{"name":"input","dt":5,"uid":"J5U3TQFSLTm8","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"three_loader_model","x":1002,"y":280,"uid":"9WkD98Z3UCGW","state":{"url":"/data/fthr/assets/scene/vive2/vive2.obj"}},{"plugin":"url_texture_generator","x":405,"y":377,"uid":"4xz6rfCJxMaF","state":{"url":"/data/image/404ff6790d55c6604147416956c5454cbbcf56cb.png"}},{"plugin":"toggle_button","x":1033,"y":625,"uid":"jTZdGsHCQ5my","state":{"enabled":false}},{"plugin":"input_proxy","x":969,"y":416,"uid":"yajBkGerv34X","title":"position","dyn_out":[{"name":"input","dt":5,"uid":"Pqq9t7vHP95W","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]}],"conns":[{"src_nuid":"wNYA8hpFyawq","dst_nuid":"3mBfqSHrCeTz","src_slot":"object3d","dst_slot":0,"uid":"Hc7me6FXRnrm","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"3FUxrFvSb3Z5","dst_nuid":"wNYA8hpFyawq","src_slot":"material","dst_slot":"material","uid":"QYGxJdRWYKxB","src_connected":true,"dst_connected":true},{"src_nuid":"9WkD98Z3UCGW","dst_nuid":"wNYA8hpFyawq","src_slot":"geometry","dst_slot":"geometry","uid":"CZCM2rcFBus8","src_connected":true,"dst_connected":true},{"src_nuid":"4xz6rfCJxMaF","dst_nuid":"3FUxrFvSb3Z5","src_slot":"texture","dst_slot":"texture","uid":"TYMrnTgxpHuC","src_connected":true,"dst_connected":true},{"src_nuid":"jTZdGsHCQ5my","dst_nuid":"wNYA8hpFyawq","src_slot":"bool","dst_slot":"castShadow","uid":"VzMfaHrMZ4X2","src_connected":true,"dst_connected":true},{"src_nuid":"32xAhjgzRH3v","dst_nuid":"wNYA8hpFyawq","src_slot":0,"dst_slot":"rotation","uid":"HhaUPHkUY4a7","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"yajBkGerv34X","dst_nuid":"wNYA8hpFyawq","src_slot":0,"dst_slot":"position","uid":"7jD3pwjsXJeD","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"jTZdGsHCQ5my","dst_nuid":"wNYA8hpFyawq","src_slot":"bool","dst_slot":"receiveShadow","uid":"VCnuWg8vDqez","src_connected":true,"dst_connected":true}]},"dyn_in":[{"name":"position","dt":5,"index":0,"uid":"6PBvFEnPszAB","dynamic":true,"type":0,"is_connected":true},{"name":"rotation","dt":5,"index":1,"uid":"YcwHBd87r7TB","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"object3d","dt":21,"index":0,"uid":"mh0rTKkFm0nD","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"bool_display","x":699,"y":820,"uid":"yju5346RJDc3","title":"Menu"},{"plugin":"bool_display","x":699,"y":754,"uid":"w5bkQakqBNgV","title":"Grip"},{"plugin":"bool_display","x":699,"y":688,"uid":"zJBDUVRZZETW","title":"Trigger"},{"plugin":"bool_display","x":699,"y":622,"uid":"nzHNgGngnxah","title":"Touchpad"},{"plugin":"bool_display","x":749,"y":238,"uid":"HWS8gg7NBvnT","title":"Menu"},{"plugin":"bool_display","x":749,"y":172,"uid":"h7WF3qaUSu4E","title":"Grip"},{"plugin":"bool_display","x":749,"y":106,"uid":"XB7r55PQnXtu","title":"Trigger"},{"plugin":"bool_display","x":749,"y":40,"uid":"KMGQdawgD33m","title":"Touchpad"},{"plugin":"float_display","x":748,"y":431,"uid":"Y9T5dheuDvjm","title":"Trigger Value"},{"plugin":"float_display","x":696,"y":1033,"uid":"43Ft9cF8fSuV","title":"Trigger Value"},{"plugin":"float_display","x":699,"y":888,"uid":"WF9sK2dydYqa","title":"Touchpad X"},{"plugin":"float_display","x":700,"y":955,"uid":"rMvHEzSBjeNB","title":"Touchpad Y"},{"plugin":"float_display","x":748,"y":304,"uid":"phwLu7KszjuA","title":"Touchpad X"},{"plugin":"float_display","x":747,"y":371,"uid":"9mDjtDgMVMXC","title":"Touchpad Y"},{"plugin":"output_proxy","x":896,"y":61,"uid":"dvXtpavBFd28","title":"left touchpad down","dyn_in":[{"name":"output","dt":7,"def":null,"uid":"3dsTr63LH54y","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":843,"y":642,"uid":"kV8Zk8UnHm2u","title":"right touchpad down","dyn_in":[{"name":"output","dt":7,"def":null,"uid":"26GVzQUVjqsM","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":899,"y":122,"uid":"3544qUK5LkxS","title":"left trigger down","dyn_in":[{"name":"output","dt":7,"def":null,"uid":"Ew6XCx5Vh9Yc","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":843,"y":708,"uid":"9zUgLb8sy9bH","title":"right trigger down","dyn_in":[{"name":"output","dt":7,"def":null,"uid":"bXc4RhcKG8B9","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":895,"y":190,"uid":"mdWvswufmMvD","title":"left grip down","dyn_in":[{"name":"output","dt":7,"def":null,"uid":"DBCFJfuaMuFt","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":844,"y":772,"uid":"Kqy6GD6BCNMZ","title":"right trigger down","dyn_in":[{"name":"output","dt":7,"def":null,"uid":"QrwYxNa4KDKe","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":901,"y":257,"uid":"mfwwrFgTXMEW","title":"left menu down","dyn_in":[{"name":"output","dt":7,"def":null,"uid":"JYbNBHMc84Sa","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":844,"y":835,"uid":"SpetuBr6qKff","title":"right menu down","dyn_in":[{"name":"output","dt":7,"def":null,"uid":"AqBKTzBZq5MC","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":901,"y":322,"uid":"CCcfRF8HTxQW","title":"left touchpad x","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"vTs7ABAAZrt9","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":848,"y":907,"uid":"L9tGhMRjWKhd","title":"right touchpad x","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"jLbGef2WYQaS","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":897,"y":387,"uid":"yyNxk6qStVYB","title":"left touchpad y","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"fh6UzgXvv9N9","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":854,"y":972,"uid":"nLecEQ8DSQU6","title":"right touchpad y","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"cJdgK2qv5h24","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":899,"y":451,"uid":"S4WwcNutHK2F","title":"left trigger value","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"wSJTdh9hAzYN","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":1181,"y":537,"uid":"MBggYrXtHUxW","title":"left hand","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"Hzuv2QZk9xFT","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true,"array":true}]},{"plugin":"output_proxy","x":1176,"y":1156,"uid":"GhUQyw6N7Rys","title":"right hand","dyn_in":[{"name":"output","dt":21,"def":null,"uid":"RkxPTABrFQLb","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true,"array":true}]},{"plugin":"output_proxy","x":854,"y":1051,"uid":"MsPwFZxNMgmf","title":"right trigger value","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"63MStvWrCS4y","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]}],"conns":[{"src_nuid":"4WDRYzPeRyer","dst_nuid":"823nszbmDuwn","src_slot":"value","dst_slot":"pad number","uid":"VCgqCsJyfMKU","src_connected":true,"dst_connected":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"dsheftXSF4cy","src_slot":"rotation","dst_slot":1,"uid":"MpU7AuYn2gcV","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"jYx96JCfJxBC","dst_nuid":"QErpNfg3sEeg","src_slot":"value","dst_slot":"pad number","uid":"K2722HZzFhE5","src_connected":true,"dst_connected":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"mjyj45KKkuat","src_slot":"rotation","dst_slot":1,"uid":"kzMhzvYcyDNC","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"Y9T5dheuDvjm","src_slot":"trigger value","dst_slot":"float","uid":"qskLBTv5kYL7","src_connected":true,"dst_connected":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"43Ft9cF8fSuV","src_slot":"trigger value","dst_slot":"float","uid":"TtGrUN8aKVfv","src_connected":true,"dst_connected":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"dsheftXSF4cy","src_slot":"position","dst_slot":0,"uid":"LHR6bB8ryZjS","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"mjyj45KKkuat","src_slot":"position","dst_slot":0,"uid":"wPQvkjYYFYm9","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"WF9sK2dydYqa","src_slot":"touchpad x value","dst_slot":"float","uid":"cxhEXRcwBDHs","src_connected":true,"dst_connected":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"rMvHEzSBjeNB","src_slot":"touchpad y value","dst_slot":"float","uid":"tA9LZJ94YYYL","src_connected":true,"dst_connected":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"phwLu7KszjuA","src_slot":"touchpad x value","dst_slot":"float","uid":"ugLeTpccVgfS","src_connected":true,"dst_connected":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"9mDjtDgMVMXC","src_slot":"touchpad y value","dst_slot":"float","uid":"GNS8NKdpXzf9","src_connected":true,"dst_connected":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"CCcfRF8HTxQW","src_slot":"touchpad x value","dst_slot":0,"uid":"BwpTjHLU9Tb4","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"L9tGhMRjWKhd","src_slot":"touchpad x value","dst_slot":0,"uid":"nrdBcZUS3E89","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"yyNxk6qStVYB","src_slot":"touchpad y value","dst_slot":0,"uid":"w3tcVrFcBjjC","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"nLecEQ8DSQU6","src_slot":"touchpad y value","dst_slot":0,"uid":"Pq9F6hy4G7qW","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"dsheftXSF4cy","dst_nuid":"MBggYrXtHUxW","src_slot":0,"dst_slot":0,"uid":"hE4QXyWWfFTx","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"mjyj45KKkuat","dst_nuid":"GhUQyw6N7Rys","src_slot":0,"dst_slot":0,"uid":"qpzMTjhhmTay","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"S4WwcNutHK2F","src_slot":"trigger value","dst_slot":0,"uid":"AtuseMMpc6KG","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"MsPwFZxNMgmf","src_slot":"trigger value","dst_slot":0,"uid":"Ys4ENcG7yT5h","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"KMGQdawgD33m","src_slot":"touchpad down","dst_slot":"bool","uid":"fRDpX4Q4c3HL","src_connected":true,"dst_connected":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"dvXtpavBFd28","src_slot":"touchpad down","dst_slot":0,"uid":"wE4B7A5S34Dv","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"XB7r55PQnXtu","src_slot":"trigger down","dst_slot":"bool","uid":"rYDcJYf5XJxZ","src_connected":true,"dst_connected":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"3544qUK5LkxS","src_slot":"trigger down","dst_slot":0,"uid":"93WLBsKe5ZzC","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"mdWvswufmMvD","src_slot":"grip down","dst_slot":0,"uid":"9k6WBpetPBRF","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"h7WF3qaUSu4E","src_slot":"grip down","dst_slot":"bool","uid":"cBmw56qbWyMk","src_connected":true,"dst_connected":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"HWS8gg7NBvnT","src_slot":"menu down","dst_slot":"bool","uid":"SxV2XDRrYj8Y","src_connected":true,"dst_connected":true},{"src_nuid":"823nszbmDuwn","dst_nuid":"mfwwrFgTXMEW","src_slot":"menu down","dst_slot":0,"uid":"HsFz4KR4qvtL","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"nzHNgGngnxah","src_slot":"touchpad down","dst_slot":"bool","uid":"T8RL46UTbhaX","src_connected":true,"dst_connected":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"kV8Zk8UnHm2u","src_slot":"touchpad down","dst_slot":0,"uid":"93d8bvJswNs5","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"zJBDUVRZZETW","src_slot":"trigger down","dst_slot":"bool","uid":"s3Aqb7WhWUE2","src_connected":true,"dst_connected":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"9zUgLb8sy9bH","src_slot":"trigger down","dst_slot":0,"uid":"DCgj5bSBbPmX","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"w5bkQakqBNgV","src_slot":"grip down","dst_slot":"bool","uid":"jb7Uam7KqpX9","src_connected":true,"dst_connected":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"Kqy6GD6BCNMZ","src_slot":"grip down","dst_slot":0,"uid":"px3EE4qnGT36","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"yju5346RJDc3","src_slot":"menu down","dst_slot":"bool","uid":"ZmEpEeFac9aK","src_connected":true,"dst_connected":true},{"src_nuid":"QErpNfg3sEeg","dst_nuid":"SpetuBr6qKff","src_slot":"menu down","dst_slot":0,"uid":"Yvmhr7PCZPXX","src_connected":true,"dst_connected":true,"dst_dyn":true}],"variables":[{"id":"vib","dt":7}]},"dyn_out":[{"name":"right trigger value","dt":0,"index":0,"uid":"p79EMRwXUV9n","dynamic":true,"type":1,"is_connected":true},{"name":"left trigger value","dt":0,"index":1,"uid":"R6m8Lu5Tsk3x","dynamic":true,"type":1,"is_connected":true},{"name":"right touchpad y","dt":0,"index":2,"uid":"LYkndZNVst63","dynamic":true,"type":1,"is_connected":true},{"name":"left touchpad y","dt":0,"index":3,"uid":"3P4Lbg4dCFmB","dynamic":true,"type":1,"is_connected":true},{"name":"right touchpad x","dt":0,"index":4,"uid":"YkvN8q8pgwzp","dynamic":true,"type":1,"is_connected":true},{"name":"left touchpad x","dt":0,"index":5,"uid":"wRnwZkmxQ2hX","dynamic":true,"type":1,"is_connected":true},{"name":"right menu down","dt":7,"index":6,"uid":"JZAeaY663NSf","dynamic":true,"type":1,"is_connected":true},{"name":"left menu down","dt":7,"index":7,"uid":"9aAx3ggtXRDu","dynamic":true,"type":1,"is_connected":true},{"name":"right trigger down","dt":7,"index":8,"uid":"fwQbGG75FamP","dynamic":true,"type":1},{"name":"left grip down","dt":7,"index":9,"uid":"Tzz5AjwEvyp8","dynamic":true,"type":1},{"name":"right trigger down","dt":7,"index":10,"uid":"m8Q7AeWphBZA","dynamic":true,"type":1},{"name":"left trigger down","dt":7,"index":11,"uid":"wSgmRdx643NP","dynamic":true,"type":1},{"name":"right touchpad down","dt":7,"index":12,"uid":"YYy8gFcf6BNz","dynamic":true,"type":1},{"name":"left touchpad down","dt":7,"index":13,"uid":"HdZG8u7tn4da","dynamic":true,"type":1},{"name":"left hand","dt":21,"index":14,"uid":"Ca9KhGVPh74S","dynamic":true,"type":1,"is_connected":true,"array":true},{"name":"right hand","dt":21,"index":15,"uid":"tZD4aVqpE8HA","dynamic":true,"type":1,"is_connected":true,"array":true}]}],"conns":[{"src_nuid":"kknZXAvU7D9s","dst_nuid":"YLZNrgLkWXy2","src_slot":7,"dst_slot":0,"uid":"hG7DvnxNpRAy","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"kknZXAvU7D9s","dst_nuid":"UTJChvqNvzkf","src_slot":6,"dst_slot":0,"uid":"ZtZgKxyCHFMZ","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"kknZXAvU7D9s","dst_nuid":"QhPZ3JP4LqNu","src_slot":14,"dst_slot":0,"uid":"VXg5fZ2p97A8","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"kknZXAvU7D9s","dst_nuid":"tMMahBWcp9XY","src_slot":15,"dst_slot":0,"uid":"wVQnBDwpUcH4","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"kknZXAvU7D9s","dst_nuid":"Yg5JVYK2ZYju","src_slot":1,"dst_slot":0,"uid":"WPqeMsFpU3Am","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"kknZXAvU7D9s","dst_nuid":"TKBUDqjWCXEB","src_slot":0,"dst_slot":0,"uid":"UuN9AAYMCx4g","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"kknZXAvU7D9s","dst_nuid":"ze3wq4ZD8Tvv","src_slot":2,"dst_slot":0,"uid":"f6XZ9jEJaYcR","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"kknZXAvU7D9s","dst_nuid":"bBhQSHKUr9yN","src_slot":3,"dst_slot":0,"uid":"pLsa6rGBRNaR","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"kknZXAvU7D9s","dst_nuid":"QDyh6Me9uEQB","src_slot":4,"dst_slot":0,"uid":"5BagXPPPg4Gg","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true},{"src_nuid":"kknZXAvU7D9s","dst_nuid":"rMmeyUmvSqdj","src_slot":5,"dst_slot":0,"uid":"8XPQt9EdV6wZ","src_connected":true,"dst_connected":true,"src_dyn":true,"dst_dyn":true}],"x1":375,"y1":113,"x2":561,"y2":577} ================================================ FILE: browser/patches/vr_3d_object_loader.json ================================================ { "abs_t": 0, "active_graph": 0, "graph_uid": 10, "root": { "node_uid": 1, "uid": 0, "parent_uid": -1, "open": true, "nodes": [ { "plugin": "graph", "x": 343, "y": 208, "uid": 0, "dsid": 1, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "39": 0 }, "output_sids": {} }, "title": "VR 3D object loader", "graph": { "node_uid": 75, "uid": 1, "parent_uid": 0, "open": true, "nodes": [ { "plugin": "graph", "x": 1053, "y": 78, "uid": 0, "dsid": 7, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "1": 0, "2": 1, "10": 2, "21": 5, "23": 6 }, "output_sids": {} }, "title": "Scene loader", "graph": { "node_uid": 27, "uid": 2, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "scene_renderer_emitter", "x": 866, "y": 16, "uid": 0 }, { "plugin": "input_proxy", "x": 11, "y": 308, "uid": 1, "dsid": 17, "state": { "slot_id": 0 }, "title": "scene", "dyn_out": [ { "name": "output", "dt": 11, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 759, "y": 89, "uid": 2, "dsid": 17, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "output", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "scale_matrix", "x": 639, "y": 215, "uid": 7 }, { "plugin": "vector", "x": 514, "y": 216, "uid": 8 }, { "plugin": "divide_modulator", "x": 405, "y": 236, "uid": 9 }, { "plugin": "input_proxy", "x": 297, "y": 206, "uid": 10, "dsid": 17, "state": { "slot_id": 0 }, "title": "mesh scale", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "max_modulator", "x": 320, "y": 307, "uid": 11 }, { "plugin": "vector_magnitude", "x": 220, "y": 355, "uid": 12 }, { "plugin": "vector_magnitude", "x": 221, "y": 288, "uid": 13 }, { "plugin": "scene_get_bounding_box", "x": 89, "y": 307, "uid": 14 }, { "plugin": "input_proxy", "x": 646, "y": 277, "uid": 21, "dsid": 16, "state": { "slot_id": 0 }, "title": "transform", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 674, "y": 61, "uid": 23, "dsid": 13, "state": { "slot_id": 0 }, "title": "material", "dyn_out": [ { "name": "output", "dt": 12, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "concatenate_matrix_modulator", "x": 746, "y": 215, "uid": 26 } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 2, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 8, "dst_nuid": 7, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 9, "dst_nuid": 8, "src_slot": 0, "dst_slot": 2, "offset": 2 }, { "src_nuid": 10, "dst_nuid": 9, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 11, "dst_nuid": 9, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 11, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 13, "dst_nuid": 11, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 13, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 14, "dst_nuid": 12, "src_slot": 1, "dst_slot": 0 }, { "src_nuid": 1, "dst_nuid": 14, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true, "offset": 1 }, { "src_nuid": 23, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 7, "dst_nuid": 26, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 21, "dst_nuid": 26, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 26, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3 } ] }, "dyn_in": [ { "name": "scene", "dt": 11, "uid": 0, "index": 0, "type": 0, "is_connected": true }, { "name": "camera", "dt": 6, "uid": 1, "index": 1, "type": 0, "is_connected": true }, { "name": "mesh scale", "dt": 0, "uid": 2, "index": 2, "type": 0, "is_connected": true }, { "name": "transform", "dt": 4, "uid": 5, "index": 3, "type": 0, "is_connected": true }, { "name": "material", "dt": 12, "uid": 6, "index": 4, "type": 0, "is_connected": false } ] }, { "plugin": "url_scene_generator", "x": 168, "y": 90, "uid": 37, "state": { "url": "/data/scene/ladybug/scene.json" }, "title": "Load 3D scene" }, { "plugin": "const_float_generator", "x": 846, "y": 158, "uid": 38, "open": false, "state": { "val": 1 } }, { "plugin": "input_proxy", "x": 406, "y": 135, "uid": 39, "dsid": 4, "state": { "slot_id": 0 }, "title": "camera", "dyn_out": [ { "name": "input", "dt": 6, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "graph", "x": 504, "y": 306, "uid": 40, "open": false, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "8": 1, "9": 2, "10": 3 }, "output_sids": { "1": 0 } }, "title": "Rotate", "graph": { "node_uid": 21, "uid": 3, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "rotation_xyz_matrix", "x": 367, "y": 174, "uid": 0 }, { "plugin": "output_proxy", "x": 485, "y": 174, "uid": 1, "dsid": 7, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 80, "uid": 8, "dsid": 7, "state": { "slot_id": 0 }, "title": "X", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 45, "y": 170, "uid": 9, "dsid": 7, "state": { "slot_id": 0 }, "title": "Y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 46, "y": 257, "uid": 10, "dsid": 7, "state": { "slot_id": 0 }, "title": "Z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "const_float_generator", "x": 40, "y": 386, "uid": 11, "state": { "val": 180 } }, { "plugin": "const_float_generator", "x": 15, "y": 317, "uid": 12, "state": { "val": 360 } }, { "plugin": "multiply_modulator", "x": 165, "y": 80, "uid": 15 }, { "plugin": "subtract_modulator", "x": 260, "y": 105, "uid": 16 }, { "plugin": "multiply_modulator", "x": 165, "y": 170, "uid": 17 }, { "plugin": "subtract_modulator", "x": 260, "y": 195, "uid": 18 }, { "plugin": "multiply_modulator", "x": 163, "y": 257, "uid": 19 }, { "plugin": "subtract_modulator", "x": 258, "y": 282, "uid": 20 } ], "conns": [ { "src_nuid": 0, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 15, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 17, "dst_nuid": 18, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 19, "dst_nuid": 20, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 8, "dst_nuid": 15, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 9, "dst_nuid": 17, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 10, "dst_nuid": 19, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 12, "dst_nuid": 15, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 12, "dst_nuid": 17, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 12, "dst_nuid": 19, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 11, "dst_nuid": 16, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 11, "dst_nuid": 18, "src_slot": 0, "dst_slot": 1, "offset": 1 }, { "src_nuid": 11, "dst_nuid": 20, "src_slot": 0, "dst_slot": 1, "offset": 2 }, { "src_nuid": 16, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 18, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 20, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2 } ] }, "dyn_in": [ { "name": "X", "dt": 0, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "Y", "dt": 0, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "Z", "dt": 0, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] }, { "plugin": "knob_float_generator", "x": 178, "y": 288, "uid": 41, "state": { "val": 0 }, "title": "Rotate X" }, { "plugin": "knob_float_generator", "x": 178, "y": 361, "uid": 42, "state": { "val": 0 }, "title": "Rotate Y" }, { "plugin": "knob_float_generator", "x": 178, "y": 435, "uid": 43, "state": { "val": 0 }, "title": "Rotate Z" }, { "plugin": "graph", "x": 505, "y": 370, "uid": 44, "open": false, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Scale", "graph": { "node_uid": 16, "uid": 4, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "scale_matrix", "x": 189, "y": 49, "uid": 0 }, { "plugin": "output_proxy", "x": 278, "y": 49, "uid": 2, "dsid": 6, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 73, "y": 49, "uid": 3 }, { "plugin": "input_proxy", "x": 7, "y": 9, "uid": 13, "dsid": 6, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 69, "uid": 14, "dsid": 6, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 7, "y": 132, "uid": 15, "dsid": 6, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "graph", "x": 503, "y": 338, "uid": 45, "open": false, "dsid": 8, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "13": 5, "14": 6, "15": 7 }, "output_sids": { "2": 1 } }, "title": "Translate", "graph": { "node_uid": 17, "uid": 5, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "output_proxy", "x": 291, "y": 50, "uid": 2, "dsid": 8, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "vector", "x": 74, "y": 50, "uid": 3 }, { "plugin": "input_proxy", "x": 8, "y": 10, "uid": 13, "dsid": 8, "state": { "slot_id": 0 }, "title": "x", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 70, "uid": 14, "dsid": 8, "state": { "slot_id": 0 }, "title": "y", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 8, "y": 129, "uid": 15, "dsid": 8, "state": { "slot_id": 0 }, "title": "z", "dyn_out": [ { "name": "output", "dt": 0, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "translation_matrix", "x": 191, "y": 50, "uid": 16 } ], "conns": [ { "src_nuid": 13, "dst_nuid": 3, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 14, "dst_nuid": 3, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true }, { "src_nuid": 15, "dst_nuid": 3, "src_slot": 0, "dst_slot": 2, "src_connected": true, "src_dyn": true }, { "src_nuid": 3, "dst_nuid": 16, "src_slot": 0, "dst_slot": 0 }, { "src_nuid": 16, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true } ] }, "dyn_in": [ { "name": "x", "dt": 0, "uid": 5, "index": 0, "type": 0, "is_connected": true }, { "name": "y", "dt": 0, "uid": 6, "index": 1, "type": 0, "is_connected": true }, { "name": "z", "dt": 0, "uid": 7, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 1 } ] }, { "plugin": "slider_float_generator", "x": 265, "y": 292, "uid": 46, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position X" }, { "plugin": "slider_float_generator", "x": 265, "y": 353, "uid": 47, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Y" }, { "plugin": "slider_float_generator", "x": 265, "y": 415, "uid": 48, "state": { "val": 0, "min": -2, "max": 2 }, "title": "Position Z" }, { "plugin": "const_float_generator", "x": 177, "y": 513, "uid": 49, "state": { "val": 1 }, "title": "Scale XYZ" }, { "plugin": "graph", "x": 618, "y": 312, "uid": 52, "open": false, "dsid": 4, "state": { "enabled": true, "always_update": true, "rt_width": 512, "rt_height": 512, "rt_filter": 9729, "input_sids": { "3": 1, "4": 2, "5": 3 }, "output_sids": { "2": 0 } }, "title": "Concatenate x2", "graph": { "node_uid": 6, "uid": 6, "parent_uid": 1, "open": true, "nodes": [ { "plugin": "concatenate_matrix_modulator", "x": 274, "y": 13, "uid": 0 }, { "plugin": "concatenate_matrix_modulator", "x": 92, "y": 13, "uid": 1 }, { "plugin": "output_proxy", "x": 394, "y": 13, "uid": 2, "dsid": 6, "state": { "slot_id": 0 }, "title": "matrix", "dyn_in": [ { "name": "input", "dt": 4, "desc": "Connect a slot of any type to this plugin, to have the parent slot assume its datatype and forward data from this plugin.", "uid": 0, "index": 0, "type": 0, "connected": true, "is_connected": true } ] }, { "plugin": "input_proxy", "x": 197, "y": 14, "uid": 3, "dsid": 6, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 13, "uid": 4, "dsid": 6, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] }, { "plugin": "input_proxy", "x": 9, "y": 71, "uid": 5, "dsid": 6, "state": { "slot_id": 0 }, "title": "matrix", "dyn_out": [ { "name": "output", "dt": 4, "desc": "Connect this to a slot of any type, to have the parent slot assume its datatype and forward data from the parent graph.", "uid": 0, "index": 0, "type": 1, "connected": true } ] } ], "conns": [ { "src_nuid": 1, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1 }, { "src_nuid": 0, "dst_nuid": 2, "src_slot": 0, "dst_slot": 0, "dst_connected": true, "dst_dyn": true }, { "src_nuid": 3, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 4, "dst_nuid": 1, "src_slot": 0, "dst_slot": 0, "src_connected": true, "src_dyn": true }, { "src_nuid": 5, "dst_nuid": 1, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true } ] }, "dyn_in": [ { "name": "matrix", "dt": 4, "uid": 1, "index": 0, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 2, "index": 1, "type": 0, "is_connected": true }, { "name": "matrix", "dt": 4, "uid": 3, "index": 2, "type": 0, "is_connected": true } ], "dyn_out": [ { "name": "matrix", "dt": 4, "uid": 0, "index": 0, "type": 1 } ] } ], "conns": [ { "src_nuid": 37, "dst_nuid": 0, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 38, "dst_nuid": 0, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 39, "dst_nuid": 0, "src_slot": 0, "dst_slot": 1, "src_connected": true, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 41, "dst_nuid": 40, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 42, "dst_nuid": 40, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 43, "dst_nuid": 40, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 46, "dst_nuid": 45, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 47, "dst_nuid": 45, "src_slot": 0, "dst_slot": 1, "dst_dyn": true }, { "src_nuid": 48, "dst_nuid": 45, "src_slot": 0, "dst_slot": 2, "dst_dyn": true }, { "src_nuid": 45, "dst_nuid": 52, "src_slot": 0, "dst_slot": 0, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 40, "dst_nuid": 52, "src_slot": 0, "dst_slot": 1, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 44, "dst_nuid": 52, "src_slot": 0, "dst_slot": 2, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 52, "dst_nuid": 0, "src_slot": 0, "dst_slot": 3, "src_dyn": true, "dst_dyn": true }, { "src_nuid": 49, "dst_nuid": 44, "src_slot": 0, "dst_slot": 0, "dst_dyn": true }, { "src_nuid": 49, "dst_nuid": 44, "src_slot": 0, "dst_slot": 1, "dst_dyn": true, "offset": 1 }, { "src_nuid": 49, "dst_nuid": 44, "src_slot": 0, "dst_slot": 2, "dst_dyn": true, "offset": 2 } ] }, "dyn_in": [ { "name": "camera", "dt": 6, "uid": 0, "index": 0, "type": 0, "is_connected": false } ] } ], "conns": [] } } ================================================ FILE: browser/patches/wasdzc-keyboard-movement.json ================================================ {"nodes":[{"plugin":"graph","x":652,"y":243,"uid":"kLr9zfR7Q95L","state":{"always_update":true,"input_sids":{},"output_sids":{"LbV7nqj28wuV":"EWx39P4SbcFX"}},"title":"WASD + ZC keyboard movement","graph":{"uid":"u8Dw3FgDvSXt","parent_uid":"root","open":true,"nodes":[{"plugin":"vector","x":943,"y":261,"uid":"4jKprrxe8WTZ"},{"plugin":"graph","x":719,"y":392,"uid":"VnGwGDbfd8cV","state":{"always_update":true,"input_sids":{},"output_sids":{"PakL8pjWd7q9":"EXXpsB6sqHbM"}},"title":"WS","graph":{"uid":"P4Jjvaru6ATR","parent_uid":"u8Dw3FgDvSXt","open":false,"nodes":[{"plugin":"key_press_generator","x":429,"y":286,"uid":"qTjqfMT5s8YB","state":{"key":87,"type":0}},{"plugin":"graph","x":641,"y":213,"uid":"mkWEafQEKyxE","state":{"always_update":true,"input_sids":{"5txw3H4xzKjC":"mVnEUjXzKTu9","YzQCtrgQtqNq":"RrXnGmd2CdV3","GPcHvzECbgff":"fQQyfTyQhtVt","nQgsF7xm3TUU":"vqzGBrdNCQUn"},"output_sids":{"pFgkUjCRg8hk":"33F9mKcYFhjZ"}},"title":"Increase / Decrease on Trigger","graph":{"uid":"5YBZQrcnmpSc","parent_uid":"P4Jjvaru6ATR","open":true,"nodes":[{"plugin":"input_proxy","x":300,"y":564,"uid":"5txw3H4xzKjC","title":"increase trigger","dyn_out":[{"name":"input","dt":7,"uid":"aSZDePV2hR2J","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":300,"y":611,"uid":"YzQCtrgQtqNq","title":"decrease trigger","dyn_out":[{"name":"input","dt":7,"uid":"aSZDePV2hR2J","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":1723,"y":650,"uid":"pFgkUjCRg8hk","title":"value","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"DsPSgcn6hY6J","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":301,"y":658,"uid":"GPcHvzECbgff","title":"reset trigger","dyn_out":[{"name":"input","dt":7,"uid":"aSZDePV2hR2J","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":301,"y":703,"uid":"nQgsF7xm3TUU","title":"start value","dyn_out":[{"name":"input","dt":0,"uid":"6JttH4uJyNfW","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"add_modulator","x":1396,"y":656,"uid":"QRMSRyrN5Cvn"},{"plugin":"if_else_modulator","x":597,"y":318,"uid":"RmePkN6PfLPn"},{"plugin":"variable_local_read","x":338,"y":319,"uid":"UZmwPMzKacLK","title":"value","dyn_out":[{"name":"value","dt":0,"uid":"2szctpEgKtv8","dynamic":true,"type":1,"index":0,"is_connected":true}]},{"plugin":"variable_local_write","x":1541,"y":337,"uid":"ZKju2wAcMzaA","title":"value","dyn_in":[{"name":"value","dt":0,"uid":"3nZhVDGKFJvn","dynamic":true,"type":0,"index":0,"is_connected":true}]},{"plugin":"if_else_modulator","x":1020,"y":337,"uid":"8cuWKJrm828w","title":"add on increase"},{"plugin":"add_modulator","x":783,"y":432,"uid":"DvEFzLKTFyzv"},{"plugin":"const_float_generator","x":531,"y":163,"uid":"a8fjt6AYybrn","state":{"val":1},"title":"one"},{"plugin":"if_else_modulator","x":1286,"y":332,"uid":"vXhtpxjBBqf9","title":"dec on decrease"},{"plugin":"subtract_modulator","x":1284,"y":487,"uid":"UkMQLCV4ANPp"}],"conns":[{"src_nuid":"nQgsF7xm3TUU","dst_nuid":"QRMSRyrN5Cvn","src_slot":0,"dst_slot":"a","uid":"s7uNUjwrZabA","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"QRMSRyrN5Cvn","dst_nuid":"pFgkUjCRg8hk","src_slot":"result","dst_slot":0,"uid":"3KRNHBtxED9X","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"GPcHvzECbgff","dst_nuid":"RmePkN6PfLPn","src_slot":0,"dst_slot":"condition","uid":"zYFvcySyseK3","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"nQgsF7xm3TUU","dst_nuid":"RmePkN6PfLPn","src_slot":0,"dst_slot":"true value","uid":"ZsQmNgQyTnAV","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"UZmwPMzKacLK","dst_nuid":"RmePkN6PfLPn","src_slot":0,"dst_slot":"false value","uid":"ynRNHu7W8uzE","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"5txw3H4xzKjC","dst_nuid":"8cuWKJrm828w","src_slot":0,"dst_slot":"condition","uid":"MaxGqMpg33wF","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"RmePkN6PfLPn","dst_nuid":"8cuWKJrm828w","src_slot":"value","dst_slot":"false value","uid":"pKwRBJnmRHdp","src_connected":true,"dst_connected":true},{"src_nuid":"RmePkN6PfLPn","dst_nuid":"DvEFzLKTFyzv","src_slot":"value","dst_slot":"a","uid":"Z4uQaTY6FstJ","src_connected":true,"dst_connected":true},{"src_nuid":"a8fjt6AYybrn","dst_nuid":"DvEFzLKTFyzv","src_slot":"value","dst_slot":"b","uid":"YjdNxkg8vpfF","src_connected":true,"dst_connected":true},{"src_nuid":"DvEFzLKTFyzv","dst_nuid":"8cuWKJrm828w","src_slot":"result","dst_slot":"true value","uid":"dG7PMzgaWnP8","src_connected":true,"dst_connected":true},{"src_nuid":"8cuWKJrm828w","dst_nuid":"vXhtpxjBBqf9","src_slot":"value","dst_slot":"false value","uid":"y3bPCggcaXHn","src_connected":true,"dst_connected":true},{"src_nuid":"YzQCtrgQtqNq","dst_nuid":"vXhtpxjBBqf9","src_slot":0,"dst_slot":"condition","uid":"xJbeMhGLD9jD","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"8cuWKJrm828w","dst_nuid":"UkMQLCV4ANPp","src_slot":"value","dst_slot":"a","uid":"7JvbNQaMLKUb","src_connected":true,"dst_connected":true},{"src_nuid":"a8fjt6AYybrn","dst_nuid":"UkMQLCV4ANPp","src_slot":"value","dst_slot":"b","uid":"9pg7kykQJ2UR","src_connected":true,"dst_connected":true},{"src_nuid":"UkMQLCV4ANPp","dst_nuid":"vXhtpxjBBqf9","src_slot":"result","dst_slot":"true value","uid":"cW3EDGL8CCUs","src_connected":true,"dst_connected":true},{"src_nuid":"vXhtpxjBBqf9","dst_nuid":"ZKju2wAcMzaA","src_slot":"value","dst_slot":0,"uid":"8wTmtJGxhnFu","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"vXhtpxjBBqf9","dst_nuid":"QRMSRyrN5Cvn","src_slot":"value","dst_slot":"b","uid":"PDQ2GJMjjP7V","src_connected":true,"dst_connected":true}],"variables":[{"id":"value","dt":0}]},"dyn_in":[{"name":"start value","dt":0,"index":0,"uid":"vqzGBrdNCQUn","dynamic":true,"type":0,"is_connected":true},{"name":"reset trigger","dt":7,"index":1,"uid":"fQQyfTyQhtVt","dynamic":true,"type":0,"is_connected":false},{"name":"decrease trigger","dt":7,"index":2,"uid":"RrXnGmd2CdV3","dynamic":true,"type":0,"is_connected":true},{"name":"increase trigger","dt":7,"index":3,"uid":"mVnEUjXzKTu9","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"value","dt":0,"index":0,"uid":"33F9mKcYFhjZ","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"const_float_generator","x":455,"y":191,"uid":"Mv6u32hQhcRy","state":{"val":0.1},"title":"start"},{"plugin":"key_press_generator","x":400,"y":402,"uid":"Z99fXK8rYsmu","state":{"key":83,"type":0}},{"plugin":"divide_modulator","x":966,"y":381,"uid":"umSLUJA824jy"},{"plugin":"const_float_generator","x":692,"y":395,"uid":"BWFJm5jfYsHG","state":{"val":50}},{"plugin":"output_proxy","x":1202,"y":341,"uid":"PakL8pjWd7q9","title":"Z","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"FZWfufkRZjhV","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]}],"conns":[{"src_nuid":"qTjqfMT5s8YB","dst_nuid":"mkWEafQEKyxE","src_slot":"signal","dst_slot":2,"uid":"u4JSTX6SaYjZ","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"Mv6u32hQhcRy","dst_nuid":"mkWEafQEKyxE","src_slot":"value","dst_slot":0,"uid":"6QRD76b9mz6E","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"Z99fXK8rYsmu","dst_nuid":"mkWEafQEKyxE","src_slot":"signal","dst_slot":3,"uid":"rHnBtfgT7wkP","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"mkWEafQEKyxE","dst_nuid":"umSLUJA824jy","src_slot":0,"dst_slot":"value","uid":"ewnc7rf3KWs4","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"BWFJm5jfYsHG","dst_nuid":"umSLUJA824jy","src_slot":"value","dst_slot":"scalar","uid":"gL8KkBKEejmr","src_connected":true,"dst_connected":true},{"src_nuid":"umSLUJA824jy","dst_nuid":"PakL8pjWd7q9","src_slot":"result","dst_slot":0,"uid":"NzGqNQcxgRr9","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"Z","dt":0,"index":0,"uid":"EXXpsB6sqHbM","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":721,"y":251,"uid":"wBNVHC3DeY65","state":{"always_update":true,"input_sids":{},"output_sids":{"8bBxHzTNDk6g":"XVgMPDERbV7g"}},"title":"AD","graph":{"uid":"B3L5AxezKRVC","parent_uid":"u8Dw3FgDvSXt","open":true,"nodes":[{"plugin":"key_press_generator","x":539,"y":301,"uid":"metyFMaen2sN","state":{"key":65,"type":0}},{"plugin":"graph","x":751,"y":228,"uid":"L863vkaHVWuy","state":{"always_update":true,"input_sids":{"KS48EtUpjgsf":"mVnEUjXzKTu9","b8ze3t3hNjHH":"RrXnGmd2CdV3","KR2yT6Zyvd4G":"fQQyfTyQhtVt","dYzSaeNJsVUy":"vqzGBrdNCQUn"},"output_sids":{"9D4WSvFWcfze":"33F9mKcYFhjZ"}},"title":"Increase / Decrease on Trigger","graph":{"uid":"GQWGsu7nJf42","parent_uid":"B3L5AxezKRVC","open":true,"nodes":[{"plugin":"input_proxy","x":300,"y":564,"uid":"KS48EtUpjgsf","title":"increase trigger","dyn_out":[{"name":"input","dt":7,"uid":"aSZDePV2hR2J","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":300,"y":611,"uid":"b8ze3t3hNjHH","title":"decrease trigger","dyn_out":[{"name":"input","dt":7,"uid":"aSZDePV2hR2J","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":1723,"y":650,"uid":"9D4WSvFWcfze","title":"value","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"DsPSgcn6hY6J","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":301,"y":658,"uid":"KR2yT6Zyvd4G","title":"reset trigger","dyn_out":[{"name":"input","dt":7,"uid":"aSZDePV2hR2J","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":301,"y":703,"uid":"dYzSaeNJsVUy","title":"start value","dyn_out":[{"name":"input","dt":0,"uid":"6JttH4uJyNfW","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"add_modulator","x":1396,"y":656,"uid":"FLhMGezj54WK"},{"plugin":"if_else_modulator","x":597,"y":318,"uid":"rsfZDrgXHuem"},{"plugin":"variable_local_read","x":338,"y":319,"uid":"47cayBVRnG6g","title":"value","dyn_out":[{"name":"value","dt":0,"uid":"2szctpEgKtv8","dynamic":true,"type":1,"index":0,"is_connected":true}]},{"plugin":"variable_local_write","x":1541,"y":337,"uid":"RKUFqpGQfEjz","title":"value","dyn_in":[{"name":"value","dt":0,"uid":"3nZhVDGKFJvn","dynamic":true,"type":0,"index":0,"is_connected":true}]},{"plugin":"if_else_modulator","x":1020,"y":337,"uid":"226BGzrBejbc","title":"add on increase"},{"plugin":"add_modulator","x":783,"y":432,"uid":"qJWft2KDrSxH"},{"plugin":"const_float_generator","x":531,"y":163,"uid":"gp5BGm7KWHRw","state":{"val":1},"title":"one"},{"plugin":"if_else_modulator","x":1286,"y":332,"uid":"kd5HAjWWy2gG","title":"dec on decrease"},{"plugin":"subtract_modulator","x":1284,"y":487,"uid":"rmY5vPS64GzQ"}],"conns":[{"src_nuid":"dYzSaeNJsVUy","dst_nuid":"FLhMGezj54WK","src_slot":0,"dst_slot":"a","uid":"rCbpYZDqb2Bu","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"FLhMGezj54WK","dst_nuid":"9D4WSvFWcfze","src_slot":"result","dst_slot":0,"uid":"QTYRxNVcZxZr","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"KR2yT6Zyvd4G","dst_nuid":"rsfZDrgXHuem","src_slot":0,"dst_slot":"condition","uid":"yWWYFYr7gLSR","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"dYzSaeNJsVUy","dst_nuid":"rsfZDrgXHuem","src_slot":0,"dst_slot":"true value","uid":"f7k99BBRCgdW","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"47cayBVRnG6g","dst_nuid":"rsfZDrgXHuem","src_slot":0,"dst_slot":"false value","uid":"jpBgakeYu7wD","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"KS48EtUpjgsf","dst_nuid":"226BGzrBejbc","src_slot":0,"dst_slot":"condition","uid":"ZbBPQ24pzx6D","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"rsfZDrgXHuem","dst_nuid":"226BGzrBejbc","src_slot":"value","dst_slot":"false value","uid":"EEHH9RrzMCGp","src_connected":true,"dst_connected":true},{"src_nuid":"rsfZDrgXHuem","dst_nuid":"qJWft2KDrSxH","src_slot":"value","dst_slot":"a","uid":"MgMRAgsWpmvn","src_connected":true,"dst_connected":true},{"src_nuid":"gp5BGm7KWHRw","dst_nuid":"qJWft2KDrSxH","src_slot":"value","dst_slot":"b","uid":"be3BvCRY7WCG","src_connected":true,"dst_connected":true},{"src_nuid":"qJWft2KDrSxH","dst_nuid":"226BGzrBejbc","src_slot":"result","dst_slot":"true value","uid":"MdCw7M28uMzT","src_connected":true,"dst_connected":true},{"src_nuid":"226BGzrBejbc","dst_nuid":"kd5HAjWWy2gG","src_slot":"value","dst_slot":"false value","uid":"bMPcJ4GK3MCk","src_connected":true,"dst_connected":true},{"src_nuid":"b8ze3t3hNjHH","dst_nuid":"kd5HAjWWy2gG","src_slot":0,"dst_slot":"condition","uid":"fzXf6HTpF7d8","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"226BGzrBejbc","dst_nuid":"rmY5vPS64GzQ","src_slot":"value","dst_slot":"a","uid":"Yr6hs5aQJ22q","src_connected":true,"dst_connected":true},{"src_nuid":"gp5BGm7KWHRw","dst_nuid":"rmY5vPS64GzQ","src_slot":"value","dst_slot":"b","uid":"EqJGJGBgVCyq","src_connected":true,"dst_connected":true},{"src_nuid":"rmY5vPS64GzQ","dst_nuid":"kd5HAjWWy2gG","src_slot":"result","dst_slot":"true value","uid":"ftkzwb3pwwjh","src_connected":true,"dst_connected":true},{"src_nuid":"kd5HAjWWy2gG","dst_nuid":"RKUFqpGQfEjz","src_slot":"value","dst_slot":0,"uid":"AzVLJuNC7S9N","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"kd5HAjWWy2gG","dst_nuid":"FLhMGezj54WK","src_slot":"value","dst_slot":"b","uid":"td52y9hqFPuA","src_connected":true,"dst_connected":true}],"variables":[{"id":"value","dt":0}]},"dyn_in":[{"name":"start value","dt":0,"index":0,"uid":"vqzGBrdNCQUn","dynamic":true,"type":0,"is_connected":true},{"name":"reset trigger","dt":7,"index":1,"uid":"fQQyfTyQhtVt","dynamic":true,"type":0,"is_connected":false},{"name":"decrease trigger","dt":7,"index":2,"uid":"RrXnGmd2CdV3","dynamic":true,"type":0,"is_connected":true},{"name":"increase trigger","dt":7,"index":3,"uid":"mVnEUjXzKTu9","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"value","dt":0,"index":0,"uid":"33F9mKcYFhjZ","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"const_float_generator","x":565,"y":206,"uid":"YLbTkarR4CM6","state":{"val":0.1},"title":"start"},{"plugin":"key_press_generator","x":510,"y":417,"uid":"pTBDTLNY55SH","state":{"key":68,"type":0}},{"plugin":"divide_modulator","x":1076,"y":396,"uid":"WwzqXTPtnsVe"},{"plugin":"const_float_generator","x":802,"y":410,"uid":"WZf4HNajLMuC","state":{"val":50}},{"plugin":"output_proxy","x":1312,"y":356,"uid":"8bBxHzTNDk6g","title":"X","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"FZWfufkRZjhV","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]}],"conns":[{"src_nuid":"metyFMaen2sN","dst_nuid":"L863vkaHVWuy","src_slot":"signal","dst_slot":2,"uid":"7VM6UDj46gEL","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"YLbTkarR4CM6","dst_nuid":"L863vkaHVWuy","src_slot":"value","dst_slot":0,"uid":"KmL5pFFCRwC7","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"pTBDTLNY55SH","dst_nuid":"L863vkaHVWuy","src_slot":"signal","dst_slot":3,"uid":"pbFUC3ZhM2eU","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"L863vkaHVWuy","dst_nuid":"WwzqXTPtnsVe","src_slot":0,"dst_slot":"value","uid":"MuGgvtrCfrev","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"WZf4HNajLMuC","dst_nuid":"WwzqXTPtnsVe","src_slot":"value","dst_slot":"scalar","uid":"5hE78mh2dqM6","src_connected":true,"dst_connected":true},{"src_nuid":"WwzqXTPtnsVe","dst_nuid":"8bBxHzTNDk6g","src_slot":"result","dst_slot":0,"uid":"8yq2c4UzBcEK","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"X","dt":0,"index":0,"uid":"XVgMPDERbV7g","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"graph","x":719,"y":322,"uid":"zLwepetqbDpT","state":{"always_update":true,"input_sids":{},"output_sids":{"9FxfYMDNmyLG":"XVgMPDERbV7g"}},"title":"ZC","graph":{"uid":"mpUqeYpkVR5r","parent_uid":"u8Dw3FgDvSXt","open":true,"nodes":[{"plugin":"key_press_generator","x":218,"y":202,"uid":"2n7nNzvGVDrV","state":{"key":90,"type":0}},{"plugin":"graph","x":430,"y":129,"uid":"HAsNzysKvhvx","state":{"always_update":true,"input_sids":{"WaHW55BeKVJ4":"mVnEUjXzKTu9","s92AvGvkr8Ws":"RrXnGmd2CdV3","qZX79YL8FWXC":"fQQyfTyQhtVt","CzRNtsnuXTTk":"vqzGBrdNCQUn"},"output_sids":{"mwYv5fKz2MUp":"33F9mKcYFhjZ"}},"title":"Increase / Decrease on Trigger","graph":{"uid":"abp8XM3VVAFv","parent_uid":"mpUqeYpkVR5r","open":true,"nodes":[{"plugin":"input_proxy","x":300,"y":564,"uid":"WaHW55BeKVJ4","title":"increase trigger","dyn_out":[{"name":"input","dt":7,"uid":"aSZDePV2hR2J","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":300,"y":611,"uid":"s92AvGvkr8Ws","title":"decrease trigger","dyn_out":[{"name":"input","dt":7,"uid":"aSZDePV2hR2J","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"output_proxy","x":1723,"y":650,"uid":"mwYv5fKz2MUp","title":"value","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"DsPSgcn6hY6J","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":301,"y":658,"uid":"qZX79YL8FWXC","title":"reset trigger","dyn_out":[{"name":"input","dt":7,"uid":"aSZDePV2hR2J","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"input_proxy","x":301,"y":703,"uid":"CzRNtsnuXTTk","title":"start value","dyn_out":[{"name":"input","dt":0,"uid":"6JttH4uJyNfW","dynamic":true,"type":1,"index":0,"is_connected":true,"connected":true}]},{"plugin":"add_modulator","x":1396,"y":656,"uid":"Qnwuf757Ax3A"},{"plugin":"if_else_modulator","x":597,"y":318,"uid":"E3khMuSxqxWG"},{"plugin":"variable_local_read","x":338,"y":319,"uid":"uumV3GchwJuj","title":"value","dyn_out":[{"name":"value","dt":0,"uid":"2szctpEgKtv8","dynamic":true,"type":1,"index":0,"is_connected":true}]},{"plugin":"variable_local_write","x":1541,"y":337,"uid":"TcVTnc2dQFnw","title":"value","dyn_in":[{"name":"value","dt":0,"uid":"3nZhVDGKFJvn","dynamic":true,"type":0,"index":0,"is_connected":true}]},{"plugin":"if_else_modulator","x":1020,"y":337,"uid":"DJsbEj8THYZu","title":"add on increase"},{"plugin":"add_modulator","x":783,"y":432,"uid":"djxB6TNpYVu8"},{"plugin":"const_float_generator","x":531,"y":163,"uid":"at8NL9QF7Uax","state":{"val":1},"title":"one"},{"plugin":"if_else_modulator","x":1286,"y":332,"uid":"RYanNw3AEjh4","title":"dec on decrease"},{"plugin":"subtract_modulator","x":1284,"y":487,"uid":"XJxvftDEWjW7"}],"conns":[{"src_nuid":"CzRNtsnuXTTk","dst_nuid":"Qnwuf757Ax3A","src_slot":0,"dst_slot":"a","uid":"jyRHqzx9GMQ9","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"Qnwuf757Ax3A","dst_nuid":"mwYv5fKz2MUp","src_slot":"result","dst_slot":0,"uid":"CUtpXLTKA6wz","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"qZX79YL8FWXC","dst_nuid":"E3khMuSxqxWG","src_slot":0,"dst_slot":"condition","uid":"C86eyyVfH9AY","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"CzRNtsnuXTTk","dst_nuid":"E3khMuSxqxWG","src_slot":0,"dst_slot":"true value","uid":"TxW3p4cgWAFy","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"uumV3GchwJuj","dst_nuid":"E3khMuSxqxWG","src_slot":0,"dst_slot":"false value","uid":"CUdyrRpbUZTr","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"WaHW55BeKVJ4","dst_nuid":"DJsbEj8THYZu","src_slot":0,"dst_slot":"condition","uid":"hnU3g5vBGsGC","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"E3khMuSxqxWG","dst_nuid":"DJsbEj8THYZu","src_slot":"value","dst_slot":"false value","uid":"KzSsWv5bSj9W","src_connected":true,"dst_connected":true},{"src_nuid":"E3khMuSxqxWG","dst_nuid":"djxB6TNpYVu8","src_slot":"value","dst_slot":"a","uid":"CHUNGY2kJngg","src_connected":true,"dst_connected":true},{"src_nuid":"at8NL9QF7Uax","dst_nuid":"djxB6TNpYVu8","src_slot":"value","dst_slot":"b","uid":"sAd9XL99DGm9","src_connected":true,"dst_connected":true},{"src_nuid":"djxB6TNpYVu8","dst_nuid":"DJsbEj8THYZu","src_slot":"result","dst_slot":"true value","uid":"Tj2yxHZXyhBZ","src_connected":true,"dst_connected":true},{"src_nuid":"DJsbEj8THYZu","dst_nuid":"RYanNw3AEjh4","src_slot":"value","dst_slot":"false value","uid":"4jVBpq9p626r","src_connected":true,"dst_connected":true},{"src_nuid":"s92AvGvkr8Ws","dst_nuid":"RYanNw3AEjh4","src_slot":0,"dst_slot":"condition","uid":"gRNCtz6368p6","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"DJsbEj8THYZu","dst_nuid":"XJxvftDEWjW7","src_slot":"value","dst_slot":"a","uid":"EY3pprxDqmwN","src_connected":true,"dst_connected":true},{"src_nuid":"at8NL9QF7Uax","dst_nuid":"XJxvftDEWjW7","src_slot":"value","dst_slot":"b","uid":"Gry22vM5ChEA","src_connected":true,"dst_connected":true},{"src_nuid":"XJxvftDEWjW7","dst_nuid":"RYanNw3AEjh4","src_slot":"result","dst_slot":"true value","uid":"mGF468eUcPLz","src_connected":true,"dst_connected":true},{"src_nuid":"RYanNw3AEjh4","dst_nuid":"TcVTnc2dQFnw","src_slot":"value","dst_slot":0,"uid":"UYMq6GzdVgWB","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"RYanNw3AEjh4","dst_nuid":"Qnwuf757Ax3A","src_slot":"value","dst_slot":"b","uid":"YnhjFsCKECMe","src_connected":true,"dst_connected":true}],"variables":[{"id":"value","dt":0}]},"dyn_in":[{"name":"start value","dt":0,"index":0,"uid":"vqzGBrdNCQUn","dynamic":true,"type":0,"is_connected":true},{"name":"reset trigger","dt":7,"index":1,"uid":"fQQyfTyQhtVt","dynamic":true,"type":0,"is_connected":false},{"name":"decrease trigger","dt":7,"index":2,"uid":"RrXnGmd2CdV3","dynamic":true,"type":0,"is_connected":true},{"name":"increase trigger","dt":7,"index":3,"uid":"mVnEUjXzKTu9","dynamic":true,"type":0,"is_connected":true}],"dyn_out":[{"name":"value","dt":0,"index":0,"uid":"33F9mKcYFhjZ","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"const_float_generator","x":244,"y":107,"uid":"NjhruD4d6fBW","state":{"val":0.1},"title":"start"},{"plugin":"key_press_generator","x":189,"y":318,"uid":"5x6F86LkPVGW","state":{"key":67,"type":0}},{"plugin":"divide_modulator","x":755,"y":297,"uid":"k4tgJSkxCtyz"},{"plugin":"const_float_generator","x":481,"y":311,"uid":"dHbDqQApC5Sp","state":{"val":50}},{"plugin":"output_proxy","x":991,"y":257,"uid":"9FxfYMDNmyLG","title":"Y","dyn_in":[{"name":"output","dt":0,"def":null,"uid":"FZWfufkRZjhV","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]}],"conns":[{"src_nuid":"NjhruD4d6fBW","dst_nuid":"HAsNzysKvhvx","src_slot":"value","dst_slot":0,"uid":"mNxAMzwxQNNw","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"HAsNzysKvhvx","dst_nuid":"k4tgJSkxCtyz","src_slot":0,"dst_slot":"value","uid":"PRL9a4fFtWQv","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"dHbDqQApC5Sp","dst_nuid":"k4tgJSkxCtyz","src_slot":"value","dst_slot":"scalar","uid":"tbDzfGNweTq2","src_connected":true,"dst_connected":true},{"src_nuid":"k4tgJSkxCtyz","dst_nuid":"9FxfYMDNmyLG","src_slot":"result","dst_slot":0,"uid":"jRjfKTbTDJnc","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"5x6F86LkPVGW","dst_nuid":"HAsNzysKvhvx","src_slot":"signal","dst_slot":2,"uid":"n2CMdMTADMXq","src_connected":true,"dst_connected":true,"dst_dyn":true},{"src_nuid":"2n7nNzvGVDrV","dst_nuid":"HAsNzysKvhvx","src_slot":"signal","dst_slot":3,"uid":"bw3KJgudLc2H","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"Y","dt":0,"index":0,"uid":"XVgMPDERbV7g","dynamic":true,"type":1,"is_connected":true}]},{"plugin":"output_proxy","x":1244,"y":269,"uid":"LbV7nqj28wuV","title":"position","dyn_in":[{"name":"output","dt":5,"def":null,"uid":"jXDB3t6uHACa","dynamic":true,"type":0,"index":0,"is_connected":true,"connected":true}]},{"plugin":"annotation","x":947,"y":95,"uid":"TLV4mF3F2uDd","state":{"text":"Connect this to the position of the camera!","width":133,"height":80},"title":"WASD:"}],"conns":[{"src_nuid":"wBNVHC3DeY65","dst_nuid":"4jKprrxe8WTZ","src_slot":0,"dst_slot":"x","uid":"RCathDeH4rQt","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"zLwepetqbDpT","dst_nuid":"4jKprrxe8WTZ","src_slot":0,"dst_slot":"y","uid":"LsLGEepzdHBS","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"VnGwGDbfd8cV","dst_nuid":"4jKprrxe8WTZ","src_slot":0,"dst_slot":"z","uid":"zBtf7QL4GV9L","src_connected":true,"dst_connected":true,"src_dyn":true},{"src_nuid":"4jKprrxe8WTZ","dst_nuid":"LbV7nqj28wuV","src_slot":"vector","dst_slot":0,"uid":"xpuWeQkmvkqS","src_connected":true,"dst_connected":true,"dst_dyn":true}]},"dyn_out":[{"name":"position","dt":5,"index":0,"uid":"EWx39P4SbcFX","dynamic":true,"type":1}]}],"conns":[],"x1":702,"y1":293,"x2":985,"y2":352} ================================================ FILE: browser/plugins/absolute_modulator.plugin.js ================================================ E2.p = E2.plugins["absolute_modulator"] = function(core, node) { this.desc = 'Emit the absolute value of the input.'; this.input_slots = [ { name: 'value', dt: core.datatypes.FLOAT, desc: 'Positive or negative input value', def: 0.0 } ]; this.output_slots = [ { name: 'result', dt: core.datatypes.FLOAT, desc: 'Positive output value', def: 0.0 } ]; }; E2.p.prototype.reset = function() { this.input_val = 0.0; this.output_val = 0.0; }; E2.p.prototype.update_input = function(slot, data) { this.input_val = data; }; E2.p.prototype.update_state = function() { this.output_val = Math.abs(this.input_val); }; E2.p.prototype.update_output = function(slot) { return this.output_val; }; ================================================ FILE: browser/plugins/accumulate_modulator.plugin.js ================================================ E2.p = E2.plugins["accumulate_modulator"] = function(core, node) { this.desc = 'Every input value is accumulated in an internal buffer (which resets to zero on playback stop).'; this.input_slots = [ { name: 'value', dt: core.datatypes.FLOAT, desc: 'A small value to be accumulated in an internal buffer.', def: 0.0 }, { name: 'reset', dt: core.datatypes.FLOAT, desc: 'Send a value to this slot to reset the accumulator to that value.', def: 0.0 } ]; this.output_slots = [ { name: 'value', dt: core.datatypes.FLOAT, desc: 'The current value of the accumulation buffer.', def: 0.0 } ]; this.state = { value: 0.0 }; }; E2.p.prototype.reset = function() { this.updated = true; }; E2.p.prototype.update_input = function(slot, data) { if(slot.index === 0) this.state.value += data; else this.state.value = data; }; E2.p.prototype.update_output = function(slot) { return this.state.value; }; ================================================ FILE: browser/plugins/ace/ace.js ================================================ /* ***** BEGIN LICENSE BLOCK ***** * Distributed under the BSD license: * * Copyright (c) 2010, Ajax.org B.V. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Ajax.org B.V. nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ***** END LICENSE BLOCK ***** */ (function() { var ACE_NAMESPACE = ""; var global = (function() { return this; })(); if (!ACE_NAMESPACE && typeof requirejs !== "undefined") return; var _define = function(module, deps, payload) { if (typeof module !== 'string') { if (_define.original) _define.original.apply(window, arguments); else { console.error('dropping module because define wasn\'t a string.'); console.trace(); } return; } if (arguments.length == 2) payload = deps; if (!_define.modules) { _define.modules = {}; _define.payloads = {}; } _define.payloads[module] = payload; _define.modules[module] = null; }; var _require = function(parentId, module, callback) { if (Object.prototype.toString.call(module) === "[object Array]") { var params = []; for (var i = 0, l = module.length; i < l; ++i) { var dep = lookup(parentId, module[i]); if (!dep && _require.original) return _require.original.apply(window, arguments); params.push(dep); } if (callback) { callback.apply(null, params); } } else if (typeof module === 'string') { var payload = lookup(parentId, module); if (!payload && _require.original) return _require.original.apply(window, arguments); if (callback) { callback(); } return payload; } else { if (_require.original) return _require.original.apply(window, arguments); } }; var normalizeModule = function(parentId, moduleName) { if (moduleName.indexOf("!") !== -1) { var chunks = moduleName.split("!"); return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]); } if (moduleName.charAt(0) == ".") { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = base + "/" + moduleName; while(moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } } return moduleName; }; var lookup = function(parentId, moduleName) { moduleName = normalizeModule(parentId, moduleName); var module = _define.modules[moduleName]; if (!module) { module = _define.payloads[moduleName]; if (typeof module === 'function') { var exports = {}; var mod = { id: moduleName, uri: '', exports: exports, packaged: true }; var req = function(module, callback) { return _require(moduleName, module, callback); }; var returnValue = module(req, exports, mod); exports = returnValue || mod.exports; _define.modules[moduleName] = exports; delete _define.payloads[moduleName]; } module = _define.modules[moduleName] = exports || module; } return module; }; function exportAce(ns) { var require = function(module, callback) { return _require("", module, callback); }; var root = global; if (ns) { if (!global[ns]) global[ns] = {}; root = global[ns]; } if (!root.define || !root.define.packaged) { _define.original = root.define; root.define = _define; root.define.packaged = true; } if (!root.require || !root.require.packaged) { _require.original = root.require; root.require = require; root.require.packaged = true; } } exportAce(ACE_NAMESPACE); })(); define('ace/ace', ['require', 'exports', 'module' , 'ace/lib/fixoldbrowsers', 'ace/lib/dom', 'ace/lib/event', 'ace/editor', 'ace/edit_session', 'ace/undomanager', 'ace/virtual_renderer', 'ace/multi_select', 'ace/worker/worker_client', 'ace/keyboard/hash_handler', 'ace/placeholder', 'ace/mode/folding/fold_mode', 'ace/theme/textmate', 'ace/config'], function(require, exports, module) { require("./lib/fixoldbrowsers"); var dom = require("./lib/dom"); var event = require("./lib/event"); var Editor = require("./editor").Editor; var EditSession = require("./edit_session").EditSession; var UndoManager = require("./undomanager").UndoManager; var Renderer = require("./virtual_renderer").VirtualRenderer; var MultiSelect = require("./multi_select").MultiSelect; require("./worker/worker_client"); require("./keyboard/hash_handler"); require("./placeholder"); require("./mode/folding/fold_mode"); require("./theme/textmate"); exports.config = require("./config"); exports.require = require; exports.edit = function(el) { if (typeof(el) == "string") { var _id = el; var el = document.getElementById(_id); if (!el) throw new Error("ace.edit can't find div #" + _id); } if (el.env && el.env.editor instanceof Editor) return el.env.editor; var doc = exports.createEditSession(dom.getInnerText(el)); el.innerHTML = ''; var editor = new Editor(new Renderer(el)); new MultiSelect(editor); editor.setSession(doc); var env = { document: doc, editor: editor, onResize: editor.resize.bind(editor, null) }; event.addListener(window, "resize", env.onResize); editor.on("destroy", function() { event.removeListener(window, "resize", env.onResize); }); el.env = editor.env = env; return editor; }; exports.createEditSession = function(text, mode) { var doc = new EditSession(text, mode); doc.setUndoManager(new UndoManager()); return doc; } exports.EditSession = EditSession; exports.UndoManager = UndoManager; }); define('ace/lib/fixoldbrowsers', ['require', 'exports', 'module' , 'ace/lib/regexp', 'ace/lib/es5-shim'], function(require, exports, module) { require("./regexp"); require("./es5-shim"); }); define('ace/lib/regexp', ['require', 'exports', 'module' ], function(require, exports, module) { var real = { exec: RegExp.prototype.exec, test: RegExp.prototype.test, match: String.prototype.match, replace: String.prototype.replace, split: String.prototype.split }, compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups compliantLastIndexIncrement = function () { var x = /^/g; real.test.call(x, ""); return !x.lastIndex; }(); if (compliantLastIndexIncrement && compliantExecNpcg) return; RegExp.prototype.exec = function (str) { var match = real.exec.apply(this, arguments), name, r2; if ( typeof(str) == 'string' && match) { if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) { r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", "")); real.replace.call(str.slice(match.index), r2, function () { for (var i = 1; i < arguments.length - 2; i++) { if (arguments[i] === undefined) match[i] = undefined; } }); } if (this._xregexp && this._xregexp.captureNames) { for (var i = 1; i < match.length; i++) { name = this._xregexp.captureNames[i - 1]; if (name) match[name] = match[i]; } } if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) this.lastIndex--; } return match; }; if (!compliantLastIndexIncrement) { RegExp.prototype.test = function (str) { var match = real.exec.call(this, str); if (match && this.global && !match[0].length && (this.lastIndex > match.index)) this.lastIndex--; return !!match; }; } function getNativeFlags (regex) { return (regex.global ? "g" : "") + (regex.ignoreCase ? "i" : "") + (regex.multiline ? "m" : "") + (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3 (regex.sticky ? "y" : ""); } function indexOf (array, item, from) { if (Array.prototype.indexOf) // Use the native array method if available return array.indexOf(item, from); for (var i = from || 0; i < array.length; i++) { if (array[i] === item) return i; } return -1; } }); define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) { function Empty() {} if (!Function.prototype.bind) { Function.prototype.bind = function bind(that) { // .length is 1 var target = this; if (typeof target != "function") { throw new TypeError("Function.prototype.bind called on incompatible " + target); } var args = slice.call(arguments, 1); // for normal call var bound = function () { if (this instanceof bound) { var result = target.apply( this, args.concat(slice.call(arguments)) ); if (Object(result) === result) { return result; } return this; } else { return target.apply( that, args.concat(slice.call(arguments)) ); } }; if(target.prototype) { Empty.prototype = target.prototype; bound.prototype = new Empty(); Empty.prototype = null; } return bound; }; } var call = Function.prototype.call; var prototypeOfArray = Array.prototype; var prototypeOfObject = Object.prototype; var slice = prototypeOfArray.slice; var _toString = call.bind(prototypeOfObject.toString); var owns = call.bind(prototypeOfObject.hasOwnProperty); var defineGetter; var defineSetter; var lookupGetter; var lookupSetter; var supportsAccessors; if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { defineGetter = call.bind(prototypeOfObject.__defineGetter__); defineSetter = call.bind(prototypeOfObject.__defineSetter__); lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); } if ([1,2].splice(0).length != 2) { if(function() { // test IE < 9 to splice bug - see issue #138 function makeArray(l) { var a = new Array(l+2); a[0] = a[1] = 0; return a; } var array = [], lengthBefore; array.splice.apply(array, makeArray(20)); array.splice.apply(array, makeArray(26)); lengthBefore = array.length; //46 array.splice(5, 0, "XXX"); // add one element lengthBefore + 1 == array.length if (lengthBefore + 1 == array.length) { return true;// has right splice implementation without bugs } }()) {//IE 6/7 var array_splice = Array.prototype.splice; Array.prototype.splice = function(start, deleteCount) { if (!arguments.length) { return []; } else { return array_splice.apply(this, [ start === void 0 ? 0 : start, deleteCount === void 0 ? (this.length - start) : deleteCount ].concat(slice.call(arguments, 2))) } }; } else {//IE8 Array.prototype.splice = function(pos, removeCount){ var length = this.length; if (pos > 0) { if (pos > length) pos = length; } else if (pos == void 0) { pos = 0; } else if (pos < 0) { pos = Math.max(length + pos, 0); } if (!(pos+removeCount < length)) removeCount = length - pos; var removed = this.slice(pos, pos+removeCount); var insert = slice.call(arguments, 2); var add = insert.length; if (pos === length) { if (add) { this.push.apply(this, insert); } } else { var remove = Math.min(removeCount, length - pos); var tailOldPos = pos + remove; var tailNewPos = tailOldPos + add - remove; var tailCount = length - tailOldPos; var lengthAfterRemove = length - remove; if (tailNewPos < tailOldPos) { // case A for (var i = 0; i < tailCount; ++i) { this[tailNewPos+i] = this[tailOldPos+i]; } } else if (tailNewPos > tailOldPos) { // case B for (i = tailCount; i--; ) { this[tailNewPos+i] = this[tailOldPos+i]; } } // else, add == remove (nothing to do) if (add && pos === lengthAfterRemove) { this.length = lengthAfterRemove; // truncate array this.push.apply(this, insert); } else { this.length = lengthAfterRemove + add; // reserves space for (i = 0; i < add; ++i) { this[pos+i] = insert[i]; } } } return removed; }; } } if (!Array.isArray) { Array.isArray = function isArray(obj) { return _toString(obj) == "[object Array]"; }; } var boxedString = Object("a"), splitString = boxedString[0] != "a" || !(0 in boxedString); if (!Array.prototype.forEach) { Array.prototype.forEach = function forEach(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, thisp = arguments[1], i = -1, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(); // TODO message } while (++i < length) { if (i in self) { fun.call(thisp, self[i], i, object); } } }; } if (!Array.prototype.map) { Array.prototype.map = function map(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = Array(length), thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) result[i] = fun.call(thisp, self[i], i, object); } return result; }; } if (!Array.prototype.filter) { Array.prototype.filter = function filter(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = [], value, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) { value = self[i]; if (fun.call(thisp, value, i, object)) { result.push(value); } } } return result; }; } if (!Array.prototype.every) { Array.prototype.every = function every(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && !fun.call(thisp, self[i], i, object)) { return false; } } return true; }; } if (!Array.prototype.some) { Array.prototype.some = function some(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && fun.call(thisp, self[i], i, object)) { return true; } } return false; }; } if (!Array.prototype.reduce) { Array.prototype.reduce = function reduce(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduce of empty array with no initial value"); } var i = 0; var result; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i++]; break; } if (++i >= length) { throw new TypeError("reduce of empty array with no initial value"); } } while (true); } for (; i < length; i++) { if (i in self) { result = fun.call(void 0, result, self[i], i, object); } } return result; }; } if (!Array.prototype.reduceRight) { Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduceRight of empty array with no initial value"); } var result, i = length - 1; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i--]; break; } if (--i < 0) { throw new TypeError("reduceRight of empty array with no initial value"); } } while (true); } do { if (i in this) { result = fun.call(void 0, result, self[i], i, object); } } while (i--); return result; }; } if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) { Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = 0; if (arguments.length > 1) { i = toInteger(arguments[1]); } i = i >= 0 ? i : Math.max(0, length + i); for (; i < length; i++) { if (i in self && self[i] === sought) { return i; } } return -1; }; } if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) { Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = length - 1; if (arguments.length > 1) { i = Math.min(i, toInteger(arguments[1])); } i = i >= 0 ? i : length - Math.abs(i); for (; i >= 0; i--) { if (i in self && sought === self[i]) { return i; } } return -1; }; } if (!Object.getPrototypeOf) { Object.getPrototypeOf = function getPrototypeOf(object) { return object.__proto__ || ( object.constructor ? object.constructor.prototype : prototypeOfObject ); }; } if (!Object.getOwnPropertyDescriptor) { var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " + "non-object: "; Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT + object); if (!owns(object, property)) return; var descriptor, getter, setter; descriptor = { enumerable: true, configurable: true }; if (supportsAccessors) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; var getter = lookupGetter(object, property); var setter = lookupSetter(object, property); object.__proto__ = prototype; if (getter || setter) { if (getter) descriptor.get = getter; if (setter) descriptor.set = setter; return descriptor; } } descriptor.value = object[property]; return descriptor; }; } if (!Object.getOwnPropertyNames) { Object.getOwnPropertyNames = function getOwnPropertyNames(object) { return Object.keys(object); }; } if (!Object.create) { var createEmpty; if (Object.prototype.__proto__ === null) { createEmpty = function () { return { "__proto__": null }; }; } else { createEmpty = function () { var empty = {}; for (var i in empty) empty[i] = null; empty.constructor = empty.hasOwnProperty = empty.propertyIsEnumerable = empty.isPrototypeOf = empty.toLocaleString = empty.toString = empty.valueOf = empty.__proto__ = null; return empty; } } Object.create = function create(prototype, properties) { var object; if (prototype === null) { object = createEmpty(); } else { if (typeof prototype != "object") throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'"); var Type = function () {}; Type.prototype = prototype; object = new Type(); object.__proto__ = prototype; } if (properties !== void 0) Object.defineProperties(object, properties); return object; }; } function doesDefinePropertyWork(object) { try { Object.defineProperty(object, "sentinel", {}); return "sentinel" in object; } catch (exception) { } } if (Object.defineProperty) { var definePropertyWorksOnObject = doesDefinePropertyWork({}); var definePropertyWorksOnDom = typeof document == "undefined" || doesDefinePropertyWork(document.createElement("div")); if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) { var definePropertyFallback = Object.defineProperty; } } if (!Object.defineProperty || definePropertyFallback) { var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: "; var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: " var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " + "on this javascript engine"; Object.defineProperty = function defineProperty(object, property, descriptor) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT_TARGET + object); if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null) throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor); if (definePropertyFallback) { try { return definePropertyFallback.call(Object, object, property, descriptor); } catch (exception) { } } if (owns(descriptor, "value")) { if (supportsAccessors && (lookupGetter(object, property) || lookupSetter(object, property))) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; delete object[property]; object[property] = descriptor.value; object.__proto__ = prototype; } else { object[property] = descriptor.value; } } else { if (!supportsAccessors) throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED); if (owns(descriptor, "get")) defineGetter(object, property, descriptor.get); if (owns(descriptor, "set")) defineSetter(object, property, descriptor.set); } return object; }; } if (!Object.defineProperties) { Object.defineProperties = function defineProperties(object, properties) { for (var property in properties) { if (owns(properties, property)) Object.defineProperty(object, property, properties[property]); } return object; }; } if (!Object.seal) { Object.seal = function seal(object) { return object; }; } if (!Object.freeze) { Object.freeze = function freeze(object) { return object; }; } try { Object.freeze(function () {}); } catch (exception) { Object.freeze = (function freeze(freezeObject) { return function freeze(object) { if (typeof object == "function") { return object; } else { return freezeObject(object); } }; })(Object.freeze); } if (!Object.preventExtensions) { Object.preventExtensions = function preventExtensions(object) { return object; }; } if (!Object.isSealed) { Object.isSealed = function isSealed(object) { return false; }; } if (!Object.isFrozen) { Object.isFrozen = function isFrozen(object) { return false; }; } if (!Object.isExtensible) { Object.isExtensible = function isExtensible(object) { if (Object(object) === object) { throw new TypeError(); // TODO message } var name = ''; while (owns(object, name)) { name += '?'; } object[name] = true; var returnValue = owns(object, name); delete object[name]; return returnValue; }; } if (!Object.keys) { var hasDontEnumBug = true, dontEnums = [ "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor" ], dontEnumsLength = dontEnums.length; for (var key in {"toString": null}) { hasDontEnumBug = false; } Object.keys = function keys(object) { if ( (typeof object != "object" && typeof object != "function") || object === null ) { throw new TypeError("Object.keys called on a non-object"); } var keys = []; for (var name in object) { if (owns(object, name)) { keys.push(name); } } if (hasDontEnumBug) { for (var i = 0, ii = dontEnumsLength; i < ii; i++) { var dontEnum = dontEnums[i]; if (owns(object, dontEnum)) { keys.push(dontEnum); } } } return keys; }; } if (!Date.now) { Date.now = function now() { return new Date().getTime(); }; } var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + "\u2029\uFEFF"; if (!String.prototype.trim || ws.trim()) { ws = "[" + ws + "]"; var trimBeginRegexp = new RegExp("^" + ws + ws + "*"), trimEndRegexp = new RegExp(ws + ws + "*$"); String.prototype.trim = function trim() { return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, ""); }; } function toInteger(n) { n = +n; if (n !== n) { // isNaN n = 0; } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } return n; } function isPrimitive(input) { var type = typeof input; return ( input === null || type === "undefined" || type === "boolean" || type === "number" || type === "string" ); } function toPrimitive(input) { var val, valueOf, toString; if (isPrimitive(input)) { return input; } valueOf = input.valueOf; if (typeof valueOf === "function") { val = valueOf.call(input); if (isPrimitive(val)) { return val; } } toString = input.toString; if (typeof toString === "function") { val = toString.call(input); if (isPrimitive(val)) { return val; } } throw new TypeError(); } var toObject = function (o) { if (o == null) { // this matches both null and undefined throw new TypeError("can't convert "+o+" to object"); } return Object(o); }; }); define('ace/lib/dom', ['require', 'exports', 'module' ], function(require, exports, module) { if (typeof document == "undefined") return; var XHTML_NS = "http://www.w3.org/1999/xhtml"; exports.getDocumentHead = function(doc) { if (!doc) doc = document; return doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement; } exports.createElement = function(tag, ns) { return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag); }; exports.hasCssClass = function(el, name) { var classes = el.className.split(/\s+/g); return classes.indexOf(name) !== -1; }; exports.addCssClass = function(el, name) { if (!exports.hasCssClass(el, name)) { el.className += " " + name; } }; exports.removeCssClass = function(el, name) { var classes = el.className.split(/\s+/g); while (true) { var index = classes.indexOf(name); if (index == -1) { break; } classes.splice(index, 1); } el.className = classes.join(" "); }; exports.toggleCssClass = function(el, name) { var classes = el.className.split(/\s+/g), add = true; while (true) { var index = classes.indexOf(name); if (index == -1) { break; } add = false; classes.splice(index, 1); } if(add) classes.push(name); el.className = classes.join(" "); return add; }; exports.setCssClass = function(node, className, include) { if (include) { exports.addCssClass(node, className); } else { exports.removeCssClass(node, className); } }; exports.hasCssString = function(id, doc) { var index = 0, sheets; doc = doc || document; if (doc.createStyleSheet && (sheets = doc.styleSheets)) { while (index < sheets.length) if (sheets[index++].owningElement.id === id) return true; } else if ((sheets = doc.getElementsByTagName("style"))) { while (index < sheets.length) if (sheets[index++].id === id) return true; } return false; }; exports.importCssString = function importCssString(cssText, id, doc) { doc = doc || document; if (id && exports.hasCssString(id, doc)) return null; var style; if (doc.createStyleSheet) { style = doc.createStyleSheet(); style.cssText = cssText; if (id) style.owningElement.id = id; } else { style = doc.createElementNS ? doc.createElementNS(XHTML_NS, "style") : doc.createElement("style"); style.appendChild(doc.createTextNode(cssText)); if (id) style.id = id; exports.getDocumentHead(doc).appendChild(style); } }; exports.importCssStylsheet = function(uri, doc) { if (doc.createStyleSheet) { doc.createStyleSheet(uri); } else { var link = exports.createElement('link'); link.rel = 'stylesheet'; link.href = uri; exports.getDocumentHead(doc).appendChild(link); } }; exports.getInnerWidth = function(element) { return ( parseInt(exports.computedStyle(element, "paddingLeft"), 10) + parseInt(exports.computedStyle(element, "paddingRight"), 10) + element.clientWidth ); }; exports.getInnerHeight = function(element) { return ( parseInt(exports.computedStyle(element, "paddingTop"), 10) + parseInt(exports.computedStyle(element, "paddingBottom"), 10) + element.clientHeight ); }; if (window.pageYOffset !== undefined) { exports.getPageScrollTop = function() { return window.pageYOffset; }; exports.getPageScrollLeft = function() { return window.pageXOffset; }; } else { exports.getPageScrollTop = function() { return document.body.scrollTop; }; exports.getPageScrollLeft = function() { return document.body.scrollLeft; }; } if (window.getComputedStyle) exports.computedStyle = function(element, style) { if (style) return (window.getComputedStyle(element, "") || {})[style] || ""; return window.getComputedStyle(element, "") || {}; }; else exports.computedStyle = function(element, style) { if (style) return element.currentStyle[style]; return element.currentStyle; }; exports.scrollbarWidth = function(document) { var inner = exports.createElement("ace_inner"); inner.style.width = "100%"; inner.style.minWidth = "0px"; inner.style.height = "200px"; inner.style.display = "block"; var outer = exports.createElement("ace_outer"); var style = outer.style; style.position = "absolute"; style.left = "-10000px"; style.overflow = "hidden"; style.width = "200px"; style.minWidth = "0px"; style.height = "150px"; style.display = "block"; outer.appendChild(inner); var body = document.documentElement; body.appendChild(outer); var noScrollbar = inner.offsetWidth; style.overflow = "scroll"; var withScrollbar = inner.offsetWidth; if (noScrollbar == withScrollbar) { withScrollbar = outer.clientWidth; } body.removeChild(outer); return noScrollbar-withScrollbar; }; exports.setInnerHtml = function(el, innerHtml) { var element = el.cloneNode(false);//document.createElement("div"); element.innerHTML = innerHtml; el.parentNode.replaceChild(element, el); return element; }; if ("textContent" in document.documentElement) { exports.setInnerText = function(el, innerText) { el.textContent = innerText; }; exports.getInnerText = function(el) { return el.textContent; }; } else { exports.setInnerText = function(el, innerText) { el.innerText = innerText; }; exports.getInnerText = function(el) { return el.innerText; }; } exports.getParentWindow = function(document) { return document.defaultView || document.parentWindow; }; }); define('ace/lib/event', ['require', 'exports', 'module' , 'ace/lib/keys', 'ace/lib/useragent', 'ace/lib/dom'], function(require, exports, module) { var keys = require("./keys"); var useragent = require("./useragent"); var dom = require("./dom"); exports.addListener = function(elem, type, callback) { if (elem.addEventListener) { return elem.addEventListener(type, callback, false); } if (elem.attachEvent) { var wrapper = function() { callback.call(elem, window.event); }; callback._wrapper = wrapper; elem.attachEvent("on" + type, wrapper); } }; exports.removeListener = function(elem, type, callback) { if (elem.removeEventListener) { return elem.removeEventListener(type, callback, false); } if (elem.detachEvent) { elem.detachEvent("on" + type, callback._wrapper || callback); } }; exports.stopEvent = function(e) { exports.stopPropagation(e); exports.preventDefault(e); return false; }; exports.stopPropagation = function(e) { if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; }; exports.preventDefault = function(e) { if (e.preventDefault) e.preventDefault(); else e.returnValue = false; }; exports.getButton = function(e) { if (e.type == "dblclick") return 0; if (e.type == "contextmenu" || (e.ctrlKey && useragent.isMac)) return 2; if (e.preventDefault) { return e.button; } else { return {1:0, 2:2, 4:1}[e.button]; } }; exports.capture = function(el, eventHandler, releaseCaptureHandler) { function onMouseUp(e) { eventHandler && eventHandler(e); releaseCaptureHandler && releaseCaptureHandler(e); exports.removeListener(document, "mousemove", eventHandler, true); exports.removeListener(document, "mouseup", onMouseUp, true); exports.removeListener(document, "dragstart", onMouseUp, true); } exports.addListener(document, "mousemove", eventHandler, true); exports.addListener(document, "mouseup", onMouseUp, true); exports.addListener(document, "dragstart", onMouseUp, true); }; exports.addMouseWheelListener = function(el, callback) { if ("onmousewheel" in el) { var factor = 8; exports.addListener(el, "mousewheel", function(e) { if (e.wheelDeltaX !== undefined) { e.wheelX = -e.wheelDeltaX / factor; e.wheelY = -e.wheelDeltaY / factor; } else { e.wheelX = 0; e.wheelY = -e.wheelDelta / factor; } callback(e); }); } else if ("onwheel" in el) { exports.addListener(el, "wheel", function(e) { e.wheelX = (e.deltaX || 0) * 5; e.wheelY = (e.deltaY || 0) * 5; callback(e); }); } else { exports.addListener(el, "DOMMouseScroll", function(e) { if (e.axis && e.axis == e.HORIZONTAL_AXIS) { e.wheelX = (e.detail || 0) * 5; e.wheelY = 0; } else { e.wheelX = 0; e.wheelY = (e.detail || 0) * 5; } callback(e); }); } }; exports.addMultiMouseDownListener = function(el, timeouts, eventHandler, callbackName) { var clicks = 0; var startX, startY, timer; var eventNames = { 2: "dblclick", 3: "tripleclick", 4: "quadclick" }; exports.addListener(el, "mousedown", function(e) { if (exports.getButton(e) != 0) { clicks = 0; } else if (e.detail > 1) { clicks++; if (clicks > 4) clicks = 1; } else { clicks = 1; } if (useragent.isIE) { var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5; if (isNewClick) { clicks = 1; } if (clicks == 1) { startX = e.clientX; startY = e.clientY; } } eventHandler[callbackName]("mousedown", e); if (clicks > 4) clicks = 0; else if (clicks > 1) return eventHandler[callbackName](eventNames[clicks], e); }); if (useragent.isOldIE) { exports.addListener(el, "dblclick", function(e) { clicks = 2; if (timer) clearTimeout(timer); timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600); eventHandler[callbackName]("mousedown", e); eventHandler[callbackName](eventNames[clicks], e); }); } }; function normalizeCommandKeys(callback, e, keyCode) { var hashId = 0; if ((useragent.isOpera && !("KeyboardEvent" in window)) && useragent.isMac) { hashId = 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0); } else { hashId = 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0); } if (!useragent.isMac && pressedKeys) { if (pressedKeys[91] || pressedKeys[92]) hashId |= 8; if (pressedKeys.altGr) { if ((3 & hashId) != 3) pressedKeys.altGr = 0 else return; } if (keyCode === 18 || keyCode === 17) { var location = e.location || e.keyLocation; if (keyCode === 17 && location === 1) { ts = e.timeStamp; } else if (keyCode === 18 && hashId === 3 && location === 2) { var dt = -ts; ts = e.timeStamp; dt += ts; if (dt < 3) pressedKeys.altGr = true; } } } if (keyCode in keys.MODIFIER_KEYS) { switch (keys.MODIFIER_KEYS[keyCode]) { case "Alt": hashId = 2; break; case "Shift": hashId = 4; break; case "Ctrl": hashId = 1; break; default: hashId = 8; break; } keyCode = 0; } if (hashId & 8 && (keyCode === 91 || keyCode === 93)) { keyCode = 0; } if (!hashId && keyCode === 13) { if (e.location || e.keyLocation === 3) { callback(e, hashId, -keyCode) if (e.defaultPrevented) return; } } if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) { return false; } return callback(e, hashId, keyCode); } var pressedKeys = null; var ts = 0; exports.addCommandKeyListener = function(el, callback) { var addListener = exports.addListener; if (useragent.isOldGecko || (useragent.isOpera && !("KeyboardEvent" in window))) { var lastKeyDownKeyCode = null; addListener(el, "keydown", function(e) { lastKeyDownKeyCode = e.keyCode; }); addListener(el, "keypress", function(e) { return normalizeCommandKeys(callback, e, lastKeyDownKeyCode); }); } else { var lastDefaultPrevented = null; addListener(el, "keydown", function(e) { pressedKeys[e.keyCode] = true; var result = normalizeCommandKeys(callback, e, e.keyCode); lastDefaultPrevented = e.defaultPrevented; return result; }); addListener(el, "keypress", function(e) { if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) { exports.stopEvent(e); lastDefaultPrevented = null; } }); addListener(el, "keyup", function(e) { pressedKeys[e.keyCode] = null; }); if (!pressedKeys) { pressedKeys = Object.create(null); addListener(window, "focus", function(e) { pressedKeys = Object.create(null); }); } } }; if (window.postMessage && !useragent.isOldIE) { var postMessageId = 1; exports.nextTick = function(callback, win) { win = win || window; var messageName = "zero-timeout-message-" + postMessageId; exports.addListener(win, "message", function listener(e) { if (e.data == messageName) { exports.stopPropagation(e); exports.removeListener(win, "message", listener); callback(); } }); win.postMessage(messageName, "*"); }; } exports.nextFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame; if (exports.nextFrame) exports.nextFrame = exports.nextFrame.bind(window); else exports.nextFrame = function(callback) { setTimeout(callback, 17); }; }); define('ace/lib/keys', ['require', 'exports', 'module' , 'ace/lib/oop'], function(require, exports, module) { var oop = require("./oop"); var Keys = (function() { var ret = { MODIFIER_KEYS: { 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta' }, KEY_MODS: { "ctrl": 1, "alt": 2, "option" : 2, "shift": 4, "meta": 8, "command": 8, "cmd": 8 }, FUNCTION_KEYS : { 8 : "Backspace", 9 : "Tab", 13 : "Return", 19 : "Pause", 27 : "Esc", 32 : "Space", 33 : "PageUp", 34 : "PageDown", 35 : "End", 36 : "Home", 37 : "Left", 38 : "Up", 39 : "Right", 40 : "Down", 44 : "Print", 45 : "Insert", 46 : "Delete", 96 : "Numpad0", 97 : "Numpad1", 98 : "Numpad2", 99 : "Numpad3", 100: "Numpad4", 101: "Numpad5", 102: "Numpad6", 103: "Numpad7", 104: "Numpad8", 105: "Numpad9", '-13': "NumpadEnter", 112: "F1", 113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7", 119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 144: "Numlock", 145: "Scrolllock" }, PRINTABLE_KEYS: { 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a', 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h', 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o', 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v', 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.', 188: ',', 190: '.', 191: '/', 192: '`', 219: '[', 220: '\\', 221: ']', 222: '\'' } }; for (var i in ret.FUNCTION_KEYS) { var name = ret.FUNCTION_KEYS[i].toLowerCase(); ret[name] = parseInt(i, 10); } oop.mixin(ret, ret.MODIFIER_KEYS); oop.mixin(ret, ret.PRINTABLE_KEYS); oop.mixin(ret, ret.FUNCTION_KEYS); ret.enter = ret["return"]; ret.escape = ret.esc; ret.del = ret["delete"]; ret[173] = '-'; return ret; })(); oop.mixin(exports, Keys); exports.keyCodeToString = function(keyCode) { return (Keys[keyCode] || String.fromCharCode(keyCode)).toLowerCase(); } }); define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) { exports.inherits = (function() { var createObject = Object.create || function(prototype, properties) { var Type = function () {}; Type.prototype = prototype; object = new Type(); object.__proto__ = prototype; if (typeof properties !== 'undefined' && Object.defineProperties) { Object.defineProperties(object, properties); } }; return function(ctor, superCtor) { ctor.super_ = superCtor; ctor.prototype = createObject(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; }()); exports.mixin = function(obj, mixin) { for (var key in mixin) { obj[key] = mixin[key]; } return obj; }; exports.implement = function(proto, mixin) { exports.mixin(proto, mixin); }; }); define('ace/lib/useragent', ['require', 'exports', 'module' ], function(require, exports, module) { exports.OS = { LINUX: "LINUX", MAC: "MAC", WINDOWS: "WINDOWS" }; exports.getOS = function() { if (exports.isMac) { return exports.OS.MAC; } else if (exports.isLinux) { return exports.OS.LINUX; } else { return exports.OS.WINDOWS; } }; if (typeof navigator != "object") return; var os = (navigator.platform.match(/mac|win|linux/i) || ["other"])[0].toLowerCase(); var ua = navigator.userAgent; exports.isWin = (os == "win"); exports.isMac = (os == "mac"); exports.isLinux = (os == "linux"); exports.isIE = (navigator.appName == "Microsoft Internet Explorer" || navigator.appName.indexOf("MSAppHost") >= 0) && parseFloat(navigator.userAgent.match(/MSIE ([0-9]+[\.0-9]+)/)[1]); exports.isOldIE = exports.isIE && exports.isIE < 9; exports.isGecko = exports.isMozilla = window.controllers && window.navigator.product === "Gecko"; exports.isOldGecko = exports.isGecko && parseInt((navigator.userAgent.match(/rv\:(\d+)/)||[])[1], 10) < 4; exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == "[object Opera]"; exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined; exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined; exports.isAIR = ua.indexOf("AdobeAIR") >= 0; exports.isIPad = ua.indexOf("iPad") >= 0; exports.isTouchPad = ua.indexOf("TouchPad") >= 0; }); define('ace/editor', ['require', 'exports', 'module' , 'ace/lib/fixoldbrowsers', 'ace/lib/oop', 'ace/lib/dom', 'ace/lib/lang', 'ace/lib/useragent', 'ace/keyboard/textinput', 'ace/mouse/mouse_handler', 'ace/mouse/fold_handler', 'ace/keyboard/keybinding', 'ace/edit_session', 'ace/search', 'ace/range', 'ace/lib/event_emitter', 'ace/commands/command_manager', 'ace/commands/default_commands', 'ace/config'], function(require, exports, module) { require("./lib/fixoldbrowsers"); var oop = require("./lib/oop"); var dom = require("./lib/dom"); var lang = require("./lib/lang"); var useragent = require("./lib/useragent"); var TextInput = require("./keyboard/textinput").TextInput; var MouseHandler = require("./mouse/mouse_handler").MouseHandler; var FoldHandler = require("./mouse/fold_handler").FoldHandler; var KeyBinding = require("./keyboard/keybinding").KeyBinding; var EditSession = require("./edit_session").EditSession; var Search = require("./search").Search; var Range = require("./range").Range; var EventEmitter = require("./lib/event_emitter").EventEmitter; var CommandManager = require("./commands/command_manager").CommandManager; var defaultCommands = require("./commands/default_commands").commands; var config = require("./config"); var Editor = function(renderer, session) { var container = renderer.getContainerElement(); this.container = container; this.renderer = renderer; this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands); this.textInput = new TextInput(renderer.getTextAreaContainer(), this); this.renderer.textarea = this.textInput.getElement(); this.keyBinding = new KeyBinding(this); this.$mouseHandler = new MouseHandler(this); new FoldHandler(this); this.$blockScrolling = 0; this.$search = new Search().set({ wrap: true }); this.$historyTracker = this.$historyTracker.bind(this); this.commands.on("exec", this.$historyTracker); this.$initOperationListeners(); this._$emitInputEvent = lang.delayedCall(function() { this._signal("input", {}); this.session.bgTokenizer && this.session.bgTokenizer.scheduleStart(); }.bind(this)); this.on("change", function(_, _self) { _self._$emitInputEvent.schedule(31); }); this.setSession(session || new EditSession("")); config.resetOptions(this); config._emit("editor", this); }; (function(){ oop.implement(this, EventEmitter); this.$initOperationListeners = function() { function last(a) {return a[a.length - 1]}; this.selections = []; this.commands.on("exec", function(e) { this.startOperation(e); var command = e.command; if (command.group == "fileJump") { var prev = this.prevOp; if (!prev || prev.command.group != "fileJump") { this.lastFileJumpPos = last(this.selections) } } else { this.lastFileJumpPos = null; } }.bind(this), true); this.commands.on("afterExec", function(e) { var command = e.command; if (command.group == "fileJump") { if (this.lastFileJumpPos && !this.curOp.selectionChanged) { this.selection.fromJSON(this.lastFileJumpPos); return } } this.endOperation(e); }.bind(this), true); this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this)); this.on("change", function() { this.curOp || this.startOperation(); this.curOp.docChanged = true; }.bind(this), true); this.on("changeSelection", function() { this.curOp || this.startOperation(); this.curOp.selectionChanged = true; }.bind(this), true); } this.curOp = null; this.prevOp = {}; this.startOperation = function(commadEvent) { if (this.curOp) { if (!commadEvent || this.curOp.command) return; this.prevOp = this.curOp; } if (!commadEvent) { this.previousCommand = null; commadEvent = {}; } this.$opResetTimer.schedule(); this.curOp = { command: commadEvent.command || {}, args: commadEvent.args }; var command = this.curOp.command; if (command && command.scrollIntoView) this.$blockScrolling++; this.selections.push(this.selection.toJSON()); }; this.endOperation = function() { if (this.curOp) { var command = this.curOp.command; if (command && command.scrollIntoView) { this.$blockScrolling--; switch (command.scrollIntoView) { case "center": this.renderer.scrollCursorIntoView(null, 0.5); break; case "cursor": this.renderer.scrollCursorIntoView(); break; case "selectionPart": this.renderer.scrollCursorIntoView(); break; default: break; } } this.prevOp = this.curOp; this.curOp = null; } }; this.$historyTracker = function(e) { if (!this.$mergeUndoDeltas) return; var prev = this.prevOp; var mergeableCommands = ["backspace", "del", "insertstring"]; var shouldMerge = prev.command && (e.command.name == prev.command.name); if (e.command.name == "insertstring") { var text = e.args; if (this.mergeNextCommand === undefined) this.mergeNextCommand = true; shouldMerge = shouldMerge && this.mergeNextCommand // previous command allows to coalesce with && (!/\s/.test(text) || /\s/.test(prev.args)) // previous insertion was of same type this.mergeNextCommand = true; } else { shouldMerge = shouldMerge && mergeableCommands.indexOf(e.command.name) !== -1// the command is mergeable } if ( this.$mergeUndoDeltas != "always" && Date.now() - this.sequenceStartTime > 2000 ) { shouldMerge = false; // the sequence is too long } if (shouldMerge) this.session.mergeUndoDeltas = true; else if (mergeableCommands.indexOf(e.command.name) !== -1) this.sequenceStartTime = Date.now(); }; this.setKeyboardHandler = function(keyboardHandler) { if (!keyboardHandler) { this.keyBinding.setKeyboardHandler(null); } else if (typeof keyboardHandler == "string") { this.$keybindingId = keyboardHandler; var _self = this; config.loadModule(["keybinding", keyboardHandler], function(module) { if (_self.$keybindingId == keyboardHandler) _self.keyBinding.setKeyboardHandler(module && module.handler); }); } else { this.$keybindingId = null; this.keyBinding.setKeyboardHandler(keyboardHandler); } }; this.getKeyboardHandler = function() { return this.keyBinding.getKeyboardHandler(); }; this.setSession = function(session) { if (this.session == session) return; if (this.session) { var oldSession = this.session; this.session.removeEventListener("change", this.$onDocumentChange); this.session.removeEventListener("changeMode", this.$onChangeMode); this.session.removeEventListener("tokenizerUpdate", this.$onTokenizerUpdate); this.session.removeEventListener("changeTabSize", this.$onChangeTabSize); this.session.removeEventListener("changeWrapLimit", this.$onChangeWrapLimit); this.session.removeEventListener("changeWrapMode", this.$onChangeWrapMode); this.session.removeEventListener("onChangeFold", this.$onChangeFold); this.session.removeEventListener("changeFrontMarker", this.$onChangeFrontMarker); this.session.removeEventListener("changeBackMarker", this.$onChangeBackMarker); this.session.removeEventListener("changeBreakpoint", this.$onChangeBreakpoint); this.session.removeEventListener("changeAnnotation", this.$onChangeAnnotation); this.session.removeEventListener("changeOverwrite", this.$onCursorChange); this.session.removeEventListener("changeScrollTop", this.$onScrollTopChange); this.session.removeEventListener("changeScrollLeft", this.$onScrollLeftChange); var selection = this.session.getSelection(); selection.removeEventListener("changeCursor", this.$onCursorChange); selection.removeEventListener("changeSelection", this.$onSelectionChange); } this.session = session; this.$onDocumentChange = this.onDocumentChange.bind(this); session.addEventListener("change", this.$onDocumentChange); this.renderer.setSession(session); this.$onChangeMode = this.onChangeMode.bind(this); session.addEventListener("changeMode", this.$onChangeMode); this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this); session.addEventListener("tokenizerUpdate", this.$onTokenizerUpdate); this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer); session.addEventListener("changeTabSize", this.$onChangeTabSize); this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this); session.addEventListener("changeWrapLimit", this.$onChangeWrapLimit); this.$onChangeWrapMode = this.onChangeWrapMode.bind(this); session.addEventListener("changeWrapMode", this.$onChangeWrapMode); this.$onChangeFold = this.onChangeFold.bind(this); session.addEventListener("changeFold", this.$onChangeFold); this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this); this.session.addEventListener("changeFrontMarker", this.$onChangeFrontMarker); this.$onChangeBackMarker = this.onChangeBackMarker.bind(this); this.session.addEventListener("changeBackMarker", this.$onChangeBackMarker); this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this); this.session.addEventListener("changeBreakpoint", this.$onChangeBreakpoint); this.$onChangeAnnotation = this.onChangeAnnotation.bind(this); this.session.addEventListener("changeAnnotation", this.$onChangeAnnotation); this.$onCursorChange = this.onCursorChange.bind(this); this.session.addEventListener("changeOverwrite", this.$onCursorChange); this.$onScrollTopChange = this.onScrollTopChange.bind(this); this.session.addEventListener("changeScrollTop", this.$onScrollTopChange); this.$onScrollLeftChange = this.onScrollLeftChange.bind(this); this.session.addEventListener("changeScrollLeft", this.$onScrollLeftChange); this.selection = session.getSelection(); this.selection.addEventListener("changeCursor", this.$onCursorChange); this.$onSelectionChange = this.onSelectionChange.bind(this); this.selection.addEventListener("changeSelection", this.$onSelectionChange); this.onChangeMode(); this.$blockScrolling += 1; this.onCursorChange(); this.$blockScrolling -= 1; this.onScrollTopChange(); this.onScrollLeftChange(); this.onSelectionChange(); this.onChangeFrontMarker(); this.onChangeBackMarker(); this.onChangeBreakpoint(); this.onChangeAnnotation(); this.session.getUseWrapMode() && this.renderer.adjustWrapLimit(); this.renderer.updateFull(); this._emit("changeSession", { session: session, oldSession: oldSession }); }; this.getSession = function() { return this.session; }; this.setValue = function(val, cursorPos) { this.session.doc.setValue(val); if (!cursorPos) this.selectAll(); else if (cursorPos == 1) this.navigateFileEnd(); else if (cursorPos == -1) this.navigateFileStart(); return val; }; this.getValue = function() { return this.session.getValue(); }; this.getSelection = function() { return this.selection; }; this.resize = function(force) { this.renderer.onResize(force); }; this.setTheme = function(theme) { this.renderer.setTheme(theme); }; this.getTheme = function() { return this.renderer.getTheme(); }; this.setStyle = function(style) { this.renderer.setStyle(style); }; this.unsetStyle = function(style) { this.renderer.unsetStyle(style); }; this.getFontSize = function () { return this.getOption("fontSize") || dom.computedStyle(this.container, "fontSize"); }; this.setFontSize = function(size) { this.setOption("fontSize", size); }; this.$highlightBrackets = function() { if (this.session.$bracketHighlight) { this.session.removeMarker(this.session.$bracketHighlight); this.session.$bracketHighlight = null; } if (this.$highlightPending) { return; } var self = this; this.$highlightPending = true; setTimeout(function() { self.$highlightPending = false; var pos = self.session.findMatchingBracket(self.getCursorPosition()); if (pos) { var range = new Range(pos.row, pos.column, pos.row, pos.column+1); } else if (self.session.$mode.getMatching) { var range = self.session.$mode.getMatching(self.session); } if (range) self.session.$bracketHighlight = self.session.addMarker(range, "ace_bracket", "text"); }, 50); }; this.focus = function() { var _self = this; setTimeout(function() { _self.textInput.focus(); }); this.textInput.focus(); }; this.isFocused = function() { return this.textInput.isFocused(); }; this.blur = function() { this.textInput.blur(); }; this.onFocus = function() { if (this.$isFocused) return; this.$isFocused = true; this.renderer.showCursor(); this.renderer.visualizeFocus(); this._emit("focus"); }; this.onBlur = function() { if (!this.$isFocused) return; this.$isFocused = false; this.renderer.hideCursor(); this.renderer.visualizeBlur(); this._emit("blur"); }; this.$cursorChange = function() { this.renderer.updateCursor(); }; this.onDocumentChange = function(e) { var delta = e.data; var range = delta.range; var lastRow; if (range.start.row == range.end.row && delta.action != "insertLines" && delta.action != "removeLines") lastRow = range.end.row; else lastRow = Infinity; this.renderer.updateLines(range.start.row, lastRow); this._emit("change", e); this.$cursorChange(); }; this.onTokenizerUpdate = function(e) { var rows = e.data; this.renderer.updateLines(rows.first, rows.last); }; this.onScrollTopChange = function() { this.renderer.scrollToY(this.session.getScrollTop()); }; this.onScrollLeftChange = function() { this.renderer.scrollToX(this.session.getScrollLeft()); }; this.onCursorChange = function() { this.$cursorChange(); if (!this.$blockScrolling) { this.renderer.scrollCursorIntoView(); } this.$highlightBrackets(); this.$updateHighlightActiveLine(); this._emit("changeSelection"); }; this.$updateHighlightActiveLine = function() { var session = this.getSession(); var highlight; if (this.$highlightActiveLine) { if ((this.$selectionStyle != "line" || !this.selection.isMultiLine())) highlight = this.getCursorPosition(); if (this.renderer.$maxLines && this.session.getLength() === 1) highlight = false; } if (session.$highlightLineMarker && !highlight) { session.removeMarker(session.$highlightLineMarker.id); session.$highlightLineMarker = null; } else if (!session.$highlightLineMarker && highlight) { var range = new Range(highlight.row, highlight.column, highlight.row, Infinity); range.id = session.addMarker(range, "ace_active-line", "screenLine"); session.$highlightLineMarker = range; } else if (highlight) { session.$highlightLineMarker.start.row = highlight.row; session.$highlightLineMarker.end.row = highlight.row; session.$highlightLineMarker.start.column = highlight.column; session._emit("changeBackMarker"); } }; this.onSelectionChange = function(e) { var session = this.session; if (session.$selectionMarker) { session.removeMarker(session.$selectionMarker); } session.$selectionMarker = null; if (!this.selection.isEmpty()) { var range = this.selection.getRange(); var style = this.getSelectionStyle(); session.$selectionMarker = session.addMarker(range, "ace_selection", style); } else { this.$updateHighlightActiveLine(); } var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp() this.session.highlight(re); this._emit("changeSelection"); }; this.$getSelectionHighLightRegexp = function() { var session = this.session; var selection = this.getSelectionRange(); if (selection.isEmpty() || selection.isMultiLine()) return; var startOuter = selection.start.column - 1; var endOuter = selection.end.column + 1; var line = session.getLine(selection.start.row); var lineCols = line.length; var needle = line.substring(Math.max(startOuter, 0), Math.min(endOuter, lineCols)); if ((startOuter >= 0 && /^[\w\d]/.test(needle)) || (endOuter <= lineCols && /[\w\d]$/.test(needle))) return; needle = line.substring(selection.start.column, selection.end.column); if (!/^[\w\d]+$/.test(needle)) return; var re = this.$search.$assembleRegExp({ wholeWord: true, caseSensitive: true, needle: needle }); return re; }; this.onChangeFrontMarker = function() { this.renderer.updateFrontMarkers(); }; this.onChangeBackMarker = function() { this.renderer.updateBackMarkers(); }; this.onChangeBreakpoint = function() { this.renderer.updateBreakpoints(); }; this.onChangeAnnotation = function() { this.renderer.setAnnotations(this.session.getAnnotations()); }; this.onChangeMode = function(e) { this.renderer.updateText(); this._emit("changeMode", e); }; this.onChangeWrapLimit = function() { this.renderer.updateFull(); }; this.onChangeWrapMode = function() { this.renderer.onResize(true); }; this.onChangeFold = function() { this.$updateHighlightActiveLine(); this.renderer.updateFull(); }; this.getSelectedText = function() { return this.session.getTextRange(this.getSelectionRange()); }; this.getCopyText = function() { var text = this.getSelectedText(); this._signal("copy", text); return text; }; this.onCopy = function() { this.commands.exec("copy", this); }; this.onCut = function() { this.commands.exec("cut", this); }; this.onPaste = function(text) { if (this.$readOnly) return; this._emit("paste", text); this.insert(text); }; this.execCommand = function(command, args) { this.commands.exec(command, this, args); }; this.insert = function(text) { var session = this.session; var mode = session.getMode(); var cursor = this.getCursorPosition(); if (this.getBehavioursEnabled()) { var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text); if (transform) { if (text !== transform.text) { this.session.mergeUndoDeltas = false; this.$mergeNextCommand = false; } text = transform.text; } } if (text == "\t") text = this.session.getTabString(); if (!this.selection.isEmpty()) { var range = this.getSelectionRange(); cursor = this.session.remove(range); this.clearSelection(); } else if (this.session.getOverwrite()) { var range = new Range.fromPoints(cursor, cursor); range.end.column += text.length; this.session.remove(range); } if (text == "\n" || text == "\r\n") { var line = session.getLine(cursor.row) if (cursor.column > line.search(/\S|$/)) { var d = line.substr(cursor.column).search(/\S|$/); session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d); } } this.clearSelection(); var start = cursor.column; var lineState = session.getState(cursor.row); var line = session.getLine(cursor.row); var shouldOutdent = mode.checkOutdent(lineState, line, text); var end = session.insert(cursor, text); if (transform && transform.selection) { if (transform.selection.length == 2) { // Transform relative to the current column this.selection.setSelectionRange( new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1])); } else { // Transform relative to the current row. this.selection.setSelectionRange( new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3])); } } if (session.getDocument().isNewLine(text)) { var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString()); session.insert({row: cursor.row+1, column: 0}, lineIndent); } if (shouldOutdent) mode.autoOutdent(lineState, session, cursor.row); }; this.onTextInput = function(text) { this.keyBinding.onTextInput(text); }; this.onCommandKey = function(e, hashId, keyCode) { this.keyBinding.onCommandKey(e, hashId, keyCode); }; this.setOverwrite = function(overwrite) { this.session.setOverwrite(overwrite); }; this.getOverwrite = function() { return this.session.getOverwrite(); }; this.toggleOverwrite = function() { this.session.toggleOverwrite(); }; this.setScrollSpeed = function(speed) { this.setOption("scrollSpeed", speed); }; this.getScrollSpeed = function() { return this.getOption("scrollSpeed"); }; this.setDragDelay = function(dragDelay) { this.setOption("dragDelay", dragDelay); }; this.getDragDelay = function() { return this.getOption("dragDelay"); }; this.setSelectionStyle = function(val) { this.setOption("selectionStyle", val); }; this.getSelectionStyle = function() { return this.getOption("selectionStyle"); }; this.setHighlightActiveLine = function(shouldHighlight) { this.setOption("highlightActiveLine", shouldHighlight); }; this.getHighlightActiveLine = function() { return this.getOption("highlightActiveLine"); }; this.setHighlightGutterLine = function(shouldHighlight) { this.setOption("highlightGutterLine", shouldHighlight); }; this.getHighlightGutterLine = function() { return this.getOption("highlightGutterLine"); }; this.setHighlightSelectedWord = function(shouldHighlight) { this.setOption("highlightSelectedWord", shouldHighlight); }; this.getHighlightSelectedWord = function() { return this.$highlightSelectedWord; }; this.setAnimatedScroll = function(shouldAnimate){ this.renderer.setAnimatedScroll(shouldAnimate); }; this.getAnimatedScroll = function(){ return this.renderer.getAnimatedScroll(); }; this.setShowInvisibles = function(showInvisibles) { this.renderer.setShowInvisibles(showInvisibles); }; this.getShowInvisibles = function() { return this.renderer.getShowInvisibles(); }; this.setDisplayIndentGuides = function(display) { this.renderer.setDisplayIndentGuides(display); }; this.getDisplayIndentGuides = function() { return this.renderer.getDisplayIndentGuides(); }; this.setShowPrintMargin = function(showPrintMargin) { this.renderer.setShowPrintMargin(showPrintMargin); }; this.getShowPrintMargin = function() { return this.renderer.getShowPrintMargin(); }; this.setPrintMarginColumn = function(showPrintMargin) { this.renderer.setPrintMarginColumn(showPrintMargin); }; this.getPrintMarginColumn = function() { return this.renderer.getPrintMarginColumn(); }; this.setReadOnly = function(readOnly) { this.setOption("readOnly", readOnly); }; this.getReadOnly = function() { return this.getOption("readOnly"); }; this.setBehavioursEnabled = function (enabled) { this.setOption("behavioursEnabled", enabled); }; this.getBehavioursEnabled = function () { return this.getOption("behavioursEnabled"); }; this.setWrapBehavioursEnabled = function (enabled) { this.setOption("wrapBehavioursEnabled", enabled); }; this.getWrapBehavioursEnabled = function () { return this.getOption("wrapBehavioursEnabled"); }; this.setShowFoldWidgets = function(show) { this.setOption("showFoldWidgets", show); }; this.getShowFoldWidgets = function() { return this.getOption("showFoldWidgets"); }; this.setFadeFoldWidgets = function(fade) { this.setOption("fadeFoldWidgets", fade); }; this.getFadeFoldWidgets = function() { return this.getOption("fadeFoldWidgets"); }; this.remove = function(dir) { if (this.selection.isEmpty()){ if (dir == "left") this.selection.selectLeft(); else this.selection.selectRight(); } var range = this.getSelectionRange(); if (this.getBehavioursEnabled()) { var session = this.session; var state = session.getState(range.start.row); var new_range = session.getMode().transformAction(state, 'deletion', this, session, range); if (range.end.column == 0) { var text = session.getTextRange(range); if (text[text.length - 1] == "\n") { var line = session.getLine(range.end.row) if (/^\s+$/.test(line)) { range.end.column = line.length } } } if (new_range) range = new_range; } this.session.remove(range); this.clearSelection(); }; this.removeWordRight = function() { if (this.selection.isEmpty()) this.selection.selectWordRight(); this.session.remove(this.getSelectionRange()); this.clearSelection(); }; this.removeWordLeft = function() { if (this.selection.isEmpty()) this.selection.selectWordLeft(); this.session.remove(this.getSelectionRange()); this.clearSelection(); }; this.removeToLineStart = function() { if (this.selection.isEmpty()) this.selection.selectLineStart(); this.session.remove(this.getSelectionRange()); this.clearSelection(); }; this.removeToLineEnd = function() { if (this.selection.isEmpty()) this.selection.selectLineEnd(); var range = this.getSelectionRange(); if (range.start.column == range.end.column && range.start.row == range.end.row) { range.end.column = 0; range.end.row++; } this.session.remove(range); this.clearSelection(); }; this.splitLine = function() { if (!this.selection.isEmpty()) { this.session.remove(this.getSelectionRange()); this.clearSelection(); } var cursor = this.getCursorPosition(); this.insert("\n"); this.moveCursorToPosition(cursor); }; this.transposeLetters = function() { if (!this.selection.isEmpty()) { return; } var cursor = this.getCursorPosition(); var column = cursor.column; if (column === 0) return; var line = this.session.getLine(cursor.row); var swap, range; if (column < line.length) { swap = line.charAt(column) + line.charAt(column-1); range = new Range(cursor.row, column-1, cursor.row, column+1); } else { swap = line.charAt(column-1) + line.charAt(column-2); range = new Range(cursor.row, column-2, cursor.row, column); } this.session.replace(range, swap); }; this.toLowerCase = function() { var originalRange = this.getSelectionRange(); if (this.selection.isEmpty()) { this.selection.selectWord(); } var range = this.getSelectionRange(); var text = this.session.getTextRange(range); this.session.replace(range, text.toLowerCase()); this.selection.setSelectionRange(originalRange); }; this.toUpperCase = function() { var originalRange = this.getSelectionRange(); if (this.selection.isEmpty()) { this.selection.selectWord(); } var range = this.getSelectionRange(); var text = this.session.getTextRange(range); this.session.replace(range, text.toUpperCase()); this.selection.setSelectionRange(originalRange); }; this.indent = function() { var session = this.session; var range = this.getSelectionRange(); if (range.start.row < range.end.row) { var rows = this.$getSelectedRows(); session.indentRows(rows.first, rows.last, "\t"); return; } else if (range.start.column < range.end.column) { var text = session.getTextRange(range) if (!/^\s+$/.test(text)) { var rows = this.$getSelectedRows(); session.indentRows(rows.first, rows.last, "\t"); return; } } var line = session.getLine(range.start.row) var position = range.start; var size = session.getTabSize(); var column = session.documentToScreenColumn(position.row, position.column); if (this.session.getUseSoftTabs()) { var count = (size - column % size); var indentString = lang.stringRepeat(" ", count); } else { var count = column % size; while (line[range.start.column] == " " && count) { range.start.column--; count--; } this.selection.setSelectionRange(range); indentString = "\t"; } return this.insert(indentString); }; this.blockIndent = function() { var rows = this.$getSelectedRows(); this.session.indentRows(rows.first, rows.last, "\t"); }; this.blockOutdent = function() { var selection = this.session.getSelection(); this.session.outdentRows(selection.getRange()); }; this.sortLines = function() { var rows = this.$getSelectedRows(); var session = this.session; var lines = []; for (i = rows.first; i <= rows.last; i++) lines.push(session.getLine(i)); lines.sort(function(a, b) { if (a.toLowerCase() < b.toLowerCase()) return -1; if (a.toLowerCase() > b.toLowerCase()) return 1; return 0; }); var deleteRange = new Range(0, 0, 0, 0); for (var i = rows.first; i <= rows.last; i++) { var line = session.getLine(i); deleteRange.start.row = i; deleteRange.end.row = i; deleteRange.end.column = line.length; session.replace(deleteRange, lines[i-rows.first]); } }; this.toggleCommentLines = function() { var state = this.session.getState(this.getCursorPosition().row); var rows = this.$getSelectedRows(); this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last); }; this.toggleBlockComment = function() { var cursor = this.getCursorPosition(); var state = this.session.getState(cursor.row); var range = this.getSelectionRange(); this.session.getMode().toggleBlockComment(state, this.session, range, cursor); }; this.getNumberAt = function( row, column ) { var _numberRx = /[\-]?[0-9]+(?:\.[0-9]+)?/g _numberRx.lastIndex = 0 var s = this.session.getLine(row) while (_numberRx.lastIndex < column) { var m = _numberRx.exec(s) if(m.index <= column && m.index+m[0].length >= column){ var number = { value: m[0], start: m.index, end: m.index+m[0].length } return number; } } return null; }; this.modifyNumber = function(amount) { var row = this.selection.getCursor().row; var column = this.selection.getCursor().column; var charRange = new Range(row, column-1, row, column); var c = this.session.getTextRange(charRange); if (!isNaN(parseFloat(c)) && isFinite(c)) { var nr = this.getNumberAt(row, column); if (nr) { var fp = nr.value.indexOf(".") >= 0 ? nr.start + nr.value.indexOf(".") + 1 : nr.end; var decimals = nr.start + nr.value.length - fp; var t = parseFloat(nr.value); t *= Math.pow(10, decimals); if(fp !== nr.end && column < fp){ amount *= Math.pow(10, nr.end - column - 1); } else { amount *= Math.pow(10, nr.end - column); } t += amount; t /= Math.pow(10, decimals); var nnr = t.toFixed(decimals); var replaceRange = new Range(row, nr.start, row, nr.end); this.session.replace(replaceRange, nnr); this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length)); } } }; this.removeLines = function() { var rows = this.$getSelectedRows(); var range; if (rows.first === 0 || rows.last+1 < this.session.getLength()) range = new Range(rows.first, 0, rows.last+1, 0); else range = new Range( rows.first-1, this.session.getLine(rows.first-1).length, rows.last, this.session.getLine(rows.last).length ); this.session.remove(range); this.clearSelection(); }; this.duplicateSelection = function() { var sel = this.selection; var doc = this.session; var range = sel.getRange(); var reverse = sel.isBackwards(); if (range.isEmpty()) { var row = range.start.row; doc.duplicateLines(row, row); } else { var point = reverse ? range.start : range.end; var endPoint = doc.insert(point, doc.getTextRange(range), false); range.start = point; range.end = endPoint; sel.setSelectionRange(range, reverse) } }; this.moveLinesDown = function() { this.$moveLines(function(firstRow, lastRow) { return this.session.moveLinesDown(firstRow, lastRow); }); }; this.moveLinesUp = function() { this.$moveLines(function(firstRow, lastRow) { return this.session.moveLinesUp(firstRow, lastRow); }); }; this.moveText = function(range, toPosition, copy) { return this.session.moveText(range, toPosition, copy); }; this.copyLinesUp = function() { this.$moveLines(function(firstRow, lastRow) { this.session.duplicateLines(firstRow, lastRow); return 0; }); }; this.copyLinesDown = function() { this.$moveLines(function(firstRow, lastRow) { return this.session.duplicateLines(firstRow, lastRow); }); }; this.$moveLines = function(mover) { var selection = this.selection; if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) { var range = selection.toOrientedRange(); var rows = this.$getSelectedRows(range); var linesMoved = mover.call(this, rows.first, rows.last); range.moveBy(linesMoved, 0); selection.fromOrientedRange(range); } else { var ranges = selection.rangeList.ranges; selection.rangeList.detach(this.session); for (var i = ranges.length; i--; ) { var rangeIndex = i; var rows = ranges[i].collapseRows(); var last = rows.end.row; var first = rows.start.row; while (i--) { var rows = ranges[i].collapseRows(); if (first - rows.end.row <= 1) first = rows.end.row; else break; } i++; var linesMoved = mover.call(this, first, last); while (rangeIndex >= i) { ranges[rangeIndex].moveBy(linesMoved, 0); rangeIndex--; } } selection.fromOrientedRange(selection.ranges[0]); selection.rangeList.attach(this.session); } }; this.$getSelectedRows = function() { var range = this.getSelectionRange().collapseRows(); return { first: this.session.getRowFoldStart(range.start.row), last: this.session.getRowFoldEnd(range.end.row) }; }; this.onCompositionStart = function(text) { this.renderer.showComposition(this.getCursorPosition()); }; this.onCompositionUpdate = function(text) { this.renderer.setCompositionText(text); }; this.onCompositionEnd = function() { this.renderer.hideComposition(); }; this.getFirstVisibleRow = function() { return this.renderer.getFirstVisibleRow(); }; this.getLastVisibleRow = function() { return this.renderer.getLastVisibleRow(); }; this.isRowVisible = function(row) { return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow()); }; this.isRowFullyVisible = function(row) { return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow()); }; this.$getVisibleRowCount = function() { return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1; }; this.$moveByPage = function(dir, select) { var renderer = this.renderer; var config = this.renderer.layerConfig; var rows = dir * Math.floor(config.height / config.lineHeight); this.$blockScrolling++; if (select === true) { this.selection.$moveSelection(function(){ this.moveCursorBy(rows, 0); }); } else if (select === false) { this.selection.moveCursorBy(rows, 0); this.selection.clearSelection(); } this.$blockScrolling--; var scrollTop = renderer.scrollTop; renderer.scrollBy(0, rows * config.lineHeight); if (select != null) renderer.scrollCursorIntoView(null, 0.5); renderer.animateScrolling(scrollTop); }; this.selectPageDown = function() { this.$moveByPage(1, true); }; this.selectPageUp = function() { this.$moveByPage(-1, true); }; this.gotoPageDown = function() { this.$moveByPage(1, false); }; this.gotoPageUp = function() { this.$moveByPage(-1, false); }; this.scrollPageDown = function() { this.$moveByPage(1); }; this.scrollPageUp = function() { this.$moveByPage(-1); }; this.scrollToRow = function(row) { this.renderer.scrollToRow(row); }; this.scrollToLine = function(line, center, animate, callback) { this.renderer.scrollToLine(line, center, animate, callback); }; this.centerSelection = function() { var range = this.getSelectionRange(); var pos = { row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2), column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2) } this.renderer.alignCursor(pos, 0.5); }; this.getCursorPosition = function() { return this.selection.getCursor(); }; this.getCursorPositionScreen = function() { return this.session.documentToScreenPosition(this.getCursorPosition()); }; this.getSelectionRange = function() { return this.selection.getRange(); }; this.selectAll = function() { this.$blockScrolling += 1; this.selection.selectAll(); this.$blockScrolling -= 1; }; this.clearSelection = function() { this.selection.clearSelection(); }; this.moveCursorTo = function(row, column) { this.selection.moveCursorTo(row, column); }; this.moveCursorToPosition = function(pos) { this.selection.moveCursorToPosition(pos); }; this.jumpToMatching = function(select) { var cursor = this.getCursorPosition(); var range = this.session.getBracketRange(cursor); if (!range) { range = this.find({ needle: /[{}()\[\]]/g, preventScroll:true, start: {row: cursor.row, column: cursor.column - 1} }); if (!range) return; var pos = range.start; if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2) range = this.session.getBracketRange(pos); } pos = range && range.cursor || pos; if (pos) { if (select) { if (range && range.isEqual(this.getSelectionRange())) this.clearSelection(); else this.selection.selectTo(pos.row, pos.column); } else { this.clearSelection(); this.moveCursorTo(pos.row, pos.column); } } }; this.gotoLine = function(lineNumber, column, animate) { this.selection.clearSelection(); this.session.unfold({row: lineNumber - 1, column: column || 0}); this.$blockScrolling += 1; this.exitMultiSelectMode && this.exitMultiSelectMode(); this.moveCursorTo(lineNumber - 1, column || 0); this.$blockScrolling -= 1; if (!this.isRowFullyVisible(lineNumber - 1)) this.scrollToLine(lineNumber - 1, true, animate); }; this.navigateTo = function(row, column) { this.clearSelection(); this.moveCursorTo(row, column); }; this.navigateUp = function(times) { if (this.selection.isMultiLine() && !this.selection.isBackwards()) { var selectionStart = this.selection.anchor.getPosition(); return this.moveCursorToPosition(selectionStart); } this.selection.clearSelection(); times = times || 1; this.selection.moveCursorBy(-times, 0); }; this.navigateDown = function(times) { if (this.selection.isMultiLine() && this.selection.isBackwards()) { var selectionEnd = this.selection.anchor.getPosition(); return this.moveCursorToPosition(selectionEnd); } this.selection.clearSelection(); times = times || 1; this.selection.moveCursorBy(times, 0); }; this.navigateLeft = function(times) { if (!this.selection.isEmpty()) { var selectionStart = this.getSelectionRange().start; this.moveCursorToPosition(selectionStart); } else { times = times || 1; while (times--) { this.selection.moveCursorLeft(); } } this.clearSelection(); }; this.navigateRight = function(times) { if (!this.selection.isEmpty()) { var selectionEnd = this.getSelectionRange().end; this.moveCursorToPosition(selectionEnd); } else { times = times || 1; while (times--) { this.selection.moveCursorRight(); } } this.clearSelection(); }; this.navigateLineStart = function() { this.selection.moveCursorLineStart(); this.clearSelection(); }; this.navigateLineEnd = function() { this.selection.moveCursorLineEnd(); this.clearSelection(); }; this.navigateFileEnd = function() { var scrollTop = this.renderer.scrollTop; this.selection.moveCursorFileEnd(); this.clearSelection(); this.renderer.animateScrolling(scrollTop); }; this.navigateFileStart = function() { var scrollTop = this.renderer.scrollTop; this.selection.moveCursorFileStart(); this.clearSelection(); this.renderer.animateScrolling(scrollTop); }; this.navigateWordRight = function() { this.selection.moveCursorWordRight(); this.clearSelection(); }; this.navigateWordLeft = function() { this.selection.moveCursorWordLeft(); this.clearSelection(); }; this.replace = function(replacement, options) { if (options) this.$search.set(options); var range = this.$search.find(this.session); var replaced = 0; if (!range) return replaced; if (this.$tryReplace(range, replacement)) { replaced = 1; } if (range !== null) { this.selection.setSelectionRange(range); this.renderer.scrollSelectionIntoView(range.start, range.end); } return replaced; }; this.replaceAll = function(replacement, options) { if (options) { this.$search.set(options); } var ranges = this.$search.findAll(this.session); var replaced = 0; if (!ranges.length) return replaced; this.$blockScrolling += 1; var selection = this.getSelectionRange(); this.clearSelection(); this.selection.moveCursorTo(0, 0); for (var i = ranges.length - 1; i >= 0; --i) { if(this.$tryReplace(ranges[i], replacement)) { replaced++; } } this.selection.setSelectionRange(selection); this.$blockScrolling -= 1; return replaced; }; this.$tryReplace = function(range, replacement) { var input = this.session.getTextRange(range); replacement = this.$search.replace(input, replacement); if (replacement !== null) { range.end = this.session.replace(range, replacement); return range; } else { return null; } }; this.getLastSearchOptions = function() { return this.$search.getOptions(); }; this.find = function(needle, options, animate) { if (!options) options = {}; if (typeof needle == "string" || needle instanceof RegExp) options.needle = needle; else if (typeof needle == "object") oop.mixin(options, needle); var range = this.selection.getRange(); if (options.needle == null) { needle = this.session.getTextRange(range) || this.$search.$options.needle; if (!needle) { range = this.session.getWordRange(range.start.row, range.start.column); needle = this.session.getTextRange(range); } this.$search.set({needle: needle}); } this.$search.set(options); if (!options.start) this.$search.set({start: range}); var newRange = this.$search.find(this.session); if (options.preventScroll) return newRange; if (newRange) { this.revealRange(newRange, animate); return newRange; } if (options.backwards) range.start = range.end; else range.end = range.start; this.selection.setRange(range); }; this.findNext = function(options, animate) { this.find({skipCurrent: true, backwards: false}, options, animate); }; this.findPrevious = function(options, animate) { this.find(options, {skipCurrent: true, backwards: true}, animate); }; this.revealRange = function(range, animate) { this.$blockScrolling += 1; this.session.unfold(range); this.selection.setSelectionRange(range); this.$blockScrolling -= 1; var scrollTop = this.renderer.scrollTop; this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); if (animate !== false) this.renderer.animateScrolling(scrollTop); }; this.undo = function() { this.$blockScrolling++; this.session.getUndoManager().undo(); this.$blockScrolling--; this.renderer.scrollCursorIntoView(null, 0.5); }; this.redo = function() { this.$blockScrolling++; this.session.getUndoManager().redo(); this.$blockScrolling--; this.renderer.scrollCursorIntoView(null, 0.5); }; this.destroy = function() { this.renderer.destroy(); this._emit("destroy", this); }; this.setAutoScrollEditorIntoView = function(enable) { if (enable === false) return; var rect; var self = this; var shouldScroll = false; if (!this.$scrollAnchor) this.$scrollAnchor = document.createElement("div"); var scrollAnchor = this.$scrollAnchor; scrollAnchor.style.cssText = "position:absolute"; this.container.insertBefore(scrollAnchor, this.container.firstChild); var onChangeSelection = this.on("changeSelection", function() { shouldScroll = true; }); var onBeforeRender = this.renderer.on("beforeRender", function() { if (shouldScroll) rect = self.renderer.container.getBoundingClientRect(); }); var onAfterRender = this.renderer.on("afterRender", function() { if (shouldScroll && rect && self.isFocused()) { var renderer = self.renderer; var pos = renderer.$cursorLayer.$pixelPos; var config = renderer.layerConfig; var top = pos.top - config.offset; if (pos.top >= 0 && top + rect.top < 0) { shouldScroll = true; } else if (pos.top < config.height && pos.top + rect.top + config.lineHeight > window.innerHeight) { shouldScroll = false; } else { shouldScroll = null; } if (shouldScroll != null) { scrollAnchor.style.top = top + "px"; scrollAnchor.style.left = pos.left + "px"; scrollAnchor.style.height = config.lineHeight + "px"; scrollAnchor.scrollIntoView(shouldScroll); } shouldScroll = rect = null; } }); this.setAutoScrollEditorIntoView = function(enable) { if (enable === true) return; delete this.setAutoScrollEditorIntoView; this.removeEventListener("changeSelection", onChangeSelection); this.renderer.removeEventListener("afterRender", onAfterRender); this.renderer.removeEventListener("beforeRender", onBeforeRender); }; }; this.$resetCursorStyle = function() { var style = this.$cursorStyle || "ace"; var cursorLayer = this.renderer.$cursorLayer; if (!cursorLayer) return; cursorLayer.setSmoothBlinking(style == "smooth"); cursorLayer.isBlinking = !this.$readOnly && style != "wide"; }; }).call(Editor.prototype); config.defineOptions(Editor.prototype, "editor", { selectionStyle: { set: function(style) { this.onSelectionChange(); this._emit("changeSelectionStyle", {data: style}); }, initialValue: "line" }, highlightActiveLine: { set: function() {this.$updateHighlightActiveLine();}, initialValue: true }, highlightSelectedWord: { set: function(shouldHighlight) {this.$onSelectionChange();}, initialValue: true }, readOnly: { set: function(readOnly) { this.textInput.setReadOnly(readOnly); this.$resetCursorStyle(); }, initialValue: false }, cursorStyle: { set: function(val) { this.$resetCursorStyle(); }, values: ["ace", "slim", "smooth", "wide"], initialValue: "ace" }, mergeUndoDeltas: { values: [false, true, "always"], initialValue: true }, behavioursEnabled: {initialValue: true}, wrapBehavioursEnabled: {initialValue: true}, hScrollBarAlwaysVisible: "renderer", vScrollBarAlwaysVisible: "renderer", highlightGutterLine: "renderer", animatedScroll: "renderer", showInvisibles: "renderer", showPrintMargin: "renderer", printMarginColumn: "renderer", printMargin: "renderer", fadeFoldWidgets: "renderer", showFoldWidgets: "renderer", showGutter: "renderer", displayIndentGuides: "renderer", fontSize: "renderer", fontFamily: "renderer", maxLines: "renderer", minLines: "renderer", scrollPastEnd: "renderer", fixedWidthGutter: "renderer", scrollSpeed: "$mouseHandler", dragDelay: "$mouseHandler", dragEnabled: "$mouseHandler", focusTimout: "$mouseHandler", firstLineNumber: "session", overwrite: "session", newLineMode: "session", useWorker: "session", useSoftTabs: "session", tabSize: "session", wrap: "session", foldStyle: "session" }); exports.Editor = Editor; }); define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) { exports.stringReverse = function(string) { return string.split("").reverse().join(""); }; exports.stringRepeat = function (string, count) { var result = ''; while (count > 0) { if (count & 1) result += string; if (count >>= 1) string += string; } return result; }; var trimBeginRegexp = /^\s\s*/; var trimEndRegexp = /\s\s*$/; exports.stringTrimLeft = function (string) { return string.replace(trimBeginRegexp, ''); }; exports.stringTrimRight = function (string) { return string.replace(trimEndRegexp, ''); }; exports.copyObject = function(obj) { var copy = {}; for (var key in obj) { copy[key] = obj[key]; } return copy; }; exports.copyArray = function(array){ var copy = []; for (var i=0, l=array.length; i= 0) { anchor = this.$clickSelection.start; if (range.start.row != cursor.row || range.start.column != cursor.column) cursor = range.end; } else if (cmpStart == -1 && cmpEnd == 1) { cursor = range.end; anchor = range.start; } else { var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); cursor = orientedRange.cursor; anchor = orientedRange.anchor; } editor.selection.setSelectionAnchor(anchor.row, anchor.column); } editor.selection.selectToPosition(cursor); editor.renderer.scrollCursorIntoView(); }; this.selectEnd = this.selectAllEnd = this.selectByWordsEnd = this.selectByLinesEnd = function() { this.editor.unsetStyle("ace_selecting"); if (this.editor.renderer.scroller.releaseCapture) { this.editor.renderer.scroller.releaseCapture(); } }; this.focusWait = function() { var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); var time = (new Date()).getTime(); if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout) this.startSelect(this.mousedownEvent.getDocumentPosition()); }; this.onDoubleClick = function(ev) { var pos = ev.getDocumentPosition(); var editor = this.editor; var session = editor.session; var range = session.getBracketRange(pos); if (range) { if (range.isEmpty()) { range.start.column--; range.end.column++; } this.$clickSelection = range; this.setState("select"); return; } this.$clickSelection = editor.selection.getWordRange(pos.row, pos.column); this.setState("selectByWords"); }; this.onTripleClick = function(ev) { var pos = ev.getDocumentPosition(); var editor = this.editor; this.setState("selectByLines"); this.$clickSelection = editor.selection.getLineRange(pos.row); }; this.onQuadClick = function(ev) { var editor = this.editor; editor.selectAll(); this.$clickSelection = editor.getSelectionRange(); this.setState("selectAll"); }; this.onMouseWheel = function(ev) { if (ev.getShiftKey() || ev.getAccelKey()) return; var t = ev.domEvent.timeStamp; var dt = t - (this.$lastScrollTime||0); var editor = this.editor; var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); if (isScrolable || dt < 200) { this.$lastScrollTime = t; editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); return ev.stop(); } }; }).call(DefaultHandlers.prototype); exports.DefaultHandlers = DefaultHandlers; function calcDistance(ax, ay, bx, by) { return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); } function calcRangeOrientation(range, cursor) { if (range.start.row == range.end.row) var cmp = 2 * cursor.column - range.start.column - range.end.column; else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) var cmp = cursor.column - 4; else var cmp = 2 * cursor.row - range.start.row - range.end.row; if (cmp < 0) return {cursor: range.start, anchor: range.end}; else return {cursor: range.end, anchor: range.start}; } }); define('ace/mouse/default_gutter_handler', ['require', 'exports', 'module' , 'ace/lib/dom', 'ace/lib/event'], function(require, exports, module) { var dom = require("../lib/dom"); var event = require("../lib/event"); function GutterHandler(mouseHandler) { var editor = mouseHandler.editor; var gutter = editor.renderer.$gutterLayer; mouseHandler.editor.setDefaultHandler("guttermousedown", function(e) { if (!editor.isFocused() || e.getButton() != 0) return; var gutterRegion = gutter.getRegion(e); if (gutterRegion == "foldWidgets") return; var row = e.getDocumentPosition().row; var selection = editor.session.selection; if (e.getShiftKey()) selection.selectTo(row, 0); else { if (e.domEvent.detail == 2) { editor.selectAll(); return e.preventDefault(); } mouseHandler.$clickSelection = editor.selection.getLineRange(row); } mouseHandler.setState("selectByLines"); mouseHandler.captureMouse(e); return e.preventDefault(); }); var tooltipTimeout, mouseEvent, tooltip, tooltipAnnotation; function createTooltip() { tooltip = dom.createElement("div"); tooltip.className = "ace_gutter-tooltip"; tooltip.style.display = "none"; editor.container.appendChild(tooltip); } function showTooltip() { if (!tooltip) { createTooltip(); } var row = mouseEvent.getDocumentPosition().row; var annotation = gutter.$annotations[row]; if (!annotation) return hideTooltip(); var maxRow = editor.session.getLength(); if (row == maxRow) { var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row; var pos = mouseEvent.$pos; if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column)) return hideTooltip(); } if (tooltipAnnotation == annotation) return; tooltipAnnotation = annotation.text.join("
"); tooltip.style.display = "block"; tooltip.innerHTML = tooltipAnnotation; editor.on("mousewheel", hideTooltip); moveTooltip(mouseEvent); } function hideTooltip() { if (tooltipTimeout) tooltipTimeout = clearTimeout(tooltipTimeout); if (tooltipAnnotation) { tooltip.style.display = "none"; tooltipAnnotation = null; editor.removeEventListener("mousewheel", hideTooltip); } } function moveTooltip(e) { var rect = editor.renderer.$gutter.getBoundingClientRect(); tooltip.style.left = e.x + 15 + "px"; if (e.y + 3 * editor.renderer.lineHeight + 15 < rect.bottom) { tooltip.style.bottom = ""; tooltip.style.top = e.y + 15 + "px"; } else { tooltip.style.top = ""; var innerHeight = window.innerHeight || document.documentElement.clientHeight; tooltip.style.bottom = innerHeight - e.y + 5 + "px"; } } mouseHandler.editor.setDefaultHandler("guttermousemove", function(e) { var target = e.domEvent.target || e.domEvent.srcElement; if (dom.hasCssClass(target, "ace_fold-widget")) return hideTooltip(); if (tooltipAnnotation) moveTooltip(e); mouseEvent = e; if (tooltipTimeout) return; tooltipTimeout = setTimeout(function() { tooltipTimeout = null; if (mouseEvent && !mouseHandler.isMousePressed) showTooltip(); else hideTooltip(); }, 50); }); event.addListener(editor.renderer.$gutter, "mouseout", function(e) { mouseEvent = null; if (!tooltipAnnotation || tooltipTimeout) return; tooltipTimeout = setTimeout(function() { tooltipTimeout = null; hideTooltip(); }, 50); }); editor.on("changeSession", hideTooltip); } exports.GutterHandler = GutterHandler; }); define('ace/mouse/mouse_event', ['require', 'exports', 'module' , 'ace/lib/event', 'ace/lib/useragent'], function(require, exports, module) { var event = require("../lib/event"); var useragent = require("../lib/useragent"); var MouseEvent = exports.MouseEvent = function(domEvent, editor) { this.domEvent = domEvent; this.editor = editor; this.x = this.clientX = domEvent.clientX; this.y = this.clientY = domEvent.clientY; this.$pos = null; this.$inSelection = null; this.propagationStopped = false; this.defaultPrevented = false; }; (function() { this.stopPropagation = function() { event.stopPropagation(this.domEvent); this.propagationStopped = true; }; this.preventDefault = function() { event.preventDefault(this.domEvent); this.defaultPrevented = true; }; this.stop = function() { this.stopPropagation(); this.preventDefault(); }; this.getDocumentPosition = function() { if (this.$pos) return this.$pos; this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY); return this.$pos; }; this.inSelection = function() { if (this.$inSelection !== null) return this.$inSelection; var editor = this.editor; var selectionRange = editor.getSelectionRange(); if (selectionRange.isEmpty()) this.$inSelection = false; else { var pos = this.getDocumentPosition(); this.$inSelection = selectionRange.contains(pos.row, pos.column); } return this.$inSelection; }; this.getButton = function() { return event.getButton(this.domEvent); }; this.getShiftKey = function() { return this.domEvent.shiftKey; }; this.getAccelKey = useragent.isMac ? function() { return this.domEvent.metaKey; } : function() { return this.domEvent.ctrlKey; }; }).call(MouseEvent.prototype); }); define('ace/mouse/dragdrop_handler', ['require', 'exports', 'module' , 'ace/lib/dom', 'ace/lib/event', 'ace/lib/useragent'], function(require, exports, module) { var dom = require("../lib/dom"); var event = require("../lib/event"); var useragent = require("../lib/useragent"); var AUTOSCROLL_DELAY = 200; var SCROLL_CURSOR_DELAY = 200; var SCROLL_CURSOR_HYSTERESIS = 5; function DragdropHandler(mouseHandler) { var editor = mouseHandler.editor; var blankImage = dom.createElement("img"); blankImage.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; if (useragent.isOpera) blankImage.style.cssText = "width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;"; var exports = ["dragWait", "dragWaitEnd", "startDrag", "dragReadyEnd", "onMouseDrag"]; exports.forEach(function(x) { mouseHandler[x] = this[x]; }, this); editor.addEventListener("mousedown", this.onMouseDown.bind(mouseHandler)); var mouseTarget = editor.container; var dragSelectionMarker, x, y; var timerId, range; var dragCursor, counter = 0; var dragOperation; var isInternal; var autoScrollStartTime; var cursorMovedTime; var cursorPointOnCaretMoved; this.onDragStart = function(e) { if (this.cancelDrag || !mouseTarget.draggable) { var self = this; setTimeout(function(){ self.startSelect(); self.captureMouse(e); }, 0); return e.preventDefault(); } range = editor.getSelectionRange(); var dataTransfer = e.dataTransfer; dataTransfer.effectAllowed = editor.getReadOnly() ? "copy" : "copyMove"; if (useragent.isOpera) { editor.container.appendChild(blankImage); blankImage._top = blankImage.offsetTop; } dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0); if (useragent.isOpera) { editor.container.removeChild(blankImage); } dataTransfer.clearData(); dataTransfer.setData("Text", editor.session.getTextRange()); isInternal = true; this.setState("drag"); }; this.onDragEnd = function(e) { mouseTarget.draggable = false; isInternal = false; this.setState(null); if (!editor.getReadOnly()) { var dropEffect = e.dataTransfer.dropEffect; if (!dragOperation && dropEffect == "move") editor.session.remove(editor.getSelectionRange()); editor.renderer.$cursorLayer.setBlinking(true); } this.editor.unsetStyle("ace_dragging"); }; this.onDragEnter = function(e) { if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return; if (!dragSelectionMarker) addDragMarker(); counter++; e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); return event.preventDefault(e); }; this.onDragOver = function(e) { if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return; if (!dragSelectionMarker) { addDragMarker(); counter++; } if (onMouseMoveTimer !== null) onMouseMoveTimer = null; x = e.clientX; y = e.clientY; e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); return event.preventDefault(e); }; this.onDragLeave = function(e) { counter--; if (counter <= 0 && dragSelectionMarker) { clearDragMarker(); dragOperation = null; return event.preventDefault(e); } }; this.onDrop = function(e) { if (!dragSelectionMarker) return; var dataTransfer = e.dataTransfer; if (isInternal) { switch (dragOperation) { case "move": if (range.contains(dragCursor.row, dragCursor.column)) { range = { start: dragCursor, end: dragCursor }; } else { range = editor.moveText(range, dragCursor); } break; case "copy": range = editor.moveText(range, dragCursor, true); break; } } else { var dropData = dataTransfer.getData('Text'); range = { start: dragCursor, end: editor.session.insert(dragCursor, dropData) }; editor.focus(); dragOperation = null; } clearDragMarker(); return event.preventDefault(e); }; event.addListener(mouseTarget, "dragstart", this.onDragStart.bind(mouseHandler)); event.addListener(mouseTarget, "dragend", this.onDragEnd.bind(mouseHandler)); event.addListener(mouseTarget, "dragenter", this.onDragEnter.bind(mouseHandler)); event.addListener(mouseTarget, "dragover", this.onDragOver.bind(mouseHandler)); event.addListener(mouseTarget, "dragleave", this.onDragLeave.bind(mouseHandler)); event.addListener(mouseTarget, "drop", this.onDrop.bind(mouseHandler)); function scrollCursorIntoView(cursor, prevCursor) { var now = new Date().getTime(); var vMovement = !prevCursor || cursor.row != prevCursor.row; var hMovement = !prevCursor || cursor.column != prevCursor.column; if (!cursorMovedTime || vMovement || hMovement) { editor.$blockScrolling += 1; editor.moveCursorToPosition(cursor); editor.$blockScrolling -= 1; cursorMovedTime = now; cursorPointOnCaretMoved = {x: x, y: y}; } else { var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y); if (distance > SCROLL_CURSOR_HYSTERESIS) { cursorMovedTime = null; } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) { editor.renderer.scrollCursorIntoView(); cursorMovedTime = null; } } } function autoScroll(cursor, prevCursor) { var now = new Date().getTime(); var lineHeight = editor.renderer.layerConfig.lineHeight; var characterWidth = editor.renderer.layerConfig.characterWidth; var editorRect = editor.renderer.scroller.getBoundingClientRect(); var offsets = { x: { left: x - editorRect.left, right: editorRect.right - x }, y: { top: y - editorRect.top, bottom: editorRect.bottom - y } }; var nearestXOffset = Math.min(offsets.x.left, offsets.x.right); var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom); var scrollCursor = {row: cursor.row, column: cursor.column}; if (nearestXOffset / characterWidth <= 2) { scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2); } if (nearestYOffset / lineHeight <= 1) { scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1); } var vScroll = cursor.row != scrollCursor.row; var hScroll = cursor.column != scrollCursor.column; var vMovement = !prevCursor || cursor.row != prevCursor.row; if (vScroll || (hScroll && !vMovement)) { if (!autoScrollStartTime) autoScrollStartTime = now; else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) editor.renderer.scrollCursorIntoView(scrollCursor); } else { autoScrollStartTime = null; } } function onDragInterval() { var prevCursor = dragCursor; dragCursor = editor.renderer.screenToTextCoordinates(x, y); scrollCursorIntoView(dragCursor, prevCursor); autoScroll(dragCursor, prevCursor); } function addDragMarker() { range = editor.selection.toOrientedRange(); dragSelectionMarker = editor.session.addMarker(range, "ace_selection", editor.getSelectionStyle()); editor.clearSelection(); if (editor.isFocused()) editor.renderer.$cursorLayer.setBlinking(false); clearInterval(timerId); timerId = setInterval(onDragInterval, 20); counter = 0; event.addListener(document, "mousemove", onMouseMove); } function clearDragMarker() { clearInterval(timerId); editor.session.removeMarker(dragSelectionMarker); dragSelectionMarker = null; editor.$blockScrolling += 1; editor.selection.fromOrientedRange(range); editor.$blockScrolling -= 1; if (editor.isFocused() && !isInternal) editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly()); range = null; counter = 0; autoScrollStartTime = null; cursorMovedTime = null; event.removeListener(document, "mousemove", onMouseMove); } var onMouseMoveTimer = null; function onMouseMove() { if (onMouseMoveTimer == null) { onMouseMoveTimer = setTimeout(function() { if (onMouseMoveTimer != null && dragSelectionMarker) clearDragMarker(); }, 20); } } function canAccept(dataTransfer) { var types = dataTransfer.types; return !types || Array.prototype.some.call(types, function(type) { return type == 'text/plain' || type == 'Text'; }); } function getDropEffect(e) { var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized']; var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized']; var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey; var effectAllowed = "uninitialized"; try { effectAllowed = e.dataTransfer.effectAllowed.toLowerCase(); } catch (e) {} var dropEffect = "none"; if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = "copy"; else if (moveAllowed.indexOf(effectAllowed) >= 0) dropEffect = "move"; else if (copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = "copy"; return dropEffect; } } (function() { this.dragWait = function() { var interval = (new Date()).getTime() - this.mousedownEvent.time; if (interval > this.editor.getDragDelay()) this.startDrag(); }; this.dragWaitEnd = function() { var target = this.editor.container; target.draggable = false; this.startSelect(this.mousedownEvent.getDocumentPosition()); this.selectEnd(); }; this.dragReadyEnd = function(e) { this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()); this.editor.unsetStyle("ace_dragging"); this.dragWaitEnd(); }; this.startDrag = function(){ this.cancelDrag = false; var target = this.editor.container; target.draggable = true; this.editor.renderer.$cursorLayer.setBlinking(false); this.editor.setStyle("ace_dragging"); this.setState("dragReady"); }; this.onMouseDrag = function(e) { var target = this.editor.container; if (useragent.isIE && this.state == "dragReady") { var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); if (distance > 3) target.dragDrop(); } if (this.state === "dragWait") { var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); if (distance > 0) { target.draggable = false; this.startSelect(this.mousedownEvent.getDocumentPosition()); } } }; this.onMouseDown = function(e) { if (!this.$dragEnabled) return; this.mousedownEvent = e; var editor = this.editor; var inSelection = e.inSelection(); var button = e.getButton(); var clickCount = e.domEvent.detail || 1; if (clickCount === 1 && button === 0 && inSelection) { this.mousedownEvent.time = (new Date()).getTime(); var eventTarget = e.domEvent.target || e.domEvent.srcElement; if ("unselectable" in eventTarget) eventTarget.unselectable = "on"; if (editor.getDragDelay()) { if (useragent.isWebKit) { self.cancelDrag = true; var mouseTarget = editor.container; mouseTarget.draggable = true; } this.setState("dragWait"); } else { this.startDrag(); } this.captureMouse(e, this.onMouseDrag.bind(this)); e.defaultPrevented = true; } }; }).call(DragdropHandler.prototype); function calcDistance(ax, ay, bx, by) { return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); } exports.DragdropHandler = DragdropHandler; }); define('ace/config', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/lib/oop', 'ace/lib/net', 'ace/lib/event_emitter'], function(require, exports, module) { "no use strict"; var lang = require("./lib/lang"); var oop = require("./lib/oop"); var net = require("./lib/net"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var global = (function() { return this; })(); var options = { packaged: false, workerPath: null, modePath: null, themePath: null, basePath: "", suffix: ".js", $moduleUrls: {} }; exports.get = function(key) { if (!options.hasOwnProperty(key)) throw new Error("Unknown config key: " + key); return options[key]; }; exports.set = function(key, value) { if (!options.hasOwnProperty(key)) throw new Error("Unknown config key: " + key); options[key] = value; }; exports.all = function() { return lang.copyObject(options); }; oop.implement(exports, EventEmitter); exports.moduleUrl = function(name, component) { if (options.$moduleUrls[name]) return options.$moduleUrls[name]; var parts = name.split("/"); component = component || parts[parts.length - 2] || ""; var sep = component == "snippets" ? "/" : "-"; var base = parts[parts.length - 1]; if (sep == "-") { var re = new RegExp("^" + component + "[\\-_]|[\\-_]" + component + "$", "g"); base = base.replace(re, ""); } if ((!base || base == component) && parts.length > 1) base = parts[parts.length - 2]; var path = options[component + "Path"]; if (path == null) { path = options.basePath; } else if (sep == "/") { component = sep = ""; } if (path && path.slice(-1) != "/") path += "/"; return path + component + sep + base + this.get("suffix"); }; exports.setModuleUrl = function(name, subst) { return options.$moduleUrls[name] = subst; }; exports.$loading = {}; exports.loadModule = function(moduleName, onLoad) { var module, moduleType; if (Array.isArray(moduleName)) { moduleType = moduleName[0]; moduleName = moduleName[1]; } try { module = require(moduleName); } catch (e) {} if (module && !exports.$loading[moduleName]) return onLoad && onLoad(module); if (!exports.$loading[moduleName]) exports.$loading[moduleName] = []; exports.$loading[moduleName].push(onLoad); if (exports.$loading[moduleName].length > 1) return; var afterLoad = function() { require([moduleName], function(module) { exports._emit("load.module", {name: moduleName, module: module}); var listeners = exports.$loading[moduleName]; exports.$loading[moduleName] = null; listeners.forEach(function(onLoad) { onLoad && onLoad(module); }); }); }; if (!exports.get("packaged")) return afterLoad(); net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad); }; exports.init = function() { options.packaged = require.packaged || module.packaged || (global.define && define.packaged); if (!global.document) return ""; var scriptOptions = {}; var scriptUrl = ""; var scripts = document.getElementsByTagName("script"); for (var i=0; i i) { this.$docRowCache.splice(i, l); this.$screenRowCache.splice(i, l); } }; this.$getRowCacheIndex = function(cacheArray, val) { var low = 0; var hi = cacheArray.length - 1; while (low <= hi) { var mid = (low + hi) >> 1; var c = cacheArray[mid]; if (val > c) low = mid + 1; else if (val < c) hi = mid - 1; else return mid; } return low -1; }; this.resetCaches = function() { this.$modified = true; this.$wrapData = []; this.$rowLengthCache = []; this.$resetRowCache(0); if (this.bgTokenizer) this.bgTokenizer.start(0); }; this.onChangeFold = function(e) { var fold = e.data; this.$resetRowCache(fold.start.row); }; this.onChange = function(e) { var delta = e.data; this.$modified = true; this.$resetRowCache(delta.range.start.row); var removedFolds = this.$updateInternalDataOnChange(e); if (!this.$fromUndo && this.$undoManager && !delta.ignore) { this.$deltasDoc.push(delta); if (removedFolds && removedFolds.length != 0) { this.$deltasFold.push({ action: "removeFolds", folds: removedFolds }); } this.$informUndoManager.schedule(); } this.bgTokenizer.$updateOnChange(delta); this._emit("change", e); }; this.setValue = function(text) { this.doc.setValue(text); this.selection.moveCursorTo(0, 0); this.selection.clearSelection(); this.$resetRowCache(0); this.$deltas = []; this.$deltasDoc = []; this.$deltasFold = []; this.getUndoManager().reset(); }; this.getValue = this.toString = function() { return this.doc.getValue(); }; this.getSelection = function() { return this.selection; }; this.getState = function(row) { return this.bgTokenizer.getState(row); }; this.getTokens = function(row) { return this.bgTokenizer.getTokens(row); }; this.getTokenAt = function(row, column) { var tokens = this.bgTokenizer.getTokens(row); var token, c = 0; if (column == null) { i = tokens.length - 1; c = this.getLine(row).length; } else { for (var i = 0; i < tokens.length; i++) { c += tokens[i].value.length; if (c >= column) break; } } token = tokens[i]; if (!token) return null; token.index = i; token.start = c - token.value.length; return token; }; this.setUndoManager = function(undoManager) { this.$undoManager = undoManager; this.$deltas = []; this.$deltasDoc = []; this.$deltasFold = []; if (this.$informUndoManager) this.$informUndoManager.cancel(); if (undoManager) { var self = this; this.$syncInformUndoManager = function() { self.$informUndoManager.cancel(); if (self.$deltasFold.length) { self.$deltas.push({ group: "fold", deltas: self.$deltasFold }); self.$deltasFold = []; } if (self.$deltasDoc.length) { self.$deltas.push({ group: "doc", deltas: self.$deltasDoc }); self.$deltasDoc = []; } if (self.$deltas.length > 0) { undoManager.execute({ action: "aceupdate", args: [self.$deltas, self], merge: self.mergeUndoDeltas }); } self.mergeUndoDeltas = false; self.$deltas = []; } this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager); } }; this.markUndoGroup = function() { if (this.$syncInformUndoManager) this.$syncInformUndoManager(); }; this.$defaultUndoManager = { undo: function() {}, redo: function() {}, reset: function() {} }; this.getUndoManager = function() { return this.$undoManager || this.$defaultUndoManager; }; this.getTabString = function() { if (this.getUseSoftTabs()) { return lang.stringRepeat(" ", this.getTabSize()); } else { return "\t"; } }; this.setUseSoftTabs = function(val) { this.setOption("useSoftTabs", val); }; this.getUseSoftTabs = function() { return this.$useSoftTabs && !this.$mode.$indentWithTabs; }; this.setTabSize = function(tabSize) { this.setOption("tabSize", tabSize) }; this.getTabSize = function() { return this.$tabSize; }; this.isTabStop = function(position) { return this.$useSoftTabs && (position.column % this.$tabSize == 0); }; this.$overwrite = false; this.setOverwrite = function(overwrite) { this.setOption("overwrite", overwrite) }; this.getOverwrite = function() { return this.$overwrite; }; this.toggleOverwrite = function() { this.setOverwrite(!this.$overwrite); }; this.addGutterDecoration = function(row, className) { if (!this.$decorations[row]) this.$decorations[row] = ""; this.$decorations[row] += " " + className; this._emit("changeBreakpoint", {}); }; this.removeGutterDecoration = function(row, className) { this.$decorations[row] = (this.$decorations[row] || "").replace(" " + className, ""); this._emit("changeBreakpoint", {}); }; this.getBreakpoints = function() { return this.$breakpoints; }; this.setBreakpoints = function(rows) { this.$breakpoints = []; for (var i=0; i 0) inToken = !!line.charAt(column - 1).match(this.tokenRe); if (!inToken) inToken = !!line.charAt(column).match(this.tokenRe); if (inToken) var re = this.tokenRe; else if (/^\s+$/.test(line.slice(column-1, column+1))) var re = /\s/; else var re = this.nonTokenRe; var start = column; if (start > 0) { do { start--; } while (start >= 0 && line.charAt(start).match(re)); start++; } var end = column; while (end < line.length && line.charAt(end).match(re)) { end++; } return new Range(row, start, row, end); }; this.getAWordRange = function(row, column) { var wordRange = this.getWordRange(row, column); var line = this.getLine(wordRange.end.row); while (line.charAt(wordRange.end.column).match(/[ \t]/)) { wordRange.end.column += 1; } return wordRange; }; this.setNewLineMode = function(newLineMode) { this.doc.setNewLineMode(newLineMode); }; this.getNewLineMode = function() { return this.doc.getNewLineMode(); }; this.setUseWorker = function(useWorker) { this.setOption("useWorker", useWorker); }; this.getUseWorker = function() { return this.$useWorker; }; this.onReloadTokenizer = function(e) { var rows = e.data; this.bgTokenizer.start(rows.first); this._emit("tokenizerUpdate", e); }; this.$modes = {}; this.$mode = null; this.$modeId = null; this.setMode = function(mode, cb) { if (mode && typeof mode === "object") { if (mode.getTokenizer) return this.$onChangeMode(mode); var options = mode; var path = options.path; } else { path = mode || "ace/mode/text"; } if (!this.$modes["ace/mode/text"]) this.$modes["ace/mode/text"] = new TextMode(); if (this.$modes[path] && !options) { this.$onChangeMode(this.$modes[path]); cb && cb(); return; } this.$modeId = path; config.loadModule(["mode", path], function(m) { if (this.$modeId !== path) return cb && cb(); if (this.$modes[path] && !options) return this.$onChangeMode(this.$modes[path]); if (m && m.Mode) { m = new m.Mode(options); if (!options) { this.$modes[path] = m; m.$id = path; } this.$onChangeMode(m); cb && cb(); } }.bind(this)); if (!this.$mode) this.$onChangeMode(this.$modes["ace/mode/text"], true); }; this.$onChangeMode = function(mode, $isPlaceholder) { if (!$isPlaceholder) this.$modeId = mode.$id; if (this.$mode === mode) return; this.$mode = mode; this.$stopWorker(); if (this.$useWorker) this.$startWorker(); var tokenizer = mode.getTokenizer(); if(tokenizer.addEventListener !== undefined) { var onReloadTokenizer = this.onReloadTokenizer.bind(this); tokenizer.addEventListener("update", onReloadTokenizer); } if (!this.bgTokenizer) { this.bgTokenizer = new BackgroundTokenizer(tokenizer); var _self = this; this.bgTokenizer.addEventListener("update", function(e) { _self._emit("tokenizerUpdate", e); }); } else { this.bgTokenizer.setTokenizer(tokenizer); } this.bgTokenizer.setDocument(this.getDocument()); this.tokenRe = mode.tokenRe; this.nonTokenRe = mode.nonTokenRe; if (!$isPlaceholder) { this.$options.wrapMethod.set.call(this, this.$wrapMethod); this.$setFolding(mode.foldingRules); this._emit("changeMode"); this.bgTokenizer.start(0); } }; this.$stopWorker = function() { if (this.$worker) this.$worker.terminate(); this.$worker = null; }; this.$startWorker = function() { if (typeof Worker !== "undefined" && !require.noWorker) { try { this.$worker = this.$mode.createWorker(this); } catch (e) { console.log("Could not load worker"); console.log(e); this.$worker = null; } } else this.$worker = null; }; this.getMode = function() { return this.$mode; }; this.$scrollTop = 0; this.setScrollTop = function(scrollTop) { if (this.$scrollTop === scrollTop || isNaN(scrollTop)) return; this.$scrollTop = scrollTop; this._signal("changeScrollTop", scrollTop); }; this.getScrollTop = function() { return this.$scrollTop; }; this.$scrollLeft = 0; this.setScrollLeft = function(scrollLeft) { if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) return; this.$scrollLeft = scrollLeft; this._signal("changeScrollLeft", scrollLeft); }; this.getScrollLeft = function() { return this.$scrollLeft; }; this.getScreenWidth = function() { this.$computeWidth(); if (this.lineWidgets) return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth); return this.screenWidth; }; this.getLineWidgetMaxWidth = function() { if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth var width = 0; this.lineWidgets.forEach(function(w) { if (w && w.screenWidth > width) width = w.screenWidth; }); return this.lineWidgetWidth = width; } this.$computeWidth = function(force) { if (this.$modified || force) { this.$modified = false; if (this.$useWrapMode) return this.screenWidth = this.$wrapLimit; var lines = this.doc.getAllLines(); var cache = this.$rowLengthCache; var longestScreenLine = 0; var foldIndex = 0; var foldLine = this.$foldData[foldIndex]; var foldStart = foldLine ? foldLine.start.row : Infinity; var len = lines.length; for (var i = 0; i < len; i++) { if (i > foldStart) { i = foldLine.end.row + 1; if (i >= len) break; foldLine = this.$foldData[foldIndex++]; foldStart = foldLine ? foldLine.start.row : Infinity; } if (cache[i] == null) cache[i] = this.$getStringScreenWidth(lines[i])[0]; if (cache[i] > longestScreenLine) longestScreenLine = cache[i]; } this.screenWidth = longestScreenLine; } }; this.getLine = function(row) { return this.doc.getLine(row); }; this.getLines = function(firstRow, lastRow) { return this.doc.getLines(firstRow, lastRow); }; this.getLength = function() { return this.doc.getLength(); }; this.getTextRange = function(range) { return this.doc.getTextRange(range || this.selection.getRange()); }; this.insert = function(position, text) { return this.doc.insert(position, text); }; this.remove = function(range) { return this.doc.remove(range); }; this.undoChanges = function(deltas, dontSelect) { if (!deltas.length) return; this.$fromUndo = true; var lastUndoRange = null; for (var i = deltas.length - 1; i != -1; i--) { var delta = deltas[i]; if (delta.group == "doc") { this.doc.revertDeltas(delta.deltas); lastUndoRange = this.$getUndoSelection(delta.deltas, true, lastUndoRange); } else { delta.deltas.forEach(function(foldDelta) { this.addFolds(foldDelta.folds); }, this); } } this.$fromUndo = false; lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange); return lastUndoRange; }; this.redoChanges = function(deltas, dontSelect) { if (!deltas.length) return; this.$fromUndo = true; var lastUndoRange = null; for (var i = 0; i < deltas.length; i++) { var delta = deltas[i]; if (delta.group == "doc") { this.doc.applyDeltas(delta.deltas); lastUndoRange = this.$getUndoSelection(delta.deltas, false, lastUndoRange); } } this.$fromUndo = false; lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange); return lastUndoRange; }; this.setUndoSelect = function(enable) { this.$undoSelect = enable; }; this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) { function isInsert(delta) { var insert = delta.action === "insertText" || delta.action === "insertLines"; return isUndo ? !insert : insert; } var delta = deltas[0]; var range, point; var lastDeltaIsInsert = false; if (isInsert(delta)) { range = Range.fromPoints(delta.range.start, delta.range.end); lastDeltaIsInsert = true; } else { range = Range.fromPoints(delta.range.start, delta.range.start); lastDeltaIsInsert = false; } for (var i = 1; i < deltas.length; i++) { delta = deltas[i]; if (isInsert(delta)) { point = delta.range.start; if (range.compare(point.row, point.column) == -1) { range.setStart(delta.range.start); } point = delta.range.end; if (range.compare(point.row, point.column) == 1) { range.setEnd(delta.range.end); } lastDeltaIsInsert = true; } else { point = delta.range.start; if (range.compare(point.row, point.column) == -1) { range = Range.fromPoints(delta.range.start, delta.range.start); } lastDeltaIsInsert = false; } } if (lastUndoRange != null) { if (Range.comparePoints(lastUndoRange.start, range.start) == 0) { lastUndoRange.start.column += range.end.column - range.start.column; lastUndoRange.end.column += range.end.column - range.start.column; } var cmp = lastUndoRange.compareRange(range); if (cmp == 1) { range.setStart(lastUndoRange.start); } else if (cmp == -1) { range.setEnd(lastUndoRange.end); } } return range; }; this.replace = function(range, text) { return this.doc.replace(range, text); }; this.moveText = function(fromRange, toPosition, copy) { var text = this.getTextRange(fromRange); var folds = this.getFoldsInRange(fromRange); var toRange = Range.fromPoints(toPosition, toPosition); if (!copy) { this.remove(fromRange); var rowDiff = fromRange.start.row - fromRange.end.row; var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column; if (collDiff) { if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) toRange.start.column += collDiff; if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) toRange.end.column += collDiff; } if (rowDiff && toRange.start.row >= fromRange.end.row) { toRange.start.row += rowDiff; toRange.end.row += rowDiff; } } toRange.end = this.insert(toRange.start, text); if (folds.length) { var oldStart = fromRange.start; var newStart = toRange.start; var rowDiff = newStart.row - oldStart.row; var collDiff = newStart.column - oldStart.column; this.addFolds(folds.map(function(x) { x = x.clone(); if (x.start.row == oldStart.row) x.start.column += collDiff; if (x.end.row == oldStart.row) x.end.column += collDiff; x.start.row += rowDiff; x.end.row += rowDiff; return x; })); } return toRange; }; this.indentRows = function(startRow, endRow, indentString) { indentString = indentString.replace(/\t/g, this.getTabString()); for (var row=startRow; row<=endRow; row++) this.insert({row: row, column:0}, indentString); }; this.outdentRows = function (range) { var rowRange = range.collapseRows(); var deleteRange = new Range(0, 0, 0, 0); var size = this.getTabSize(); for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) { var line = this.getLine(i); deleteRange.start.row = i; deleteRange.end.row = i; for (var j = 0; j < size; ++j) if (line.charAt(j) != ' ') break; if (j < size && line.charAt(j) == '\t') { deleteRange.start.column = j; deleteRange.end.column = j + 1; } else { deleteRange.start.column = 0; deleteRange.end.column = j; } this.remove(deleteRange); } }; this.$moveLines = function(firstRow, lastRow, dir) { firstRow = this.getRowFoldStart(firstRow); lastRow = this.getRowFoldEnd(lastRow); if (dir < 0) { var row = this.getRowFoldStart(firstRow + dir); if (row < 0) return 0; var diff = row-firstRow; } else if (dir > 0) { var row = this.getRowFoldEnd(lastRow + dir); if (row > this.doc.getLength()-1) return 0; var diff = row-lastRow; } else { firstRow = this.$clipRowToDocument(firstRow); lastRow = this.$clipRowToDocument(lastRow); var diff = lastRow - firstRow + 1; } var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE); var folds = this.getFoldsInRange(range).map(function(x){ x = x.clone(); x.start.row += diff; x.end.row += diff; return x; }); var lines = dir == 0 ? this.doc.getLines(firstRow, lastRow) : this.doc.removeLines(firstRow, lastRow); this.doc.insertLines(firstRow+diff, lines); folds.length && this.addFolds(folds); return diff; }; this.moveLinesUp = function(firstRow, lastRow) { return this.$moveLines(firstRow, lastRow, -1); }; this.moveLinesDown = function(firstRow, lastRow) { return this.$moveLines(firstRow, lastRow, 1); }; this.duplicateLines = function(firstRow, lastRow) { return this.$moveLines(firstRow, lastRow, 0); }; this.$clipRowToDocument = function(row) { return Math.max(0, Math.min(row, this.doc.getLength()-1)); }; this.$clipColumnToRow = function(row, column) { if (column < 0) return 0; return Math.min(this.doc.getLine(row).length, column); }; this.$clipPositionToDocument = function(row, column) { column = Math.max(0, column); if (row < 0) { row = 0; column = 0; } else { var len = this.doc.getLength(); if (row >= len) { row = len - 1; column = this.doc.getLine(len-1).length; } else { column = Math.min(this.doc.getLine(row).length, column); } } return { row: row, column: column }; }; this.$clipRangeToDocument = function(range) { if (range.start.row < 0) { range.start.row = 0; range.start.column = 0; } else { range.start.column = this.$clipColumnToRow( range.start.row, range.start.column ); } var len = this.doc.getLength() - 1; if (range.end.row > len) { range.end.row = len; range.end.column = this.doc.getLine(len).length; } else { range.end.column = this.$clipColumnToRow( range.end.row, range.end.column ); } return range; }; this.$wrapLimit = 80; this.$useWrapMode = false; this.$wrapLimitRange = { min : null, max : null }; this.setUseWrapMode = function(useWrapMode) { if (useWrapMode != this.$useWrapMode) { this.$useWrapMode = useWrapMode; this.$modified = true; this.$resetRowCache(0); if (useWrapMode) { var len = this.getLength(); this.$wrapData = []; for (var i = 0; i < len; i++) { this.$wrapData.push([]); } this.$updateWrapData(0, len - 1); } this._emit("changeWrapMode"); } }; this.getUseWrapMode = function() { return this.$useWrapMode; }; this.setWrapLimitRange = function(min, max) { if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) { this.$wrapLimitRange = { min: min, max: max }; this.$modified = true; this._emit("changeWrapMode"); } }; this.adjustWrapLimit = function(desiredLimit, $printMargin) { var limits = this.$wrapLimitRange if (limits.max < 0) limits = {min: $printMargin, max: $printMargin}; var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max); if (wrapLimit != this.$wrapLimit && wrapLimit > 1) { this.$wrapLimit = wrapLimit; this.$modified = true; if (this.$useWrapMode) { this.$updateWrapData(0, this.getLength() - 1); this.$resetRowCache(0); this._emit("changeWrapLimit"); } return true; } return false; }; this.$constrainWrapLimit = function(wrapLimit, min, max) { if (min) wrapLimit = Math.max(min, wrapLimit); if (max) wrapLimit = Math.min(max, wrapLimit); return wrapLimit; }; this.getWrapLimit = function() { return this.$wrapLimit; }; this.setWrapLimit = function (limit) { this.setWrapLimitRange(limit, limit); }; this.getWrapLimitRange = function() { return { min : this.$wrapLimitRange.min, max : this.$wrapLimitRange.max }; }; this.$updateInternalDataOnChange = function(e) { var useWrapMode = this.$useWrapMode; var len; var action = e.data.action; var firstRow = e.data.range.start.row; var lastRow = e.data.range.end.row; var start = e.data.range.start; var end = e.data.range.end; var removedFolds = null; if (action.indexOf("Lines") != -1) { if (action == "insertLines") { lastRow = firstRow + (e.data.lines.length); } else { lastRow = firstRow; } len = e.data.lines ? e.data.lines.length : lastRow - firstRow; } else { len = lastRow - firstRow; } this.$updating = true; if (len != 0) { if (action.indexOf("remove") != -1) { this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len); var foldLines = this.$foldData; removedFolds = this.getFoldsInRange(e.data.range); this.removeFolds(removedFolds); var foldLine = this.getFoldLine(end.row); var idx = 0; if (foldLine) { foldLine.addRemoveChars(end.row, end.column, start.column - end.column); foldLine.shiftRow(-len); var foldLineBefore = this.getFoldLine(firstRow); if (foldLineBefore && foldLineBefore !== foldLine) { foldLineBefore.merge(foldLine); foldLine = foldLineBefore; } idx = foldLines.indexOf(foldLine) + 1; } for (idx; idx < foldLines.length; idx++) { var foldLine = foldLines[idx]; if (foldLine.start.row >= end.row) { foldLine.shiftRow(-len); } } lastRow = firstRow; } else { var args; if (useWrapMode) { args = [firstRow, 0]; for (var i = 0; i < len; i++) args.push([]); this.$wrapData.splice.apply(this.$wrapData, args); } else { args = Array(len); args.unshift(firstRow, 0); this.$rowLengthCache.splice.apply(this.$rowLengthCache, args); } var foldLines = this.$foldData; var foldLine = this.getFoldLine(firstRow); var idx = 0; if (foldLine) { var cmp = foldLine.range.compareInside(start.row, start.column) if (cmp == 0) { foldLine = foldLine.split(start.row, start.column); foldLine.shiftRow(len); foldLine.addRemoveChars( lastRow, 0, end.column - start.column); } else if (cmp == -1) { foldLine.addRemoveChars(firstRow, 0, end.column - start.column); foldLine.shiftRow(len); } idx = foldLines.indexOf(foldLine) + 1; } for (idx; idx < foldLines.length; idx++) { var foldLine = foldLines[idx]; if (foldLine.start.row >= firstRow) { foldLine.shiftRow(len); } } } } else { len = Math.abs(e.data.range.start.column - e.data.range.end.column); if (action.indexOf("remove") != -1) { removedFolds = this.getFoldsInRange(e.data.range); this.removeFolds(removedFolds); len = -len; } var foldLine = this.getFoldLine(firstRow); if (foldLine) { foldLine.addRemoveChars(firstRow, start.column, len); } } if (useWrapMode && this.$wrapData.length != this.doc.getLength()) { console.error("doc.getLength() and $wrapData.length have to be the same!"); } this.$updating = false; if (useWrapMode) this.$updateWrapData(firstRow, lastRow); else this.$updateRowLengthCache(firstRow, lastRow); return removedFolds; }; this.$updateRowLengthCache = function(firstRow, lastRow, b) { this.$rowLengthCache[firstRow] = null; this.$rowLengthCache[lastRow] = null; }; this.$updateWrapData = function(firstRow, lastRow) { var lines = this.doc.getAllLines(); var tabSize = this.getTabSize(); var wrapData = this.$wrapData; var wrapLimit = this.$wrapLimit; var tokens; var foldLine; var row = firstRow; lastRow = Math.min(lastRow, lines.length - 1); while (row <= lastRow) { foldLine = this.getFoldLine(row, foldLine); if (!foldLine) { tokens = this.$getDisplayTokens(lines[row]); wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); row ++; } else { tokens = []; foldLine.walk(function(placeholder, row, column, lastColumn) { var walkTokens; if (placeholder != null) { walkTokens = this.$getDisplayTokens( placeholder, tokens.length); walkTokens[0] = PLACEHOLDER_START; for (var i = 1; i < walkTokens.length; i++) { walkTokens[i] = PLACEHOLDER_BODY; } } else { walkTokens = this.$getDisplayTokens( lines[row].substring(lastColumn, column), tokens.length); } tokens = tokens.concat(walkTokens); }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1 ); wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); row = foldLine.end.row + 1; } } }; var CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12; this.$computeWrapSplits = function(tokens, wrapLimit) { if (tokens.length == 0) { return []; } var splits = []; var displayLength = tokens.length; var lastSplit = 0, lastDocSplit = 0; var isCode = this.$wrapAsCode; function addSplit(screenPos) { var displayed = tokens.slice(lastSplit, screenPos); var len = displayed.length; displayed.join(""). replace(/12/g, function() { len -= 1; }). replace(/2/g, function() { len -= 1; }); lastDocSplit += len; splits.push(lastDocSplit); lastSplit = screenPos; } while (displayLength - lastSplit > wrapLimit) { var split = lastSplit + wrapLimit; if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) { addSplit(split); continue; } if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) { for (split; split != lastSplit - 1; split--) { if (tokens[split] == PLACEHOLDER_START) { break; } } if (split > lastSplit) { addSplit(split); continue; } split = lastSplit + wrapLimit; for (split; split < tokens.length; split++) { if (tokens[split] != PLACEHOLDER_BODY) { break; } } if (split == tokens.length) { break; // Breaks the while-loop. } addSplit(split); continue; } var minSplit = Math.max(split - (isCode ? 10 : wrapLimit-(wrapLimit>>2)), lastSplit - 1); while (split > minSplit && tokens[split] < PLACEHOLDER_START) { split --; } if (isCode) { while (split > minSplit && tokens[split] < PLACEHOLDER_START) { split --; } while (split > minSplit && tokens[split] == PUNCTUATION) { split --; } } else { while (split > minSplit && tokens[split] < SPACE) { split --; } } if (split > minSplit) { addSplit(++split); continue; } split = lastSplit + wrapLimit; addSplit(split); } return splits; }; this.$getDisplayTokens = function(str, offset) { var arr = []; var tabSize; offset = offset || 0; for (var i = 0; i < str.length; i++) { var c = str.charCodeAt(i); if (c == 9) { tabSize = this.getScreenTabSize(arr.length + offset); arr.push(TAB); for (var n = 1; n < tabSize; n++) { arr.push(TAB_SPACE); } } else if (c == 32) { arr.push(SPACE); } else if((c > 39 && c < 48) || (c > 57 && c < 64)) { arr.push(PUNCTUATION); } else if (c >= 0x1100 && isFullWidth(c)) { arr.push(CHAR, CHAR_EXT); } else { arr.push(CHAR); } } return arr; }; this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) { if (maxScreenColumn == 0) return [0, 0]; if (maxScreenColumn == null) maxScreenColumn = Infinity; screenColumn = screenColumn || 0; var c, column; for (column = 0; column < str.length; column++) { c = str.charCodeAt(column); if (c == 9) { screenColumn += this.getScreenTabSize(screenColumn); } else if (c >= 0x1100 && isFullWidth(c)) { screenColumn += 2; } else { screenColumn += 1; } if (screenColumn > maxScreenColumn) { break; } } return [screenColumn, column]; }; this.lineWidgets = null; this.getRowLength = function(row) { if (this.lineWidgets) var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; else h = 0 if (!this.$useWrapMode || !this.$wrapData[row]) { return 1 + h; } else { return this.$wrapData[row].length + 1 + h; } }; this.getRowLineCount = function(row) { if (!this.$useWrapMode || !this.$wrapData[row]) { return 1; } else { return this.$wrapData[row].length + 1; } }; this.getScreenLastRowColumn = function(screenRow) { var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); return this.documentToScreenColumn(pos.row, pos.column); }; this.getDocumentLastRowColumn = function(docRow, docColumn) { var screenRow = this.documentToScreenRow(docRow, docColumn); return this.getScreenLastRowColumn(screenRow); }; this.getDocumentLastRowColumnPosition = function(docRow, docColumn) { var screenRow = this.documentToScreenRow(docRow, docColumn); return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10); }; this.getRowSplitData = function(row) { if (!this.$useWrapMode) { return undefined; } else { return this.$wrapData[row]; } }; this.getScreenTabSize = function(screenColumn) { return this.$tabSize - screenColumn % this.$tabSize; }; this.screenToDocumentRow = function(screenRow, screenColumn) { return this.screenToDocumentPosition(screenRow, screenColumn).row; }; this.screenToDocumentColumn = function(screenRow, screenColumn) { return this.screenToDocumentPosition(screenRow, screenColumn).column; }; this.screenToDocumentPosition = function(screenRow, screenColumn) { if (screenRow < 0) return {row: 0, column: 0}; var line; var docRow = 0; var docColumn = 0; var column; var row = 0; var rowLength = 0; var rowCache = this.$screenRowCache; var i = this.$getRowCacheIndex(rowCache, screenRow); var l = rowCache.length; if (l && i >= 0) { var row = rowCache[i]; var docRow = this.$docRowCache[i]; var doCache = screenRow > rowCache[l - 1]; } else { var doCache = !l; } var maxRow = this.getLength() - 1; var foldLine = this.getNextFoldLine(docRow); var foldStart = foldLine ? foldLine.start.row : Infinity; while (row <= screenRow) { rowLength = this.getRowLength(docRow); if (row + rowLength > screenRow || docRow >= maxRow) { break; } else { row += rowLength; docRow++; if (docRow > foldStart) { docRow = foldLine.end.row+1; foldLine = this.getNextFoldLine(docRow, foldLine); foldStart = foldLine ? foldLine.start.row : Infinity; } } if (doCache) { this.$docRowCache.push(docRow); this.$screenRowCache.push(row); } } if (foldLine && foldLine.start.row <= docRow) { line = this.getFoldDisplayLine(foldLine); docRow = foldLine.start.row; } else if (row + rowLength <= screenRow || docRow > maxRow) { return { row: maxRow, column: this.getLine(maxRow).length } } else { line = this.getLine(docRow); foldLine = null; } if (this.$useWrapMode) { var splits = this.$wrapData[docRow]; if (splits) { var splitIndex = Math.floor(screenRow - row); column = splits[splitIndex]; if(splitIndex > 0 && splits.length) { docColumn = splits[splitIndex - 1] || splits[splits.length - 1]; line = line.substring(docColumn); } } } docColumn += this.$getStringScreenWidth(line, screenColumn)[1]; if (this.$useWrapMode && docColumn >= column) docColumn = column - 1; if (foldLine) return foldLine.idxToPosition(docColumn); return {row: docRow, column: docColumn}; }; this.documentToScreenPosition = function(docRow, docColumn) { if (typeof docColumn === "undefined") var pos = this.$clipPositionToDocument(docRow.row, docRow.column); else pos = this.$clipPositionToDocument(docRow, docColumn); docRow = pos.row; docColumn = pos.column; var screenRow = 0; var foldStartRow = null; var fold = null; fold = this.getFoldAt(docRow, docColumn, 1); if (fold) { docRow = fold.start.row; docColumn = fold.start.column; } var rowEnd, row = 0; var rowCache = this.$docRowCache; var i = this.$getRowCacheIndex(rowCache, docRow); var l = rowCache.length; if (l && i >= 0) { var row = rowCache[i]; var screenRow = this.$screenRowCache[i]; var doCache = docRow > rowCache[l - 1]; } else { var doCache = !l; } var foldLine = this.getNextFoldLine(row); var foldStart = foldLine ?foldLine.start.row :Infinity; while (row < docRow) { if (row >= foldStart) { rowEnd = foldLine.end.row + 1; if (rowEnd > docRow) break; foldLine = this.getNextFoldLine(rowEnd, foldLine); foldStart = foldLine ?foldLine.start.row :Infinity; } else { rowEnd = row + 1; } screenRow += this.getRowLength(row); row = rowEnd; if (doCache) { this.$docRowCache.push(row); this.$screenRowCache.push(screenRow); } } var textLine = ""; if (foldLine && row >= foldStart) { textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn); foldStartRow = foldLine.start.row; } else { textLine = this.getLine(docRow).substring(0, docColumn); foldStartRow = docRow; } if (this.$useWrapMode) { var wrapRow = this.$wrapData[foldStartRow]; var screenRowOffset = 0; while (textLine.length >= wrapRow[screenRowOffset]) { screenRow ++; screenRowOffset++; } textLine = textLine.substring( wrapRow[screenRowOffset - 1] || 0, textLine.length ); } return { row: screenRow, column: this.$getStringScreenWidth(textLine)[0] }; }; this.documentToScreenColumn = function(row, docColumn) { return this.documentToScreenPosition(row, docColumn).column; }; this.documentToScreenRow = function(docRow, docColumn) { return this.documentToScreenPosition(docRow, docColumn).row; }; this.getScreenLength = function() { var screenRows = 0; var fold = null; if (!this.$useWrapMode) { screenRows = this.getLength(); var foldData = this.$foldData; for (var i = 0; i < foldData.length; i++) { fold = foldData[i]; screenRows -= fold.end.row - fold.start.row; } } else { var lastRow = this.$wrapData.length; var row = 0, i = 0; var fold = this.$foldData[i++]; var foldStart = fold ? fold.start.row :Infinity; while (row < lastRow) { screenRows += this.$wrapData[row].length + 1; row ++; if (row > foldStart) { row = fold.end.row+1; fold = this.$foldData[i++]; foldStart = fold ?fold.start.row :Infinity; } } } if (this.lineWidgets) screenRows += this.$getWidgetScreenLength(); return screenRows; }; function isFullWidth(c) { if (c < 0x1100) return false; return c >= 0x1100 && c <= 0x115F || c >= 0x11A3 && c <= 0x11A7 || c >= 0x11FA && c <= 0x11FF || c >= 0x2329 && c <= 0x232A || c >= 0x2E80 && c <= 0x2E99 || c >= 0x2E9B && c <= 0x2EF3 || c >= 0x2F00 && c <= 0x2FD5 || c >= 0x2FF0 && c <= 0x2FFB || c >= 0x3000 && c <= 0x303E || c >= 0x3041 && c <= 0x3096 || c >= 0x3099 && c <= 0x30FF || c >= 0x3105 && c <= 0x312D || c >= 0x3131 && c <= 0x318E || c >= 0x3190 && c <= 0x31BA || c >= 0x31C0 && c <= 0x31E3 || c >= 0x31F0 && c <= 0x321E || c >= 0x3220 && c <= 0x3247 || c >= 0x3250 && c <= 0x32FE || c >= 0x3300 && c <= 0x4DBF || c >= 0x4E00 && c <= 0xA48C || c >= 0xA490 && c <= 0xA4C6 || c >= 0xA960 && c <= 0xA97C || c >= 0xAC00 && c <= 0xD7A3 || c >= 0xD7B0 && c <= 0xD7C6 || c >= 0xD7CB && c <= 0xD7FB || c >= 0xF900 && c <= 0xFAFF || c >= 0xFE10 && c <= 0xFE19 || c >= 0xFE30 && c <= 0xFE52 || c >= 0xFE54 && c <= 0xFE66 || c >= 0xFE68 && c <= 0xFE6B || c >= 0xFF01 && c <= 0xFF60 || c >= 0xFFE0 && c <= 0xFFE6; }; }).call(EditSession.prototype); require("./edit_session/folding").Folding.call(EditSession.prototype); require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype); config.defineOptions(EditSession.prototype, "session", { wrap: { set: function(value) { if (!value || value == "off") value = false; else if (value == "free") value = true; else if (value == "printMargin") value = -1; else if (typeof value == "string") value = parseInt(value, 10) || false; if (this.$wrap == value) return; if (!value) { this.setUseWrapMode(false); } else { var col = typeof value == "number" ? value : null; this.setWrapLimitRange(col, col); this.setUseWrapMode(true); } this.$wrap = value; }, get: function() { return this.getUseWrapMode() ? this.getWrapLimitRange().min || "free" : "off"; }, handlesSet: true }, wrapMethod: { set: function(val) { val = val == "auto" ? this.$mode.type != "text" : val != "text"; if (val != this.$wrapAsCode) { this.$wrapAsCode = val; if (this.$useWrapMode) { this.$modified = true; this.$resetRowCache(0); this.$updateWrapData(0, this.getLength() - 1); } } }, initialValue: "auto" }, firstLineNumber: { set: function() {this._emit("changeBreakpoint");}, initialValue: 1 }, useWorker: { set: function(useWorker) { this.$useWorker = useWorker; this.$stopWorker(); if (useWorker) this.$startWorker(); }, initialValue: true }, useSoftTabs: {initialValue: true}, tabSize: { set: function(tabSize) { if (isNaN(tabSize) || this.$tabSize === tabSize) return; this.$modified = true; this.$rowLengthCache = []; this.$tabSize = tabSize; this._emit("changeTabSize"); }, initialValue: 4, handlesSet: true }, overwrite: { set: function(val) {this._emit("changeOverwrite");}, initialValue: false }, newLineMode: { set: function(val) {this.doc.setNewLineMode(val)}, get: function() {return this.doc.getNewLineMode()}, handlesSet: true } }); exports.EditSession = EditSession; }); define('ace/selection', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/lib/event_emitter', 'ace/range'], function(require, exports, module) { var oop = require("./lib/oop"); var lang = require("./lib/lang"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Selection = function(session) { this.session = session; this.doc = session.getDocument(); this.clearSelection(); this.lead = this.selectionLead = this.doc.createAnchor(0, 0); this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0); var self = this; this.lead.on("change", function(e) { self._emit("changeCursor"); if (!self.$isEmpty) self._emit("changeSelection"); if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) self.$desiredColumn = null; }); this.selectionAnchor.on("change", function() { if (!self.$isEmpty) self._emit("changeSelection"); }); }; (function() { oop.implement(this, EventEmitter); this.isEmpty = function() { return (this.$isEmpty || ( this.anchor.row == this.lead.row && this.anchor.column == this.lead.column )); }; this.isMultiLine = function() { if (this.isEmpty()) { return false; } return this.getRange().isMultiLine(); }; this.getCursor = function() { return this.lead.getPosition(); }; this.setSelectionAnchor = function(row, column) { this.anchor.setPosition(row, column); if (this.$isEmpty) { this.$isEmpty = false; this._emit("changeSelection"); } }; this.getSelectionAnchor = function() { if (this.$isEmpty) return this.getSelectionLead() else return this.anchor.getPosition(); }; this.getSelectionLead = function() { return this.lead.getPosition(); }; this.shiftSelection = function(columns) { if (this.$isEmpty) { this.moveCursorTo(this.lead.row, this.lead.column + columns); return; }; var anchor = this.getSelectionAnchor(); var lead = this.getSelectionLead(); var isBackwards = this.isBackwards(); if (!isBackwards || anchor.column !== 0) this.setSelectionAnchor(anchor.row, anchor.column + columns); if (isBackwards || lead.column !== 0) { this.$moveSelection(function() { this.moveCursorTo(lead.row, lead.column + columns); }); } }; this.isBackwards = function() { var anchor = this.anchor; var lead = this.lead; return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column)); }; this.getRange = function() { var anchor = this.anchor; var lead = this.lead; if (this.isEmpty()) return Range.fromPoints(lead, lead); if (this.isBackwards()) { return Range.fromPoints(lead, anchor); } else { return Range.fromPoints(anchor, lead); } }; this.clearSelection = function() { if (!this.$isEmpty) { this.$isEmpty = true; this._emit("changeSelection"); } }; this.selectAll = function() { var lastRow = this.doc.getLength() - 1; this.setSelectionAnchor(0, 0); this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length); }; this.setRange = this.setSelectionRange = function(range, reverse) { if (reverse) { this.setSelectionAnchor(range.end.row, range.end.column); this.selectTo(range.start.row, range.start.column); } else { this.setSelectionAnchor(range.start.row, range.start.column); this.selectTo(range.end.row, range.end.column); } if (this.getRange().isEmpty()) this.$isEmpty = true; this.$desiredColumn = null; }; this.$moveSelection = function(mover) { var lead = this.lead; if (this.$isEmpty) this.setSelectionAnchor(lead.row, lead.column); mover.call(this); }; this.selectTo = function(row, column) { this.$moveSelection(function() { this.moveCursorTo(row, column); }); }; this.selectToPosition = function(pos) { this.$moveSelection(function() { this.moveCursorToPosition(pos); }); }; this.selectUp = function() { this.$moveSelection(this.moveCursorUp); }; this.selectDown = function() { this.$moveSelection(this.moveCursorDown); }; this.selectRight = function() { this.$moveSelection(this.moveCursorRight); }; this.selectLeft = function() { this.$moveSelection(this.moveCursorLeft); }; this.selectLineStart = function() { this.$moveSelection(this.moveCursorLineStart); }; this.selectLineEnd = function() { this.$moveSelection(this.moveCursorLineEnd); }; this.selectFileEnd = function() { this.$moveSelection(this.moveCursorFileEnd); }; this.selectFileStart = function() { this.$moveSelection(this.moveCursorFileStart); }; this.selectWordRight = function() { this.$moveSelection(this.moveCursorWordRight); }; this.selectWordLeft = function() { this.$moveSelection(this.moveCursorWordLeft); }; this.getWordRange = function(row, column) { if (typeof column == "undefined") { var cursor = row || this.lead; row = cursor.row; column = cursor.column; } return this.session.getWordRange(row, column); }; this.selectWord = function() { this.setSelectionRange(this.getWordRange()); }; this.selectAWord = function() { var cursor = this.getCursor(); var range = this.session.getAWordRange(cursor.row, cursor.column); this.setSelectionRange(range); }; this.getLineRange = function(row, excludeLastChar) { var rowStart = typeof row == "number" ? row : this.lead.row; var rowEnd; var foldLine = this.session.getFoldLine(rowStart); if (foldLine) { rowStart = foldLine.start.row; rowEnd = foldLine.end.row; } else { rowEnd = rowStart; } if (excludeLastChar === true) return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length); else return new Range(rowStart, 0, rowEnd + 1, 0); }; this.selectLine = function() { this.setSelectionRange(this.getLineRange()); }; this.moveCursorUp = function() { this.moveCursorBy(-1, 0); }; this.moveCursorDown = function() { this.moveCursorBy(1, 0); }; this.moveCursorLeft = function() { var cursor = this.lead.getPosition(), fold; if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) { this.moveCursorTo(fold.start.row, fold.start.column); } else if (cursor.column == 0) { if (cursor.row > 0) { this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length); } } else { var tabSize = this.session.getTabSize(); if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(" ").length-1 == tabSize) this.moveCursorBy(0, -tabSize); else this.moveCursorBy(0, -1); } }; this.moveCursorRight = function() { var cursor = this.lead.getPosition(), fold; if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) { this.moveCursorTo(fold.end.row, fold.end.column); } else if (this.lead.column == this.doc.getLine(this.lead.row).length) { if (this.lead.row < this.doc.getLength() - 1) { this.moveCursorTo(this.lead.row + 1, 0); } } else { var tabSize = this.session.getTabSize(); var cursor = this.lead; if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(" ").length-1 == tabSize) this.moveCursorBy(0, tabSize); else this.moveCursorBy(0, 1); } }; this.moveCursorLineStart = function() { var row = this.lead.row; var column = this.lead.column; var screenRow = this.session.documentToScreenRow(row, column); var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0); var beforeCursor = this.session.getDisplayLine( row, null, firstColumnPosition.row, firstColumnPosition.column ); var leadingSpace = beforeCursor.match(/^\s*/); if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) firstColumnPosition.column += leadingSpace[0].length; this.moveCursorToPosition(firstColumnPosition); }; this.moveCursorLineEnd = function() { var lead = this.lead; var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column); if (this.lead.column == lineEnd.column) { var line = this.session.getLine(lineEnd.row); if (lineEnd.column == line.length) { var textEnd = line.search(/\s+$/); if (textEnd > 0) lineEnd.column = textEnd; } } this.moveCursorTo(lineEnd.row, lineEnd.column); }; this.moveCursorFileEnd = function() { var row = this.doc.getLength() - 1; var column = this.doc.getLine(row).length; this.moveCursorTo(row, column); }; this.moveCursorFileStart = function() { this.moveCursorTo(0, 0); }; this.moveCursorLongWordRight = function() { var row = this.lead.row; var column = this.lead.column; var line = this.doc.getLine(row); var rightOfCursor = line.substring(column); var match; this.session.nonTokenRe.lastIndex = 0; this.session.tokenRe.lastIndex = 0; var fold = this.session.getFoldAt(row, column, 1); if (fold) { this.moveCursorTo(fold.end.row, fold.end.column); return; } if (match = this.session.nonTokenRe.exec(rightOfCursor)) { column += this.session.nonTokenRe.lastIndex; this.session.nonTokenRe.lastIndex = 0; rightOfCursor = line.substring(column); } if (column >= line.length) { this.moveCursorTo(row, line.length); this.moveCursorRight(); if (row < this.doc.getLength() - 1) this.moveCursorWordRight(); return; } if (match = this.session.tokenRe.exec(rightOfCursor)) { column += this.session.tokenRe.lastIndex; this.session.tokenRe.lastIndex = 0; } this.moveCursorTo(row, column); }; this.moveCursorLongWordLeft = function() { var row = this.lead.row; var column = this.lead.column; var fold; if (fold = this.session.getFoldAt(row, column, -1)) { this.moveCursorTo(fold.start.row, fold.start.column); return; } var str = this.session.getFoldStringAt(row, column, -1); if (str == null) { str = this.doc.getLine(row).substring(0, column) } var leftOfCursor = lang.stringReverse(str); var match; this.session.nonTokenRe.lastIndex = 0; this.session.tokenRe.lastIndex = 0; if (match = this.session.nonTokenRe.exec(leftOfCursor)) { column -= this.session.nonTokenRe.lastIndex; leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex); this.session.nonTokenRe.lastIndex = 0; } if (column <= 0) { this.moveCursorTo(row, 0); this.moveCursorLeft(); if (row > 0) this.moveCursorWordLeft(); return; } if (match = this.session.tokenRe.exec(leftOfCursor)) { column -= this.session.tokenRe.lastIndex; this.session.tokenRe.lastIndex = 0; } this.moveCursorTo(row, column); }; this.$shortWordEndIndex = function(rightOfCursor) { var match, index = 0, ch; var whitespaceRe = /\s/; var tokenRe = this.session.tokenRe; tokenRe.lastIndex = 0; if (match = this.session.tokenRe.exec(rightOfCursor)) { index = this.session.tokenRe.lastIndex; } else { while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) index ++; if (index < 1) { tokenRe.lastIndex = 0; while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) { tokenRe.lastIndex = 0; index ++; if (whitespaceRe.test(ch)) { if (index > 2) { index-- break; } else { while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) index ++; if (index > 2) break } } } } } tokenRe.lastIndex = 0; return index; }; this.moveCursorShortWordRight = function() { var row = this.lead.row; var column = this.lead.column; var line = this.doc.getLine(row); var rightOfCursor = line.substring(column); var fold = this.session.getFoldAt(row, column, 1); if (fold) return this.moveCursorTo(fold.end.row, fold.end.column); if (column == line.length) { var l = this.doc.getLength(); do { row++; rightOfCursor = this.doc.getLine(row) } while (row < l && /^\s*$/.test(rightOfCursor)) if (!/^\s+/.test(rightOfCursor)) rightOfCursor = "" column = 0; } var index = this.$shortWordEndIndex(rightOfCursor); this.moveCursorTo(row, column + index); }; this.moveCursorShortWordLeft = function() { var row = this.lead.row; var column = this.lead.column; var fold; if (fold = this.session.getFoldAt(row, column, -1)) return this.moveCursorTo(fold.start.row, fold.start.column); var line = this.session.getLine(row).substring(0, column); if (column == 0) { do { row--; line = this.doc.getLine(row); } while (row > 0 && /^\s*$/.test(line)) column = line.length; if (!/\s+$/.test(line)) line = "" } var leftOfCursor = lang.stringReverse(line); var index = this.$shortWordEndIndex(leftOfCursor); return this.moveCursorTo(row, column - index); }; this.moveCursorWordRight = function() { if (this.session.$selectLongWords) this.moveCursorLongWordRight(); else this.moveCursorShortWordRight(); }; this.moveCursorWordLeft = function() { if (this.session.$selectLongWords) this.moveCursorLongWordLeft(); else this.moveCursorShortWordLeft(); }; this.moveCursorBy = function(rows, chars) { var screenPos = this.session.documentToScreenPosition( this.lead.row, this.lead.column ); if (chars === 0) { if (this.$desiredColumn) screenPos.column = this.$desiredColumn; else this.$desiredColumn = screenPos.column; } var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column); if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) { if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) docPos.row++; } this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); }; this.moveCursorToPosition = function(position) { this.moveCursorTo(position.row, position.column); }; this.moveCursorTo = function(row, column, keepDesiredColumn) { var fold = this.session.getFoldAt(row, column, 1); if (fold) { row = fold.start.row; column = fold.start.column; } this.$keepDesiredColumnOnChange = true; this.lead.setPosition(row, column); this.$keepDesiredColumnOnChange = false; if (!keepDesiredColumn) this.$desiredColumn = null; }; this.moveCursorToScreen = function(row, column, keepDesiredColumn) { var pos = this.session.screenToDocumentPosition(row, column); this.moveCursorTo(pos.row, pos.column, keepDesiredColumn); }; this.detach = function() { this.lead.detach(); this.anchor.detach(); this.session = this.doc = null; } this.fromOrientedRange = function(range) { this.setSelectionRange(range, range.cursor == range.start); this.$desiredColumn = range.desiredColumn || this.$desiredColumn; } this.toOrientedRange = function(range) { var r = this.getRange(); if (range) { range.start.column = r.start.column; range.start.row = r.start.row; range.end.column = r.end.column; range.end.row = r.end.row; } else { range = r; } range.cursor = this.isBackwards() ? range.start : range.end; range.desiredColumn = this.$desiredColumn; return range; } this.toJSON = function() { if (this.rangeCount) { var data = this.ranges.map(function(r) { var r1 = r.clone(); r1.isBackwards = r.cursor == r.start; return r1; }); } else { var data = this.getRange(); data.isBackwards = this.isBackwards(); } return data; }; this.fromJSON = function(data) { if (data.start == undefined) { if (this.rangeList) { this.toSingleRange(data[0]); for (var i = data.length; i--; ) { var r = Range.fromPoints(data[i].start, data[i].end); if (data.isBackwards) r.cursor = r.start; this.addRange(r, true); } return; } else data = data[0]; } if (this.rangeList) this.toSingleRange(data); this.setSelectionRange(data, data.isBackwards); }; this.isEqual = function(data) { if ((data.length || this.rangeCount) && data.length != this.rangeCount) return false; if (!data.length || !this.ranges) return this.getRange().isEqual(data); for (var i = this.ranges.length; i--; ) { if (!this.ranges[i].isEqual(data[i])) return false } return true; } }).call(Selection.prototype); exports.Selection = Selection; }); define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) { var comparePoints = function(p1, p2) { return p1.row - p2.row || p1.column - p2.column; }; var Range = function(startRow, startColumn, endRow, endColumn) { this.start = { row: startRow, column: startColumn }; this.end = { row: endRow, column: endColumn }; }; (function() { this.isEqual = function(range) { return this.start.row === range.start.row && this.end.row === range.end.row && this.start.column === range.start.column && this.end.column === range.end.column; }; this.toString = function() { return ("Range: [" + this.start.row + "/" + this.start.column + "] -> [" + this.end.row + "/" + this.end.column + "]"); }; this.contains = function(row, column) { return this.compare(row, column) == 0; }; this.compareRange = function(range) { var cmp, end = range.end, start = range.start; cmp = this.compare(end.row, end.column); if (cmp == 1) { cmp = this.compare(start.row, start.column); if (cmp == 1) { return 2; } else if (cmp == 0) { return 1; } else { return 0; } } else if (cmp == -1) { return -2; } else { cmp = this.compare(start.row, start.column); if (cmp == -1) { return -1; } else if (cmp == 1) { return 42; } else { return 0; } } }; this.comparePoint = function(p) { return this.compare(p.row, p.column); }; this.containsRange = function(range) { return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; }; this.intersects = function(range) { var cmp = this.compareRange(range); return (cmp == -1 || cmp == 0 || cmp == 1); }; this.isEnd = function(row, column) { return this.end.row == row && this.end.column == column; }; this.isStart = function(row, column) { return this.start.row == row && this.start.column == column; }; this.setStart = function(row, column) { if (typeof row == "object") { this.start.column = row.column; this.start.row = row.row; } else { this.start.row = row; this.start.column = column; } }; this.setEnd = function(row, column) { if (typeof row == "object") { this.end.column = row.column; this.end.row = row.row; } else { this.end.row = row; this.end.column = column; } }; this.inside = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column) || this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.insideStart = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column)) { return false; } else { return true; } } return false; }; this.insideEnd = function(row, column) { if (this.compare(row, column) == 0) { if (this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.compare = function(row, column) { if (!this.isMultiLine()) { if (row === this.start.row) { return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); }; } if (row < this.start.row) return -1; if (row > this.end.row) return 1; if (this.start.row === row) return column >= this.start.column ? 0 : -1; if (this.end.row === row) return column <= this.end.column ? 0 : 1; return 0; }; this.compareStart = function(row, column) { if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.compareEnd = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else { return this.compare(row, column); } }; this.compareInside = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.clipRows = function(firstRow, lastRow) { if (this.end.row > lastRow) var end = {row: lastRow + 1, column: 0}; else if (this.end.row < firstRow) var end = {row: firstRow, column: 0}; if (this.start.row > lastRow) var start = {row: lastRow + 1, column: 0}; else if (this.start.row < firstRow) var start = {row: firstRow, column: 0}; return Range.fromPoints(start || this.start, end || this.end); }; this.extend = function(row, column) { var cmp = this.compare(row, column); if (cmp == 0) return this; else if (cmp == -1) var start = {row: row, column: column}; else var end = {row: row, column: column}; return Range.fromPoints(start || this.start, end || this.end); }; this.isEmpty = function() { return (this.start.row === this.end.row && this.start.column === this.end.column); }; this.isMultiLine = function() { return (this.start.row !== this.end.row); }; this.clone = function() { return Range.fromPoints(this.start, this.end); }; this.collapseRows = function() { if (this.end.column == 0) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0) else return new Range(this.start.row, 0, this.end.row, 0) }; this.toScreenRange = function(session) { var screenPosStart = session.documentToScreenPosition(this.start); var screenPosEnd = session.documentToScreenPosition(this.end); return new Range( screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column ); }; this.moveBy = function(row, column) { this.start.row += row; this.start.column += column; this.end.row += row; this.end.column += column; }; }).call(Range.prototype); Range.fromPoints = function(start, end) { return new Range(start.row, start.column, end.row, end.column); }; Range.comparePoints = comparePoints; Range.comparePoints = function(p1, p2) { return p1.row - p2.row || p1.column - p2.column; }; exports.Range = Range; }); define('ace/mode/text', ['require', 'exports', 'module' , 'ace/tokenizer', 'ace/mode/text_highlight_rules', 'ace/mode/behaviour', 'ace/unicode', 'ace/lib/lang', 'ace/token_iterator', 'ace/range'], function(require, exports, module) { var Tokenizer = require("../tokenizer").Tokenizer; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var Behaviour = require("./behaviour").Behaviour; var unicode = require("../unicode"); var lang = require("../lib/lang"); var TokenIterator = require("../token_iterator").TokenIterator; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = TextHighlightRules; this.$behaviour = new Behaviour(); }; (function() { this.tokenRe = new RegExp("^[" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + "\\$_]+", "g" ); this.nonTokenRe = new RegExp("^(?:[^" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + "\\$_]|\s])+", "g" ); this.getTokenizer = function() { if (!this.$tokenizer) { this.$highlightRules = new this.HighlightRules(); this.$tokenizer = new Tokenizer(this.$highlightRules.getRules()); } return this.$tokenizer; }; this.lineCommentStart = ""; this.blockComment = ""; this.toggleCommentLines = function(state, session, startRow, endRow) { var doc = session.doc; var ignoreBlankLines = true; var shouldRemove = true; var minIndent = Infinity; var tabSize = session.getTabSize(); var insertAtTabStop = false; if (!this.lineCommentStart) { if (!this.blockComment) return false; var lineCommentStart = this.blockComment.start; var lineCommentEnd = this.blockComment.end; var regexpStart = new RegExp("^(\\s*)(?:" + lang.escapeRegExp(lineCommentStart) + ")"); var regexpEnd = new RegExp("(?:" + lang.escapeRegExp(lineCommentEnd) + ")\\s*$"); var comment = function(line, i) { if (testRemove(line, i)) return; if (!ignoreBlankLines || /\S/.test(line)) { doc.insertInLine({row: i, column: line.length}, lineCommentEnd); doc.insertInLine({row: i, column: minIndent}, lineCommentStart); } }; var uncomment = function(line, i) { var m; if (m = line.match(regexpEnd)) doc.removeInLine(i, line.length - m[0].length, line.length); if (m = line.match(regexpStart)) doc.removeInLine(i, m[1].length, m[0].length); }; var testRemove = function(line, row) { if (regexpStart.test(line)) return true; var tokens = session.getTokens(row); for (var i = 0; i < tokens.length; i++) { if (tokens[i].type === 'comment') return true; } }; } else { if (Array.isArray(this.lineCommentStart)) { var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join("|"); var lineCommentStart = this.lineCommentStart[0]; } else { var regexpStart = lang.escapeRegExp(this.lineCommentStart); var lineCommentStart = this.lineCommentStart; } regexpStart = new RegExp("^(\\s*)(?:" + regexpStart + ") ?"); insertAtTabStop = session.getUseSoftTabs(); var uncomment = function(line, i) { var m = line.match(regexpStart); if (!m) return; var start = m[1].length, end = m[0].length; if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == " ") end--; doc.removeInLine(i, start, end); }; var commentWithSpace = lineCommentStart + " "; var comment = function(line, i) { if (!ignoreBlankLines || /\S/.test(line)) { if (shouldInsertSpace(line, minIndent, minIndent)) doc.insertInLine({row: i, column: minIndent}, commentWithSpace); else doc.insertInLine({row: i, column: minIndent}, lineCommentStart); } }; var testRemove = function(line, i) { return regexpStart.test(line); }; var shouldInsertSpace = function(line, before, after) { var spaces = 0; while (before-- && line.charAt(before) == " ") spaces++; if (spaces % tabSize != 0) return false; var spaces = 0; while (line.charAt(after++) == " ") spaces++; if (tabSize > 2) return spaces % tabSize != tabSize - 1; else return spaces % tabSize == 0; return true; }; } function iter(fun) { for (var i = startRow; i <= endRow; i++) fun(doc.getLine(i), i); } var minEmptyLength = Infinity; iter(function(line, i) { var indent = line.search(/\S/); if (indent !== -1) { if (indent < minIndent) minIndent = indent; if (shouldRemove && !testRemove(line, i)) shouldRemove = false; } else if (minEmptyLength > line.length) { minEmptyLength = line.length; } }); if (minIndent == Infinity) { minIndent = minEmptyLength; ignoreBlankLines = false; shouldRemove = false; } if (insertAtTabStop && minIndent % tabSize != 0) minIndent = Math.floor(minIndent / tabSize) * tabSize; iter(shouldRemove ? uncomment : comment); }; this.toggleBlockComment = function(state, session, range, cursor) { var comment = this.blockComment; if (!comment) return; if (!comment.start && comment[0]) comment = comment[0]; var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); var sel = session.selection; var initialRange = session.selection.toOrientedRange(); var startRow, colDiff; if (token && /comment/.test(token.type)) { var startRange, endRange; while (token && /comment/.test(token.type)) { var i = token.value.indexOf(comment.start); if (i != -1) { var row = iterator.getCurrentTokenRow(); var column = iterator.getCurrentTokenColumn() + i; startRange = new Range(row, column, row, column + comment.start.length); break } token = iterator.stepBackward(); }; var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); while (token && /comment/.test(token.type)) { var i = token.value.indexOf(comment.end); if (i != -1) { var row = iterator.getCurrentTokenRow(); var column = iterator.getCurrentTokenColumn() + i; endRange = new Range(row, column, row, column + comment.end.length); break; } token = iterator.stepForward(); } if (endRange) session.remove(endRange); if (startRange) { session.remove(startRange); startRow = startRange.start.row; colDiff = -comment.start.length } } else { colDiff = comment.start.length startRow = range.start.row; session.insert(range.end, comment.end); session.insert(range.start, comment.start); } if (initialRange.start.row == startRow) initialRange.start.column += colDiff; if (initialRange.end.row == startRow) initialRange.end.column += colDiff; session.selection.fromOrientedRange(initialRange); }; this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.autoOutdent = function(state, doc, row) { }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; this.createWorker = function(session) { return null; }; this.createModeDelegates = function (mapping) { this.$embeds = []; this.$modes = {}; for (var i in mapping) { if (mapping[i]) { this.$embeds.push(i); this.$modes[i] = new mapping[i](); } } var delegations = ['toggleCommentLines', 'getNextLineIndent', 'checkOutdent', 'autoOutdent', 'transformAction', 'getCompletions']; for (var i = 0; i < delegations.length; i++) { (function(scope) { var functionName = delegations[i]; var defaultHandler = scope[functionName]; scope[delegations[i]] = function() { return this.$delegator(functionName, arguments, defaultHandler); } } (this)); } }; this.$delegator = function(method, args, defaultHandler) { var state = args[0]; if (typeof state != "string") state = state[0]; for (var i = 0; i < this.$embeds.length; i++) { if (!this.$modes[this.$embeds[i]]) continue; var split = state.split(this.$embeds[i]); if (!split[0] && split[1]) { args[0] = split[1]; var mode = this.$modes[this.$embeds[i]]; return mode[method].apply(mode, args); } } var ret = defaultHandler.apply(this, args); return defaultHandler ? ret : undefined; }; this.transformAction = function(state, action, editor, session, param) { if (this.$behaviour) { var behaviours = this.$behaviour.getBehaviours(); for (var key in behaviours) { if (behaviours[key][action]) { var ret = behaviours[key][action].apply(this, arguments); if (ret) { return ret; } } } } }; this.getKeywords = function(append) { if (!this.completionKeywords) { var rules = this.$tokenizer.rules; var completionKeywords = []; for (var rule in rules) { var ruleItr = rules[rule]; for (var r = 0, l = ruleItr.length; r < l; r++) { if (typeof ruleItr[r].token === "string") { if (/keyword|support|storage/.test(ruleItr[r].token)) completionKeywords.push(ruleItr[r].regex); } else if (typeof ruleItr[r].token === "object") { for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { if (/keyword|support|storage/.test(ruleItr[r].token[a])) { var rule = ruleItr[r].regex.match(/\(.+?\)/g)[a]; completionKeywords.push(rule.substr(1, rule.length - 2)); } } } } } this.completionKeywords = completionKeywords; } if (!append) return this.$keywordList; return completionKeywords.concat(this.$keywordList || []); }; this.$createKeywordList = function() { if (!this.$highlightRules) this.getTokenizer(); return this.$keywordList = this.$highlightRules.$keywordList || []; } this.getCompletions = function(state, session, pos, prefix) { var keywords = this.$keywordList || this.$createKeywordList(); return keywords.map(function(word) { return { name: word, value: word, score: 0, meta: "keyword" }; }); }; }).call(Mode.prototype); exports.Mode = Mode; }); define('ace/tokenizer', ['require', 'exports', 'module' ], function(require, exports, module) { var MAX_TOKEN_COUNT = 1000; var Tokenizer = function(rules) { this.states = rules; this.regExps = {}; this.matchMappings = {}; for (var key in this.states) { var state = this.states[key]; var ruleRegExps = []; var matchTotal = 0; var mapping = this.matchMappings[key] = {defaultToken: "text"}; var flag = "g"; var splitterRurles = []; for (var i = 0; i < state.length; i++) { var rule = state[i]; if (rule.defaultToken) mapping.defaultToken = rule.defaultToken; if (rule.caseInsensitive) flag = "gi"; if (rule.regex == null) continue; if (rule.regex instanceof RegExp) rule.regex = rule.regex.toString().slice(1, -1); var adjustedregex = rule.regex; var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2; if (Array.isArray(rule.token)) { if (rule.token.length == 1 || matchcount == 1) { rule.token = rule.token[0]; } else if (matchcount - 1 != rule.token.length) { throw new Error("number of classes and regexp groups in '" + rule.token + "'\n'" + rule.regex + "' doesn't match\n" + (matchcount - 1) + "!=" + rule.token.length); } else { rule.tokenArray = rule.token; rule.token = null; rule.onMatch = this.$arrayTokens; } } else if (typeof rule.token == "function" && !rule.onMatch) { if (matchcount > 1) rule.onMatch = this.$applyToken; else rule.onMatch = rule.token; } if (matchcount > 1) { if (/\\\d/.test(rule.regex)) { adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function (match, digit) { return "\\" + (parseInt(digit, 10) + matchTotal + 1); }); } else { matchcount = 1; adjustedregex = this.removeCapturingGroups(rule.regex); } if (!rule.splitRegex && typeof rule.token != "string") splitterRurles.push(rule); // flag will be known only at the very end } mapping[matchTotal] = i; matchTotal += matchcount; ruleRegExps.push(adjustedregex); if (!rule.onMatch) rule.onMatch = null; rule.__proto__ = null; } splitterRurles.forEach(function(rule) { rule.splitRegex = this.createSplitterRegexp(rule.regex, flag); }, this); this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag); } }; (function() { this.$setMaxTokenCount = function(m) { MAX_TOKEN_COUNT = m | 0; }; this.$applyToken = function(str) { var values = this.splitRegex.exec(str).slice(1); var types = this.token.apply(this, values); if (typeof types === "string") return [{type: types, value: str}]; var tokens = []; for (var i = 0, l = types.length; i < l; i++) { if (values[i]) tokens[tokens.length] = { type: types[i], value: values[i] }; } return tokens; }, this.$arrayTokens = function(str) { if (!str) return []; var values = this.splitRegex.exec(str); if (!values) return "text"; var tokens = []; var types = this.tokenArray; for (var i = 0, l = types.length; i < l; i++) { if (values[i + 1]) tokens[tokens.length] = { type: types[i], value: values[i + 1] }; } return tokens; }; this.removeCapturingGroups = function(src) { var r = src.replace( /\[(?:\\.|[^\]])*?\]|\\.|\(\?[:=!]|(\()/g, function(x, y) {return y ? "(?:" : x;} ); return r; }; this.createSplitterRegexp = function(src, flag) { if (src.indexOf("(?=") != -1) { var stack = 0; var inChClass = false; var lastCapture = {}; src.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g, function( m, esc, parenOpen, parenClose, square, index ) { if (inChClass) { inChClass = square != "]"; } else if (square) { inChClass = true; } else if (parenClose) { if (stack == lastCapture.stack) { lastCapture.end = index+1; lastCapture.stack = -1; } stack--; } else if (parenOpen) { stack++; if (parenOpen.length != 1) { lastCapture.stack = stack lastCapture.start = index; } } return m; }); if (lastCapture.end != null && /^\)*$/.test(src.substr(lastCapture.end))) src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end); } return new RegExp(src, (flag||"").replace("g", "")); }; this.getLineTokens = function(line, startState) { if (startState && typeof startState != "string") { var stack = startState.slice(0); startState = stack[0]; } else var stack = []; var currentState = startState || "start"; var state = this.states[currentState]; var mapping = this.matchMappings[currentState]; var re = this.regExps[currentState]; re.lastIndex = 0; var match, tokens = []; var lastIndex = 0; var token = {type: null, value: ""}; while (match = re.exec(line)) { var type = mapping.defaultToken; var rule = null; var value = match[0]; var index = re.lastIndex; if (index - value.length > lastIndex) { var skipped = line.substring(lastIndex, index - value.length); if (token.type == type) { token.value += skipped; } else { if (token.type) tokens.push(token); token = {type: type, value: skipped}; } } for (var i = 0; i < match.length-2; i++) { if (match[i + 1] === undefined) continue; rule = state[mapping[i]]; if (rule.onMatch) type = rule.onMatch(value, currentState, stack); else type = rule.token; if (rule.next) { if (typeof rule.next == "string") currentState = rule.next; else currentState = rule.next(currentState, stack); state = this.states[currentState]; if (!state) { window.console && console.error && console.error(currentState, "doesn't exist"); currentState = "start"; state = this.states[currentState]; } mapping = this.matchMappings[currentState]; lastIndex = index; re = this.regExps[currentState]; re.lastIndex = index; } break; } if (value) { if (typeof type == "string") { if ((!rule || rule.merge !== false) && token.type === type) { token.value += value; } else { if (token.type) tokens.push(token); token = {type: type, value: value}; } } else if (type) { if (token.type) tokens.push(token); token = {type: null, value: ""}; for (var i = 0; i < type.length; i++) tokens.push(type[i]); } } if (lastIndex == line.length) break; lastIndex = index; if (tokens.length > MAX_TOKEN_COUNT) { while (lastIndex < line.length) { if (token.type) tokens.push(token); token = { value: line.substring(lastIndex, lastIndex += 2000), type: "overflow" }; } currentState = "start"; stack = []; break; } } if (token.type) tokens.push(token); if (stack.length > 1) { if (stack[0] !== currentState) stack.unshift(currentState); } return { tokens : tokens, state : stack.length ? stack : currentState }; }; }).call(Tokenizer.prototype); exports.Tokenizer = Tokenizer; }); define('ace/mode/text_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) { var lang = require("../lib/lang"); var TextHighlightRules = function() { this.$rules = { "start" : [{ token : "empty_line", regex : '^$' }, { defaultToken : "text" }] }; }; (function() { this.addRules = function(rules, prefix) { if (!prefix) { for (var key in rules) this.$rules[key] = rules[key]; return; } for (var key in rules) { var state = rules[key]; for (var i = 0; i < state.length; i++) { var rule = state[i]; if (rule.next) { if (typeof rule.next != "string") { if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) rule.nextState = prefix + rule.nextState; } else { if (rule.next.indexOf(prefix) !== 0) rule.next = prefix + rule.next; } } } this.$rules[prefix + key] = state; } }; this.getRules = function() { return this.$rules; }; this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) { var embedRules = new HighlightRules().getRules(); if (states) { for (var i = 0; i < states.length; i++) states[i] = prefix + states[i]; } else { states = []; for (var key in embedRules) states.push(prefix + key); } this.addRules(embedRules, prefix); if (escapeRules) { var addRules = Array.prototype[append ? "push" : "unshift"]; for (var i = 0; i < states.length; i++) addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules)); } if (!this.$embeds) this.$embeds = []; this.$embeds.push(prefix); }; this.getEmbeds = function() { return this.$embeds; }; var pushState = function(currentState, stack) { if (currentState != "start") stack.unshift(this.nextState, currentState); return this.nextState; }; var popState = function(currentState, stack) { if (stack[0] !== currentState) return "start"; stack.shift(); return stack.shift(); }; this.normalizeRules = function() { var id = 0; var rules = this.$rules; function processState(key) { var state = rules[key]; state.processed = true; for (var i = 0; i < state.length; i++) { var rule = state[i]; if (!rule.regex && rule.start) { rule.regex = rule.start; if (!rule.next) rule.next = []; rule.next.push({ defaultToken: rule.token }, { token: rule.token + ".end", regex: rule.end || rule.start, next: "pop" }); rule.token = rule.token + ".start"; rule.push = true; } var next = rule.next || rule.push; if (next && Array.isArray(next)) { var stateName = rule.stateName; if (!stateName) { stateName = rule.token; if (typeof stateName != "string") stateName = stateName[0] || ""; if (rules[stateName]) stateName += id++; } rules[stateName] = next; rule.next = stateName; processState(stateName); } else if (next == "pop") { rule.next = popState; } if (rule.push) { rule.nextState = rule.next || rule.push; rule.next = pushState; delete rule.push; } if (rule.rules) { for (var r in rule.rules) { if (rules[r]) { if (rules[r].push) rules[r].push.apply(rules[r], rule.rules[r]); } else { rules[r] = rule.rules[r]; } } } if (rule.include || typeof rule == "string") { var includeName = rule.include || rule; var toInsert = rules[includeName]; } else if (Array.isArray(rule)) toInsert = rule; if (toInsert) { var args = [i, 1].concat(toInsert); if (rule.noEscape) args = args.filter(function(x) {return !x.next;}); state.splice.apply(state, args); i--; toInsert = null } if (rule.keywordMap) { rule.token = this.createKeywordMapper( rule.keywordMap, rule.defaultToken || "text", rule.caseInsensitive ); delete rule.defaultToken; } } }; Object.keys(rules).forEach(processState, this); }; this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) { var keywords = Object.create(null); Object.keys(map).forEach(function(className) { var a = map[className]; if (ignoreCase) a = a.toLowerCase(); var list = a.split(splitChar || "|"); for (var i = list.length; i--; ) keywords[list[i]] = className; }); if (Object.getPrototypeOf(keywords)) { keywords.__proto__ = null; } this.$keywordList = Object.keys(keywords); map = null; return ignoreCase ? function(value) {return keywords[value.toLowerCase()] || defaultToken } : function(value) {return keywords[value] || defaultToken }; } this.getKeywords = function() { return this.$keywords; }; }).call(TextHighlightRules.prototype); exports.TextHighlightRules = TextHighlightRules; }); define('ace/mode/behaviour', ['require', 'exports', 'module' ], function(require, exports, module) { var Behaviour = function() { this.$behaviours = {}; }; (function () { this.add = function (name, action, callback) { switch (undefined) { case this.$behaviours: this.$behaviours = {}; case this.$behaviours[name]: this.$behaviours[name] = {}; } this.$behaviours[name][action] = callback; } this.addBehaviours = function (behaviours) { for (var key in behaviours) { for (var action in behaviours[key]) { this.add(key, action, behaviours[key][action]); } } } this.remove = function (name) { if (this.$behaviours && this.$behaviours[name]) { delete this.$behaviours[name]; } } this.inherit = function (mode, filter) { if (typeof mode === "function") { var behaviours = new mode().getBehaviours(filter); } else { var behaviours = mode.getBehaviours(filter); } this.addBehaviours(behaviours); } this.getBehaviours = function (filter) { if (!filter) { return this.$behaviours; } else { var ret = {} for (var i = 0; i < filter.length; i++) { if (this.$behaviours[filter[i]]) { ret[filter[i]] = this.$behaviours[filter[i]]; } } return ret; } } }).call(Behaviour.prototype); exports.Behaviour = Behaviour; }); define('ace/unicode', ['require', 'exports', 'module' ], function(require, exports, module) { exports.packages = {}; addUnicodePackage({ L: "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", Ll: "0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A", Lu: "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A", Lt: "01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC", Lm: "02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F", Lo: "01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", M: "0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26", Mn: "0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26", Mc: "0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC", Me: "0488048906DE20DD-20E020E2-20E4A670-A672", N: "0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", Nd: "0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", Nl: "16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF", No: "00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835", P: "0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65", Pd: "002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D", Ps: "0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62", Pe: "0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63", Pi: "00AB2018201B201C201F20392E022E042E092E0C2E1C2E20", Pf: "00BB2019201D203A2E032E052E0A2E0D2E1D2E21", Pc: "005F203F20402054FE33FE34FE4D-FE4FFF3F", Po: "0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65", S: "0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD", Sm: "002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC", Sc: "002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6", Sk: "005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3", So: "00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD", Z: "002000A01680180E2000-200A20282029202F205F3000", Zs: "002000A01680180E2000-200A202F205F3000", Zl: "2028", Zp: "2029", C: "0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF", Cc: "0000-001F007F-009F", Cf: "00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB", Co: "E000-F8FF", Cs: "D800-DFFF", Cn: "03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF" }); function addUnicodePackage (pack) { var codePoint = /\w{4}/g; for (var name in pack) exports.packages[name] = pack[name].replace(codePoint, "\\u$&"); }; }); define('ace/token_iterator', ['require', 'exports', 'module' ], function(require, exports, module) { var TokenIterator = function(session, initialRow, initialColumn) { this.$session = session; this.$row = initialRow; this.$rowTokens = session.getTokens(initialRow); var token = session.getTokenAt(initialRow, initialColumn); this.$tokenIndex = token ? token.index : -1; }; (function() { this.stepBackward = function() { this.$tokenIndex -= 1; while (this.$tokenIndex < 0) { this.$row -= 1; if (this.$row < 0) { this.$row = 0; return null; } this.$rowTokens = this.$session.getTokens(this.$row); this.$tokenIndex = this.$rowTokens.length - 1; } return this.$rowTokens[this.$tokenIndex]; }; this.stepForward = function() { this.$tokenIndex += 1; var rowCount; while (this.$tokenIndex >= this.$rowTokens.length) { this.$row += 1; if (!rowCount) rowCount = this.$session.getLength(); if (this.$row >= rowCount) { this.$row = rowCount - 1; return null; } this.$rowTokens = this.$session.getTokens(this.$row); this.$tokenIndex = 0; } return this.$rowTokens[this.$tokenIndex]; }; this.getCurrentToken = function () { return this.$rowTokens[this.$tokenIndex]; }; this.getCurrentTokenRow = function () { return this.$row; }; this.getCurrentTokenColumn = function() { var rowTokens = this.$rowTokens; var tokenIndex = this.$tokenIndex; var column = rowTokens[tokenIndex].start; if (column !== undefined) return column; column = 0; while (tokenIndex > 0) { tokenIndex -= 1; column += rowTokens[tokenIndex].value.length; } return column; }; }).call(TokenIterator.prototype); exports.TokenIterator = TokenIterator; }); define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) { var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var Document = function(text) { this.$lines = []; if (text.length == 0) { this.$lines = [""]; } else if (Array.isArray(text)) { this._insertLines(0, text); } else { this.insert({row: 0, column:0}, text); } }; (function() { oop.implement(this, EventEmitter); this.setValue = function(text) { var len = this.getLength(); this.remove(new Range(0, 0, len, this.getLine(len-1).length)); this.insert({row: 0, column:0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); }; this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; if ("aaa".split(/a/).length == 0) this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); } else this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; this.$detectNewLine = function(text) { var match = text.match(/^.*?(\r\n|\r|\n)/m); this.$autoNewLine = match ? match[1] : "\n"; }; this.getNewLineCharacter = function() { switch (this.$newLineMode) { case "windows": return "\r\n"; case "unix": return "\n"; default: return this.$autoNewLine; } }; this.$autoNewLine = "\n"; this.$newLineMode = "auto"; this.setNewLineMode = function(newLineMode) { if (this.$newLineMode === newLineMode) return; this.$newLineMode = newLineMode; }; this.getNewLineMode = function() { return this.$newLineMode; }; this.isNewLine = function(text) { return (text == "\r\n" || text == "\r" || text == "\n"); }; this.getLine = function(row) { return this.$lines[row] || ""; }; this.getLines = function(firstRow, lastRow) { return this.$lines.slice(firstRow, lastRow + 1); }; this.getAllLines = function() { return this.getLines(0, this.getLength()); }; this.getLength = function() { return this.$lines.length; }; this.getTextRange = function(range) { if (range.start.row == range.end.row) { return this.getLine(range.start.row) .substring(range.start.column, range.end.column); } var lines = this.getLines(range.start.row, range.end.row); lines[0] = (lines[0] || "").substring(range.start.column); var l = lines.length - 1; if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column); return lines.join(this.getNewLineCharacter()); }; this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); position.column = this.getLine(length-1).length; } else if (position.row < 0) position.row = 0; return position; }; this.insert = function(position, text) { if (!text || text.length === 0) return position; position = this.$clipPosition(position); if (this.getLength() <= 1) this.$detectNewLine(text); var lines = this.$split(text); var firstLine = lines.splice(0, 1)[0]; var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0]; position = this.insertInLine(position, firstLine); if (lastLine !== null) { position = this.insertNewLine(position); // terminate first line position = this._insertLines(position.row, lines); position = this.insertInLine(position, lastLine || ""); } return position; }; this.insertLines = function(row, lines) { if (row >= this.getLength()) return this.insert({row: row, column: 0}, "\n" + lines.join("\n")); return this._insertLines(Math.max(row, 0), lines); }; this._insertLines = function(row, lines) { if (lines.length == 0) return {row: row, column: 0}; if (lines.length > 0xFFFF) { var end = this._insertLines(row, lines.slice(0xFFFF)); lines = lines.slice(0, 0xFFFF); } var args = [row, 0]; args.push.apply(args, lines); this.$lines.splice.apply(this.$lines, args); var range = new Range(row, 0, row + lines.length, 0); var delta = { action: "insertLines", range: range, lines: lines }; this._emit("change", { data: delta }); return end || range.end; }; this.insertNewLine = function(position) { position = this.$clipPosition(position); var line = this.$lines[position.row] || ""; this.$lines[position.row] = line.substring(0, position.column); this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length)); var end = { row : position.row + 1, column : 0 }; var delta = { action: "insertText", range: Range.fromPoints(position, end), text: this.getNewLineCharacter() }; this._emit("change", { data: delta }); return end; }; this.insertInLine = function(position, text) { if (text.length == 0) return position; var line = this.$lines[position.row] || ""; this.$lines[position.row] = line.substring(0, position.column) + text + line.substring(position.column); var end = { row : position.row, column : position.column + text.length }; var delta = { action: "insertText", range: Range.fromPoints(position, end), text: text }; this._emit("change", { data: delta }); return end; }; this.remove = function(range) { if (!range instanceof Range) range = Range.fromPoints(range.start, range.end); range.start = this.$clipPosition(range.start); range.end = this.$clipPosition(range.end); if (range.isEmpty()) return range.start; var firstRow = range.start.row; var lastRow = range.end.row; if (range.isMultiLine()) { var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1; var lastFullRow = lastRow - 1; if (range.end.column > 0) this.removeInLine(lastRow, 0, range.end.column); if (lastFullRow >= firstFullRow) this._removeLines(firstFullRow, lastFullRow); if (firstFullRow != firstRow) { this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length); this.removeNewLine(range.start.row); } } else { this.removeInLine(firstRow, range.start.column, range.end.column); } return range.start; }; this.removeInLine = function(row, startColumn, endColumn) { if (startColumn == endColumn) return; var range = new Range(row, startColumn, row, endColumn); var line = this.getLine(row); var removed = line.substring(startColumn, endColumn); var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length); this.$lines.splice(row, 1, newLine); var delta = { action: "removeText", range: range, text: removed }; this._emit("change", { data: delta }); return range.start; }; this.removeLines = function(firstRow, lastRow) { if (firstRow < 0 || lastRow >= this.getLength()) return this.remove(new Range(firstRow, 0, lastRow + 1, 0)); return this._removeLines(firstRow, lastRow); }; this._removeLines = function(firstRow, lastRow) { var range = new Range(firstRow, 0, lastRow + 1, 0); var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1); var delta = { action: "removeLines", range: range, nl: this.getNewLineCharacter(), lines: removed }; this._emit("change", { data: delta }); return removed; }; this.removeNewLine = function(row) { var firstLine = this.getLine(row); var secondLine = this.getLine(row+1); var range = new Range(row, firstLine.length, row+1, 0); var line = firstLine + secondLine; this.$lines.splice(row, 2, line); var delta = { action: "removeText", range: range, text: this.getNewLineCharacter() }; this._emit("change", { data: delta }); }; this.replace = function(range, text) { if (!range instanceof Range) range = Range.fromPoints(range.start, range.end); if (text.length == 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); if (text) { var end = this.insert(range.start, text); } else { end = range.start; } return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { var delta = deltas[i]; var range = Range.fromPoints(delta.range.start, delta.range.end); if (delta.action == "insertLines") this._removeLines(range.start.row, range.end.row - 1); else if (delta.action == "insertText") this.remove(range); else if (delta.action == "removeLines") this._insertLines(range.start.row, delta.lines); else if (delta.action == "removeText") this.insert(range.start, delta.text); } }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; for (var i = startRow || 0, l = lines.length; i < l; i++) { index -= lines[i].length + newlineLength; if (index < 0) return {row: i, column: index + lines[i].length + newlineLength}; } return {row: l-1, column: lines[l-1].length}; }; this.positionToIndex = function(pos, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; var index = 0; var row = Math.min(pos.row, lines.length); for (var i = startRow || 0; i < row; ++i) index += lines[i].length + newlineLength; return index + pos.column; }; }).call(Document.prototype); exports.Document = Document; }); define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) { var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Anchor = exports.Anchor = function(doc, row, column) { this.$onChange = this.onChange.bind(this); this.attach(doc); if (typeof column == "undefined") this.setPosition(row.row, row.column); else this.setPosition(row, column); }; (function() { oop.implement(this, EventEmitter); this.getPosition = function() { return this.$clipPositionToDocument(this.row, this.column); }; this.getDocument = function() { return this.document; }; this.$insertRight = false; this.onChange = function(e) { var delta = e.data; var range = delta.range; if (range.start.row == range.end.row && range.start.row != this.row) return; if (range.start.row > this.row) return; if (range.start.row == this.row && range.start.column > this.column) return; var row = this.row; var column = this.column; var start = range.start; var end = range.end; if (delta.action === "insertText") { if (start.row === row && start.column <= column) { if (start.column === column && this.$insertRight) { } else if (start.row === end.row) { column += end.column - start.column; } else { column -= start.column; row += end.row - start.row; } } else if (start.row !== end.row && start.row < row) { row += end.row - start.row; } } else if (delta.action === "insertLines") { if (start.row <= row) { row += end.row - start.row; } } else if (delta.action === "removeText") { if (start.row === row && start.column < column) { if (end.column >= column) column = start.column; else column = Math.max(0, column - (end.column - start.column)); } else if (start.row !== end.row && start.row < row) { if (end.row === row) column = Math.max(0, column - end.column) + start.column; row -= (end.row - start.row); } else if (end.row === row) { row -= end.row - start.row; column = Math.max(0, column - end.column) + start.column; } } else if (delta.action == "removeLines") { if (start.row <= row) { if (end.row <= row) row -= end.row - start.row; else { row = start.row; column = 0; } } } this.setPosition(row, column, true); }; this.setPosition = function(row, column, noClip) { var pos; if (noClip) { pos = { row: row, column: column }; } else { pos = this.$clipPositionToDocument(row, column); } if (this.row == pos.row && this.column == pos.column) return; var old = { row: this.row, column: this.column }; this.row = pos.row; this.column = pos.column; this._emit("change", { old: old, value: pos }); }; this.detach = function() { this.document.removeEventListener("change", this.$onChange); }; this.attach = function(doc) { this.document = doc || this.document; this.document.on("change", this.$onChange); }; this.$clipPositionToDocument = function(row, column) { var pos = {}; if (row >= this.document.getLength()) { pos.row = Math.max(0, this.document.getLength() - 1); pos.column = this.document.getLine(pos.row).length; } else if (row < 0) { pos.row = 0; pos.column = 0; } else { pos.row = row; pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); } if (column < 0) pos.column = 0; return pos; }; }).call(Anchor.prototype); }); define('ace/background_tokenizer', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) { var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var BackgroundTokenizer = function(tokenizer, editor) { this.running = false; this.lines = []; this.states = []; this.currentLine = 0; this.tokenizer = tokenizer; var self = this; this.$worker = function() { if (!self.running) { return; } var workerStart = new Date(); var currentLine = self.currentLine; var endLine = -1; var doc = self.doc; while (self.lines[currentLine]) currentLine++; var startLine = currentLine; var len = doc.getLength(); var processedLines = 0; self.running = false; while (currentLine < len) { self.$tokenizeRow(currentLine); endLine = currentLine; do { currentLine++; } while (self.lines[currentLine]); processedLines ++; if ((processedLines % 5 == 0) && (new Date() - workerStart) > 20) { self.running = setTimeout(self.$worker, 20); self.currentLine = currentLine; return; } } self.currentLine = currentLine; if (startLine <= endLine) self.fireUpdateEvent(startLine, endLine); }; }; (function(){ oop.implement(this, EventEmitter); this.setTokenizer = function(tokenizer) { this.tokenizer = tokenizer; this.lines = []; this.states = []; this.start(0); }; this.setDocument = function(doc) { this.doc = doc; this.lines = []; this.states = []; this.stop(); }; this.fireUpdateEvent = function(firstRow, lastRow) { var data = { first: firstRow, last: lastRow }; this._emit("update", {data: data}); }; this.start = function(startRow) { this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength()); this.lines.splice(this.currentLine, this.lines.length); this.states.splice(this.currentLine, this.states.length); this.stop(); this.running = setTimeout(this.$worker, 700); }; this.scheduleStart = function() { if (!this.running) this.running = setTimeout(this.$worker, 700); } this.$updateOnChange = function(delta) { var range = delta.range; var startRow = range.start.row; var len = range.end.row - startRow; if (len === 0) { this.lines[startRow] = null; } else if (delta.action == "removeText" || delta.action == "removeLines") { this.lines.splice(startRow, len + 1, null); this.states.splice(startRow, len + 1, null); } else { var args = Array(len + 1); args.unshift(startRow, 1); this.lines.splice.apply(this.lines, args); this.states.splice.apply(this.states, args); } this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength()); this.stop(); }; this.stop = function() { if (this.running) clearTimeout(this.running); this.running = false; }; this.getTokens = function(row) { return this.lines[row] || this.$tokenizeRow(row); }; this.getState = function(row) { if (this.currentLine == row) this.$tokenizeRow(row); return this.states[row] || "start"; }; this.$tokenizeRow = function(row) { var line = this.doc.getLine(row); var state = this.states[row - 1]; var data = this.tokenizer.getLineTokens(line, state, row); if (this.states[row] + "" !== data.state + "") { this.states[row] = data.state; this.lines[row + 1] = null; if (this.currentLine > row + 1) this.currentLine = row + 1; } else if (this.currentLine == row) { this.currentLine = row + 1; } return this.lines[row] = data.tokens; }; }).call(BackgroundTokenizer.prototype); exports.BackgroundTokenizer = BackgroundTokenizer; }); define('ace/search_highlight', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/lib/oop', 'ace/range'], function(require, exports, module) { var lang = require("./lib/lang"); var oop = require("./lib/oop"); var Range = require("./range").Range; var SearchHighlight = function(regExp, clazz, type) { this.setRegexp(regExp); this.clazz = clazz; this.type = type || "text"; }; (function() { this.MAX_RANGES = 500; this.setRegexp = function(regExp) { if (this.regExp+"" == regExp+"") return; this.regExp = regExp; this.cache = []; }; this.update = function(html, markerLayer, session, config) { if (!this.regExp) return; var start = config.firstRow, end = config.lastRow; for (var i = start; i <= end; i++) { var ranges = this.cache[i]; if (ranges == null) { ranges = lang.getMatchOffsets(session.getLine(i), this.regExp); if (ranges.length > this.MAX_RANGES) ranges = ranges.slice(0, this.MAX_RANGES); ranges = ranges.map(function(match) { return new Range(i, match.offset, i, match.offset + match.length); }); this.cache[i] = ranges.length ? ranges : ""; } for (var j = ranges.length; j --; ) { markerLayer.drawSingleLineMarker( html, ranges[j].toScreenRange(session), this.clazz, config); } } }; }).call(SearchHighlight.prototype); exports.SearchHighlight = SearchHighlight; }); define('ace/edit_session/folding', ['require', 'exports', 'module' , 'ace/range', 'ace/edit_session/fold_line', 'ace/edit_session/fold', 'ace/token_iterator'], function(require, exports, module) { var Range = require("../range").Range; var FoldLine = require("./fold_line").FoldLine; var Fold = require("./fold").Fold; var TokenIterator = require("../token_iterator").TokenIterator; function Folding() { this.getFoldAt = function(row, column, side) { var foldLine = this.getFoldLine(row); if (!foldLine) return null; var folds = foldLine.folds; for (var i = 0; i < folds.length; i++) { var fold = folds[i]; if (fold.range.contains(row, column)) { if (side == 1 && fold.range.isEnd(row, column)) { continue; } else if (side == -1 && fold.range.isStart(row, column)) { continue; } return fold; } } }; this.getFoldsInRange = function(range) { var start = range.start; var end = range.end; var foldLines = this.$foldData; var foundFolds = []; start.column += 1; end.column -= 1; for (var i = 0; i < foldLines.length; i++) { var cmp = foldLines[i].range.compareRange(range); if (cmp == 2) { continue; } else if (cmp == -2) { break; } var folds = foldLines[i].folds; for (var j = 0; j < folds.length; j++) { var fold = folds[j]; cmp = fold.range.compareRange(range); if (cmp == -2) { break; } else if (cmp == 2) { continue; } else if (cmp == 42) { break; } foundFolds.push(fold); } } start.column -= 1; end.column += 1; return foundFolds; }; this.getFoldsInRangeList = function(ranges) { if (Array.isArray(ranges)) { var folds = []; ranges.forEach(function(range) { folds = folds.concat(this.getFoldsInRange(range)); }, this); } else { var folds = this.getFoldsInRange(ranges); } return folds; } this.getAllFolds = function() { var folds = []; var foldLines = this.$foldData; function addFold(fold) { folds.push(fold); } for (var i = 0; i < foldLines.length; i++) for (var j = 0; j < foldLines[i].folds.length; j++) addFold(foldLines[i].folds[j]); return folds; }; this.getFoldStringAt = function(row, column, trim, foldLine) { foldLine = foldLine || this.getFoldLine(row); if (!foldLine) return null; var lastFold = { end: { column: 0 } }; var str, fold; for (var i = 0; i < foldLine.folds.length; i++) { fold = foldLine.folds[i]; var cmp = fold.range.compareEnd(row, column); if (cmp == -1) { str = this .getLine(fold.start.row) .substring(lastFold.end.column, fold.start.column); break; } else if (cmp === 0) { return null; } lastFold = fold; } if (!str) str = this.getLine(fold.start.row).substring(lastFold.end.column); if (trim == -1) return str.substring(0, column - lastFold.end.column); else if (trim == 1) return str.substring(column - lastFold.end.column); else return str; }; this.getFoldLine = function(docRow, startFoldLine) { var foldData = this.$foldData; var i = 0; if (startFoldLine) i = foldData.indexOf(startFoldLine); if (i == -1) i = 0; for (i; i < foldData.length; i++) { var foldLine = foldData[i]; if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) { return foldLine; } else if (foldLine.end.row > docRow) { return null; } } return null; }; this.getNextFoldLine = function(docRow, startFoldLine) { var foldData = this.$foldData; var i = 0; if (startFoldLine) i = foldData.indexOf(startFoldLine); if (i == -1) i = 0; for (i; i < foldData.length; i++) { var foldLine = foldData[i]; if (foldLine.end.row >= docRow) { return foldLine; } } return null; }; this.getFoldedRowCount = function(first, last) { var foldData = this.$foldData, rowCount = last-first+1; for (var i = 0; i < foldData.length; i++) { var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row; if (end >= last) { if(start < last) { if(start >= first) rowCount -= last-start; else rowCount = 0;//in one fold } break; } else if(end >= first){ if (start >= first) //fold inside range rowCount -= end-start; else rowCount -= end-first+1; } } return rowCount; }; this.$addFoldLine = function(foldLine) { this.$foldData.push(foldLine); this.$foldData.sort(function(a, b) { return a.start.row - b.start.row; }); return foldLine; }; this.addFold = function(placeholder, range) { var foldData = this.$foldData; var added = false; var fold; if (placeholder instanceof Fold) fold = placeholder; else { fold = new Fold(range, placeholder); fold.collapseChildren = range.collapseChildren; } this.$clipRangeToDocument(fold.range); var startRow = fold.start.row; var startColumn = fold.start.column; var endRow = fold.end.row; var endColumn = fold.end.column; if (!(startRow < endRow || startRow == endRow && startColumn <= endColumn - 2)) throw new Error("The range has to be at least 2 characters width"); var startFold = this.getFoldAt(startRow, startColumn, 1); var endFold = this.getFoldAt(endRow, endColumn, -1); if (startFold && endFold == startFold) return startFold.addSubFold(fold); if ( (startFold && !startFold.range.isStart(startRow, startColumn)) || (endFold && !endFold.range.isEnd(endRow, endColumn)) ) { throw new Error("A fold can't intersect already existing fold" + fold.range + startFold.range); } var folds = this.getFoldsInRange(fold.range); if (folds.length > 0) { this.removeFolds(folds); folds.forEach(function(subFold) { fold.addSubFold(subFold); }); } for (var i = 0; i < foldData.length; i++) { var foldLine = foldData[i]; if (endRow == foldLine.start.row) { foldLine.addFold(fold); added = true; break; } else if (startRow == foldLine.end.row) { foldLine.addFold(fold); added = true; if (!fold.sameRow) { var foldLineNext = foldData[i + 1]; if (foldLineNext && foldLineNext.start.row == endRow) { foldLine.merge(foldLineNext); break; } } break; } else if (endRow <= foldLine.start.row) { break; } } if (!added) foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold)); if (this.$useWrapMode) this.$updateWrapData(foldLine.start.row, foldLine.start.row); else this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row); this.$modified = true; this._emit("changeFold", { data: fold, action: "add" }); return fold; }; this.addFolds = function(folds) { folds.forEach(function(fold) { this.addFold(fold); }, this); }; this.removeFold = function(fold) { var foldLine = fold.foldLine; var startRow = foldLine.start.row; var endRow = foldLine.end.row; var foldLines = this.$foldData; var folds = foldLine.folds; if (folds.length == 1) { foldLines.splice(foldLines.indexOf(foldLine), 1); } else if (foldLine.range.isEnd(fold.end.row, fold.end.column)) { folds.pop(); foldLine.end.row = folds[folds.length - 1].end.row; foldLine.end.column = folds[folds.length - 1].end.column; } else if (foldLine.range.isStart(fold.start.row, fold.start.column)) { folds.shift(); foldLine.start.row = folds[0].start.row; foldLine.start.column = folds[0].start.column; } else if (fold.sameRow) { folds.splice(folds.indexOf(fold), 1); } else { var newFoldLine = foldLine.split(fold.start.row, fold.start.column); folds = newFoldLine.folds; folds.shift(); newFoldLine.start.row = folds[0].start.row; newFoldLine.start.column = folds[0].start.column; } if (!this.$updating) { if (this.$useWrapMode) this.$updateWrapData(startRow, endRow); else this.$updateRowLengthCache(startRow, endRow); } this.$modified = true; this._emit("changeFold", { data: fold, action: "remove" }); }; this.removeFolds = function(folds) { var cloneFolds = []; for (var i = 0; i < folds.length; i++) { cloneFolds.push(folds[i]); } cloneFolds.forEach(function(fold) { this.removeFold(fold); }, this); this.$modified = true; }; this.expandFold = function(fold) { this.removeFold(fold); fold.subFolds.forEach(function(subFold) { fold.restoreRange(subFold); this.addFold(subFold); }, this); if (fold.collapseChildren > 0) { this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1); } fold.subFolds = []; }; this.expandFolds = function(folds) { folds.forEach(function(fold) { this.expandFold(fold); }, this); }; this.unfold = function(location, expandInner) { var range, folds; if (location == null) { range = new Range(0, 0, this.getLength(), 0); expandInner = true; } else if (typeof location == "number") range = new Range(location, 0, location, this.getLine(location).length); else if ("row" in location) range = Range.fromPoints(location, location); else range = location; folds = this.getFoldsInRangeList(range); if (expandInner) { this.removeFolds(folds); } else { while (folds.length) { this.expandFolds(folds); folds = this.getFoldsInRangeList(range); } } }; this.isRowFolded = function(docRow, startFoldRow) { return !!this.getFoldLine(docRow, startFoldRow); }; this.getRowFoldEnd = function(docRow, startFoldRow) { var foldLine = this.getFoldLine(docRow, startFoldRow); return foldLine ? foldLine.end.row : docRow; }; this.getRowFoldStart = function(docRow, startFoldRow) { var foldLine = this.getFoldLine(docRow, startFoldRow); return foldLine ? foldLine.start.row : docRow; }; this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) { if (startRow == null) { startRow = foldLine.start.row; startColumn = 0; } if (endRow == null) { endRow = foldLine.end.row; endColumn = this.getLine(endRow).length; } var doc = this.doc; var textLine = ""; foldLine.walk(function(placeholder, row, column, lastColumn) { if (row < startRow) return; if (row == startRow) { if (column < startColumn) return; lastColumn = Math.max(startColumn, lastColumn); } if (placeholder != null) { textLine += placeholder; } else { textLine += doc.getLine(row).substring(lastColumn, column); } }, endRow, endColumn); return textLine; }; this.getDisplayLine = function(row, endColumn, startRow, startColumn) { var foldLine = this.getFoldLine(row); if (!foldLine) { var line; line = this.doc.getLine(row); return line.substring(startColumn || 0, endColumn || line.length); } else { return this.getFoldDisplayLine( foldLine, row, endColumn, startRow, startColumn); } }; this.$cloneFoldData = function() { var fd = []; fd = this.$foldData.map(function(foldLine) { var folds = foldLine.folds.map(function(fold) { return fold.clone(); }); return new FoldLine(fd, folds); }); return fd; }; this.toggleFold = function(tryToUnfold) { var selection = this.selection; var range = selection.getRange(); var fold; var bracketPos; if (range.isEmpty()) { var cursor = range.start; fold = this.getFoldAt(cursor.row, cursor.column); if (fold) { this.expandFold(fold); return; } else if (bracketPos = this.findMatchingBracket(cursor)) { if (range.comparePoint(bracketPos) == 1) { range.end = bracketPos; } else { range.start = bracketPos; range.start.column++; range.end.column--; } } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) { if (range.comparePoint(bracketPos) == 1) range.end = bracketPos; else range.start = bracketPos; range.start.column++; } else { range = this.getCommentFoldRange(cursor.row, cursor.column) || range; } } else { var folds = this.getFoldsInRange(range); if (tryToUnfold && folds.length) { this.expandFolds(folds); return; } else if (folds.length == 1 ) { fold = folds[0]; } } if (!fold) fold = this.getFoldAt(range.start.row, range.start.column); if (fold && fold.range.toString() == range.toString()) { this.expandFold(fold); return; } var placeholder = "..."; if (!range.isMultiLine()) { placeholder = this.getTextRange(range); if(placeholder.length < 4) return; placeholder = placeholder.trim().substring(0, 2) + ".."; } this.addFold(placeholder, range); }; this.getCommentFoldRange = function(row, column, dir) { var iterator = new TokenIterator(this, row, column); var token = iterator.getCurrentToken(); if (token && /^comment|string/.test(token.type)) { var range = new Range(); var re = new RegExp(token.type.replace(/\..*/, "\\.")); if (dir != 1) { do { token = iterator.stepBackward(); } while(token && re.test(token.type)); iterator.stepForward(); } range.start.row = iterator.getCurrentTokenRow(); range.start.column = iterator.getCurrentTokenColumn() + 2; iterator = new TokenIterator(this, row, column); if (dir != -1) { do { token = iterator.stepForward(); } while(token && re.test(token.type)); token = iterator.stepBackward(); } else token = iterator.getCurrentToken(); range.end.row = iterator.getCurrentTokenRow(); range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2; return range; } }; this.foldAll = function(startRow, endRow, depth) { if (depth == undefined) depth = 100000; // JSON.stringify doesn't hanle Infinity var foldWidgets = this.foldWidgets; if (!foldWidgets) return; // mode doesn't support folding endRow = endRow || this.getLength(); startRow = startRow || 0; for (var row = startRow; row < endRow; row++) { if (foldWidgets[row] == null) foldWidgets[row] = this.getFoldWidget(row); if (foldWidgets[row] != "start") continue; var range = this.getFoldWidgetRange(row); if (range && range.isMultiLine() && range.end.row <= endRow && range.start.row >= startRow ) try { var fold = this.addFold("...", range); fold.collapseChildren = depth; row = range.end.row; } catch(e) {} } }; this.$foldStyles = { "manual": 1, "markbegin": 1, "markbeginend": 1 }; this.$foldStyle = "markbegin"; this.setFoldStyle = function(style) { if (!this.$foldStyles[style]) throw new Error("invalid fold style: " + style + "[" + Object.keys(this.$foldStyles).join(", ") + "]"); if (this.$foldStyle == style) return; this.$foldStyle = style; if (style == "manual") this.unfold(); var mode = this.$foldMode; this.$setFolding(null); this.$setFolding(mode); }; this.$setFolding = function(foldMode) { if (this.$foldMode == foldMode) return; this.$foldMode = foldMode; this.removeListener('change', this.$updateFoldWidgets); this._emit("changeAnnotation"); if (!foldMode || this.$foldStyle == "manual") { this.foldWidgets = null; return; } this.foldWidgets = []; this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle); this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle); this.$updateFoldWidgets = this.updateFoldWidgets.bind(this); this.on('change', this.$updateFoldWidgets); }; this.getParentFoldRangeData = function (row, ignoreCurrent) { var fw = this.foldWidgets; if (!fw || (ignoreCurrent && fw[row])) return {}; var i = row - 1, firstRange; while (i >= 0) { var c = fw[i]; if (c == null) c = fw[i] = this.getFoldWidget(i); if (c == "start") { var range = this.getFoldWidgetRange(i); if (!firstRange) firstRange = range; if (range && range.end.row >= row) break; } i--; } return { range: i !== -1 && range, firstRange: firstRange }; } this.onFoldWidgetClick = function(row, e) { e = e.domEvent; var options = { children: e.shiftKey, all: e.ctrlKey || e.metaKey, siblings: e.altKey }; var range = this.$toggleFoldWidget(row, options); if (!range) (e.target || e.srcElement).className += " ace_invalid"; }; this.$toggleFoldWidget = function(row, options) { var type = this.getFoldWidget(row); var line = this.getLine(row); var dir = type === "end" ? -1 : 1; var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir); if (fold) { if (options.children || options.all) this.removeFold(fold); else this.expandFold(fold); return; } var range = this.getFoldWidgetRange(row, true); if (range && !range.isMultiLine()) { fold = this.getFoldAt(range.start.row, range.start.column, 1); if (fold && range.isEqual(fold.range)) { this.removeFold(fold); return; } } if (options.siblings) { var data = this.getParentFoldRangeData(row); if (data.range) { var startRow = data.range.start.row + 1; var endRow = data.range.end.row; } this.foldAll(startRow, endRow, options.all ? 10000 : 0); } else if (options.children) { endRow = range ? range.end.row : this.getLength(); this.foldAll(row + 1, range.end.row, options.all ? 10000 : 0); } else if (range) { if (options.all) range.collapseChildren = 10000; this.addFold("...", range); } return range; }; this.toggleFoldWidget = function(toggleParent) { var row = this.selection.getCursor().row; row = this.getRowFoldStart(row); var range = this.$toggleFoldWidget(row, {}); if (range) return; var data = this.getParentFoldRangeData(row, true); range = data.range || data.firstRange; if (range) { row = range.start.row; var fold = this.getFoldAt(row, this.getLine(row).length, 1); if (fold) { this.removeFold(fold); } else { this.addFold("...", range); } } }; this.updateFoldWidgets = function(e) { var delta = e.data; var range = delta.range; var firstRow = range.start.row; var len = range.end.row - firstRow; if (len === 0) { this.foldWidgets[firstRow] = null; } else if (delta.action == "removeText" || delta.action == "removeLines") { this.foldWidgets.splice(firstRow, len + 1, null); } else { var args = Array(len + 1); args.unshift(firstRow, 1); this.foldWidgets.splice.apply(this.foldWidgets, args); } }; } exports.Folding = Folding; }); define('ace/edit_session/fold_line', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) { var Range = require("../range").Range; function FoldLine(foldData, folds) { this.foldData = foldData; if (Array.isArray(folds)) { this.folds = folds; } else { folds = this.folds = [ folds ]; } var last = folds[folds.length - 1] this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column); this.start = this.range.start; this.end = this.range.end; this.folds.forEach(function(fold) { fold.setFoldLine(this); }, this); } (function() { this.shiftRow = function(shift) { this.start.row += shift; this.end.row += shift; this.folds.forEach(function(fold) { fold.start.row += shift; fold.end.row += shift; }); } this.addFold = function(fold) { if (fold.sameRow) { if (fold.start.row < this.startRow || fold.endRow > this.endRow) { throw new Error("Can't add a fold to this FoldLine as it has no connection"); } this.folds.push(fold); this.folds.sort(function(a, b) { return -a.range.compareEnd(b.start.row, b.start.column); }); if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) { this.end.row = fold.end.row; this.end.column = fold.end.column; } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) { this.start.row = fold.start.row; this.start.column = fold.start.column; } } else if (fold.start.row == this.end.row) { this.folds.push(fold); this.end.row = fold.end.row; this.end.column = fold.end.column; } else if (fold.end.row == this.start.row) { this.folds.unshift(fold); this.start.row = fold.start.row; this.start.column = fold.start.column; } else { throw new Error("Trying to add fold to FoldRow that doesn't have a matching row"); } fold.foldLine = this; } this.containsRow = function(row) { return row >= this.start.row && row <= this.end.row; } this.walk = function(callback, endRow, endColumn) { var lastEnd = 0, folds = this.folds, fold, comp, stop, isNewRow = true; if (endRow == null) { endRow = this.end.row; endColumn = this.end.column; } for (var i = 0; i < folds.length; i++) { fold = folds[i]; comp = fold.range.compareStart(endRow, endColumn); if (comp == -1) { callback(null, endRow, endColumn, lastEnd, isNewRow); return; } stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow); stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd); if (stop || comp == 0) { return; } isNewRow = !fold.sameRow; lastEnd = fold.end.column; } callback(null, endRow, endColumn, lastEnd, isNewRow); } this.getNextFoldTo = function(row, column) { var fold, cmp; for (var i = 0; i < this.folds.length; i++) { fold = this.folds[i]; cmp = fold.range.compareEnd(row, column); if (cmp == -1) { return { fold: fold, kind: "after" }; } else if (cmp == 0) { return { fold: fold, kind: "inside" } } } return null; } this.addRemoveChars = function(row, column, len) { var ret = this.getNextFoldTo(row, column), fold, folds; if (ret) { fold = ret.fold; if (ret.kind == "inside" && fold.start.column != column && fold.start.row != row) { window.console && window.console.log(row, column, fold); } else if (fold.start.row == row) { folds = this.folds; var i = folds.indexOf(fold); if (i == 0) { this.start.column += len; } for (i; i < folds.length; i++) { fold = folds[i]; fold.start.column += len; if (!fold.sameRow) { return; } fold.end.column += len; } this.end.column += len; } } } this.split = function(row, column) { var fold = this.getNextFoldTo(row, column).fold; var folds = this.folds; var foldData = this.foldData; if (!fold) return null; var i = folds.indexOf(fold); var foldBefore = folds[i - 1]; this.end.row = foldBefore.end.row; this.end.column = foldBefore.end.column; folds = folds.splice(i, folds.length - i); var newFoldLine = new FoldLine(foldData, folds); foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine); return newFoldLine; } this.merge = function(foldLineNext) { var folds = foldLineNext.folds; for (var i = 0; i < folds.length; i++) { this.addFold(folds[i]); } var foldData = this.foldData; foldData.splice(foldData.indexOf(foldLineNext), 1); } this.toString = function() { var ret = [this.range.toString() + ": [" ]; this.folds.forEach(function(fold) { ret.push(" " + fold.toString()); }); ret.push("]") return ret.join("\n"); } this.idxToPosition = function(idx) { var lastFoldEndColumn = 0; var fold; for (var i = 0; i < this.folds.length; i++) { var fold = this.folds[i]; idx -= fold.start.column - lastFoldEndColumn; if (idx < 0) { return { row: fold.start.row, column: fold.start.column + idx }; } idx -= fold.placeholder.length; if (idx < 0) { return fold.start; } lastFoldEndColumn = fold.end.column; } return { row: this.end.row, column: this.end.column + idx }; } }).call(FoldLine.prototype); exports.FoldLine = FoldLine; }); define('ace/edit_session/fold', ['require', 'exports', 'module' , 'ace/range', 'ace/range_list', 'ace/lib/oop'], function(require, exports, module) { var Range = require("../range").Range; var RangeList = require("../range_list").RangeList; var oop = require("../lib/oop") var Fold = exports.Fold = function(range, placeholder) { this.foldLine = null; this.placeholder = placeholder; this.range = range; this.start = range.start; this.end = range.end; this.sameRow = range.start.row == range.end.row; this.subFolds = this.ranges = []; }; oop.inherits(Fold, RangeList); (function() { this.toString = function() { return '"' + this.placeholder + '" ' + this.range.toString(); }; this.setFoldLine = function(foldLine) { this.foldLine = foldLine; this.subFolds.forEach(function(fold) { fold.setFoldLine(foldLine); }); }; this.clone = function() { var range = this.range.clone(); var fold = new Fold(range, this.placeholder); this.subFolds.forEach(function(subFold) { fold.subFolds.push(subFold.clone()); }); fold.collapseChildren = this.collapseChildren; return fold; }; this.addSubFold = function(fold) { if (this.range.isEqual(fold)) return; if (!this.range.containsRange(fold)) throw new Error("A fold can't intersect already existing fold" + fold.range + this.range); consumeRange(fold, this.start); var row = fold.start.row, column = fold.start.column; for (var i = 0, cmp = -1; i < this.subFolds.length; i++) { cmp = this.subFolds[i].range.compare(row, column); if (cmp != 1) break; } var afterStart = this.subFolds[i]; if (cmp == 0) return afterStart.addSubFold(fold); var row = fold.range.end.row, column = fold.range.end.column; for (var j = i, cmp = -1; j < this.subFolds.length; j++) { cmp = this.subFolds[j].range.compare(row, column); if (cmp != 1) break; } var afterEnd = this.subFolds[j]; if (cmp == 0) throw new Error("A fold can't intersect already existing fold" + fold.range + this.range); var consumedFolds = this.subFolds.splice(i, j - i, fold); fold.setFoldLine(this.foldLine); return fold; }; this.restoreRange = function(range) { return restoreRange(range, this.start); }; }).call(Fold.prototype); function consumePoint(point, anchor) { point.row -= anchor.row; if (point.row == 0) point.column -= anchor.column; } function consumeRange(range, anchor) { consumePoint(range.start, anchor); consumePoint(range.end, anchor); } function restorePoint(point, anchor) { if (point.row == 0) point.column += anchor.column; point.row += anchor.row; } function restoreRange(range, anchor) { restorePoint(range.start, anchor); restorePoint(range.end, anchor); } }); define('ace/range_list', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) { var Range = require("./range").Range; var comparePoints = Range.comparePoints; var RangeList = function() { this.ranges = []; }; (function() { this.comparePoints = comparePoints; this.pointIndex = function(pos, excludeEdges, startIndex) { var list = this.ranges; for (var i = startIndex || 0; i < list.length; i++) { var range = list[i]; var cmpEnd = comparePoints(pos, range.end); if (cmpEnd > 0) continue; var cmpStart = comparePoints(pos, range.start); if (cmpEnd === 0) return excludeEdges && cmpStart !== 0 ? -i-2 : i; if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges)) return i; return -i-1; } return -i - 1; }; this.add = function(range) { var excludeEdges = !range.isEmpty(); var startIndex = this.pointIndex(range.start, excludeEdges); if (startIndex < 0) startIndex = -startIndex - 1; var endIndex = this.pointIndex(range.end, excludeEdges, startIndex); if (endIndex < 0) endIndex = -endIndex - 1; else endIndex++; return this.ranges.splice(startIndex, endIndex - startIndex, range); }; this.addList = function(list) { var removed = []; for (var i = list.length; i--; ) { removed.push.call(removed, this.add(list[i])); } return removed; }; this.substractPoint = function(pos) { var i = this.pointIndex(pos); if (i >= 0) return this.ranges.splice(i, 1); }; this.merge = function() { var removed = []; var list = this.ranges; list = list.sort(function(a, b) { return comparePoints(a.start, b.start); }); var next = list[0], range; for (var i = 1; i < list.length; i++) { range = next; next = list[i]; var cmp = comparePoints(range.end, next.start); if (cmp < 0) continue; if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) continue; if (comparePoints(range.end, next.end) < 0) { range.end.row = next.end.row; range.end.column = next.end.column; } list.splice(i, 1); removed.push(next); next = range; i--; } this.ranges = list; return removed; }; this.contains = function(row, column) { return this.pointIndex({row: row, column: column}) >= 0; }; this.containsPoint = function(pos) { return this.pointIndex(pos) >= 0; }; this.rangeAtPoint = function(pos) { var i = this.pointIndex(pos); if (i >= 0) return this.ranges[i]; }; this.clipRows = function(startRow, endRow) { var list = this.ranges; if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) return []; var startIndex = this.pointIndex({row: startRow, column: 0}); if (startIndex < 0) startIndex = -startIndex - 1; var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex); if (endIndex < 0) endIndex = -endIndex - 1; var clipped = []; for (var i = startIndex; i < endIndex; i++) { clipped.push(list[i]); } return clipped; }; this.removeAll = function() { return this.ranges.splice(0, this.ranges.length); }; this.attach = function(session) { if (this.session) this.detach(); this.session = session; this.onChange = this.$onChange.bind(this); this.session.on('change', this.onChange); }; this.detach = function() { if (!this.session) return; this.session.removeListener('change', this.onChange); this.session = null; }; this.$onChange = function(e) { var changeRange = e.data.range; if (e.data.action[0] == "i"){ var start = changeRange.start; var end = changeRange.end; } else { var end = changeRange.start; var start = changeRange.end; } var startRow = start.row; var endRow = end.row; var lineDif = endRow - startRow; var colDiff = -start.column + end.column; var ranges = this.ranges; for (var i = 0, n = ranges.length; i < n; i++) { var r = ranges[i]; if (r.end.row < startRow) continue; if (r.start.row > startRow) break; if (r.start.row == startRow && r.start.column >= start.column ) { if (r.start.column == start.column && this.$insertRight) { } else { r.start.column += colDiff; r.start.row += lineDif; } } if (r.end.row == startRow && r.end.column >= start.column) { if (r.end.column == start.column && this.$insertRight) { continue; } if (r.end.column == start.column && colDiff > 0 && i < n - 1) { if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column) r.end.column -= colDiff; } r.end.column += colDiff; r.end.row += lineDif; } } if (lineDif != 0 && i < n) { for (; i < n; i++) { var r = ranges[i]; r.start.row += lineDif; r.end.row += lineDif; } } }; }).call(RangeList.prototype); exports.RangeList = RangeList; }); define('ace/edit_session/bracket_match', ['require', 'exports', 'module' , 'ace/token_iterator', 'ace/range'], function(require, exports, module) { var TokenIterator = require("../token_iterator").TokenIterator; var Range = require("../range").Range; function BracketMatch() { this.findMatchingBracket = function(position, chr) { if (position.column == 0) return null; var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1); if (charBeforeCursor == "") return null; var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/); if (!match) return null; if (match[1]) return this.$findClosingBracket(match[1], position); else return this.$findOpeningBracket(match[2], position); }; this.getBracketRange = function(pos) { var line = this.getLine(pos.row); var before = true, range; var chr = line.charAt(pos.column-1); var match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); if (!match) { chr = line.charAt(pos.column); pos = {row: pos.row, column: pos.column + 1}; match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); before = false; } if (!match) return null; if (match[1]) { var bracketPos = this.$findClosingBracket(match[1], pos); if (!bracketPos) return null; range = Range.fromPoints(pos, bracketPos); if (!before) { range.end.column++; range.start.column--; } range.cursor = range.end; } else { var bracketPos = this.$findOpeningBracket(match[2], pos); if (!bracketPos) return null; range = Range.fromPoints(bracketPos, pos); if (!before) { range.start.column++; range.end.column--; } range.cursor = range.start; } return range; }; this.$brackets = { ")": "(", "(": ")", "]": "[", "[": "]", "{": "}", "}": "{" }; this.$findOpeningBracket = function(bracket, position, typeRe) { var openBracket = this.$brackets[bracket]; var depth = 1; var iterator = new TokenIterator(this, position.row, position.column); var token = iterator.getCurrentToken(); if (!token) token = iterator.stepForward(); if (!token) return; if (!typeRe){ typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("rparen", ".paren") + ")+" ); } var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2; var value = token.value; while (true) { while (valueIndex >= 0) { var chr = value.charAt(valueIndex); if (chr == openBracket) { depth -= 1; if (depth == 0) { return {row: iterator.getCurrentTokenRow(), column: valueIndex + iterator.getCurrentTokenColumn()}; } } else if (chr == bracket) { depth += 1; } valueIndex -= 1; } do { token = iterator.stepBackward(); } while (token && !typeRe.test(token.type)); if (token == null) break; value = token.value; valueIndex = value.length - 1; } return null; }; this.$findClosingBracket = function(bracket, position, typeRe) { var closingBracket = this.$brackets[bracket]; var depth = 1; var iterator = new TokenIterator(this, position.row, position.column); var token = iterator.getCurrentToken(); if (!token) token = iterator.stepForward(); if (!token) return; if (!typeRe){ typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("lparen", ".paren") + ")+" ); } var valueIndex = position.column - iterator.getCurrentTokenColumn(); while (true) { var value = token.value; var valueLength = value.length; while (valueIndex < valueLength) { var chr = value.charAt(valueIndex); if (chr == closingBracket) { depth -= 1; if (depth == 0) { return {row: iterator.getCurrentTokenRow(), column: valueIndex + iterator.getCurrentTokenColumn()}; } } else if (chr == bracket) { depth += 1; } valueIndex += 1; } do { token = iterator.stepForward(); } while (token && !typeRe.test(token.type)); if (token == null) break; valueIndex = 0; } return null; }; } exports.BracketMatch = BracketMatch; }); define('ace/search', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/lib/oop', 'ace/range'], function(require, exports, module) { var lang = require("./lib/lang"); var oop = require("./lib/oop"); var Range = require("./range").Range; var Search = function() { this.$options = {}; }; (function() { this.set = function(options) { oop.mixin(this.$options, options); return this; }; this.getOptions = function() { return lang.copyObject(this.$options); }; this.setOptions = function(options) { this.$options = options; }; this.find = function(session) { var iterator = this.$matchIterator(session, this.$options); if (!iterator) return false; var firstRange = null; iterator.forEach(function(range, row, offset) { if (!range.start) { var column = range.offset + (offset || 0); firstRange = new Range(row, column, row, column+range.length); } else firstRange = range; return true; }); return firstRange; }; this.findAll = function(session) { var options = this.$options; if (!options.needle) return []; this.$assembleRegExp(options); var range = options.range; var lines = range ? session.getLines(range.start.row, range.end.row) : session.doc.getAllLines(); var ranges = []; var re = options.re; if (options.$isMultiLine) { var len = re.length; var maxRow = lines.length - len; for (var row = re.offset || 0; row <= maxRow; row++) { for (var j = 0; j < len; j++) if (lines[row + j].search(re[j]) == -1) break; var startLine = lines[row]; var line = lines[row + len - 1]; var startIndex = startLine.match(re[0])[0].length; var endIndex = line.match(re[len - 1])[0].length; ranges.push(new Range( row, startLine.length - startIndex, row + len - 1, endIndex )); } } else { for (var i = 0; i < lines.length; i++) { var matches = lang.getMatchOffsets(lines[i], re); for (var j = 0; j < matches.length; j++) { var match = matches[j]; ranges.push(new Range(i, match.offset, i, match.offset + match.length)); } } } if (range) { var startColumn = range.start.column; var endColumn = range.start.column; var i = 0, j = ranges.length - 1; while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row) i++; while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row) j--; ranges = ranges.slice(i, j + 1); for (i = 0, j = ranges.length; i < j; i++) { ranges[i].start.row += range.start.row; ranges[i].end.row += range.start.row; } } return ranges; }; this.replace = function(input, replacement) { var options = this.$options; var re = this.$assembleRegExp(options); if (options.$isMultiLine) return replacement; if (!re) return; var match = re.exec(input); if (!match || match[0].length != input.length) return null; replacement = input.replace(re, replacement); if (options.preserveCase) { replacement = replacement.split(""); for (var i = Math.min(input.length, input.length); i--; ) { var ch = input[i]; if (ch && ch.toLowerCase() != ch) replacement[i] = replacement[i].toUpperCase(); else replacement[i] = replacement[i].toLowerCase(); } replacement = replacement.join(""); } return replacement; }; this.$matchIterator = function(session, options) { var re = this.$assembleRegExp(options); if (!re) return false; var self = this, callback, backwards = options.backwards; if (options.$isMultiLine) { var len = re.length; var matchIterator = function(line, row, offset) { var startIndex = line.search(re[0]); if (startIndex == -1) return; for (var i = 1; i < len; i++) { line = session.getLine(row + i); if (line.search(re[i]) == -1) return; } var endIndex = line.match(re[len - 1])[0].length; var range = new Range(row, startIndex, row + len - 1, endIndex); if (re.offset == 1) { range.start.row--; range.start.column = Number.MAX_VALUE; } else if (offset) range.start.column += offset; if (callback(range)) return true; }; } else if (backwards) { var matchIterator = function(line, row, startIndex) { var matches = lang.getMatchOffsets(line, re); for (var i = matches.length-1; i >= 0; i--) if (callback(matches[i], row, startIndex)) return true; }; } else { var matchIterator = function(line, row, startIndex) { var matches = lang.getMatchOffsets(line, re); for (var i = 0; i < matches.length; i++) if (callback(matches[i], row, startIndex)) return true; }; } return { forEach: function(_callback) { callback = _callback; self.$lineIterator(session, options).forEach(matchIterator); } }; }; this.$assembleRegExp = function(options, $disableFakeMultiline) { if (options.needle instanceof RegExp) return options.re = options.needle; var needle = options.needle; if (!options.needle) return options.re = false; if (!options.regExp) needle = lang.escapeRegExp(needle); if (options.wholeWord) needle = "\\b" + needle + "\\b"; var modifier = options.caseSensitive ? "g" : "gi"; options.$isMultiLine = !$disableFakeMultiline && /[\n\r]/.test(needle); if (options.$isMultiLine) return options.re = this.$assembleMultilineRegExp(needle, modifier); try { var re = new RegExp(needle, modifier); } catch(e) { re = false; } return options.re = re; }; this.$assembleMultilineRegExp = function(needle, modifier) { var parts = needle.replace(/\r\n|\r|\n/g, "$\n^").split("\n"); var re = []; for (var i = 0; i < parts.length; i++) try { re.push(new RegExp(parts[i], modifier)); } catch(e) { return false; } if (parts[0] == "") { re.shift(); re.offset = 1; } else { re.offset = 0; } return re; }; this.$lineIterator = function(session, options) { var backwards = options.backwards === true; var skipCurrent = options.skipCurrent !== false; var range = options.range; var start = options.start; if (!start) start = range ? range[backwards ? "end" : "start"] : session.selection.getRange(); if (start.start) start = start[skipCurrent != backwards ? "end" : "start"]; var firstRow = range ? range.start.row : 0; var lastRow = range ? range.end.row : session.getLength() - 1; var forEach = backwards ? function(callback) { var row = start.row; var line = session.getLine(row).substring(0, start.column); if (callback(line, row)) return; for (row--; row >= firstRow; row--) if (callback(session.getLine(row), row)) return; if (options.wrap === false) return; for (row = lastRow, firstRow = start.row; row >= firstRow; row--) if (callback(session.getLine(row), row)) return; } : function(callback) { var row = start.row; var line = session.getLine(row).substr(start.column); if (callback(line, row, start.column)) return; for (row = row+1; row <= lastRow; row++) if (callback(session.getLine(row), row)) return; if (options.wrap === false) return; for (row = firstRow, lastRow = start.row; row <= lastRow; row++) if (callback(session.getLine(row), row)) return; }; return {forEach: forEach}; }; }).call(Search.prototype); exports.Search = Search; }); define('ace/commands/command_manager', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/keyboard/hash_handler', 'ace/lib/event_emitter'], function(require, exports, module) { var oop = require("../lib/oop"); var HashHandler = require("../keyboard/hash_handler").HashHandler; var EventEmitter = require("../lib/event_emitter").EventEmitter; var CommandManager = function(platform, commands) { HashHandler.call(this, commands, platform); this.byName = this.commands; this.setDefaultHandler("exec", function(e) { return e.command.exec(e.editor, e.args || {}); }); }; oop.inherits(CommandManager, HashHandler); (function() { oop.implement(this, EventEmitter); this.exec = function(command, editor, args) { if (typeof command === 'string') command = this.commands[command]; if (!command) return false; if (editor && editor.$readOnly && !command.readOnly) return false; var e = {editor: editor, command: command, args: args}; var retvalue = this._emit("exec", e); this._signal("afterExec", e); return retvalue === false ? false : true; }; this.toggleRecording = function(editor) { if (this.$inReplay) return; editor && editor._emit("changeStatus"); if (this.recording) { this.macro.pop(); this.removeEventListener("exec", this.$addCommandToMacro); if (!this.macro.length) this.macro = this.oldMacro; return this.recording = false; } if (!this.$addCommandToMacro) { this.$addCommandToMacro = function(e) { this.macro.push([e.command, e.args]); }.bind(this); } this.oldMacro = this.macro; this.macro = []; this.on("exec", this.$addCommandToMacro); return this.recording = true; }; this.replay = function(editor) { if (this.$inReplay || !this.macro) return; if (this.recording) return this.toggleRecording(editor); try { this.$inReplay = true; this.macro.forEach(function(x) { if (typeof x == "string") this.exec(x, editor); else this.exec(x[0], editor, x[1]); }, this); } finally { this.$inReplay = false; } }; this.trimMacro = function(m) { return m.map(function(x){ if (typeof x[0] != "string") x[0] = x[0].name; if (!x[1]) x = x[0]; return x; }); }; }).call(CommandManager.prototype); exports.CommandManager = CommandManager; }); define('ace/keyboard/hash_handler', ['require', 'exports', 'module' , 'ace/lib/keys', 'ace/lib/useragent'], function(require, exports, module) { var keyUtil = require("../lib/keys"); var useragent = require("../lib/useragent"); function HashHandler(config, platform) { this.platform = platform || (useragent.isMac ? "mac" : "win"); this.commands = {}; this.commandKeyBinding = {}; if (this.__defineGetter__ && this.__defineSetter__ && typeof console != "undefined" && console.error) { var warned = false; var warn = function() { if (!warned) { warned = true; console.error("commmandKeyBinding has too many m's. use commandKeyBinding"); } }; this.__defineGetter__("commmandKeyBinding", function() { warn(); return this.commandKeyBinding; }); this.__defineSetter__("commmandKeyBinding", function(val) { warn(); return this.commandKeyBinding = val; }); } else { this.commmandKeyBinding = this.commandKeyBinding; } this.addCommands(config); }; (function() { this.addCommand = function(command) { if (this.commands[command.name]) this.removeCommand(command); this.commands[command.name] = command; if (command.bindKey) this._buildKeyHash(command); }; this.removeCommand = function(command) { var name = (typeof command === 'string' ? command : command.name); command = this.commands[name]; delete this.commands[name]; var ckb = this.commandKeyBinding; for (var hashId in ckb) { for (var key in ckb[hashId]) { if (ckb[hashId][key] == command) delete ckb[hashId][key]; } } }; this.bindKey = function(key, command) { if(!key) return; if (typeof command == "function") { this.addCommand({exec: command, bindKey: key, name: command.name || key}); return; } var ckb = this.commandKeyBinding; key.split("|").forEach(function(keyPart) { var binding = this.parseKeys(keyPart, command); var hashId = binding.hashId; (ckb[hashId] || (ckb[hashId] = {}))[binding.key] = command; }, this); }; this.addCommands = function(commands) { commands && Object.keys(commands).forEach(function(name) { var command = commands[name]; if (!command) return; if (typeof command === "string") return this.bindKey(command, name); if (typeof command === "function") command = { exec: command }; if (typeof command !== "object") return; if (!command.name) command.name = name; this.addCommand(command); }, this); }; this.removeCommands = function(commands) { Object.keys(commands).forEach(function(name) { this.removeCommand(commands[name]); }, this); }; this.bindKeys = function(keyList) { Object.keys(keyList).forEach(function(key) { this.bindKey(key, keyList[key]); }, this); }; this._buildKeyHash = function(command) { var binding = command.bindKey; if (!binding) return; var key = typeof binding == "string" ? binding: binding[this.platform]; this.bindKey(key, command); }; this.parseKeys = function(keys) { if (keys.indexOf(" ") != -1) keys = keys.split(/\s+/).pop(); var parts = keys.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(x){return x}); var key = parts.pop(); var keyCode = keyUtil[key]; if (keyUtil.FUNCTION_KEYS[keyCode]) key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase(); else if (!parts.length) return {key: key, hashId: -1}; else if (parts.length == 1 && parts[0] == "shift") return {key: key.toUpperCase(), hashId: -1}; var hashId = 0; for (var i = parts.length; i--;) { var modifier = keyUtil.KEY_MODS[parts[i]]; if (modifier == null) { if (typeof console != "undefined") console.error("invalid modifier " + parts[i] + " in " + keys); return false; } hashId |= modifier; } return {key: key, hashId: hashId}; }; this.findKeyCommand = function findKeyCommand(hashId, keyString) { var ckbr = this.commandKeyBinding; return ckbr[hashId] && ckbr[hashId][keyString]; }; this.handleKeyboard = function(data, hashId, keyString, keyCode) { return { command: this.findKeyCommand(hashId, keyString) }; }; }).call(HashHandler.prototype) exports.HashHandler = HashHandler; }); define('ace/commands/default_commands', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/config'], function(require, exports, module) { var lang = require("../lib/lang"); var config = require("../config"); function bindKey(win, mac) { return {win: win, mac: mac}; } exports.commands = [{ name: "showSettingsMenu", bindKey: bindKey("Ctrl-,", "Command-,"), exec: function(editor) { config.loadModule("ace/ext/settings_menu", function(module) { module.init(editor); editor.showSettingsMenu(); }); }, readOnly: true }, { name: "selectall", bindKey: bindKey("Ctrl-A", "Command-A"), exec: function(editor) { editor.selectAll(); }, readOnly: true }, { name: "centerselection", bindKey: bindKey(null, "Ctrl-L"), exec: function(editor) { editor.centerSelection(); }, readOnly: true }, { name: "gotoline", bindKey: bindKey("Ctrl-L", "Command-L"), exec: function(editor) { var line = parseInt(prompt("Enter line number:"), 10); if (!isNaN(line)) { editor.gotoLine(line); } }, readOnly: true }, { name: "fold", bindKey: bindKey("Alt-L|Ctrl-F1", "Command-Alt-L|Command-F1"), exec: function(editor) { editor.session.toggleFold(false); }, scrollIntoView: "center", readOnly: true }, { name: "unfold", bindKey: bindKey("Alt-Shift-L|Ctrl-Shift-F1", "Command-Alt-Shift-L|Command-Shift-F1"), exec: function(editor) { editor.session.toggleFold(true); }, scrollIntoView: "center", readOnly: true }, { name: "toggleFoldWidget", bindKey: bindKey("F2", "F2"), exec: function(editor) { editor.session.toggleFoldWidget(); }, scrollIntoView: "center", readOnly: true }, { name: "toggleParentFoldWidget", bindKey: bindKey("Alt-F2", "Alt-F2"), exec: function(editor) { editor.session.toggleFoldWidget(true); }, scrollIntoView: "center", readOnly: true }, { name: "foldall", bindKey: bindKey("Ctrl-Alt-0", "Ctrl-Command-Option-0"), exec: function(editor) { editor.session.foldAll(); }, scrollIntoView: "center", readOnly: true }, { name: "foldOther", bindKey: bindKey("Alt-0", "Command-Option-0"), exec: function(editor) { editor.session.foldAll(); editor.session.unfold(editor.selection.getAllRanges()); }, scrollIntoView: "center", readOnly: true }, { name: "unfoldall", bindKey: bindKey("Alt-Shift-0", "Command-Option-Shift-0"), exec: function(editor) { editor.session.unfold(); }, scrollIntoView: "center", readOnly: true }, { name: "findnext", bindKey: bindKey("Ctrl-K", "Command-G"), exec: function(editor) { editor.findNext(); }, readOnly: true }, { name: "findprevious", bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"), exec: function(editor) { editor.findPrevious(); }, readOnly: true }, { name: "find", bindKey: bindKey("Ctrl-F", "Command-F"), exec: function(editor) { config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor)}); }, readOnly: true }, { name: "overwrite", bindKey: "Insert", exec: function(editor) { editor.toggleOverwrite(); }, readOnly: true }, { name: "selecttostart", bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Up"), exec: function(editor) { editor.getSelection().selectFileStart(); }, multiSelectAction: "forEach", readOnly: true, group: "fileJump" }, { name: "gotostart", bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"), exec: function(editor) { editor.navigateFileStart(); }, multiSelectAction: "forEach", readOnly: true, group: "fileJump" }, { name: "selectup", bindKey: bindKey("Shift-Up", "Shift-Up"), exec: function(editor) { editor.getSelection().selectUp(); }, multiSelectAction: "forEach", readOnly: true }, { name: "golineup", bindKey: bindKey("Up", "Up|Ctrl-P"), exec: function(editor, args) { editor.navigateUp(args.times); }, multiSelectAction: "forEach", readOnly: true }, { name: "selecttoend", bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-Down"), exec: function(editor) { editor.getSelection().selectFileEnd(); }, multiSelectAction: "forEach", readOnly: true, group: "fileJump" }, { name: "gotoend", bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"), exec: function(editor) { editor.navigateFileEnd(); }, multiSelectAction: "forEach", readOnly: true, group: "fileJump" }, { name: "selectdown", bindKey: bindKey("Shift-Down", "Shift-Down"), exec: function(editor) { editor.getSelection().selectDown(); }, multiSelectAction: "forEach", readOnly: true }, { name: "golinedown", bindKey: bindKey("Down", "Down|Ctrl-N"), exec: function(editor, args) { editor.navigateDown(args.times); }, multiSelectAction: "forEach", readOnly: true }, { name: "selectwordleft", bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"), exec: function(editor) { editor.getSelection().selectWordLeft(); }, multiSelectAction: "forEach", readOnly: true }, { name: "gotowordleft", bindKey: bindKey("Ctrl-Left", "Option-Left"), exec: function(editor) { editor.navigateWordLeft(); }, multiSelectAction: "forEach", readOnly: true }, { name: "selecttolinestart", bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left"), exec: function(editor) { editor.getSelection().selectLineStart(); }, multiSelectAction: "forEach", readOnly: true }, { name: "gotolinestart", bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"), exec: function(editor) { editor.navigateLineStart(); }, multiSelectAction: "forEach", readOnly: true }, { name: "selectleft", bindKey: bindKey("Shift-Left", "Shift-Left"), exec: function(editor) { editor.getSelection().selectLeft(); }, multiSelectAction: "forEach", readOnly: true }, { name: "gotoleft", bindKey: bindKey("Left", "Left|Ctrl-B"), exec: function(editor, args) { editor.navigateLeft(args.times); }, multiSelectAction: "forEach", readOnly: true }, { name: "selectwordright", bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"), exec: function(editor) { editor.getSelection().selectWordRight(); }, multiSelectAction: "forEach", readOnly: true }, { name: "gotowordright", bindKey: bindKey("Ctrl-Right", "Option-Right"), exec: function(editor) { editor.navigateWordRight(); }, multiSelectAction: "forEach", readOnly: true }, { name: "selecttolineend", bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right"), exec: function(editor) { editor.getSelection().selectLineEnd(); }, multiSelectAction: "forEach", readOnly: true }, { name: "gotolineend", bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"), exec: function(editor) { editor.navigateLineEnd(); }, multiSelectAction: "forEach", readOnly: true }, { name: "selectright", bindKey: bindKey("Shift-Right", "Shift-Right"), exec: function(editor) { editor.getSelection().selectRight(); }, multiSelectAction: "forEach", readOnly: true }, { name: "gotoright", bindKey: bindKey("Right", "Right|Ctrl-F"), exec: function(editor, args) { editor.navigateRight(args.times); }, multiSelectAction: "forEach", readOnly: true }, { name: "selectpagedown", bindKey: "Shift-PageDown", exec: function(editor) { editor.selectPageDown(); }, readOnly: true }, { name: "pagedown", bindKey: bindKey(null, "Option-PageDown"), exec: function(editor) { editor.scrollPageDown(); }, readOnly: true }, { name: "gotopagedown", bindKey: bindKey("PageDown", "PageDown|Ctrl-V"), exec: function(editor) { editor.gotoPageDown(); }, readOnly: true }, { name: "selectpageup", bindKey: "Shift-PageUp", exec: function(editor) { editor.selectPageUp(); }, readOnly: true }, { name: "pageup", bindKey: bindKey(null, "Option-PageUp"), exec: function(editor) { editor.scrollPageUp(); }, readOnly: true }, { name: "gotopageup", bindKey: "PageUp", exec: function(editor) { editor.gotoPageUp(); }, readOnly: true }, { name: "scrollup", bindKey: bindKey("Ctrl-Up", null), exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); }, readOnly: true }, { name: "scrolldown", bindKey: bindKey("Ctrl-Down", null), exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); }, readOnly: true }, { name: "selectlinestart", bindKey: "Shift-Home", exec: function(editor) { editor.getSelection().selectLineStart(); }, multiSelectAction: "forEach", readOnly: true }, { name: "selectlineend", bindKey: "Shift-End", exec: function(editor) { editor.getSelection().selectLineEnd(); }, multiSelectAction: "forEach", readOnly: true }, { name: "togglerecording", bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"), exec: function(editor) { editor.commands.toggleRecording(editor); }, readOnly: true }, { name: "replaymacro", bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"), exec: function(editor) { editor.commands.replay(editor); }, readOnly: true }, { name: "jumptomatching", bindKey: bindKey("Ctrl-P", "Ctrl-Shift-P"), exec: function(editor) { editor.jumpToMatching(); }, multiSelectAction: "forEach", readOnly: true }, { name: "selecttomatching", bindKey: bindKey("Ctrl-Shift-P", null), exec: function(editor) { editor.jumpToMatching(true); }, multiSelectAction: "forEach", readOnly: true }, { name: "cut", exec: function(editor) { var range = editor.getSelectionRange(); editor._emit("cut", range); if (!editor.selection.isEmpty()) { editor.session.remove(range); editor.clearSelection(); } }, multiSelectAction: "forEach" }, { name: "removeline", bindKey: bindKey("Ctrl-D", "Command-D"), exec: function(editor) { editor.removeLines(); }, multiSelectAction: "forEachLine" }, { name: "duplicateSelection", bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"), exec: function(editor) { editor.duplicateSelection(); }, multiSelectAction: "forEach" }, { name: "sortlines", bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"), exec: function(editor) { editor.sortLines(); }, multiSelectAction: "forEachLine" }, { name: "togglecomment", bindKey: bindKey("Ctrl-/", "Command-/"), exec: function(editor) { editor.toggleCommentLines(); }, multiSelectAction: "forEachLine", scrollIntoView: "selectionPart" }, { name: "toggleBlockComment", bindKey: bindKey("Ctrl-Shift-/", "Command-Shift-/"), exec: function(editor) { editor.toggleBlockComment(); }, multiSelectAction: "forEach" }, { name: "modifyNumberUp", bindKey: bindKey("Ctrl-Shift-Up", "Alt-Shift-Up"), exec: function(editor) { editor.modifyNumber(1); }, multiSelectAction: "forEach" }, { name: "modifyNumberDown", bindKey: bindKey("Ctrl-Shift-Down", "Alt-Shift-Down"), exec: function(editor) { editor.modifyNumber(-1); }, multiSelectAction: "forEach" }, { name: "replace", bindKey: bindKey("Ctrl-H", "Command-Option-F"), exec: function(editor) { config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor, true)}); } }, { name: "undo", bindKey: bindKey("Ctrl-Z", "Command-Z"), exec: function(editor) { editor.undo(); } }, { name: "redo", bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"), exec: function(editor) { editor.redo(); } }, { name: "copylinesup", bindKey: bindKey("Alt-Shift-Up", "Command-Option-Up"), exec: function(editor) { editor.copyLinesUp(); } }, { name: "movelinesup", bindKey: bindKey("Alt-Up", "Option-Up"), exec: function(editor) { editor.moveLinesUp(); } }, { name: "copylinesdown", bindKey: bindKey("Alt-Shift-Down", "Command-Option-Down"), exec: function(editor) { editor.copyLinesDown(); } }, { name: "movelinesdown", bindKey: bindKey("Alt-Down", "Option-Down"), exec: function(editor) { editor.moveLinesDown(); } }, { name: "del", bindKey: bindKey("Delete", "Delete|Ctrl-D|Shift-Delete"), exec: function(editor) { editor.remove("right"); }, multiSelectAction: "forEach" }, { name: "backspace", bindKey: bindKey( "Shift-Backspace|Backspace", "Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H" ), exec: function(editor) { editor.remove("left"); }, multiSelectAction: "forEach" }, { name: "cut_or_delete", bindKey: bindKey("Shift-Delete", null), exec: function(editor) { if (editor.selection.isEmpty()) { editor.remove("left"); } else { return false; } }, multiSelectAction: "forEach" }, { name: "removetolinestart", bindKey: bindKey("Alt-Backspace", "Command-Backspace"), exec: function(editor) { editor.removeToLineStart(); }, multiSelectAction: "forEach" }, { name: "removetolineend", bindKey: bindKey("Alt-Delete", "Ctrl-K"), exec: function(editor) { editor.removeToLineEnd(); }, multiSelectAction: "forEach" }, { name: "removewordleft", bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"), exec: function(editor) { editor.removeWordLeft(); }, multiSelectAction: "forEach" }, { name: "removewordright", bindKey: bindKey("Ctrl-Delete", "Alt-Delete"), exec: function(editor) { editor.removeWordRight(); }, multiSelectAction: "forEach" }, { name: "outdent", bindKey: bindKey("Shift-Tab", "Shift-Tab"), exec: function(editor) { editor.blockOutdent(); }, multiSelectAction: "forEach", scrollIntoView: "selectionPart" }, { name: "indent", bindKey: bindKey("Tab", "Tab"), exec: function(editor) { editor.indent(); }, multiSelectAction: "forEach", scrollIntoView: "selectionPart" }, { name: "blockoutdent", bindKey: bindKey("Ctrl-[", "Ctrl-["), exec: function(editor) { editor.blockOutdent(); }, multiSelectAction: "forEachLine", scrollIntoView: "selectionPart" }, { name: "blockindent", bindKey: bindKey("Ctrl-]", "Ctrl-]"), exec: function(editor) { editor.blockIndent(); }, multiSelectAction: "forEachLine", scrollIntoView: "selectionPart" }, { name: "insertstring", exec: function(editor, str) { editor.insert(str); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "inserttext", exec: function(editor, args) { editor.insert(lang.stringRepeat(args.text || "", args.times || 1)); }, multiSelectAction: "forEach" }, { name: "splitline", bindKey: bindKey(null, "Ctrl-O"), exec: function(editor) { editor.splitLine(); }, multiSelectAction: "forEach" }, { name: "transposeletters", bindKey: bindKey("Ctrl-T", "Ctrl-T"), exec: function(editor) { editor.transposeLetters(); }, multiSelectAction: function(editor) {editor.transposeSelections(1); } }, { name: "touppercase", bindKey: bindKey("Ctrl-U", "Ctrl-U"), exec: function(editor) { editor.toUpperCase(); }, multiSelectAction: "forEach" }, { name: "tolowercase", bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"), exec: function(editor) { editor.toLowerCase(); }, multiSelectAction: "forEach" }]; }); define('ace/undomanager', ['require', 'exports', 'module' ], function(require, exports, module) { var UndoManager = function() { this.reset(); }; (function() { this.execute = function(options) { var deltas = options.args[0]; this.$doc = options.args[1]; if (options.merge && this.hasUndo()){ deltas = this.$undoStack.pop().concat(deltas); } this.$undoStack.push(deltas); this.$redoStack = []; if (this.dirtyCounter < 0) { this.dirtyCounter = NaN; } this.dirtyCounter++; }; this.undo = function(dontSelect) { var deltas = this.$undoStack.pop(); var undoSelectionRange = null; if (deltas) { undoSelectionRange = this.$doc.undoChanges(deltas, dontSelect); this.$redoStack.push(deltas); this.dirtyCounter--; } return undoSelectionRange; }; this.redo = function(dontSelect) { var deltas = this.$redoStack.pop(); var redoSelectionRange = null; if (deltas) { redoSelectionRange = this.$doc.redoChanges(deltas, dontSelect); this.$undoStack.push(deltas); this.dirtyCounter++; } return redoSelectionRange; }; this.reset = function() { this.$undoStack = []; this.$redoStack = []; this.dirtyCounter = 0; }; this.hasUndo = function() { return this.$undoStack.length > 0; }; this.hasRedo = function() { return this.$redoStack.length > 0; }; this.markClean = function() { this.dirtyCounter = 0; }; this.isClean = function() { return this.dirtyCounter === 0; }; }).call(UndoManager.prototype); exports.UndoManager = UndoManager; }); define('ace/virtual_renderer', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/dom', 'ace/lib/useragent', 'ace/config', 'ace/layer/gutter', 'ace/layer/marker', 'ace/layer/text', 'ace/layer/cursor', 'ace/scrollbar', 'ace/renderloop', 'ace/lib/event_emitter'], function(require, exports, module) { var oop = require("./lib/oop"); var dom = require("./lib/dom"); var useragent = require("./lib/useragent"); var config = require("./config"); var GutterLayer = require("./layer/gutter").Gutter; var MarkerLayer = require("./layer/marker").Marker; var TextLayer = require("./layer/text").Text; var CursorLayer = require("./layer/cursor").Cursor; var ScrollBarH = require("./scrollbar").ScrollBarH; var ScrollBarV = require("./scrollbar").ScrollBarV; var RenderLoop = require("./renderloop").RenderLoop; var EventEmitter = require("./lib/event_emitter").EventEmitter; var editorCss = ".ace_editor {\ position: relative;\ overflow: hidden;\ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\ font-size: 12px;\ line-height: normal;\ color: black;\ -ms-user-select: none;\ -moz-user-select: none;\ -webkit-user-select: none;\ user-select: none;\ }\ .ace_scroller {\ position: absolute;\ overflow: hidden;\ top: 0;\ bottom: 0;\ background-color: inherit;\ }\ .ace_content {\ position: absolute;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ cursor: text;\ }\ .ace_dragging, .ace_dragging * {\ cursor: move !important;\ }\ .ace_dragging .ace_scroller:before{\ position: absolute;\ top: 0;\ left: 0;\ right: 0;\ bottom: 0;\ content: '';\ background: rgba(250, 250, 250, 0.01);\ z-index: 1000;\ }\ .ace_dragging.ace_dark .ace_scroller:before{\ background: rgba(0, 0, 0, 0.01);\ }\ .ace_selecting, .ace_selecting * {\ cursor: text !important;\ }\ .ace_gutter {\ position: absolute;\ overflow : hidden;\ width: auto;\ top: 0;\ bottom: 0;\ left: 0;\ cursor: default;\ z-index: 4;\ }\ .ace_gutter-active-line {\ position: absolute;\ left: 0;\ right: 0;\ }\ .ace_scroller.ace_scroll-left {\ box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\ }\ .ace_gutter-cell {\ padding-left: 19px;\ padding-right: 6px;\ background-repeat: no-repeat;\ }\ .ace_gutter-cell.ace_error {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUM2OEZDQTQ4RTU0MTFFMUEzM0VFRTM2RUY1M0RBMjYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUM2OEZDQTU4RTU0MTFFMUEzM0VFRTM2RUY1M0RBMjYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQzY4RkNBMjhFNTQxMUUxQTMzRUVFMzZFRjUzREEyNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQzY4RkNBMzhFNTQxMUUxQTMzRUVFMzZFRjUzREEyNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkgXxbAAAAJbSURBVHjapFNNaBNBFH4zs5vdZLP5sQmNpT82QY209heh1ioWisaDRcSKF0WKJ0GQnrzrxasHsR6EnlrwD0TagxJabaVEpFYxLWlLSS822tr87m66ccfd2GKyVhA6MMybgfe97/vmPUQphd0sZjto9XIn9OOsvlu2nkqRzVU+6vvlzPf8W6bk8dxQ0NPbxAALgCgg2JkaQuhzQau/El0zbmUA7U0Es8v2CiYmKQJHGO1QICCLoqilMhkmurDAyapKgqItezi/USRdJqEYY4D5jCy03ht2yMkkvL91jTTX10qzyyu2hruPRN7jgbH+EOsXcMLgYiThEgAMhABW85oqy1DXdRIdvP1AHJ2acQXvDIrVHcdQNrEKNYSVMSZGMjEzIIAwDXIo+6G/FxcGnzkC3T2oMhLjre49sBB+RRcHLqdafK6sYdE/GGBwU1VpFNj0aN8pJbe+BkZyevUrvLl6Xmm0W9IuTc0DxrDNAJd5oEvI/KRsNC3bQyNjPO9yQ1YHcfj2QvfQc/5TUhJTBc2iM0U7AWDQtc1nJHvD/cfO2s7jaGkiTEfa/Ep8coLu7zmNmh8+dc5lZDuUeFAGUNA/OY6JVaypQ0vjr7XYjUvJM37vt+j1vuTK5DgVfVUoTjVe+y3/LxMxY2GgU+CSLy4cpfsYorRXuXIOi0Vt40h67uZFTdIo6nLaZcwUJWAzwNS0tBnqqKzQDnjdG/iPyZxo46HaKUpbvYkj8qYRTZsBhge+JHhZyh0x9b95JqjVJkT084kZIPwu/mPWqPgfQ5jXh2+92Ay7HedfAgwA6KDWafb4w3cAAAAASUVORK5CYII=\");\ background-repeat: no-repeat;\ background-position: 2px center;\ }\ .ace_gutter-cell.ace_warning {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUM2OEZDQTg4RTU0MTFFMUEzM0VFRTM2RUY1M0RBMjYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUM2OEZDQTk4RTU0MTFFMUEzM0VFRTM2RUY1M0RBMjYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQzY4RkNBNjhFNTQxMUUxQTMzRUVFMzZFRjUzREEyNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQzY4RkNBNzhFNTQxMUUxQTMzRUVFMzZFRjUzREEyNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pgd7PfIAAAGmSURBVHjaYvr//z8DJZiJgUIANoCRkREb9gLiSVAaQx4OQM7AAkwd7XU2/v++/rOttdYGEB9dASEvOMydGKfH8Gv/p4XTkvRBfLxeQAP+1cUhXopyvzhP7P/IoSj7g7Mw09cNKO6J1QQ0L4gICPIv/veg/8W+JdFvQNLHVsW9/nmn9zk7B+cCkDwhL7gt6knSZnx9/LuCEOcvkIAMP+cvto9nfqyZmmUAksfnBUtbM60gX/3/kgyv3/xSFOL5DZT+L8vP+Yfh5cvfPvp/xUHyQHXGyAYwgpwBjZYFT3Y1OEl/OfCH4ffv3wzc4iwMvNIsDJ+f/mH4+vIPAxsb631WW0Yln6ZpQLXdMK/DXGDflh+sIv37EivD5x//Gb7+YWT4y86sl7BCCkSD+Z++/1dkvsFRl+HnD1Rvje4F8whjMXmGj58YGf5zsDMwcnAwfPvKcml62DsQDeaDxN+/Y0qwlpEHqrdB94IRNIDUgfgfKJChGK4OikEW3gTiXUB950ASLFAF54AC94A0G9QAfOnmF9DCDzABFqS08IHYDIScdijOjQABBgC+/9awBH96jwAAAABJRU5ErkJggg==\");\ background-position: 2px center;\ }\ .ace_gutter-cell.ace_info {\ background-image: url(\"data:image/gif;base64,R0lGODlhEAAQAMQAAAAAAEFBQVJSUl5eXmRkZGtra39/f4WFhYmJiZGRkaampry8vMPDw8zMzNXV1dzc3OTk5Orq6vDw8P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABQALAAAAAAQABAAAAUuICWOZGmeaBml5XGwFCQSBGyXRSAwtqQIiRuiwIM5BoYVbEFIyGCQoeJGrVptIQA7\");\ background-position: 2px center;\ }\ .ace_dark .ace_gutter-cell.ace_info {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGRTk5MTVGREIxNDkxMUUxOTc5Q0FFREQyMTNGMjBFQyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGRTk5MTVGRUIxNDkxMUUxOTc5Q0FFREQyMTNGMjBFQyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZFOTkxNUZCQjE0OTExRTE5NzlDQUVERDIxM0YyMEVDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkZFOTkxNUZDQjE0OTExRTE5NzlDQUVERDIxM0YyMEVDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SIDkjAAAAJ1JREFUeNpi/P//PwMlgImBQkB7A6qrq/+DMC55FkIGKCoq4pVnpFkgTp069f/+/fv/r1u37r+tre1/kg0A+ptn9uzZYLaRkRHpLvjw4cNXWVlZhufPnzOcO3eOdAO0tbVPAjHDmzdvGA4fPsxIsgGSkpJmv379Ynj37h2DjIyMCMkG3LhxQ/T27dsMampqDHZ2dq/pH41DxwCAAAMAFdc68dUsFZgAAAAASUVORK5CYII=\");\ }\ .ace_scrollbar {\ position: absolute;\ overflow-x: hidden;\ overflow-y: auto;\ right: 0;\ top: 0;\ bottom: 0;\ z-index: 6;\ }\ .ace_scrollbar-inner {\ position: absolute;\ cursor: text;\ left: 0;\ top: 0;\ }\ .ace_scrollbar-h {\ position: absolute;\ overflow-x: auto;\ overflow-y: hidden;\ right: 0;\ left: 0;\ bottom: 0;\ z-index: 6;\ }\ .ace_print-margin {\ position: absolute;\ height: 100%;\ }\ .ace_text-input {\ position: absolute;\ z-index: 0;\ width: 0.5em;\ height: 1em;\ opacity: 0;\ background: transparent;\ -moz-appearance: none;\ appearance: none;\ border: none;\ resize: none;\ outline: none;\ overflow: hidden;\ font: inherit;\ padding: 0 1px;\ margin: 0 -1px;\ text-indent: -1em;\ -ms-user-select: text;\ -moz-user-select: text;\ -webkit-user-select: text;\ user-select: text;\ }\ .ace_text-input.ace_composition {\ background: #f8f8f8;\ color: #111;\ z-index: 1000;\ opacity: 1;\ text-indent: 0;\ }\ .ace_layer {\ z-index: 1;\ position: absolute;\ overflow: hidden;\ white-space: pre;\ height: 100%;\ width: 100%;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ /* setting pointer-events: auto; on node under the mouse, which changes\ during scroll, will break mouse wheel scrolling in Safari */\ pointer-events: none;\ }\ .ace_gutter-layer {\ position: relative;\ width: auto;\ text-align: right;\ pointer-events: auto;\ }\ .ace_text-layer {\ font: inherit !important;\ }\ .ace_cjk {\ display: inline-block;\ text-align: center;\ }\ .ace_cursor-layer {\ z-index: 4;\ }\ .ace_cursor {\ z-index: 4;\ position: absolute;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ border-left: 2px solid\ }\ .ace_slim-cursors .ace_cursor {\ border-left-width: 1px;\ }\ .ace_overwrite-cursors .ace_cursor {\ border-left-width: 0px;\ border-bottom: 1px solid;\ }\ .ace_hidden-cursors .ace_cursor {\ opacity: 0.2;\ }\ .ace_smooth-blinking .ace_cursor {\ -moz-transition: opacity 0.18s;\ -webkit-transition: opacity 0.18s;\ -o-transition: opacity 0.18s;\ -ms-transition: opacity 0.18s;\ transition: opacity 0.18s;\ }\ .ace_cursor[style*=\"opacity: 0\"]{\ -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\ }\ .ace_editor.ace_multiselect .ace_cursor {\ border-left-width: 1px;\ }\ .ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\ position: absolute;\ z-index: 3;\ }\ .ace_marker-layer .ace_selection {\ position: absolute;\ z-index: 5;\ }\ .ace_marker-layer .ace_bracket {\ position: absolute;\ z-index: 6;\ }\ .ace_marker-layer .ace_active-line {\ position: absolute;\ z-index: 2;\ }\ .ace_marker-layer .ace_selected-word {\ position: absolute;\ z-index: 4;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ }\ .ace_line .ace_fold {\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ display: inline-block;\ height: 11px;\ margin-top: -2px;\ vertical-align: middle;\ background-image:\ url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),\ url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%3AIDAT8%11c%FC%FF%FF%7F%18%03%1A%60%01%F2%3F%A0%891%80%04%FF%11-%F8%17%9BJ%E2%05%B1ZD%81v%26t%E7%80%F8%A3%82h%A12%1A%20%A3%01%02%0F%01%BA%25%06%00%19%C0%0D%AEF%D5%3ES%00%00%00%00IEND%AEB%60%82\");\ background-repeat: no-repeat, repeat-x;\ background-position: center center, top left;\ color: transparent;\ border: 1px solid black;\ -moz-border-radius: 2px;\ -webkit-border-radius: 2px;\ border-radius: 2px;\ cursor: pointer;\ pointer-events: auto;\ }\ .ace_dark .ace_fold {\ }\ .ace_fold:hover{\ background-image:\ url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),\ url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%003IDAT8%11c%FC%FF%FF%7F%3E%03%1A%60%01%F2%3F%A3%891%80%04%FFQ%26%F8w%C0%B43%A1%DB%0C%E2%8F%0A%A2%85%CAh%80%8C%06%08%3C%04%E8%96%18%00%A3S%0D%CD%CF%D8%C1%9D%00%00%00%00IEND%AEB%60%82\");\ background-repeat: no-repeat, repeat-x;\ background-position: center center, top left;\ }\ .ace_gutter-tooltip {\ background-color: #FFF;\ background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\ background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\ border: 1px solid gray;\ border-radius: 1px;\ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\ color: black;\ display: inline-block;\ max-width: 500px;\ padding: 4px;\ position: fixed;\ z-index: 999999;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ cursor: default;\ white-space: pre-line;\ word-wrap: break-word;\ line-height: normal;\ font-style: normal;\ font-weight: normal;\ letter-spacing: normal;\ }\ .ace_folding-enabled > .ace_gutter-cell {\ padding-right: 13px;\ }\ .ace_fold-widget {\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ margin: 0 -12px 0 1px;\ display: none;\ width: 11px;\ vertical-align: top;\ background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAe%8A%B1%0D%000%0C%C2%F2%2CK%96%BC%D0%8F9%81%88H%E9%D0%0E%96%C0%10%92%3E%02%80%5E%82%E4%A9*-%EEsw%C8%CC%11%EE%96w%D8%DC%E9*Eh%0C%151(%00%00%00%00IEND%AEB%60%82\");\ background-repeat: no-repeat;\ background-position: center;\ border-radius: 3px;\ border: 1px solid transparent;\ cursor: pointer;\ }\ .ace_folding-enabled .ace_fold-widget {\ display: inline-block; \ }\ .ace_fold-widget.ace_end {\ background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAm%C7%C1%09%000%08C%D1%8C%ECE%C8E(%8E%EC%02)%1EZJ%F1%C1'%04%07I%E1%E5%EE%CAL%F5%A2%99%99%22%E2%D6%1FU%B5%FE0%D9x%A7%26Wz5%0E%D5%00%00%00%00IEND%AEB%60%82\");\ }\ .ace_fold-widget.ace_closed {\ background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%03%00%00%00%06%08%06%00%00%00%06%E5%24%0C%00%00%009IDATx%DA5%CA%C1%09%000%08%03%C0%AC*(%3E%04%C1%0D%BA%B1%23%A4Uh%E0%20%81%C0%CC%F8%82%81%AA%A2%AArGfr%88%08%11%11%1C%DD%7D%E0%EE%5B%F6%F6%CB%B8%05Q%2F%E9tai%D9%00%00%00%00IEND%AEB%60%82\");\ }\ .ace_fold-widget:hover {\ border: 1px solid rgba(0, 0, 0, 0.3);\ background-color: rgba(255, 255, 255, 0.2);\ -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\ -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\ }\ .ace_fold-widget:active {\ border: 1px solid rgba(0, 0, 0, 0.4);\ background-color: rgba(0, 0, 0, 0.05);\ -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\ -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\ }\ /**\ * Dark version for fold widgets\ */\ .ace_dark .ace_fold-widget {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\ }\ .ace_dark .ace_fold-widget.ace_end {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\ }\ .ace_dark .ace_fold-widget.ace_closed {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\ }\ .ace_dark .ace_fold-widget:hover {\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ background-color: rgba(255, 255, 255, 0.1);\ }\ .ace_dark .ace_fold-widget:active {\ -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ }\ .ace_fold-widget.ace_invalid {\ background-color: #FFB4B4;\ border-color: #DE5555;\ }\ .ace_fade-fold-widgets .ace_fold-widget {\ -moz-transition: opacity 0.4s ease 0.05s;\ -webkit-transition: opacity 0.4s ease 0.05s;\ -o-transition: opacity 0.4s ease 0.05s;\ -ms-transition: opacity 0.4s ease 0.05s;\ transition: opacity 0.4s ease 0.05s;\ opacity: 0;\ }\ .ace_fade-fold-widgets:hover .ace_fold-widget {\ -moz-transition: opacity 0.05s ease 0.05s;\ -webkit-transition: opacity 0.05s ease 0.05s;\ -o-transition: opacity 0.05s ease 0.05s;\ -ms-transition: opacity 0.05s ease 0.05s;\ transition: opacity 0.05s ease 0.05s;\ opacity:1;\ }\ .ace_underline {\ text-decoration: underline;\ }\ .ace_bold {\ font-weight: bold;\ }\ .ace_nobold .ace_bold {\ font-weight: normal;\ }\ .ace_italic {\ font-style: italic;\ }\ .ace_error-marker {\ background-color: rgba(255, 0, 0,0.2);\ position: absolute;\ z-index: 9;\ }\ .ace_highlight-marker {\ background-color: rgba(255, 255, 0,0.2);\ position: absolute;\ z-index: 8;\ }\ "; dom.importCssString(editorCss, "ace_editor"); var VirtualRenderer = function(container, theme) { var _self = this; this.container = container || dom.createElement("div"); this.$keepTextAreaAtCursor = true; dom.addCssClass(this.container, "ace_editor"); this.setTheme(theme); this.$gutter = dom.createElement("div"); this.$gutter.className = "ace_gutter"; this.container.appendChild(this.$gutter); this.scroller = dom.createElement("div"); this.scroller.className = "ace_scroller"; this.container.appendChild(this.scroller); this.content = dom.createElement("div"); this.content.className = "ace_content"; this.scroller.appendChild(this.content); this.$gutterLayer = new GutterLayer(this.$gutter); this.$gutterLayer.on("changeGutterWidth", this.onGutterResize.bind(this)); this.$markerBack = new MarkerLayer(this.content); var textLayer = this.$textLayer = new TextLayer(this.content); this.canvas = textLayer.element; this.$markerFront = new MarkerLayer(this.content); this.$cursorLayer = new CursorLayer(this.content); this.$horizScroll = false; this.$vScroll = false; this.scrollBar = this.scrollBarV = new ScrollBarV(this.container, this); this.scrollBarH = new ScrollBarH(this.container, this); this.scrollBarV.addEventListener("scroll", function(e) { if (!_self.$scrollAnimation) _self.session.setScrollTop(e.data - _self.scrollMargin.top); }); this.scrollBarH.addEventListener("scroll", function(e) { if (!_self.$scrollAnimation) _self.session.setScrollLeft(e.data - _self.scrollMargin.left); }); this.scrollTop = 0; this.scrollLeft = 0; this.cursorPos = { row : 0, column : 0 }; this.$textLayer.addEventListener("changeCharacterSize", function() { _self.updateCharacterSize(); _self.onResize(true); _self._signal("changeCharacterSize"); }); this.$size = { width: 0, height: 0, scrollerHeight: 0, scrollerWidth: 0, $dirty: true }; this.layerConfig = { width : 1, padding : 0, firstRow : 0, firstRowScreen: 0, lastRow : 0, lineHeight : 0, characterWidth : 0, minHeight : 1, maxHeight : 1, offset : 0, height : 1 }; this.scrollMargin = { left: 0, right: 0, top: 0, bottom: 0, v: 0, h: 0 }; this.$loop = new RenderLoop( this.$renderChanges.bind(this), this.container.ownerDocument.defaultView ); this.$loop.schedule(this.CHANGE_FULL); this.updateCharacterSize(); this.setPadding(4); config.resetOptions(this); config._emit("renderer", this); }; (function() { this.CHANGE_CURSOR = 1; this.CHANGE_MARKER = 2; this.CHANGE_GUTTER = 4; this.CHANGE_SCROLL = 8; this.CHANGE_LINES = 16; this.CHANGE_TEXT = 32; this.CHANGE_SIZE = 64; this.CHANGE_MARKER_BACK = 128; this.CHANGE_MARKER_FRONT = 256; this.CHANGE_FULL = 512; this.CHANGE_H_SCROLL = 1024; oop.implement(this, EventEmitter); this.updateCharacterSize = function() { if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) { this.$allowBoldFonts = this.$textLayer.allowBoldFonts; this.setStyle("ace_nobold", !this.$allowBoldFonts); } this.layerConfig.characterWidth = this.characterWidth = this.$textLayer.getCharacterWidth(); this.layerConfig.lineHeight = this.lineHeight = this.$textLayer.getLineHeight(); this.$updatePrintMargin(); }; this.setSession = function(session) { this.session = session; if (this.scrollMargin.top && session.getScrollTop() <= 0) session.setScrollTop(-this.scrollMargin.top); this.scroller.className = "ace_scroller"; this.$cursorLayer.setSession(session); this.$markerBack.setSession(session); this.$markerFront.setSession(session); this.$gutterLayer.setSession(session); this.$textLayer.setSession(session); this.$loop.schedule(this.CHANGE_FULL); }; this.updateLines = function(firstRow, lastRow) { if (lastRow === undefined) lastRow = Infinity; if (!this.$changedLines) { this.$changedLines = { firstRow: firstRow, lastRow: lastRow }; } else { if (this.$changedLines.firstRow > firstRow) this.$changedLines.firstRow = firstRow; if (this.$changedLines.lastRow < lastRow) this.$changedLines.lastRow = lastRow; } if (this.$changedLines.firstRow > this.layerConfig.lastRow || this.$changedLines.lastRow < this.layerConfig.firstRow) return; this.$loop.schedule(this.CHANGE_LINES); }; this.onChangeTabSize = function() { this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER); this.$textLayer.onChangeTabSize(); }; this.updateText = function() { this.$loop.schedule(this.CHANGE_TEXT); }; this.updateFull = function(force) { if (force) this.$renderChanges(this.CHANGE_FULL, true); else this.$loop.schedule(this.CHANGE_FULL); }; this.updateFontSize = function() { this.$textLayer.checkForSizeChanges(); }; this.$changes = 0; this.$updateSizeAsync = function() { if (this.$loop.pending) this.$size.$dirty = true; else this.onResize(); }; this.onResize = function(force, gutterWidth, width, height) { if (this.resizing > 2) return; else if (this.resizing > 0) this.resizing++; else this.resizing = force ? 1 : 0; var el = this.container; if (!height) height = el.clientHeight || el.scrollHeight; if (!width) width = el.clientWidth || el.scrollWidth; var changes = this.$updateCachedSize(force, gutterWidth, width, height); if (!this.$size.scrollerHeight || (!width && !height)) return this.resizing = 0; if (force) this.$gutterLayer.$padding = null; if (force) this.$renderChanges(changes | this.$changes, true); else this.$loop.schedule(changes | this.$changes); if (this.resizing) this.resizing = 0; }; this.$updateCachedSize = function(force, gutterWidth, width, height) { var changes = 0; var size = this.$size; var oldSize = { width: size.width, height: size.height, scrollerHeight: size.scrollerHeight, scrollerWidth: size.scrollerWidth }; if (height && (force || size.height != height)) { size.height = height; changes = this.CHANGE_SIZE; size.scrollerHeight = size.height; if (this.$horizScroll) size.scrollerHeight -= this.scrollBarH.getHeight(); this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + "px"; if (this.session) { changes = changes | this.CHANGE_SCROLL; } } if (width && (force || size.width != width)) { changes = this.CHANGE_SIZE; size.width = width; if (gutterWidth == null) gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; this.gutterWidth = gutterWidth; this.scrollBarH.element.style.left = this.scroller.style.left = gutterWidth + "px"; size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); this.scrollBarH.element.style.right = this.scroller.style.right = this.scrollBarV.getWidth() + "px"; this.scroller.style.bottom = this.scrollBarH.getHeight() + "px"; if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) changes = changes | this.CHANGE_FULL; } if (size.$dirty) size.$dirty = !width && !height; if (changes) this._signal("resize", oldSize); return changes; }; this.onGutterResize = function() { var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; if (gutterWidth != this.gutterWidth) this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height); if (this.session.getUseWrapMode() && this.adjustWrapLimit()) { this.$loop.schedule(this.CHANGE_FULL); } else if (this.$size.$dirty) { this.$loop.schedule(this.CHANGE_FULL); } else { this.$computeLayerConfig(); this.$loop.schedule(this.CHANGE_MARKER); } }; this.adjustWrapLimit = function() { var availableWidth = this.$size.scrollerWidth - this.$padding * 2; var limit = Math.floor(availableWidth / this.characterWidth); return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn); }; this.setAnimatedScroll = function(shouldAnimate){ this.setOption("animatedScroll", shouldAnimate); }; this.getAnimatedScroll = function() { return this.$animatedScroll; }; this.setShowInvisibles = function(showInvisibles) { this.setOption("showInvisibles", showInvisibles); }; this.getShowInvisibles = function() { return this.getOption("showInvisibles"); }; this.getDisplayIndentGuides = function() { return this.getOption("displayIndentGuides"); }; this.setDisplayIndentGuides = function(display) { this.setOption("displayIndentGuides", display); }; this.setShowPrintMargin = function(showPrintMargin) { this.setOption("showPrintMargin", showPrintMargin); }; this.getShowPrintMargin = function() { return this.getOption("showPrintMargin"); }; this.setPrintMarginColumn = function(showPrintMargin) { this.setOption("printMarginColumn", showPrintMargin); }; this.getPrintMarginColumn = function() { return this.getOption("printMarginColumn"); }; this.getShowGutter = function(){ return this.getOption("showGutter"); }; this.setShowGutter = function(show){ return this.setOption("showGutter", show); }; this.getFadeFoldWidgets = function(){ return this.getOption("fadeFoldWidgets") }; this.setFadeFoldWidgets = function(show) { this.setOption("fadeFoldWidgets", show); }; this.setHighlightGutterLine = function(shouldHighlight) { this.setOption("highlightGutterLine", shouldHighlight); }; this.getHighlightGutterLine = function() { return this.getOption("highlightGutterLine"); }; this.$updateGutterLineHighlight = function() { var pos = this.$cursorLayer.$pixelPos; var height = this.layerConfig.lineHeight; if (this.session.getUseWrapMode()) { var cursor = this.session.selection.getCursor(); cursor.column = 0; pos = this.$cursorLayer.getPixelPosition(cursor, true); height *= this.session.getRowLength(cursor.row); } this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + "px"; this.$gutterLineHighlight.style.height = height + "px"; }; this.$updatePrintMargin = function() { if (!this.$showPrintMargin && !this.$printMarginEl) return; if (!this.$printMarginEl) { var containerEl = dom.createElement("div"); containerEl.className = "ace_layer ace_print-margin-layer"; this.$printMarginEl = dom.createElement("div"); this.$printMarginEl.className = "ace_print-margin"; containerEl.appendChild(this.$printMarginEl); this.content.insertBefore(containerEl, this.content.firstChild); } var style = this.$printMarginEl.style; style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px"; style.visibility = this.$showPrintMargin ? "visible" : "hidden"; if (this.session && this.session.$wrap == -1) this.adjustWrapLimit(); }; this.getContainerElement = function() { return this.container; }; this.getMouseEventTarget = function() { return this.content; }; this.getTextAreaContainer = function() { return this.container; }; this.$moveTextAreaToCursor = function() { if (!this.$keepTextAreaAtCursor) return; var config = this.layerConfig; var posTop = this.$cursorLayer.$pixelPos.top; var posLeft = this.$cursorLayer.$pixelPos.left; posTop -= config.offset; var h = this.lineHeight; if (posTop < 0 || posTop > config.height - h) return; var w = this.characterWidth; if (this.$composition) { var val = this.textarea.value.replace(/^\x01+/, ""); w *= (this.session.$getStringScreenWidth(val)[0]+2); h += 2; posTop -= 1; } posLeft -= this.scrollLeft; if (posLeft > this.$size.scrollerWidth - w) posLeft = this.$size.scrollerWidth - w; posLeft -= this.scrollBar.width; this.textarea.style.height = h + "px"; this.textarea.style.width = w + "px"; this.textarea.style.right = Math.max(0, this.$size.scrollerWidth - posLeft - w) + "px"; this.textarea.style.bottom = Math.max(0, this.$size.height - posTop - h) + "px"; }; this.getFirstVisibleRow = function() { return this.layerConfig.firstRow; }; this.getFirstFullyVisibleRow = function() { return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); }; this.getLastFullyVisibleRow = function() { var flint = Math.floor((this.layerConfig.height + this.layerConfig.offset) / this.layerConfig.lineHeight); return this.layerConfig.firstRow - 1 + flint; }; this.getLastVisibleRow = function() { return this.layerConfig.lastRow; }; this.$padding = null; this.setPadding = function(padding) { this.$padding = padding; this.$textLayer.setPadding(padding); this.$cursorLayer.setPadding(padding); this.$markerFront.setPadding(padding); this.$markerBack.setPadding(padding); this.$loop.schedule(this.CHANGE_FULL); this.$updatePrintMargin(); }; this.setScrollMargin = function(top, bottom, left, right) { var sm = this.scrollMargin; sm.top = top|0; sm.bottom = bottom|0; sm.right = right|0; sm.left = left|0; sm.v = sm.top + sm.bottom; sm.h = sm.left + sm.right; if (sm.top && this.scrollTop <= 0 && this.session) this.session.setScrollTop(sm.top); this.updateFull(); }; this.getHScrollBarAlwaysVisible = function() { return this.$hScrollBarAlwaysVisible; }; this.setHScrollBarAlwaysVisible = function(alwaysVisible) { this.setOption("hScrollBarAlwaysVisible", alwaysVisible); }; this.getVScrollBarAlwaysVisible = function() { return this.$hScrollBarAlwaysVisible; }; this.setVScrollBarAlwaysVisible = function(alwaysVisible) { this.setOption("vScrollBarAlwaysVisible", alwaysVisible); }; this.$updateScrollBarV = function() { this.scrollBarV.setInnerHeight(this.layerConfig.maxHeight + this.scrollMargin.v); this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top); }; this.$updateScrollBarH = function() { this.scrollBarH.setInnerWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h); this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left); }; this.$renderChanges = function(changes, force) { if (this.$changes) { changes |= this.$changes; this.$changes = 0; } if ((!this.session || !this.container.offsetWidth) || (!changes && !force)) { this.$changes |= changes; return; } if (this.$size.$dirty) { this.$changes |= changes; return this.onResize(true); } if (!this.lineHeight) { this.$textLayer.checkForSizeChanges(); } this._signal("beforeRender"); if (changes & this.CHANGE_FULL || changes & this.CHANGE_SIZE || changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES || changes & this.CHANGE_SCROLL || changes & this.CHANGE_H_SCROLL ) changes |= this.$computeLayerConfig(); if (changes & this.CHANGE_H_SCROLL) { this.$updateScrollBarH(); this.content.style.marginLeft = -this.scrollLeft + "px"; this.scroller.className = this.scrollLeft <= 0 ? "ace_scroller" : "ace_scroller ace_scroll-left"; } if (changes & this.CHANGE_FULL) { this.$updateScrollBarV(); this.$updateScrollBarH(); this.$textLayer.update(this.layerConfig); if (this.$showGutter) this.$gutterLayer.update(this.layerConfig); this.$markerBack.update(this.layerConfig); this.$markerFront.update(this.layerConfig); this.$cursorLayer.update(this.layerConfig); this.$moveTextAreaToCursor(); this.$highlightGutterLine && this.$updateGutterLineHighlight(); this._signal("afterRender"); return; } if (changes & this.CHANGE_SCROLL) { this.$updateScrollBarV(); if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) this.$textLayer.update(this.layerConfig); else this.$textLayer.scrollLines(this.layerConfig); if (this.$showGutter) this.$gutterLayer.update(this.layerConfig); this.$markerBack.update(this.layerConfig); this.$markerFront.update(this.layerConfig); this.$cursorLayer.update(this.layerConfig); this.$highlightGutterLine && this.$updateGutterLineHighlight(); this.$moveTextAreaToCursor(); this._signal("afterRender"); return; } if (changes & this.CHANGE_TEXT) { this.$textLayer.update(this.layerConfig); if (this.$showGutter) this.$gutterLayer.update(this.layerConfig); } else if (changes & this.CHANGE_LINES) { if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter) this.$gutterLayer.update(this.layerConfig); } else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) { if (this.$showGutter) this.$gutterLayer.update(this.layerConfig); } if (changes & this.CHANGE_CURSOR) { this.$cursorLayer.update(this.layerConfig); this.$moveTextAreaToCursor(); this.$highlightGutterLine && this.$updateGutterLineHighlight(); } if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) { this.$markerFront.update(this.layerConfig); } if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) { this.$markerBack.update(this.layerConfig); } if (changes & this.CHANGE_SIZE || changes & this.CHANGE_LINES) { this.$updateScrollBarV(); this.$updateScrollBarH(); } this._signal("afterRender"); }; this.$autosize = function(height, width) { var height = this.session.getScreenLength() * this.lineHeight; var maxHeight = this.$maxLines * this.lineHeight; var desiredHeight = Math.max( (this.$minLines||1) * this.lineHeight, Math.min(maxHeight, height) ); var vScroll = height > maxHeight; if (desiredHeight != this.desiredHeight || this.$size.height != this.desiredHeight || vScroll != this.$vScroll) { if (vScroll != this.$vScroll) { this.$vScroll = vScroll; this.scrollBarV.setVisible(vScroll); } var w = this.container.clientWidth; this.container.style.height = desiredHeight + "px"; this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight); this.desiredHeight = desiredHeight; } }; this.$computeLayerConfig = function() { if (this.$maxLines && this.lineHeight > 1) this.$autosize(); var session = this.session; var hideScrollbars = this.$size.height <= 2 * this.lineHeight; var screenLines = this.session.getScreenLength() var maxHeight = screenLines * this.lineHeight; var offset = this.scrollTop % this.lineHeight; var minHeight = this.$size.scrollerHeight + this.lineHeight; var longestLine = this.$getLongestLine(); var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || this.$size.scrollerWidth - longestLine - 2 * this.$padding < 0); var hScrollChanged = this.$horizScroll !== horizScroll; if (hScrollChanged) { this.$horizScroll = horizScroll; this.scrollBarH.setVisible(horizScroll); } if (!this.$maxLines && this.$scrollPastEnd) { if (this.scrollTop > maxHeight - this.$size.scrollerHeight) maxHeight += Math.min( (this.$size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd, this.scrollTop - maxHeight + this.$size.scrollerHeight ); } var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || this.$size.scrollerHeight - maxHeight < 0); var vScrollChanged = this.$vScroll !== vScroll; if (vScrollChanged) { this.$vScroll = vScroll; this.scrollBarV.setVisible(vScroll); } this.session.setScrollTop(Math.max(-this.scrollMargin.top, Math.min(this.scrollTop, maxHeight - this.$size.scrollerHeight + this.scrollMargin.v))); this.session.setScrollLeft(Math.max(-this.scrollMargin.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - this.$size.scrollerWidth + this.scrollMargin.h))); var lineCount = Math.ceil(minHeight / this.lineHeight) - 1; var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight)); var lastRow = firstRow + lineCount; var firstRowScreen, firstRowHeight; var lineHeight = this.lineHeight; firstRow = session.screenToDocumentRow(firstRow, 0); var foldLine = session.getFoldLine(firstRow); if (foldLine) { firstRow = foldLine.start.row; } firstRowScreen = session.documentToScreenRow(firstRow, 0); firstRowHeight = session.getRowLength(firstRow) * lineHeight; lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1); minHeight = this.$size.scrollerHeight + session.getRowLength(lastRow) * lineHeight + firstRowHeight; offset = this.scrollTop - firstRowScreen * lineHeight; var changes = 0; if (hScrollChanged || vScrollChanged) { changes = this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height); this._signal("scrollbarVisibilityChanged"); if (vScrollChanged) longestLine = this.$getLongestLine(); } this.layerConfig = { width : longestLine, padding : this.$padding, firstRow : firstRow, firstRowScreen: firstRowScreen, lastRow : lastRow, lineHeight : lineHeight, characterWidth : this.characterWidth, minHeight : minHeight, maxHeight : maxHeight, offset : offset, height : this.$size.scrollerHeight }; this.$gutterLayer.element.style.marginTop = (-offset) + "px"; this.content.style.marginTop = (-offset) + "px"; this.content.style.width = longestLine + 2 * this.$padding + "px"; this.content.style.height = minHeight + "px"; return changes; return changes; }; this.$updateLines = function() { var firstRow = this.$changedLines.firstRow; var lastRow = this.$changedLines.lastRow; this.$changedLines = null; var layerConfig = this.layerConfig; if (firstRow > layerConfig.lastRow + 1) { return; } if (lastRow < layerConfig.firstRow) { return; } if (lastRow === Infinity) { if (this.$showGutter) this.$gutterLayer.update(layerConfig); this.$textLayer.update(layerConfig); return; } this.$textLayer.updateLines(layerConfig, firstRow, lastRow); return true; }; this.$getLongestLine = function() { var charCount = this.session.getScreenWidth(); if (this.showInvisibles && !this.session.$useWrapMode) charCount += 1; return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth)); }; this.updateFrontMarkers = function() { this.$markerFront.setMarkers(this.session.getMarkers(true)); this.$loop.schedule(this.CHANGE_MARKER_FRONT); }; this.updateBackMarkers = function() { this.$markerBack.setMarkers(this.session.getMarkers()); this.$loop.schedule(this.CHANGE_MARKER_BACK); }; this.addGutterDecoration = function(row, className){ this.$gutterLayer.addGutterDecoration(row, className); }; this.removeGutterDecoration = function(row, className){ this.$gutterLayer.removeGutterDecoration(row, className); }; this.updateBreakpoints = function(rows) { this.$loop.schedule(this.CHANGE_GUTTER); }; this.setAnnotations = function(annotations) { this.$gutterLayer.setAnnotations(annotations); this.$loop.schedule(this.CHANGE_GUTTER); }; this.updateCursor = function() { this.$loop.schedule(this.CHANGE_CURSOR); }; this.hideCursor = function() { this.$cursorLayer.hideCursor(); }; this.showCursor = function() { this.$cursorLayer.showCursor(); }; this.scrollSelectionIntoView = function(anchor, lead, offset) { this.scrollCursorIntoView(anchor, offset); this.scrollCursorIntoView(lead, offset); }; this.scrollCursorIntoView = function(cursor, offset) { if (this.$size.scrollerHeight === 0) return; var pos = this.$cursorLayer.getPixelPosition(cursor); var left = pos.left; var top = pos.top; var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop; if (scrollTop > top) { if (offset) top -= offset * this.$size.scrollerHeight; if (top == 0) top = - this.scrollMargin.top; else if (top == 0) top = + this.scrollMargin.bottom; this.session.setScrollTop(top); } else if (scrollTop + this.$size.scrollerHeight < top + this.lineHeight) { if (offset) top += offset * this.$size.scrollerHeight; this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight); } var scrollLeft = this.scrollLeft; if (scrollLeft > left) { if (left < this.$padding + 2 * this.layerConfig.characterWidth) left = -this.scrollMargin.left; this.session.setScrollLeft(left); } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) { this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth)); } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) { this.session.setScrollLeft(0); } }; this.getScrollTop = function() { return this.session.getScrollTop(); }; this.getScrollLeft = function() { return this.session.getScrollLeft(); }; this.getScrollTopRow = function() { return this.scrollTop / this.lineHeight; }; this.getScrollBottomRow = function() { return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1); }; this.scrollToRow = function(row) { this.session.setScrollTop(row * this.lineHeight); }; this.alignCursor = function(cursor, alignment) { if (typeof cursor == "number") cursor = {row: cursor, column: 0}; var pos = this.$cursorLayer.getPixelPosition(cursor); var h = this.$size.scrollerHeight - this.lineHeight; var offset = pos.top - h * (alignment || 0); this.session.setScrollTop(offset); return offset; }; this.STEPS = 8; this.$calcSteps = function(fromValue, toValue){ var i = 0; var l = this.STEPS; var steps = []; var func = function(t, x_min, dx) { return dx * (Math.pow(t - 1, 3) + 1) + x_min; }; for (i = 0; i < l; ++i) steps.push(func(i / this.STEPS, fromValue, toValue - fromValue)); return steps; }; this.scrollToLine = function(line, center, animate, callback) { var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0}); var offset = pos.top; if (center) offset -= this.$size.scrollerHeight / 2; var initialScroll = this.scrollTop; this.session.setScrollTop(offset); if (animate !== false) this.animateScrolling(initialScroll, callback); }; this.animateScrolling = function(fromValue, callback) { var toValue = this.scrollTop; if (!this.$animatedScroll) return; var _self = this; if (fromValue == toValue) return; if (this.$scrollAnimation) { var oldSteps = this.$scrollAnimation.steps; if (oldSteps.length) { fromValue = oldSteps[0]; if (fromValue == toValue) return; } } var steps = _self.$calcSteps(fromValue, toValue); this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps}; clearInterval(this.$timer); _self.session.setScrollTop(steps.shift()); this.$timer = setInterval(function() { if (steps.length) { _self.session.setScrollTop(steps.shift()); _self.session.$scrollTop = toValue; } else if (toValue != null) { _self.session.$scrollTop = -1; _self.session.setScrollTop(toValue); toValue = null; } else { _self.$timer = clearInterval(_self.$timer); _self.$scrollAnimation = null; callback && callback(); } }, 10); }; this.scrollToY = function(scrollTop) { if (this.scrollTop !== scrollTop) { this.$loop.schedule(this.CHANGE_SCROLL); this.scrollTop = scrollTop; } }; this.scrollToX = function(scrollLeft) { if (this.scrollLeft !== scrollLeft) this.scrollLeft = scrollLeft; this.$loop.schedule(this.CHANGE_H_SCROLL); }; this.scrollTo = function(x, y) { this.session.setScrollTop(y); this.session.setScrollLeft(y); }; this.scrollBy = function(deltaX, deltaY) { deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY); deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX); }; this.isScrollableBy = function(deltaX, deltaY) { if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top) return true; if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - this.layerConfig.maxHeight - (this.$size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd < -1 + this.scrollMargin.bottom) return true; if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left) return true; if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth - this.layerConfig.width < -1 + this.scrollMargin.right) return true; }; this.pixelToScreenCoordinates = function(x, y) { var canvasPos = this.scroller.getBoundingClientRect(); var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth; var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); var col = Math.round(offset); return {row: row, column: col, side: offset - col > 0 ? 1 : -1}; }; this.screenToTextCoordinates = function(x, y) { var canvasPos = this.scroller.getBoundingClientRect(); var col = Math.round( (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth ); var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight; return this.session.screenToDocumentPosition(row, Math.max(col, 0)); }; this.textToScreenCoordinates = function(row, column) { var canvasPos = this.scroller.getBoundingClientRect(); var pos = this.session.documentToScreenPosition(row, column); var x = this.$padding + Math.round(pos.column * this.characterWidth); var y = pos.row * this.lineHeight; return { pageX: canvasPos.left + x - this.scrollLeft, pageY: canvasPos.top + y - this.scrollTop }; }; this.visualizeFocus = function() { dom.addCssClass(this.container, "ace_focus"); }; this.visualizeBlur = function() { dom.removeCssClass(this.container, "ace_focus"); }; this.showComposition = function(position) { if (!this.$composition) this.$composition = { keepTextAreaAtCursor: this.$keepTextAreaAtCursor, cssText: this.textarea.style.cssText }; this.$keepTextAreaAtCursor = true; dom.addCssClass(this.textarea, "ace_composition"); this.textarea.style.cssText = ""; this.$moveTextAreaToCursor(); }; this.setCompositionText = function(text) { this.$moveTextAreaToCursor(); }; this.hideComposition = function() { if (!this.$composition) return; dom.removeCssClass(this.textarea, "ace_composition"); this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor; this.textarea.style.cssText = this.$composition.cssText; this.$composition = null; }; this.setTheme = function(theme, cb) { var _self = this; this.$themeValue = theme; _self._dispatchEvent('themeChange',{theme:theme}); if (!theme || typeof theme == "string") { var moduleName = theme || "ace/theme/textmate"; config.loadModule(["theme", moduleName], afterLoad); } else { afterLoad(theme); } function afterLoad(module) { if (_self.$themeValue != theme) return cb && cb(); if (!module.cssClass) return; dom.importCssString( module.cssText, module.cssClass, _self.container.ownerDocument ); if (_self.theme) dom.removeCssClass(_self.container, _self.theme.cssClass); _self.$theme = module.cssClass; _self.theme = module; dom.addCssClass(_self.container, module.cssClass); dom.setCssClass(_self.container, "ace_dark", module.isDark); var padding = "padding" in module ? module.padding : 4; if (_self.$padding && padding != _self.$padding) _self.setPadding(padding); if (_self.$size) { _self.$size.width = 0; _self.onResize(); } _self._dispatchEvent('themeLoaded', {theme:module}); cb && cb(); } }; this.getTheme = function() { return this.$themeValue; }; this.setStyle = function(style, include) { dom.setCssClass(this.container, style, include !== false); }; this.unsetStyle = function(style) { dom.removeCssClass(this.container, style); }; this.setMouseCursor = function(cursorStyle) { this.content.style.cursor = cursorStyle; }; this.destroy = function() { this.$textLayer.destroy(); this.$cursorLayer.destroy(); }; }).call(VirtualRenderer.prototype); config.defineOptions(VirtualRenderer.prototype, "renderer", { animatedScroll: {initialValue: false}, showInvisibles: { set: function(value) { if (this.$textLayer.setShowInvisibles(value)) this.$loop.schedule(this.CHANGE_TEXT); }, initialValue: false }, showPrintMargin: { set: function() { this.$updatePrintMargin(); }, initialValue: true }, printMarginColumn: { set: function() { this.$updatePrintMargin(); }, initialValue: 80 }, printMargin: { set: function(val) { if (typeof val == "number") this.$printMarginColumn = val; this.$showPrintMargin = !!val; this.$updatePrintMargin(); }, get: function() { return this.$showPrintMargin && this.$printMarginColumn; } }, showGutter: { set: function(show){ this.$gutter.style.display = show ? "block" : "none"; this.onGutterResize(); }, initialValue: true }, fadeFoldWidgets: { set: function(show) { dom.setCssClass(this.$gutter, "ace_fade-fold-widgets", show); }, initialValue: false }, showFoldWidgets: { set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)}, initialValue: true }, displayIndentGuides: { set: function(show) { if (this.$textLayer.setDisplayIndentGuides(show)) this.$loop.schedule(this.CHANGE_TEXT); }, initialValue: true }, highlightGutterLine: { set: function(shouldHighlight) { if (!this.$gutterLineHighlight) { this.$gutterLineHighlight = dom.createElement("div"); this.$gutterLineHighlight.className = "ace_gutter-active-line"; this.$gutter.appendChild(this.$gutterLineHighlight); return; } this.$gutterLineHighlight.style.display = shouldHighlight ? "" : "none"; if (this.$cursorLayer.$pixelPos) this.$updateGutterLineHighlight(); }, initialValue: false, value: true }, hScrollBarAlwaysVisible: { set: function(val) { if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) this.$loop.schedule(this.CHANGE_SCROLL); }, initialValue: false }, vScrollBarAlwaysVisible: { set: function(val) { if (!this.$vScrollBarAlwaysVisible || !this.$vScroll) this.$loop.schedule(this.CHANGE_SCROLL); }, initialValue: false }, fontSize: { set: function(size) { if (typeof size == "number") size = size + "px"; this.container.style.fontSize = size; this.updateFontSize(); }, initialValue: 12 }, fontFamily: { set: function(name) { this.container.style.fontFamily = name; this.updateFontSize(); } }, maxLines: { set: function(val) { this.updateFull(); } }, minLines: { set: function(val) { this.updateFull(); } }, scrollPastEnd: { set: function(val) { val = +val || 0; if (this.$scrollPastEnd == val) return; this.$scrollPastEnd = val; this.$loop.schedule(this.CHANGE_SCROLL); }, initialValue: 0, handlesSet: true }, fixedWidthGutter: { set: function(val) { this.$gutterLayer.$fixedWidth = !!val; this.$loop.schedule(this.CHANGE_GUTTER); } } }); exports.VirtualRenderer = VirtualRenderer; }); define('ace/layer/gutter', ['require', 'exports', 'module' , 'ace/lib/dom', 'ace/lib/oop', 'ace/lib/lang', 'ace/lib/event_emitter'], function(require, exports, module) { var dom = require("../lib/dom"); var oop = require("../lib/oop"); var lang = require("../lib/lang"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var Gutter = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_gutter-layer"; parentEl.appendChild(this.element); this.setShowFoldWidgets(this.$showFoldWidgets); this.gutterWidth = 0; this.$annotations = []; this.$updateAnnotations = this.$updateAnnotations.bind(this); this.$cells = []; }; (function() { oop.implement(this, EventEmitter); this.setSession = function(session) { if (this.session) this.session.removeEventListener("change", this.$updateAnnotations); this.session = session; session.on("change", this.$updateAnnotations); }; this.addGutterDecoration = function(row, className){ if (window.console) console.warn && console.warn("deprecated use session.addGutterDecoration"); this.session.addGutterDecoration(row, className); }; this.removeGutterDecoration = function(row, className){ if (window.console) console.warn && console.warn("deprecated use session.removeGutterDecoration"); this.session.removeGutterDecoration(row, className); }; this.setAnnotations = function(annotations) { this.$annotations = []; for (var i = 0; i < annotations.length; i++) { var annotation = annotations[i]; var row = annotation.row; var rowInfo = this.$annotations[row]; if (!rowInfo) rowInfo = this.$annotations[row] = {text: []}; var annoText = annotation.text; annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || ""; if (rowInfo.text.indexOf(annoText) === -1) rowInfo.text.push(annoText); var type = annotation.type; if (type == "error") rowInfo.className = " ace_error"; else if (type == "warning" && rowInfo.className != " ace_error") rowInfo.className = " ace_warning"; else if (type == "info" && (!rowInfo.className)) rowInfo.className = " ace_info"; } }; this.$updateAnnotations = function (e) { if (!this.$annotations.length) return; var delta = e.data; var range = delta.range; var firstRow = range.start.row; var len = range.end.row - firstRow; if (len === 0) { } else if (delta.action == "removeText" || delta.action == "removeLines") { this.$annotations.splice(firstRow, len + 1, null); } else { var args = new Array(len + 1); args.unshift(firstRow, 1); this.$annotations.splice.apply(this.$annotations, args); } }; this.update = function(config) { var firstRow = config.firstRow; var lastRow = config.lastRow; var session = this.session; var fold = session.getNextFoldLine(firstRow); var foldStart = fold ? fold.start.row : Infinity; var foldWidgets = this.$showFoldWidgets && session.foldWidgets; var breakpoints = session.$breakpoints; var decorations = session.$decorations; var firstLineNumber = session.$firstLineNumber; var lastLineNumber = 0; var gutterRenderer = session.gutterRenderer; var cell = null; var index = -1; var row = firstRow; while (true) { if (row > foldStart) { row = fold.end.row + 1; fold = session.getNextFoldLine(row, fold); foldStart = fold ? fold.start.row : Infinity; } if (row > lastRow) { while (this.$cells.length > index + 1) { cell = this.$cells.pop(); this.element.removeChild(cell.element); } break; } cell = this.$cells[++index]; if (!cell) { cell = {element: null, textNode: null, foldWidget: null}; cell.element = dom.createElement("div"); cell.textNode = document.createTextNode(''); cell.element.appendChild(cell.textNode); this.element.appendChild(cell.element); this.$cells[index] = cell; } var className = "ace_gutter-cell "; if (breakpoints[row]) className += breakpoints[row]; if (decorations[row]) className += decorations[row]; if (this.$annotations[row]) className += this.$annotations[row].className; if (cell.element.className != className) cell.element.className = className; var height = session.getRowLength(row) * config.lineHeight + "px"; if (height != cell.element.style.height) cell.element.style.height = height; if (foldWidgets) { var c = foldWidgets[row]; if (c == null) c = foldWidgets[row] = session.getFoldWidget(row); } if (c) { if (!cell.foldWidget) { cell.foldWidget = dom.createElement("span"); cell.element.appendChild(cell.foldWidget); } var className = "ace_fold-widget ace_" + c; if (c == "start" && row == foldStart && row < fold.end.row) className += " ace_closed"; else className += " ace_open"; if (cell.foldWidget.className != className) cell.foldWidget.className = className; var height = config.lineHeight + "px"; if (cell.foldWidget.style.height != height) cell.foldWidget.style.height = height; } else { if (cell.foldWidget) { cell.element.removeChild(cell.foldWidget); cell.foldWidget = null; } } var text = lastLineNumber = gutterRenderer ? gutterRenderer.getText(session, row) : row + firstLineNumber; if (text != cell.textNode.data) cell.textNode.data = text; row++; } this.element.style.height = config.minHeight + "px"; if (this.$fixedWidth || session.$useWrapMode) lastLineNumber = session.getLength(); var gutterWidth = gutterRenderer ? gutterRenderer.getWidth(session, lastLineNumber, config) : lastLineNumber.toString().length * config.characterWidth; var padding = this.$padding || this.$computePadding(); gutterWidth += padding.left + padding.right; if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) { this.gutterWidth = gutterWidth; this.element.style.width = Math.ceil(this.gutterWidth) + "px"; this._emit("changeGutterWidth", gutterWidth); } }; this.$fixedWidth = false; this.$showFoldWidgets = true; this.setShowFoldWidgets = function(show) { if (show) dom.addCssClass(this.element, "ace_folding-enabled"); else dom.removeCssClass(this.element, "ace_folding-enabled"); this.$showFoldWidgets = show; this.$padding = null; }; this.getShowFoldWidgets = function() { return this.$showFoldWidgets; }; this.$computePadding = function() { if (!this.element.firstChild) return {left: 0, right: 0}; var style = dom.computedStyle(this.element.firstChild); this.$padding = {}; this.$padding.left = parseInt(style.paddingLeft) + 1 || 0; this.$padding.right = parseInt(style.paddingRight) || 0; return this.$padding; }; this.getRegion = function(point) { var padding = this.$padding || this.$computePadding(); var rect = this.element.getBoundingClientRect(); if (point.x < padding.left + rect.left) return "markers"; if (this.$showFoldWidgets && point.x > rect.right - padding.right) return "foldWidgets"; }; }).call(Gutter.prototype); exports.Gutter = Gutter; }); define('ace/layer/marker', ['require', 'exports', 'module' , 'ace/range', 'ace/lib/dom'], function(require, exports, module) { var Range = require("../range").Range; var dom = require("../lib/dom"); var Marker = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_marker-layer"; parentEl.appendChild(this.element); }; (function() { this.$padding = 0; this.setPadding = function(padding) { this.$padding = padding; }; this.setSession = function(session) { this.session = session; }; this.setMarkers = function(markers) { this.markers = markers; }; this.update = function(config) { var config = config || this.config; if (!config) return; this.config = config; var html = []; for (var key in this.markers) { var marker = this.markers[key]; if (!marker.range) { marker.update(html, this, this.session, config); continue; } var range = marker.range.clipRows(config.firstRow, config.lastRow); if (range.isEmpty()) continue; range = range.toScreenRange(this.session); if (marker.renderer) { var top = this.$getTop(range.start.row, config); var left = this.$padding + range.start.column * config.characterWidth; marker.renderer(html, range, left, top, config); } else if (marker.type == "fullLine") { this.drawFullLineMarker(html, range, marker.clazz, config); } else if (marker.type == "screenLine") { this.drawScreenLineMarker(html, range, marker.clazz, config); } else if (range.isMultiLine()) { if (marker.type == "text") this.drawTextMarker(html, range, marker.clazz, config); else this.drawMultiLineMarker(html, range, marker.clazz, config); } else { this.drawSingleLineMarker(html, range, marker.clazz + " ace_start", config); } } this.element = dom.setInnerHtml(this.element, html.join("")); }; this.$getTop = function(row, layerConfig) { return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight; }; this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) { var row = range.start.row; var lineRange = new Range( row, range.start.column, row, this.session.getScreenLastRowColumn(row) ); this.drawSingleLineMarker(stringBuilder, lineRange, clazz + " ace_start", layerConfig, 1, extraStyle); row = range.end.row; lineRange = new Range(row, 0, row, range.end.column); this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 0, extraStyle); for (row = range.start.row + 1; row < range.end.row; row++) { lineRange.start.row = row; lineRange.end.row = row; lineRange.end.column = this.session.getScreenLastRowColumn(row); this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1, extraStyle); } }; this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { var padding = this.$padding; var height = config.lineHeight; var top = this.$getTop(range.start.row, config); var left = padding + range.start.column * config.characterWidth; extraStyle = extraStyle || ""; stringBuilder.push( "
" ); top = this.$getTop(range.end.row, config); var width = range.end.column * config.characterWidth; stringBuilder.push( "
" ); height = (range.end.row - range.start.row - 1) * config.lineHeight; if (height < 0) return; top = this.$getTop(range.start.row + 1, config); stringBuilder.push( "
" ); }; this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) { var height = config.lineHeight; var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth; var top = this.$getTop(range.start.row, config); var left = this.$padding + range.start.column * config.characterWidth; stringBuilder.push( "
" ); }; this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { var top = this.$getTop(range.start.row, config); var height = config.lineHeight; if (range.start.row != range.end.row) height += this.$getTop(range.end.row, config) - top; stringBuilder.push( "
" ); }; this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { var top = this.$getTop(range.start.row, config); var height = config.lineHeight; stringBuilder.push( "
" ); }; }).call(Marker.prototype); exports.Marker = Marker; }); define('ace/layer/text', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/dom', 'ace/lib/lang', 'ace/lib/useragent', 'ace/lib/event_emitter'], function(require, exports, module) { var oop = require("../lib/oop"); var dom = require("../lib/dom"); var lang = require("../lib/lang"); var useragent = require("../lib/useragent"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var Text = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_text-layer"; parentEl.appendChild(this.element); this.$characterSize = {width: 0, height: 0}; this.checkForSizeChanges(); this.$pollSizeChanges(); }; (function() { oop.implement(this, EventEmitter); this.EOF_CHAR = "\xB6"; //"¶"; this.EOL_CHAR = "\xAC"; //"¬"; this.TAB_CHAR = "\u2192"; //"→" "\u21E5"; this.SPACE_CHAR = "\xB7"; //"·"; this.$padding = 0; this.setPadding = function(padding) { this.$padding = padding; this.element.style.padding = "0 " + padding + "px"; }; this.getLineHeight = function() { return this.$characterSize.height || 0; }; this.getCharacterWidth = function() { return this.$characterSize.width || 0; }; this.checkForSizeChanges = function() { var size = this.$measureSizes(); if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) { this.$measureNode.style.fontWeight = "bold"; var boldSize = this.$measureSizes(); this.$measureNode.style.fontWeight = ""; this.$characterSize = size; this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height; this._emit("changeCharacterSize", {data: size}); } }; this.$pollSizeChanges = function() { var self = this; this.$pollSizeChangesTimer = setInterval(function() { self.checkForSizeChanges(); }, 500); }; this.$fontStyles = { fontFamily : 1, fontSize : 1, fontWeight : 1, fontStyle : 1, lineHeight : 1 }; this.$measureSizes = useragent.isIE || useragent.isOldGecko ? function() { var n = 1000; if (!this.$measureNode) { var measureNode = this.$measureNode = dom.createElement("div"); var style = measureNode.style; style.width = style.height = "auto"; style.left = style.top = (-n * 40) + "px"; style.visibility = "hidden"; style.position = "fixed"; style.overflow = "visible"; style.whiteSpace = "nowrap"; measureNode.innerHTML = lang.stringRepeat("Xy", n); if (this.element.ownerDocument.body) { this.element.ownerDocument.body.appendChild(measureNode); } else { var container = this.element.parentNode; while (!dom.hasCssClass(container, "ace_editor")) container = container.parentNode; container.appendChild(measureNode); } } if (!this.element.offsetWidth) return null; var style = this.$measureNode.style; var computedStyle = dom.computedStyle(this.element); for (var prop in this.$fontStyles) style[prop] = computedStyle[prop]; var size = { height: this.$measureNode.offsetHeight, width: this.$measureNode.offsetWidth / (n * 2) }; if (size.width == 0 || size.height == 0) return null; return size; } : function() { if (!this.$measureNode) { var measureNode = this.$measureNode = dom.createElement("div"); var style = measureNode.style; style.width = style.height = "auto"; style.left = style.top = -100 + "px"; style.visibility = "hidden"; style.position = "fixed"; style.overflow = "visible"; style.whiteSpace = "nowrap"; measureNode.innerHTML = lang.stringRepeat("X", 100); var container = this.element.parentNode; while (container && !dom.hasCssClass(container, "ace_editor")) container = container.parentNode; if (!container) return this.$measureNode = null; container.appendChild(measureNode); } var rect = this.$measureNode.getBoundingClientRect(); var size = { height: rect.height, width: rect.width / 100 }; if (size.width == 0 || size.height == 0) return null; return size; }; this.setSession = function(session) { this.session = session; this.$computeTabString(); }; this.showInvisibles = false; this.setShowInvisibles = function(showInvisibles) { if (this.showInvisibles == showInvisibles) return false; this.showInvisibles = showInvisibles; this.$computeTabString(); return true; }; this.displayIndentGuides = true; this.setDisplayIndentGuides = function(display) { if (this.displayIndentGuides == display) return false; this.displayIndentGuides = display; this.$computeTabString(); return true; }; this.$tabStrings = []; this.onChangeTabSize = this.$computeTabString = function() { var tabSize = this.session.getTabSize(); this.tabSize = tabSize; var tabStr = this.$tabStrings = [0]; for (var i = 1; i < tabSize + 1; i++) { if (this.showInvisibles) { tabStr.push("" + this.TAB_CHAR + lang.stringRepeat("\xa0", i - 1) + ""); } else { tabStr.push(lang.stringRepeat("\xa0", i)); } } if (this.displayIndentGuides) { this.$indentGuideRe = /\s\S| \t|\t |\s$/; var className = "ace_indent-guide"; if (this.showInvisibles) { className += " ace_invisible"; var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize); var tabContent = this.TAB_CHAR + lang.stringRepeat("\xa0", this.tabSize - 1); } else{ var spaceContent = lang.stringRepeat("\xa0", this.tabSize); var tabContent = spaceContent; } this.$tabStrings[" "] = "" + spaceContent + ""; this.$tabStrings["\t"] = "" + tabContent + ""; } }; this.updateLines = function(config, firstRow, lastRow) { if (this.config.lastRow != config.lastRow || this.config.firstRow != config.firstRow) { this.scrollLines(config); } this.config = config; var first = Math.max(firstRow, config.firstRow); var last = Math.min(lastRow, config.lastRow); var lineElements = this.element.childNodes; var lineElementsIdx = 0; for (var row = config.firstRow; row < first; row++) { var foldLine = this.session.getFoldLine(row); if (foldLine) { if (foldLine.containsRow(first)) { first = foldLine.start.row; break; } else { row = foldLine.end.row; } } lineElementsIdx ++; } var row = first; var foldLine = this.session.getNextFoldLine(row); var foldStart = foldLine ? foldLine.start.row : Infinity; while (true) { if (row > foldStart) { row = foldLine.end.row+1; foldLine = this.session.getNextFoldLine(row, foldLine); foldStart = foldLine ? foldLine.start.row :Infinity; } if (row > last) break; var lineElement = lineElements[lineElementsIdx++]; if (lineElement) { var html = []; this.$renderLine( html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false ); lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + "px"; dom.setInnerHtml(lineElement, html.join("")); } row++; } }; this.scrollLines = function(config) { var oldConfig = this.config; this.config = config; if (!oldConfig || oldConfig.lastRow < config.firstRow) return this.update(config); if (config.lastRow < oldConfig.firstRow) return this.update(config); var el = this.element; if (oldConfig.firstRow < config.firstRow) for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--) el.removeChild(el.firstChild); if (oldConfig.lastRow > config.lastRow) for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--) el.removeChild(el.lastChild); if (config.firstRow < oldConfig.firstRow) { var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1); if (el.firstChild) el.insertBefore(fragment, el.firstChild); else el.appendChild(fragment); } if (config.lastRow > oldConfig.lastRow) { var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow); el.appendChild(fragment); } }; this.$renderLinesFragment = function(config, firstRow, lastRow) { var fragment = this.element.ownerDocument.createDocumentFragment(); var row = firstRow; var foldLine = this.session.getNextFoldLine(row); var foldStart = foldLine ? foldLine.start.row : Infinity; while (true) { if (row > foldStart) { row = foldLine.end.row+1; foldLine = this.session.getNextFoldLine(row, foldLine); foldStart = foldLine ? foldLine.start.row : Infinity; } if (row > lastRow) break; var container = dom.createElement("div"); var html = []; this.$renderLine(html, row, false, row == foldStart ? foldLine : false); container.innerHTML = html.join(""); if (this.$useLineGroups()) { container.className = 'ace_line_group'; fragment.appendChild(container); container.style.height = config.lineHeight * this.session.getRowLength(row) + "px"; } else { var lines = container.childNodes while(lines.length) fragment.appendChild(lines[0]); } row++; } return fragment; }; this.update = function(config) { this.config = config; var html = []; var firstRow = config.firstRow, lastRow = config.lastRow; var row = firstRow; var foldLine = this.session.getNextFoldLine(row); var foldStart = foldLine ? foldLine.start.row : Infinity; while (true) { if (row > foldStart) { row = foldLine.end.row+1; foldLine = this.session.getNextFoldLine(row, foldLine); foldStart = foldLine ? foldLine.start.row :Infinity; } if (row > lastRow) break; if (this.$useLineGroups()) html.push("
") this.$renderLine(html, row, false, row == foldStart ? foldLine : false); if (this.$useLineGroups()) html.push("
"); // end the line group row++; } this.element = dom.setInnerHtml(this.element, html.join("")); }; this.$textToken = { "text": true, "rparen": true, "lparen": true }; this.$renderToken = function(stringBuilder, screenColumn, token, value) { var self = this; var replaceReg = /\t|&|<|( +)|([\x00-\x1f\x80-\xa0\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g; var replaceFunc = function(c, a, b, tabIdx, idx4) { if (a) { return self.showInvisibles ? "" + lang.stringRepeat(self.SPACE_CHAR, c.length) + "" : lang.stringRepeat("\xa0", c.length); } else if (c == "&") { return "&"; } else if (c == "<") { return "<"; } else if (c == "\t") { var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx); screenColumn += tabSize - 1; return self.$tabStrings[tabSize]; } else if (c == "\u3000") { var classToUse = self.showInvisibles ? "ace_cjk ace_invisible" : "ace_cjk"; var space = self.showInvisibles ? self.SPACE_CHAR : ""; screenColumn += 1; return "" + space + ""; } else if (b) { return "" + self.SPACE_CHAR + ""; } else { screenColumn += 1; return "" + c + ""; } }; var output = value.replace(replaceReg, replaceFunc); if (!this.$textToken[token.type]) { var classes = "ace_" + token.type.replace(/\./g, " ace_"); var style = ""; if (token.type == "fold") style = " style='width:" + (token.value.length * this.config.characterWidth) + "px;' "; stringBuilder.push("", output, ""); } else { stringBuilder.push(output); } return screenColumn + value.length; }; this.renderIndentGuide = function(stringBuilder, value, max) { var cols = value.search(this.$indentGuideRe); if (cols <= 0 || cols >= max) return value; if (value[0] == " ") { cols -= cols % this.tabSize; stringBuilder.push(lang.stringRepeat(this.$tabStrings[" "], cols/this.tabSize)); return value.substr(cols); } else if (value[0] == "\t") { stringBuilder.push(lang.stringRepeat(this.$tabStrings["\t"], cols)); return value.substr(cols); } return value; }; this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) { var chars = 0; var split = 0; var splitChars = splits[0]; var screenColumn = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; var value = token.value; if (i == 0 && this.displayIndentGuides) { chars = value.length; value = this.renderIndentGuide(stringBuilder, value, splitChars); if (!value) continue; chars -= value.length; } if (chars + value.length < splitChars) { screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); chars += value.length; } else { while (chars + value.length >= splitChars) { screenColumn = this.$renderToken( stringBuilder, screenColumn, token, value.substring(0, splitChars - chars) ); value = value.substring(splitChars - chars); chars = splitChars; if (!onlyContents) { stringBuilder.push("", "
" ); } split ++; screenColumn = 0; splitChars = splits[split] || Number.MAX_VALUE; } if (value.length != 0) { chars += value.length; screenColumn = this.$renderToken( stringBuilder, screenColumn, token, value ); } } } }; this.$renderSimpleLine = function(stringBuilder, tokens) { var screenColumn = 0; var token = tokens[0]; var value = token.value; if (this.displayIndentGuides) value = this.renderIndentGuide(stringBuilder, value); if (value) screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); for (var i = 1; i < tokens.length; i++) { token = tokens[i]; value = token.value; screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); } }; this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) { if (!foldLine && foldLine !== false) foldLine = this.session.getFoldLine(row); if (foldLine) var tokens = this.$getFoldLineTokens(row, foldLine); else var tokens = this.session.getTokens(row); if (!onlyContents) { stringBuilder.push( "
" ); } if (tokens.length) { var splits = this.session.getRowSplitData(row); if (splits && splits.length) this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents); else this.$renderSimpleLine(stringBuilder, tokens); } if (this.showInvisibles) { if (foldLine) row = foldLine.end.row stringBuilder.push( "", row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR, "" ); } if (!onlyContents) stringBuilder.push("
"); }; this.$getFoldLineTokens = function(row, foldLine) { var session = this.session; var renderTokens = []; function addTokens(tokens, from, to) { var idx = 0, col = 0; while ((col + tokens[idx].value.length) < from) { col += tokens[idx].value.length; idx++; if (idx == tokens.length) return; } if (col != from) { var value = tokens[idx].value.substring(from - col); if (value.length > (to - from)) value = value.substring(0, to - from); renderTokens.push({ type: tokens[idx].type, value: value }); col = from + value.length; idx += 1; } while (col < to && idx < tokens.length) { var value = tokens[idx].value; if (value.length + col > to) { renderTokens.push({ type: tokens[idx].type, value: value.substring(0, to - col) }); } else renderTokens.push(tokens[idx]); col += value.length; idx += 1; } } var tokens = session.getTokens(row); foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) { if (placeholder != null) { renderTokens.push({ type: "fold", value: placeholder }); } else { if (isNewRow) tokens = session.getTokens(row); if (tokens.length) addTokens(tokens, lastColumn, column); } }, foldLine.end.row, this.session.getLine(foldLine.end.row).length); return renderTokens; }; this.$useLineGroups = function() { return this.session.getUseWrapMode(); }; this.destroy = function() { clearInterval(this.$pollSizeChangesTimer); if (this.$measureNode) this.$measureNode.parentNode.removeChild(this.$measureNode); delete this.$measureNode; }; }).call(Text.prototype); exports.Text = Text; }); define('ace/layer/cursor', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { var dom = require("../lib/dom"); var Cursor = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_cursor-layer"; parentEl.appendChild(this.element); this.isVisible = false; this.isBlinking = true; this.blinkInterval = 1000; this.smoothBlinking = false; this.cursors = []; this.cursor = this.addCursor(); dom.addCssClass(this.element, "ace_hidden-cursors"); }; (function() { this.$padding = 0; this.setPadding = function(padding) { this.$padding = padding; }; this.setSession = function(session) { this.session = session; }; this.setBlinking = function(blinking) { if (blinking != this.isBlinking){ this.isBlinking = blinking; this.restartTimer(); } }; this.setBlinkInterval = function(blinkInterval) { if (blinkInterval != this.blinkInterval){ this.blinkInterval = blinkInterval; this.restartTimer(); } }; this.setSmoothBlinking = function(smoothBlinking) { if (smoothBlinking != this.smoothBlinking) { this.smoothBlinking = smoothBlinking; if (smoothBlinking) dom.addCssClass(this.element, "ace_smooth-blinking"); else dom.removeCssClass(this.element, "ace_smooth-blinking"); this.restartTimer(); } }; this.addCursor = function() { var el = dom.createElement("div"); el.className = "ace_cursor"; this.element.appendChild(el); this.cursors.push(el); return el; }; this.removeCursor = function() { if (this.cursors.length > 1) { var el = this.cursors.pop(); el.parentNode.removeChild(el); return el; } }; this.hideCursor = function() { this.isVisible = false; dom.addCssClass(this.element, "ace_hidden-cursors"); this.restartTimer(); }; this.showCursor = function() { this.isVisible = true; dom.removeCssClass(this.element, "ace_hidden-cursors"); this.restartTimer(); }; this.restartTimer = function() { clearInterval(this.intervalId); clearTimeout(this.timeoutId); if (this.smoothBlinking) dom.removeCssClass(this.element, "ace_smooth-blinking"); for (var i = this.cursors.length; i--; ) this.cursors[i].style.opacity = ""; if (!this.isBlinking || !this.blinkInterval || !this.isVisible) return; if (this.smoothBlinking) setTimeout(function(){ dom.addCssClass(this.element, "ace_smooth-blinking"); }.bind(this)); var blink = function(){ this.timeoutId = setTimeout(function() { for (var i = this.cursors.length; i--; ) { this.cursors[i].style.opacity = 0; } }.bind(this), 0.6 * this.blinkInterval); }.bind(this); this.intervalId = setInterval(function() { for (var i = this.cursors.length; i--; ) { this.cursors[i].style.opacity = ""; } blink(); }.bind(this), this.blinkInterval); blink(); }; this.getPixelPosition = function(position, onScreen) { if (!this.config || !this.session) return {left : 0, top : 0}; if (!position) position = this.session.selection.getCursor(); var pos = this.session.documentToScreenPosition(position); var cursorLeft = this.$padding + pos.column * this.config.characterWidth; var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * this.config.lineHeight; return {left : cursorLeft, top : cursorTop}; }; this.update = function(config) { this.config = config; var selections = this.session.$selectionMarkers; var i = 0, cursorIndex = 0; if (selections === undefined || selections.length === 0){ selections = [{cursor: null}]; } for (var i = 0, n = selections.length; i < n; i++) { var pixelPos = this.getPixelPosition(selections[i].cursor, true); if ((pixelPos.top > config.height + config.offset || pixelPos.top < -config.offset) && i > 1) { continue; } var style = (this.cursors[cursorIndex++] || this.addCursor()).style; style.left = pixelPos.left + "px"; style.top = pixelPos.top + "px"; style.width = config.characterWidth + "px"; style.height = config.lineHeight + "px"; } while (this.cursors.length > cursorIndex) this.removeCursor(); var overwrite = this.session.getOverwrite(); this.$setOverwrite(overwrite); this.$pixelPos = pixelPos; this.restartTimer(); }; this.$setOverwrite = function(overwrite) { if (overwrite != this.overwrite) { this.overwrite = overwrite; if (overwrite) dom.addCssClass(this.element, "ace_overwrite-cursors"); else dom.removeCssClass(this.element, "ace_overwrite-cursors"); } }; this.destroy = function() { clearInterval(this.intervalId); clearTimeout(this.timeoutId); }; }).call(Cursor.prototype); exports.Cursor = Cursor; }); define('ace/scrollbar', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/dom', 'ace/lib/event', 'ace/lib/event_emitter'], function(require, exports, module) { var oop = require("./lib/oop"); var dom = require("./lib/dom"); var event = require("./lib/event"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var ScrollBarV = function(parent, renderer) { this.element = dom.createElement("div"); this.element.className = "ace_scrollbar"; this.inner = dom.createElement("div"); this.inner.className = "ace_scrollbar-inner"; this.element.appendChild(this.inner); parent.appendChild(this.element); renderer.$scrollbarWidth = this.width = dom.scrollbarWidth(parent.ownerDocument); renderer.$scrollbarWidth = this.width = dom.scrollbarWidth(parent.ownerDocument); this.fullWidth = this.width; this.inner.style.width = this.element.style.width = (this.width || 15) + 5 + "px"; this.setVisible(false); this.element.style.overflowY = "scroll"; event.addListener(this.element, "scroll", this.onScrollV.bind(this)); event.addListener(this.element, "mousedown", event.preventDefault); }; var ScrollBarH = function(parent, renderer) { this.element = dom.createElement("div"); this.element.className = "ace_scrollbar-h"; this.inner = dom.createElement("div"); this.inner.className = "ace_scrollbar-inner"; this.element.appendChild(this.inner); parent.appendChild(this.element); this.height = renderer.$scrollbarWidth; this.fullHeight = this.height; this.inner.style.height = this.element.style.height = (this.height || 15) + 5 + "px"; this.setVisible(false); this.element.style.overflowX = "scroll"; event.addListener(this.element, "scroll", this.onScrollH.bind(this)); event.addListener(this.element, "mousedown", event.preventDefault); }; (function() { oop.implement(this, EventEmitter); this.setVisible = function(show) { if (show) { this.element.style.display = ""; if (this.fullWidth) this.width = this.fullWidth; if (this.fullHeight) this.height = this.fullHeight; } else { this.element.style.display = "none"; this.height = this.width = 0; } }; this.onScrollV = function() { if (!this.skipEvent) { this.scrollTop = this.element.scrollTop; this._emit("scroll", {data: this.scrollTop}); } this.skipEvent = false; }; this.onScrollH = function() { if (!this.skipEvent) { this.scrollLeft = this.element.scrollLeft; this._emit("scroll", {data: this.scrollLeft}); } this.skipEvent = false; }; this.getWidth = function() { return this.width; }; this.getHeight = function() { return this.height; }; this.setHeight = function(height) { this.element.style.height = height + "px"; }; this.setWidth = function(width) { this.element.style.width = width + "px"; }; this.setInnerHeight = function(height) { this.inner.style.height = height + "px"; }; this.setInnerWidth = function(width) { this.inner.style.width = width + "px"; }; this.setScrollTop = function(scrollTop) { if (this.scrollTop != scrollTop) { this.skipEvent = true; this.scrollTop = this.element.scrollTop = scrollTop; } }; this.setScrollLeft = function(scrollLeft) { if (this.scrollLeft != scrollLeft) { this.skipEvent = true; this.scrollLeft = this.element.scrollLeft = scrollLeft; } }; }).call(ScrollBarV.prototype); ScrollBarH.prototype = ScrollBarV.prototype; exports.ScrollBar = ScrollBarV; // backward compatibility exports.ScrollBarV = ScrollBarV; exports.ScrollBarH = ScrollBarH; }); define('ace/renderloop', ['require', 'exports', 'module' , 'ace/lib/event'], function(require, exports, module) { var event = require("./lib/event"); var RenderLoop = function(onRender, win) { this.onRender = onRender; this.pending = false; this.changes = 0; this.window = win || window; }; (function() { this.schedule = function(change) { this.changes = this.changes | change; if (!this.pending) { this.pending = true; var _self = this; event.nextFrame(function() { _self.pending = false; var changes; while (changes = _self.changes) { _self.changes = 0; _self.onRender(changes); } }, this.window); } }; }).call(RenderLoop.prototype); exports.RenderLoop = RenderLoop; }); define('ace/multi_select', ['require', 'exports', 'module' , 'ace/range_list', 'ace/range', 'ace/selection', 'ace/mouse/multi_select_handler', 'ace/lib/event', 'ace/lib/lang', 'ace/commands/multi_select_commands', 'ace/search', 'ace/edit_session', 'ace/editor', 'ace/config'], function(require, exports, module) { var RangeList = require("./range_list").RangeList; var Range = require("./range").Range; var Selection = require("./selection").Selection; var onMouseDown = require("./mouse/multi_select_handler").onMouseDown; var event = require("./lib/event"); var lang = require("./lib/lang"); var commands = require("./commands/multi_select_commands"); exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands); var Search = require("./search").Search; var search = new Search(); function find(session, needle, dir) { search.$options.wrap = true; search.$options.needle = needle; search.$options.backwards = dir == -1; return search.find(session); } var EditSession = require("./edit_session").EditSession; (function() { this.getSelectionMarkers = function() { return this.$selectionMarkers; }; }).call(EditSession.prototype); (function() { this.ranges = null; this.rangeList = null; this.addRange = function(range, $blockChangeEvents) { if (!range) return; if (!this.inMultiSelectMode && this.rangeCount == 0) { var oldRange = this.toOrientedRange(); this.rangeList.add(oldRange); this.rangeList.add(range); if (this.rangeList.ranges.length != 2) { this.rangeList.removeAll(); return $blockChangeEvents || this.fromOrientedRange(range); } this.rangeList.removeAll(); this.rangeList.add(oldRange); this.$onAddRange(oldRange); } if (!range.cursor) range.cursor = range.end; var removed = this.rangeList.add(range); this.$onAddRange(range); if (removed.length) this.$onRemoveRange(removed); if (this.rangeCount > 1 && !this.inMultiSelectMode) { this._emit("multiSelect"); this.inMultiSelectMode = true; this.session.$undoSelect = false; this.rangeList.attach(this.session); } return $blockChangeEvents || this.fromOrientedRange(range); }; this.toSingleRange = function(range) { range = range || this.ranges[0]; var removed = this.rangeList.removeAll(); if (removed.length) this.$onRemoveRange(removed); range && this.fromOrientedRange(range); }; this.substractPoint = function(pos) { var removed = this.rangeList.substractPoint(pos); if (removed) { this.$onRemoveRange(removed); return removed[0]; } }; this.mergeOverlappingRanges = function() { var removed = this.rangeList.merge(); if (removed.length) this.$onRemoveRange(removed); else if(this.ranges[0]) this.fromOrientedRange(this.ranges[0]); }; this.$onAddRange = function(range) { this.rangeCount = this.rangeList.ranges.length; this.ranges.unshift(range); this._emit("addRange", {range: range}); }; this.$onRemoveRange = function(removed) { this.rangeCount = this.rangeList.ranges.length; if (this.rangeCount == 1 && this.inMultiSelectMode) { var lastRange = this.rangeList.ranges.pop(); removed.push(lastRange); this.rangeCount = 0; } for (var i = removed.length; i--; ) { var index = this.ranges.indexOf(removed[i]); this.ranges.splice(index, 1); } this._emit("removeRange", {ranges: removed}); if (this.rangeCount == 0 && this.inMultiSelectMode) { this.inMultiSelectMode = false; this._emit("singleSelect"); this.session.$undoSelect = true; this.rangeList.detach(this.session); } lastRange = lastRange || this.ranges[0]; if (lastRange && !lastRange.isEqual(this.getRange())) this.fromOrientedRange(lastRange); }; this.$initRangeList = function() { if (this.rangeList) return; this.rangeList = new RangeList(); this.ranges = []; this.rangeCount = 0; }; this.getAllRanges = function() { return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()]; }; this.splitIntoLines = function () { if (this.rangeCount > 1) { var ranges = this.rangeList.ranges; var lastRange = ranges[ranges.length - 1]; var range = Range.fromPoints(ranges[0].start, lastRange.end); this.toSingleRange(); this.setSelectionRange(range, lastRange.cursor == lastRange.start); } else { var range = this.getRange(); var isBackwards = this.isBackwards(); var startRow = range.start.row; var endRow = range.end.row; if (startRow == endRow) { if (isBackwards) var start = range.end, end = range.start; else var start = range.start, end = range.end; this.addRange(Range.fromPoints(end, end)); this.addRange(Range.fromPoints(start, start)); return; } var rectSel = []; var r = this.getLineRange(startRow, true); r.start.column = range.start.column; rectSel.push(r); for (var i = startRow + 1; i < endRow; i++) rectSel.push(this.getLineRange(i, true)); r = this.getLineRange(endRow, true); r.end.column = range.end.column; rectSel.push(r); rectSel.forEach(this.addRange, this); } }; this.toggleBlockSelection = function () { if (this.rangeCount > 1) { var ranges = this.rangeList.ranges; var lastRange = ranges[ranges.length - 1]; var range = Range.fromPoints(ranges[0].start, lastRange.end); this.toSingleRange(); this.setSelectionRange(range, lastRange.cursor == lastRange.start); } else { var cursor = this.session.documentToScreenPosition(this.selectionLead); var anchor = this.session.documentToScreenPosition(this.selectionAnchor); var rectSel = this.rectangularRangeBlock(cursor, anchor); rectSel.forEach(this.addRange, this); } }; this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) { var rectSel = []; var xBackwards = screenCursor.column < screenAnchor.column; if (xBackwards) { var startColumn = screenCursor.column; var endColumn = screenAnchor.column; } else { var startColumn = screenAnchor.column; var endColumn = screenCursor.column; } var yBackwards = screenCursor.row < screenAnchor.row; if (yBackwards) { var startRow = screenCursor.row; var endRow = screenAnchor.row; } else { var startRow = screenAnchor.row; var endRow = screenCursor.row; } if (startColumn < 0) startColumn = 0; if (startRow < 0) startRow = 0; if (startRow == endRow) includeEmptyLines = true; for (var row = startRow; row <= endRow; row++) { var range = Range.fromPoints( this.session.screenToDocumentPosition(row, startColumn), this.session.screenToDocumentPosition(row, endColumn) ); if (range.isEmpty()) { if (docEnd && isSamePoint(range.end, docEnd)) break; var docEnd = range.end; } range.cursor = xBackwards ? range.start : range.end; rectSel.push(range); } if (yBackwards) rectSel.reverse(); if (!includeEmptyLines) { var end = rectSel.length - 1; while (rectSel[end].isEmpty() && end > 0) end--; if (end > 0) { var start = 0; while (rectSel[start].isEmpty()) start++; } for (var i = end; i >= start; i--) { if (rectSel[i].isEmpty()) rectSel.splice(i, 1); } } return rectSel; }; }).call(Selection.prototype); var Editor = require("./editor").Editor; (function() { this.updateSelectionMarkers = function() { this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.addSelectionMarker = function(orientedRange) { if (!orientedRange.cursor) orientedRange.cursor = orientedRange.end; var style = this.getSelectionStyle(); orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style); this.session.$selectionMarkers.push(orientedRange); this.session.selectionMarkerCount = this.session.$selectionMarkers.length; return orientedRange; }; this.removeSelectionMarker = function(range) { if (!range.marker) return; this.session.removeMarker(range.marker); var index = this.session.$selectionMarkers.indexOf(range); if (index != -1) this.session.$selectionMarkers.splice(index, 1); this.session.selectionMarkerCount = this.session.$selectionMarkers.length; }; this.removeSelectionMarkers = function(ranges) { var markerList = this.session.$selectionMarkers; for (var i = ranges.length; i--; ) { var range = ranges[i]; if (!range.marker) continue; this.session.removeMarker(range.marker); var index = markerList.indexOf(range); if (index != -1) markerList.splice(index, 1); } this.session.selectionMarkerCount = markerList.length; }; this.$onAddRange = function(e) { this.addSelectionMarker(e.range); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.$onRemoveRange = function(e) { this.removeSelectionMarkers(e.ranges); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.$onMultiSelect = function(e) { if (this.inMultiSelectMode) return; this.inMultiSelectMode = true; this.setStyle("ace_multiselect"); this.keyBinding.addKeyboardHandler(commands.keyboardHandler); this.commands.setDefaultHandler("exec", this.$onMultiSelectExec); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.$onSingleSelect = function(e) { if (this.session.multiSelect.inVirtualMode) return; this.inMultiSelectMode = false; this.unsetStyle("ace_multiselect"); this.keyBinding.removeKeyboardHandler(commands.keyboardHandler); this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.$onMultiSelectExec = function(e) { var command = e.command; var editor = e.editor; if (!editor.multiSelect) return; if (!command.multiSelectAction) { var result = command.exec(editor, e.args || {}); editor.multiSelect.addRange(editor.multiSelect.toOrientedRange()); editor.multiSelect.mergeOverlappingRanges(); } else if (command.multiSelectAction == "forEach") { result = editor.forEachSelection(command, e.args); } else if (command.multiSelectAction == "forEachLine") { result = editor.forEachSelection(command, e.args, true); } else if (command.multiSelectAction == "single") { editor.exitMultiSelectMode(); result = command.exec(editor, e.args || {}); } else { result = command.multiSelectAction(editor, e.args || {}); } return result; }; this.forEachSelection = function(cmd, args, $byLines) { if (this.inVirtualSelectionMode) return; var session = this.session; var selection = this.selection; var rangeList = selection.rangeList; var result; var reg = selection._eventRegistry; selection._eventRegistry = {}; var tmpSel = new Selection(session); this.inVirtualSelectionMode = true; for (var i = rangeList.ranges.length; i--;) { if ($byLines) { while (i > 0 && rangeList.ranges[i].start.row == rangeList.ranges[i - 1].end.row) i--; } tmpSel.fromOrientedRange(rangeList.ranges[i]); this.selection = session.selection = tmpSel; var cmdResult = cmd.exec(this, args || {}); if (!result == undefined) result = cmdResult; tmpSel.toOrientedRange(rangeList.ranges[i]); } tmpSel.detach(); this.selection = session.selection = selection; this.inVirtualSelectionMode = false; selection._eventRegistry = reg; selection.mergeOverlappingRanges(); var anim = this.renderer.$scrollAnimation; this.onCursorChange(); this.onSelectionChange(); if (anim && anim.from == anim.to) this.renderer.animateScrolling(anim.from); return result; }; this.exitMultiSelectMode = function() { if (!this.inMultiSelectMode || this.inVirtualSelectionMode) return; this.multiSelect.toSingleRange(); }; this.getSelectedText = function() { var text = ""; if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { var ranges = this.multiSelect.rangeList.ranges; var buf = []; for (var i = 0; i < ranges.length; i++) { buf.push(this.session.getTextRange(ranges[i])); } var nl = this.session.getDocument().getNewLineCharacter(); text = buf.join(nl); if (text.length == (buf.length - 1) * nl.length) text = ""; } else if (!this.selection.isEmpty()) { text = this.session.getTextRange(this.getSelectionRange()); } return text; }; this.onPaste = function(text) { if (this.$readOnly) return; this._signal("paste", text); if (!this.inMultiSelectMode || this.inVirtualSelectionMode) return this.insert(text); var lines = text.split(/\r\n|\r|\n/); var ranges = this.selection.rangeList.ranges; if (lines.length > ranges.length || lines.length < 2 || !lines[1]) return this.commands.exec("insertstring", this, text); for (var i = ranges.length; i--;) { var range = ranges[i]; if (!range.isEmpty()) this.session.remove(range); this.session.insert(range.start, lines[i]); } }; this.findAll = function(needle, options, additive) { options = options || {}; options.needle = needle || options.needle; this.$search.set(options); var ranges = this.$search.findAll(this.session); if (!ranges.length) return 0; this.$blockScrolling += 1; var selection = this.multiSelect; if (!additive) selection.toSingleRange(ranges[0]); for (var i = ranges.length; i--; ) selection.addRange(ranges[i], true); this.$blockScrolling -= 1; return ranges.length; }; this.selectMoreLines = function(dir, skip) { var range = this.selection.toOrientedRange(); var isBackwards = range.cursor == range.end; var screenLead = this.session.documentToScreenPosition(range.cursor); if (this.selection.$desiredColumn) screenLead.column = this.selection.$desiredColumn; var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column); if (!range.isEmpty()) { var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start); var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column); } else { var anchor = lead; } if (isBackwards) { var newRange = Range.fromPoints(lead, anchor); newRange.cursor = newRange.start; } else { var newRange = Range.fromPoints(anchor, lead); newRange.cursor = newRange.end; } newRange.desiredColumn = screenLead.column; if (!this.selection.inMultiSelectMode) { this.selection.addRange(range); } else { if (skip) var toRemove = range.cursor; } this.selection.addRange(newRange); if (toRemove) this.selection.substractPoint(toRemove); }; this.transposeSelections = function(dir) { var session = this.session; var sel = session.multiSelect; var all = sel.ranges; for (var i = all.length; i--; ) { var range = all[i]; if (range.isEmpty()) { var tmp = session.getWordRange(range.start.row, range.start.column); range.start.row = tmp.start.row; range.start.column = tmp.start.column; range.end.row = tmp.end.row; range.end.column = tmp.end.column; } } sel.mergeOverlappingRanges(); var words = []; for (var i = all.length; i--; ) { var range = all[i]; words.unshift(session.getTextRange(range)); } if (dir < 0) words.unshift(words.pop()); else words.push(words.shift()); for (var i = all.length; i--; ) { var range = all[i]; var tmp = range.clone(); session.replace(range, words[i]); range.start.row = tmp.start.row; range.start.column = tmp.start.column; } }; this.selectMore = function(dir, skip) { var session = this.session; var sel = session.multiSelect; var range = sel.toOrientedRange(); if (range.isEmpty()) { range = session.getWordRange(range.start.row, range.start.column); range.cursor = dir == -1 ? range.start : range.end; this.multiSelect.addRange(range); return; } var needle = session.getTextRange(range); var newRange = find(session, needle, dir); if (newRange) { newRange.cursor = dir == -1 ? newRange.start : newRange.end; this.$blockScrolling += 1; this.session.unfold(newRange); this.multiSelect.addRange(newRange); this.$blockScrolling -= 1; this.renderer.scrollCursorIntoView(null, 0.5); } if (skip) this.multiSelect.substractPoint(range.cursor); }; this.alignCursors = function() { var session = this.session; var sel = session.multiSelect; var ranges = sel.ranges; if (!ranges.length) { var range = this.selection.getRange(); var fr = range.start.row, lr = range.end.row; var guessRange = fr == lr; if (guessRange) { var max = this.session.getLength(); var line; do { line = this.session.getLine(lr); } while (/[=:]/.test(line) && ++lr < max); do { line = this.session.getLine(fr); } while (/[=:]/.test(line) && --fr > 0); if (fr < 0) fr = 0; if (lr >= max) lr = max - 1; } var lines = this.session.doc.removeLines(fr, lr); lines = this.$reAlignText(lines, guessRange); this.session.doc.insert({row: fr, column: 0}, lines.join("\n") + "\n"); if (!guessRange) { range.start.column = 0; range.end.column = lines[lines.length - 1].length; } this.selection.setRange(range); } else { var row = -1; var sameRowRanges = ranges.filter(function(r) { if (r.cursor.row == row) return true; row = r.cursor.row; }); sel.$onRemoveRange(sameRowRanges); var maxCol = 0; var minSpace = Infinity; var spaceOffsets = ranges.map(function(r) { var p = r.cursor; var line = session.getLine(p.row); var spaceOffset = line.substr(p.column).search(/\S/g); if (spaceOffset == -1) spaceOffset = 0; if (p.column > maxCol) maxCol = p.column; if (spaceOffset < minSpace) minSpace = spaceOffset; return spaceOffset; }); ranges.forEach(function(r, i) { var p = r.cursor; var l = maxCol - p.column; var d = spaceOffsets[i] - minSpace; if (l > d) session.insert(p, lang.stringRepeat(" ", l - d)); else session.remove(new Range(p.row, p.column, p.row, p.column - l + d)); r.start.column = r.end.column = maxCol; r.start.row = r.end.row = p.row; r.cursor = r.end; }); sel.fromOrientedRange(ranges[0]); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); } }; this.$reAlignText = function(lines, forceLeft) { var isLeftAligned = true, isRightAligned = true; var startW, textW, endW; return lines.map(function(line) { var m = line.match(/(\s*)(.*?)(\s*)([=:].*)/); if (!m) return [line]; if (startW == null) { startW = m[1].length; textW = m[2].length; endW = m[3].length; return m; } if (startW + textW + endW != m[1].length + m[2].length + m[3].length) isRightAligned = false; if (startW != m[1].length) isLeftAligned = false; if (startW > m[1].length) startW = m[1].length; if (textW < m[2].length) textW = m[2].length; if (endW > m[3].length) endW = m[3].length; return m; }).map(forceLeft ? alignLeft : isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign); function spaces(n) { return lang.stringRepeat(" ", n); } function alignLeft(m) { return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(textW - m[2].length + endW) + m[4].replace(/^([=:])\s+/, "$1 ") } function alignRight(m) { return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] + spaces(endW, " ") + m[4].replace(/^([=:])\s+/, "$1 ") } function unAlign(m) { return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(endW) + m[4].replace(/^([=:])\s+/, "$1 ") } } }).call(Editor.prototype); function isSamePoint(p1, p2) { return p1.row == p2.row && p1.column == p2.column; } exports.onSessionChange = function(e) { var session = e.session; if (!session.multiSelect) { session.$selectionMarkers = []; session.selection.$initRangeList(); session.multiSelect = session.selection; } this.multiSelect = session.multiSelect; var oldSession = e.oldSession; if (oldSession) { oldSession.multiSelect.removeEventListener("addRange", this.$onAddRange); oldSession.multiSelect.removeEventListener("removeRange", this.$onRemoveRange); oldSession.multiSelect.removeEventListener("multiSelect", this.$onMultiSelect); oldSession.multiSelect.removeEventListener("singleSelect", this.$onSingleSelect); } session.multiSelect.on("addRange", this.$onAddRange); session.multiSelect.on("removeRange", this.$onRemoveRange); session.multiSelect.on("multiSelect", this.$onMultiSelect); session.multiSelect.on("singleSelect", this.$onSingleSelect); if (this.inMultiSelectMode != session.selection.inMultiSelectMode) { if (session.selection.inMultiSelectMode) this.$onMultiSelect(); else this.$onSingleSelect(); } }; function MultiSelect(editor) { if (editor.$multiselectOnSessionChange) return; editor.$onAddRange = editor.$onAddRange.bind(editor); editor.$onRemoveRange = editor.$onRemoveRange.bind(editor); editor.$onMultiSelect = editor.$onMultiSelect.bind(editor); editor.$onSingleSelect = editor.$onSingleSelect.bind(editor); editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor); editor.$multiselectOnSessionChange(editor); editor.on("changeSession", editor.$multiselectOnSessionChange); editor.on("mousedown", onMouseDown); editor.commands.addCommands(commands.defaultCommands); addAltCursorListeners(editor); } function addAltCursorListeners(editor){ var el = editor.textInput.getElement(); var altCursor = false; event.addListener(el, "keydown", function(e) { if (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) { if (!altCursor) { editor.renderer.setMouseCursor("crosshair"); altCursor = true; } } else if (altCursor) { reset(); } }); event.addListener(el, "keyup", reset); event.addListener(el, "blur", reset); function reset(e) { if (altCursor) { editor.renderer.setMouseCursor(""); altCursor = false; } } } exports.MultiSelect = MultiSelect; require("./config").defineOptions(Editor.prototype, "editor", { enableMultiselect: { set: function(val) { MultiSelect(this); if (val) { this.on("changeSession", this.$multiselectOnSessionChange); this.on("mousedown", onMouseDown); } else { this.off("changeSession", this.$multiselectOnSessionChange); this.off("mousedown", onMouseDown); } }, value: true } }) }); define('ace/mouse/multi_select_handler', ['require', 'exports', 'module' , 'ace/lib/event'], function(require, exports, module) { var event = require("../lib/event"); function isSamePoint(p1, p2) { return p1.row == p2.row && p1.column == p2.column; } function onMouseDown(e) { var ev = e.domEvent; var alt = ev.altKey; var shift = ev.shiftKey; var ctrl = e.getAccelKey(); var button = e.getButton(); if (e.editor.inMultiSelectMode && button == 2) { e.editor.textInput.onContextMenu(e.domEvent); return; } if (!ctrl && !alt) { if (button == 0 && e.editor.inMultiSelectMode) e.editor.exitMultiSelectMode(); return; } var editor = e.editor; var selection = editor.selection; var isMultiSelect = editor.inMultiSelectMode; var pos = e.getDocumentPosition(); var cursor = selection.getCursor(); var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); var mouseX = e.x, mouseY = e.y; var onMouseSelection = function(e) { mouseX = e.clientX; mouseY = e.clientY; }; var blockSelect = function() { var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column); if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.selectionLead)) return; screenCursor = newCursor; editor.selection.moveCursorToPosition(cursor); editor.selection.clearSelection(); editor.renderer.scrollCursorIntoView(); editor.removeSelectionMarkers(rectSel); rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor); rectSel.forEach(editor.addSelectionMarker, editor); editor.updateSelectionMarkers(); }; var session = editor.session; var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); var screenCursor = screenAnchor; if (ctrl && !shift && !alt && button == 0) { if (!isMultiSelect && inSelection) return; // dragging if (!isMultiSelect) { var range = selection.toOrientedRange(); editor.addSelectionMarker(range); } var oldRange = selection.rangeList.rangeAtPoint(pos); editor.once("mouseup", function() { var tmpSel = selection.toOrientedRange(); if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) selection.substractPoint(tmpSel.cursor); else { if (range) { editor.removeSelectionMarker(range); selection.addRange(range); } selection.addRange(tmpSel); } }); } else if (alt && button == 0) { e.stop(); if (isMultiSelect && !ctrl) selection.toSingleRange(); else if (!isMultiSelect && ctrl) selection.addRange(); var rectSel = []; if (shift) { screenAnchor = session.documentToScreenPosition(selection.lead); blockSelect(); } else { selection.moveCursorToPosition(pos); selection.clearSelection(); } var onMouseSelectionEnd = function(e) { clearInterval(timerId); editor.removeSelectionMarkers(rectSel); for (var i = 0; i < rectSel.length; i++) selection.addRange(rectSel[i]); }; var onSelectionInterval = blockSelect; event.capture(editor.container, onMouseSelection, onMouseSelectionEnd); var timerId = setInterval(function() {onSelectionInterval();}, 20); return e.preventDefault(); } } exports.onMouseDown = onMouseDown; }); define('ace/commands/multi_select_commands', ['require', 'exports', 'module' , 'ace/keyboard/hash_handler'], function(require, exports, module) { exports.defaultCommands = [{ name: "addCursorAbove", exec: function(editor) { editor.selectMoreLines(-1); }, bindKey: {win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up"}, readonly: true }, { name: "addCursorBelow", exec: function(editor) { editor.selectMoreLines(1); }, bindKey: {win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down"}, readonly: true }, { name: "addCursorAboveSkipCurrent", exec: function(editor) { editor.selectMoreLines(-1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up"}, readonly: true }, { name: "addCursorBelowSkipCurrent", exec: function(editor) { editor.selectMoreLines(1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down"}, readonly: true }, { name: "selectMoreBefore", exec: function(editor) { editor.selectMore(-1); }, bindKey: {win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left"}, readonly: true }, { name: "selectMoreAfter", exec: function(editor) { editor.selectMore(1); }, bindKey: {win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right"}, readonly: true }, { name: "selectNextBefore", exec: function(editor) { editor.selectMore(-1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left"}, readonly: true }, { name: "selectNextAfter", exec: function(editor) { editor.selectMore(1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right"}, readonly: true }, { name: "splitIntoLines", exec: function(editor) { editor.multiSelect.splitIntoLines(); }, bindKey: {win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L"}, readonly: true }, { name: "alignCursors", exec: function(editor) { editor.alignCursors(); }, bindKey: {win: "Ctrl-Alt-A", mac: "Ctrl-Alt-A"} }]; exports.multiSelectCommands = [{ name: "singleSelection", bindKey: "esc", exec: function(editor) { editor.exitMultiSelectMode(); }, readonly: true, isAvailable: function(editor) {return editor && editor.inMultiSelectMode} }]; var HashHandler = require("../keyboard/hash_handler").HashHandler; exports.keyboardHandler = new HashHandler(exports.multiSelectCommands); }); define('ace/worker/worker_client', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/config'], function(require, exports, module) { var oop = require("../lib/oop"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var config = require("../config"); var WorkerClient = function(topLevelNamespaces, mod, classname) { this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); this.changeListener = this.changeListener.bind(this); this.onMessage = this.onMessage.bind(this); if (require.nameToUrl && !require.toUrl) require.toUrl = require.nameToUrl; var workerUrl; if (config.get("packaged") || !require.toUrl) { workerUrl = config.moduleUrl(mod, "worker"); } else { var normalizePath = this.$normalizePath; workerUrl = normalizePath(require.toUrl("ace/worker/worker.js", null, "_")); var tlns = {}; topLevelNamespaces.forEach(function(ns) { tlns[ns] = normalizePath(require.toUrl(ns, null, "_").replace(/(\.js)?(\?.*)?$/, "")); }); } this.$worker = new Worker(workerUrl); this.$worker.postMessage({ init : true, tlns: tlns, module: mod, classname: classname }); this.callbackId = 1; this.callbacks = {}; this.$worker.onmessage = this.onMessage; }; (function(){ oop.implement(this, EventEmitter); this.onMessage = function(e) { var msg = e.data; switch(msg.type) { case "log": window.console && console.log && console.log.apply(console, msg.data); break; case "event": this._emit(msg.name, {data: msg.data}); break; case "call": var callback = this.callbacks[msg.id]; if (callback) { callback(msg.data); delete this.callbacks[msg.id]; } break; } }; this.$normalizePath = function(path) { if (!location.host) // needed for file:// protocol return path; path = path.replace(/^[a-z]+:\/\/[^\/]+/, ""); // Remove domain name and rebuild it path = location.protocol + "//" + location.host + (path.charAt(0) == "/" ? "" : location.pathname.replace(/\/[^\/]*$/, "")) + "/" + path.replace(/^[\/]+/, ""); return path; }; this.terminate = function() { this._emit("terminate", {}); this.deltaQueue = null; this.$worker.terminate(); this.$worker = null; this.$doc.removeEventListener("change", this.changeListener); this.$doc = null; }; this.send = function(cmd, args) { this.$worker.postMessage({command: cmd, args: args}); }; this.call = function(cmd, args, callback) { if (callback) { var id = this.callbackId++; this.callbacks[id] = callback; args.push(id); } this.send(cmd, args); }; this.emit = function(event, data) { try { this.$worker.postMessage({event: event, data: {data: data.data}}); } catch(ex) {} }; this.attachToDocument = function(doc) { if(this.$doc) this.terminate(); this.$doc = doc; this.call("setValue", [doc.getValue()]); doc.on("change", this.changeListener); }; this.changeListener = function(e) { if (!this.deltaQueue) { this.deltaQueue = [e.data]; setTimeout(this.$sendDeltaQueue, 0); } else this.deltaQueue.push(e.data); }; this.$sendDeltaQueue = function() { var q = this.deltaQueue; if (!q) return; this.deltaQueue = null; if (q.length > 20 && q.length > this.$doc.getLength() >> 1) { this.call("setValue", [this.$doc.getValue()]); } else this.emit("change", {data: q}); } }).call(WorkerClient.prototype); var UIWorkerClient = function(topLevelNamespaces, mod, classname) { this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); this.changeListener = this.changeListener.bind(this); this.callbackId = 1; this.callbacks = {}; this.messageBuffer = []; var main = null; var sender = Object.create(EventEmitter); var _self = this; this.$worker = {}; this.$worker.terminate = function() {}; this.$worker.postMessage = function(e) { _self.messageBuffer.push(e); main && setTimeout(processNext); }; var processNext = function() { var msg = _self.messageBuffer.shift(); if (msg.command) main[msg.command].apply(main, msg.args); else if (msg.event) sender._emit(msg.event, msg.data); }; sender.postMessage = function(msg) { _self.onMessage({data: msg}); }; sender.callback = function(data, callbackId) { this.postMessage({type: "call", id: callbackId, data: data}); }; sender.emit = function(name, data) { this.postMessage({type: "event", name: name, data: data}); }; config.loadModule(["worker", mod], function(Main) { main = new Main[classname](sender); while (_self.messageBuffer.length) processNext(); }); }; UIWorkerClient.prototype = WorkerClient.prototype; exports.UIWorkerClient = UIWorkerClient; exports.WorkerClient = WorkerClient; }); define('ace/placeholder', ['require', 'exports', 'module' , 'ace/range', 'ace/lib/event_emitter', 'ace/lib/oop'], function(require, exports, module) { var Range = require("./range").Range; var EventEmitter = require("./lib/event_emitter").EventEmitter; var oop = require("./lib/oop"); var PlaceHolder = function(session, length, pos, others, mainClass, othersClass) { var _self = this; this.length = length; this.session = session; this.doc = session.getDocument(); this.mainClass = mainClass; this.othersClass = othersClass; this.$onUpdate = this.onUpdate.bind(this); this.doc.on("change", this.$onUpdate); this.$others = others; this.$onCursorChange = function() { setTimeout(function() { _self.onCursorChange(); }); }; this.$pos = pos; var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1}; this.$undoStackDepth = undoStack.length; this.setup(); session.selection.on("changeCursor", this.$onCursorChange); }; (function() { oop.implement(this, EventEmitter); this.setup = function() { var _self = this; var doc = this.doc; var session = this.session; var pos = this.$pos; this.pos = doc.createAnchor(pos.row, pos.column); this.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false); this.pos.on("change", function(event) { session.removeMarker(_self.markerId); _self.markerId = session.addMarker(new Range(event.value.row, event.value.column, event.value.row, event.value.column+_self.length), _self.mainClass, null, false); }); this.others = []; this.$others.forEach(function(other) { var anchor = doc.createAnchor(other.row, other.column); _self.others.push(anchor); }); session.setUndoSelect(false); }; this.showOtherMarkers = function() { if(this.othersActive) return; var session = this.session; var _self = this; this.othersActive = true; this.others.forEach(function(anchor) { anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false); anchor.on("change", function(event) { session.removeMarker(anchor.markerId); anchor.markerId = session.addMarker(new Range(event.value.row, event.value.column, event.value.row, event.value.column+_self.length), _self.othersClass, null, false); }); }); }; this.hideOtherMarkers = function() { if(!this.othersActive) return; this.othersActive = false; for (var i = 0; i < this.others.length; i++) { this.session.removeMarker(this.others[i].markerId); } }; this.onUpdate = function(event) { var delta = event.data; var range = delta.range; if(range.start.row !== range.end.row) return; if(range.start.row !== this.pos.row) return; if (this.$updating) return; this.$updating = true; var lengthDiff = delta.action === "insertText" ? range.end.column - range.start.column : range.start.column - range.end.column; if(range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1) { var distanceFromStart = range.start.column - this.pos.column; this.length += lengthDiff; if(!this.session.$fromUndo) { if(delta.action === "insertText") { for (var i = this.others.length - 1; i >= 0; i--) { var otherPos = this.others[i]; var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; if(otherPos.row === range.start.row && range.start.column < otherPos.column) newPos.column += lengthDiff; this.doc.insert(newPos, delta.text); } } else if(delta.action === "removeText") { for (var i = this.others.length - 1; i >= 0; i--) { var otherPos = this.others[i]; var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; if(otherPos.row === range.start.row && range.start.column < otherPos.column) newPos.column += lengthDiff; this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff)); } } if(range.start.column === this.pos.column && delta.action === "insertText") { setTimeout(function() { this.pos.setPosition(this.pos.row, this.pos.column - lengthDiff); for (var i = 0; i < this.others.length; i++) { var other = this.others[i]; var newPos = {row: other.row, column: other.column - lengthDiff}; if(other.row === range.start.row && range.start.column < other.column) newPos.column += lengthDiff; other.setPosition(newPos.row, newPos.column); } }.bind(this), 0); } else if(range.start.column === this.pos.column && delta.action === "removeText") { setTimeout(function() { for (var i = 0; i < this.others.length; i++) { var other = this.others[i]; if(other.row === range.start.row && range.start.column < other.column) { other.setPosition(other.row, other.column - lengthDiff); } } }.bind(this), 0); } } this.pos._emit("change", {value: this.pos}); for (var i = 0; i < this.others.length; i++) { this.others[i]._emit("change", {value: this.others[i]}); } } this.$updating = false; }; this.onCursorChange = function(event) { if (this.$updating) return; var pos = this.session.selection.getCursor(); if(pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) { this.showOtherMarkers(); this._emit("cursorEnter", event); } else { this.hideOtherMarkers(); this._emit("cursorLeave", event); } }; this.detach = function() { this.session.removeMarker(this.markerId); this.hideOtherMarkers(); this.doc.removeEventListener("change", this.$onUpdate); this.session.selection.removeEventListener("changeCursor", this.$onCursorChange); this.pos.detach(); for (var i = 0; i < this.others.length; i++) { this.others[i].detach(); } this.session.setUndoSelect(true); }; this.cancel = function() { if(this.$undoStackDepth === -1) throw Error("Canceling placeholders only supported with undo manager attached to session."); var undoManager = this.session.getUndoManager(); var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth; for (var i = 0; i < undosRequired; i++) { undoManager.undo(true); } }; }).call(PlaceHolder.prototype); exports.PlaceHolder = PlaceHolder; }); define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) { var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; (function() { this.foldingStartMarker = null; this.foldingStopMarker = null; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.foldingStartMarker.test(line)) return "start"; if (foldStyle == "markbeginend" && this.foldingStopMarker && this.foldingStopMarker.test(line)) return "end"; return ""; }; this.getFoldWidgetRange = function(session, foldStyle, row) { return null; }; this.indentationBlock = function(session, row, column) { var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1) return; var startColumn = column || line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { var level = session.getLine(row).search(re); if (level == -1) continue; if (level <= startLevel) break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.openingBracketBlock = function(session, bracket, row, column, typeRe) { var start = {row: row, column: column + 1}; var end = session.$findClosingBracket(bracket, start, typeRe); if (!end) return; var fw = session.foldWidgets[end.row]; if (fw == null) fw = session.getFoldWidget(end.row); if (fw == "start" && end.row > start.row) { end.row --; end.column = session.getLine(end.row).length; } return Range.fromPoints(start, end); }; this.closingBracketBlock = function(session, bracket, row, column, typeRe) { var end = {row: row, column: column}; var start = session.$findOpeningBracket(bracket, end); if (!start) return; start.column++; end.column--; return Range.fromPoints(start, end); }; }).call(FoldMode.prototype); }); define('ace/theme/textmate', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-tm"; exports.cssText = ".ace-tm .ace_gutter {\ background: #f0f0f0;\ color: #333;\ }\ .ace-tm .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-tm .ace_fold {\ background-color: #6B72E6;\ }\ .ace-tm {\ background-color: #FFFFFF;\ }\ .ace-tm .ace_cursor {\ color: black;\ }\ .ace-tm .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-tm .ace_storage,\ .ace-tm .ace_keyword {\ color: blue;\ }\ .ace-tm .ace_constant {\ color: rgb(197, 6, 11);\ }\ .ace-tm .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-tm .ace_constant.ace_language {\ color: rgb(88, 92, 246);\ }\ .ace-tm .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_invalid {\ background-color: rgba(255, 0, 0, 0.1);\ color: red;\ }\ .ace-tm .ace_support.ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-tm .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_support.ace_type,\ .ace-tm .ace_support.ace_class {\ color: rgb(109, 121, 222);\ }\ .ace-tm .ace_keyword.ace_operator {\ color: rgb(104, 118, 135);\ }\ .ace-tm .ace_string {\ color: rgb(3, 106, 7);\ }\ .ace-tm .ace_comment {\ color: rgb(76, 136, 107);\ }\ .ace-tm .ace_comment.ace_doc {\ color: rgb(0, 102, 255);\ }\ .ace-tm .ace_comment.ace_doc.ace_tag {\ color: rgb(128, 159, 191);\ }\ .ace-tm .ace_constant.ace_numeric {\ color: rgb(0, 0, 205);\ }\ .ace-tm .ace_variable {\ color: rgb(49, 132, 149);\ }\ .ace-tm .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-tm .ace_entity.ace_name.ace_function {\ color: #0000A2;\ }\ .ace-tm .ace_heading {\ color: rgb(12, 7, 255);\ }\ .ace-tm .ace_list {\ color:rgb(185, 6, 144);\ }\ .ace-tm .ace_meta.ace_tag {\ color:rgb(0, 22, 142);\ }\ .ace-tm .ace_string.ace_regex {\ color: rgb(255, 0, 0)\ }\ .ace-tm .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-tm.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px white;\ border-radius: 2px;\ }\ .ace-tm .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-tm .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-tm .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-tm .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.07);\ }\ .ace-tm .ace_gutter-active-line {\ background-color : #dcdcdc;\ }\ .ace-tm .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-tm .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ; (function() { window.require(["ace/ace"], function(a) { a && a.config.init(); if (!window.ace) window.ace = {}; for (var key in a) if (a.hasOwnProperty(key)) ace[key] = a[key]; }); })(); ================================================ FILE: browser/plugins/ace/mode-css.js ================================================ /* ***** BEGIN LICENSE BLOCK ***** * Distributed under the BSD license: * * Copyright (c) 2010, Ajax.org B.V. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Ajax.org B.V. nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ***** END LICENSE BLOCK ***** */ define('ace/mode/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/css_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/worker/worker_client', 'ace/mode/behaviour/css', 'ace/mode/folding/cstyle'], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; }).call(Mode.prototype); exports.Mode = Mode; }); define('ace/mode/css_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) { var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); define('ace/mode/behaviour/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) { var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) { var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var autoInsertedBrackets = 0; var autoInsertedRow = -1; var autoInsertedLineEnd = ""; var maybeInsertedBrackets = 0; var maybeInsertedRow = -1; var maybeInsertedLineStart = ""; var maybeInsertedLineEnd = ""; var CstyleBehaviour = function () { CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0])) autoInsertedBrackets = 0; autoInsertedRow = cursor.row; autoInsertedLineEnd = bracket + line.substr(cursor.column); autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) maybeInsertedBrackets = 0; maybeInsertedRow = cursor.row; maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; maybeInsertedLineEnd = line.substr(cursor.column); maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return autoInsertedBrackets > 0 && cursor.row === autoInsertedRow && bracket === autoInsertedLineEnd[0] && line.substr(cursor.column) === autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return maybeInsertedBrackets > 0 && cursor.row === maybeInsertedRow && line.substr(cursor.column) === maybeInsertedLineEnd && line.substr(0, cursor.column) == maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { autoInsertedLineEnd = autoInsertedLineEnd.substr(1); autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { maybeInsertedBrackets = 0; maybeInsertedRow = -1; }; this.add("braces", "insertion", function (state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column])) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}' || closing !== "") { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString()); var next_indent = this.$getIndent(line); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } } }); this.add("braces", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function (state, action, editor, session, text) { if (text == '(') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function (state, action, editor, session, text) { if (text == '[') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); if (leftChar == '\\') { return null; } var tokens = session.getTokens(selection.start.row); var col = 0, token; var quotepos = -1; // Track whether we're inside an open quote. for (var x = 0; x < tokens.length; x++) { token = tokens[x]; if (token.type == "string") { quotepos = -1; } else if (quotepos < 0) { quotepos = token.value.indexOf(quote); } if ((token.value.length + col) > selection.start.column) { break; } col += tokens[x].value.length; } if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) { if (!CstyleBehaviour.isSaneInsertion(editor, session)) return; return { text: quote + quote, selection: [1,1] }; } else if (token && token.type === "string") { var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == quote) { return { text: '', selection: [1, 1] }; } } } } }); this.add("string_dquotes", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) { var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; }).call(FoldMode.prototype); }); ================================================ FILE: browser/plugins/ace/mode-glsl.js ================================================ /* ***** BEGIN LICENSE BLOCK ***** * Distributed under the BSD license: * * Copyright (c) 2010, Ajax.org B.V. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Ajax.org B.V. nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ***** END LICENSE BLOCK ***** */ define('ace/mode/glsl', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/c_cpp', 'ace/tokenizer', 'ace/mode/glsl_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) { var oop = require("../lib/oop"); var CMode = require("./c_cpp").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var glslHighlightRules = require("./glsl_highlight_rules").glslHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = glslHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, CMode); exports.Mode = Mode; }); define('ace/mode/c_cpp', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/c_cpp_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = c_cppHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; }).call(Mode.prototype); exports.Mode = Mode; }); define('ace/mode/c_cpp_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var cFunctions = exports.cFunctions = "\\s*\\bhypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len)))\\b" var c_cppHighlightRules = function() { var keywordControls = ( "break|case|continue|default|do|else|for|goto|if|_Pragma|" + "return|switch|while|catch|operator|try|throw|using" ); var storageType = ( "asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|" + "_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|" + "class|wchar_t|template" ); var storageModifiers = ( "const|extern|register|restrict|static|volatile|inline|private:|" + "protected:|public:|friend|explicit|virtual|export|mutable|typename" ); var keywordOperators = ( "and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq" + "const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace" ); var builtinConstants = ( "NULL|true|false|TRUE|FALSE" ); var keywordMapper = this.$keywords = this.createKeywordMapper({ "keyword.control" : keywordControls, "storage.type" : storageType, "storage.modifier" : storageModifiers, "keyword.operator" : keywordOperators, "variable.language": "this", "constant.language": builtinConstants }, "identifier"); var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\d\\$_\u00a1-\uffff]*\\b"; this.$rules = { "start" : [ { token : "comment", regex : "\\/\\/.*$" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '["].*\\\\$', next : "qqstring" }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "string", // multi line string start regex : "['].*\\\\$", next : "qstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "keyword", // pre-compiler directives regex : "#\\s*(?:include|import|pragma|line|define|undef|if|ifdef|else|elif|ifndef)\\b", next : "directive" }, { token : "keyword", // special case pre-compiler directive regex : "(?:#\\s*endif)\\b" }, { token : "support.function.C99.c", regex : cFunctions }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)" }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\." }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { token : "string", regex : '.+' } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { token : "string", regex : '.+' } ], "directive" : [ { token : "constant.other.multiline", regex : /\\/ }, { token : "constant.other.multiline", regex : /.*\\/ }, { token : "constant.other", regex : "\\s*<.+?>", next : "start" }, { token : "constant.other", // single line regex : '\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]', next : "start" }, { token : "constant.other", // single line regex : "\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']", next : "start" }, { token : "constant.other", regex : /[^\\\/]+/, next : "start" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(c_cppHighlightRules, TextHighlightRules); exports.c_cppHighlightRules = c_cppHighlightRules; }); define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, { token : "comment.doc.tag", regex : "\\bTODO\\b" }, { defaultToken : "comment.doc" }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) { var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) { var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var autoInsertedBrackets = 0; var autoInsertedRow = -1; var autoInsertedLineEnd = ""; var maybeInsertedBrackets = 0; var maybeInsertedRow = -1; var maybeInsertedLineStart = ""; var maybeInsertedLineEnd = ""; var CstyleBehaviour = function () { CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0])) autoInsertedBrackets = 0; autoInsertedRow = cursor.row; autoInsertedLineEnd = bracket + line.substr(cursor.column); autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) maybeInsertedBrackets = 0; maybeInsertedRow = cursor.row; maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; maybeInsertedLineEnd = line.substr(cursor.column); maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return autoInsertedBrackets > 0 && cursor.row === autoInsertedRow && bracket === autoInsertedLineEnd[0] && line.substr(cursor.column) === autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return maybeInsertedBrackets > 0 && cursor.row === maybeInsertedRow && line.substr(cursor.column) === maybeInsertedLineEnd && line.substr(0, cursor.column) == maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { autoInsertedLineEnd = autoInsertedLineEnd.substr(1); autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { maybeInsertedBrackets = 0; maybeInsertedRow = -1; }; this.add("braces", "insertion", function (state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column])) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}' || closing !== "") { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString()); var next_indent = this.$getIndent(line); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } } }); this.add("braces", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function (state, action, editor, session, text) { if (text == '(') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function (state, action, editor, session, text) { if (text == '[') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); if (leftChar == '\\') { return null; } var tokens = session.getTokens(selection.start.row); var col = 0, token; var quotepos = -1; // Track whether we're inside an open quote. for (var x = 0; x < tokens.length; x++) { token = tokens[x]; if (token.type == "string") { quotepos = -1; } else if (quotepos < 0) { quotepos = token.value.indexOf(quote); } if ((token.value.length + col) > selection.start.column) { break; } col += tokens[x].value.length; } if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) { if (!CstyleBehaviour.isSaneInsertion(editor, session)) return; return { text: quote + quote, selection: [1,1] }; } else if (token && token.type === "string") { var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == quote) { return { text: '', selection: [1, 1] }; } } } } }); this.add("string_dquotes", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) { var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; }).call(FoldMode.prototype); }); define('ace/mode/glsl_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/c_cpp_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules; var glslHighlightRules = function() { var keywords = ( "attribute|const|uniform|varying|break|continue|do|for|while|" + "if|else|in|out|inout|float|int|void|bool|true|false|" + "lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|" + "mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|" + "samplerCube|struct" ); var buildinConstants = ( "radians|degrees|sin|cos|tan|asin|acos|atan|pow|" + "exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|" + "min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|" + "normalize|faceforward|reflect|refract|matrixCompMult|lessThan|" + "lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|" + "not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|" + "texture2DProjLod|textureCube|textureCubeLod|" + "gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|" + "gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|" + "gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|" + "gl_DepthRangeParameters|gl_DepthRange|" + "gl_Position|gl_PointSize|" + "gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData" ); var keywordMapper = this.createKeywordMapper({ "variable.language": "this", "keyword": keywords, "constant.language": buildinConstants }, "identifier"); this.$rules = new c_cppHighlightRules().$rules; this.$rules.start.forEach(function(rule) { if (typeof rule.token == "function") rule.token = keywordMapper; }) }; oop.inherits(glslHighlightRules, c_cppHighlightRules); exports.glslHighlightRules = glslHighlightRules; }); ================================================ FILE: browser/plugins/ace/mode-html.js ================================================ /* ***** BEGIN LICENSE BLOCK ***** * Distributed under the BSD license: * * Copyright (c) 2010, Ajax.org B.V. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Ajax.org B.V. nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ***** END LICENSE BLOCK ***** */ define('ace/mode/html', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/mode/javascript', 'ace/mode/css', 'ace/tokenizer', 'ace/mode/html_highlight_rules', 'ace/mode/behaviour/html', 'ace/mode/folding/html', 'ace/mode/html_completions'], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var Mode = function() { this.HighlightRules = HtmlHighlightRules; this.$behaviour = new HtmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; }).call(Mode.prototype); exports.Mode = Mode; }); define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; }).call(Mode.prototype); exports.Mode = Mode; }); define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|[!$%&*+\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=/, next : "start" }, { token : "punctuation.operator", regex : /\?|\:|\,|\;|\./, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token : "keyword.operator", regex : /\/=?/, next : "start" }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/\\w*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment"} ], "comment" : [ {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment"} ], "line_comment_regex_allowed" : [ {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment"} ], "line_comment" : [ {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment"} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, { token : "comment.doc.tag", regex : "\\bTODO\\b" }, { defaultToken : "comment.doc" }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) { var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) { var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var autoInsertedBrackets = 0; var autoInsertedRow = -1; var autoInsertedLineEnd = ""; var maybeInsertedBrackets = 0; var maybeInsertedRow = -1; var maybeInsertedLineStart = ""; var maybeInsertedLineEnd = ""; var CstyleBehaviour = function () { CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0])) autoInsertedBrackets = 0; autoInsertedRow = cursor.row; autoInsertedLineEnd = bracket + line.substr(cursor.column); autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) maybeInsertedBrackets = 0; maybeInsertedRow = cursor.row; maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; maybeInsertedLineEnd = line.substr(cursor.column); maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return autoInsertedBrackets > 0 && cursor.row === autoInsertedRow && bracket === autoInsertedLineEnd[0] && line.substr(cursor.column) === autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return maybeInsertedBrackets > 0 && cursor.row === maybeInsertedRow && line.substr(cursor.column) === maybeInsertedLineEnd && line.substr(0, cursor.column) == maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { autoInsertedLineEnd = autoInsertedLineEnd.substr(1); autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { maybeInsertedBrackets = 0; maybeInsertedRow = -1; }; this.add("braces", "insertion", function (state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column])) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}' || closing !== "") { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString()); var next_indent = this.$getIndent(line); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } } }); this.add("braces", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function (state, action, editor, session, text) { if (text == '(') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function (state, action, editor, session, text) { if (text == '[') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); if (leftChar == '\\') { return null; } var tokens = session.getTokens(selection.start.row); var col = 0, token; var quotepos = -1; // Track whether we're inside an open quote. for (var x = 0; x < tokens.length; x++) { token = tokens[x]; if (token.type == "string") { quotepos = -1; } else if (quotepos < 0) { quotepos = token.value.indexOf(quote); } if ((token.value.length + col) > selection.start.column) { break; } col += tokens[x].value.length; } if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) { if (!CstyleBehaviour.isSaneInsertion(editor, session)) return; return { text: quote + quote, selection: [1,1] }; } else if (token && token.type === "string") { var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == quote) { return { text: '', selection: [1, 1] }; } } } } }); this.add("string_dquotes", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) { var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; }).call(FoldMode.prototype); }); define('ace/mode/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/css_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/worker/worker_client', 'ace/mode/behaviour/css', 'ace/mode/folding/cstyle'], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; }).call(Mode.prototype); exports.Mode = Mode; }); define('ace/mode/css_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); define('ace/mode/behaviour/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) { var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); define('ace/mode/html_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/css_highlight_rules', 'ace/mode/javascript_highlight_rules', 'ace/mode/xml_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "space" }, { token : "entity.other.attribute-name", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.separator", regex : "=", push : [{ include: "space" }, { token : "string", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "string" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation.begin", "meta.tag.name" + (group ? "." + group : "")]; }, regex : "(<)([-_a-zA-Z0-9:]+)", next: "start_tag_stuff" }, { token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation.begin", "meta.tag.name" + (group ? "." + group : "")]; }, regex : "(", next : "start"} ], end_tag_stuff: [ {include : "space"}, {token : "meta.tag.punctuation.end", regex : ">", next : "start"} ] }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); define('ace/mode/xml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var xmlUtil = require("./xml_util"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "punctuation.string.begin", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.instruction.begin", "keyword.instruction"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_declaration" }, { token : ["punctuation.instruction.begin", "keyword.instruction"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "instruction" }, {token : "comment", regex : "<\\!--", next : "comment"}, { token : ["punctuation.doctype.begin", "meta.tag.doctype"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype" }, {include : "tag"}, {include : "reference"} ], xml_declaration : [ {include : "attributes"}, {include : "instruction"} ], instruction : [ {token : "punctuation.instruction.end", regex : "\\?>", next : "start"} ], doctype : [ {include : "space"}, {include : "string"}, {token : "punctuation.doctype.end", regex : ">", next : "start"}, {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.begin", regex : "\\[", push : "declarations"} ], declarations : [{ token : "text", regex : "\\s+" }, { token: "punctuation.end", regex: "]", next: "pop" }, { token : ["punctuation.begin", "keyword"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.end", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.end", regex : "\\]\\]>", next : "start"}, {token : "text", regex : "\\s+"}, {token : "text", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment", regex : "-->", next : "start"}, {defaultToken : "comment"} ], tag : [{ token : ["meta.tag.punctuation.begin", "meta.tag.name"], regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"} ] }, { token : ["meta.tag.punctuation.begin", "meta.tag.name"], regex : "(", next : "start"} ] }], space : [ {token : "text", regex : "\\s+"} ], reference : [{ token : "constant.language.escape", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }, { token : "invalid.illegal", regex : "&" }], string: [{ token : "string", regex : "'", push : "qstring_inner" }, { token : "string", regex : '"', push : "qqstring_inner" }], qstring_inner: [ {token : "string", regex: "'", next: "pop"}, {include : "reference"}, {defaultToken : "string"} ], qqstring_inner: [ {token : "string", regex: '"', next: "pop"}, {include : "reference"}, {defaultToken : "string"} ], attributes: [{ token : "entity.other.attribute-name", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.separator", regex : "=" }, { include : "space" }, { include : "string" }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag], regex : "(<)(" + tag + ")", next: [ {include : "space"}, {include : "attributes"}, {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "space"}, {token : "meta.tag.punctuation.end", regex : ">", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag], regex : "(" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); define('ace/mode/xml_util', ['require', 'exports', 'module' ], function(require, exports, module) { function string(state) { return [{ token : "string", regex : '"', next : state + "_qqstring" }, { token : "string", regex : "'", next : state + "_qstring" }]; } function multiLineString(quote, state) { return [ {token : "string", regex : quote, next : state}, { token : "constant.language.escape", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }, {defaultToken : "string"} ]; } exports.tag = function(states, name, nextState, tagMap) { states[name] = [{ token : "text", regex : "\\s+" }, { token : !tagMap ? "meta.tag.tag-name" : function(value) { if (tagMap[value]) return "meta.tag.tag-name." + tagMap[value]; else return "meta.tag.tag-name"; }, regex : "[-_a-zA-Z0-9:]+", next : name + "_embed_attribute_list" }, { token: "empty", regex: "", next : name + "_embed_attribute_list" }]; states[name + "_qstring"] = multiLineString("'", name + "_embed_attribute_list"); states[name + "_qqstring"] = multiLineString("\"", name + "_embed_attribute_list"); states[name + "_embed_attribute_list"] = [{ token : "meta.tag.r", regex : "/?>", next : nextState }, { token : "keyword.operator", regex : "=" }, { token : "entity.other.attribute-name", regex : "[-_a-zA-Z0-9:]+" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "text", regex : "\\s+" }].concat(string(name)); }; }); define('ace/mode/behaviour/html', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour/xml', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) { var oop = require("../../lib/oop"); var XmlBehaviour = require("../behaviour/xml").XmlBehaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var voidElements = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr']; function hasType(token, type) { var tokenTypes = token.type.split('.'); return type.split('.').every(function(type){ return (tokenTypes.indexOf(type) !== -1); }); return hasType; } var HtmlBehaviour = function () { this.inherit(XmlBehaviour); // Get xml behaviour this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken(); if (token && hasType(token, 'string') && iterator.getCurrentTokenColumn() + token.value.length > position.column) return; var atCursor = false; if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){ do { token = iterator.stepBackward(); } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text'))); } else { atCursor = true; } if (!token || !hasType(token, 'meta.tag.name') || iterator.stepBackward().value.match('/')) { return; } var element = token.value; if (atCursor){ var element = element.substring(0, position.column - token.start); } if (voidElements.indexOf(element) !== -1){ return; } return { text: '>' + '', selection: [1, 1] } } }); } oop.inherits(HtmlBehaviour, XmlBehaviour); exports.HtmlBehaviour = HtmlBehaviour; }); define('ace/mode/behaviour/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) { var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; function hasType(token, type) { var tokenTypes = token.type.split('.'); return type.split('.').every(function(type){ return (tokenTypes.indexOf(type) !== -1); }); return hasType; } var XmlBehaviour = function () { this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken(); if (token && hasType(token, 'string') && iterator.getCurrentTokenColumn() + token.value.length > position.column) return; var atCursor = false; if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){ do { token = iterator.stepBackward(); } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text'))); } else { atCursor = true; } if (!token || !hasType(token, 'meta.tag.name') || iterator.stepBackward().value.match('/')) { return; } var tag = token.value; if (atCursor){ var tag = tag.substring(0, position.column - token.start); } return { text: '>' + '', selection: [1, 1] } } }); this.add('autoindent', 'insertion', function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var rightChars = line.substring(cursor.column, cursor.column + 2); if (rightChars == '?)/; this._parseTag = function(tag) { var match = tag.match(this.tagRe); var column = 0; return { value: tag, match: match ? match[2] : "", closing: match ? !!match[3] : false, selfClosing: match ? !!match[5] || match[2] == "/>" : false, tagName: match ? match[4] : "", column: match[1] ? column + match[1].length : column }; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var value = ""; var start; do { if (token.type.lastIndexOf("meta.tag", 0) === 0) { if (!start) { var start = { row: iterator.getCurrentTokenRow(), column: iterator.getCurrentTokenColumn() }; } value += token.value; if (value.indexOf(">") !== -1) { var tag = this._parseTag(value); tag.start = start; tag.end = { row: iterator.getCurrentTokenRow(), column: iterator.getCurrentTokenColumn() + token.value.length }; iterator.stepForward(); return tag; } } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var value = ""; var end; do { if (token.type.lastIndexOf("meta.tag", 0) === 0) { if (!end) { end = { row: iterator.getCurrentTokenRow(), column: iterator.getCurrentTokenColumn() + token.value.length }; } value = token.value + value; if (value.indexOf("<") !== -1) { var tag = this._parseTag(value); tag.end = end; tag.start = { row: iterator.getCurrentTokenRow(), column: iterator.getCurrentTokenColumn() }; iterator.stepBackward(); return tag; } } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.voidElements[tag.tagName]) { return; } else if (this.voidElements[top.tagName]) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag.match) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.column); var start = { row: row, column: firstTag.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag) } } } else { var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length); var end = { row: row, column: firstTag.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag) } } } }; }).call(FoldMode.prototype); }); define('ace/mode/html_completions', ['require', 'exports', 'module' , 'ace/token_iterator'], function(require, exports, module) { var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var allElements = Object.keys(attributeMap); function hasType(token, type) { var tokenTypes = token.type.split('.'); return type.split('.').every(function(type){ return (tokenTypes.indexOf(type) !== -1); }); } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); if (!token || !hasType(token, 'tag') && !(hasType(token, 'text') && token.value.match('/'))){ do { token = iterator.stepBackward(); } while (token && (hasType(token, 'string') || hasType(token, 'operator') || hasType(token, 'attribute-name') || hasType(token, 'text'))); } if (token && hasType(token, 'tag-name') && !iterator.stepBackward().value.match('/')) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (hasType(token, "tag-name") || (token.value == '<' && hasType(token, "text"))) return this.getTagCompletions(state, session, pos, prefix); if (hasType(token, 'text') || hasType(token, 'attribute-name')) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { var elements = allElements; if (prefix) { elements = elements.filter(function(element){ return element.indexOf(prefix) === 0; }); } return elements.map(function(element){ return { value: element, meta: "tag" }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } if (prefix) { attributes = attributes.filter(function(attribute){ return attribute.indexOf(prefix) === 0; }); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute" }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ================================================ FILE: browser/plugins/ace/mode-javascript.js ================================================ /* ***** BEGIN LICENSE BLOCK ***** * Distributed under the BSD license: * * Copyright (c) 2010, Ajax.org B.V. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Ajax.org B.V. nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ***** END LICENSE BLOCK ***** */ define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; }).call(Mode.prototype); exports.Mode = Mode; }); define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|[!$%&*+\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=/, next : "start" }, { token : "punctuation.operator", regex : /\?|\:|\,|\;|\./, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token : "keyword.operator", regex : /\/=?/, next : "start" }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/\\w*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment"} ], "comment" : [ {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment"} ], "line_comment_regex_allowed" : [ {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment"} ], "line_comment" : [ {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment"} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, { token : "comment.doc.tag", regex : "\\bTODO\\b" }, { defaultToken : "comment.doc" }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) { var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) { var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var autoInsertedBrackets = 0; var autoInsertedRow = -1; var autoInsertedLineEnd = ""; var maybeInsertedBrackets = 0; var maybeInsertedRow = -1; var maybeInsertedLineStart = ""; var maybeInsertedLineEnd = ""; var CstyleBehaviour = function () { CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0])) autoInsertedBrackets = 0; autoInsertedRow = cursor.row; autoInsertedLineEnd = bracket + line.substr(cursor.column); autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) maybeInsertedBrackets = 0; maybeInsertedRow = cursor.row; maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; maybeInsertedLineEnd = line.substr(cursor.column); maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return autoInsertedBrackets > 0 && cursor.row === autoInsertedRow && bracket === autoInsertedLineEnd[0] && line.substr(cursor.column) === autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return maybeInsertedBrackets > 0 && cursor.row === maybeInsertedRow && line.substr(cursor.column) === maybeInsertedLineEnd && line.substr(0, cursor.column) == maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { autoInsertedLineEnd = autoInsertedLineEnd.substr(1); autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { maybeInsertedBrackets = 0; maybeInsertedRow = -1; }; this.add("braces", "insertion", function (state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column])) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}' || closing !== "") { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString()); var next_indent = this.$getIndent(line); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } } }); this.add("braces", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function (state, action, editor, session, text) { if (text == '(') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function (state, action, editor, session, text) { if (text == '[') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); if (leftChar == '\\') { return null; } var tokens = session.getTokens(selection.start.row); var col = 0, token; var quotepos = -1; // Track whether we're inside an open quote. for (var x = 0; x < tokens.length; x++) { token = tokens[x]; if (token.type == "string") { quotepos = -1; } else if (quotepos < 0) { quotepos = token.value.indexOf(quote); } if ((token.value.length + col) > selection.start.column) { break; } col += tokens[x].value.length; } if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) { if (!CstyleBehaviour.isSaneInsertion(editor, session)) return; return { text: quote + quote, selection: [1,1] }; } else if (token && token.type === "string") { var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == quote) { return { text: '', selection: [1, 1] }; } } } } }); this.add("string_dquotes", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) { var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; }).call(FoldMode.prototype); }); ================================================ FILE: browser/plugins/ace/mode-json.js ================================================ /* ***** BEGIN LICENSE BLOCK ***** * Distributed under the BSD license: * * Copyright (c) 2010, Ajax.org B.V. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Ajax.org B.V. nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ***** END LICENSE BLOCK ***** */ define('ace/mode/json', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/json_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle', 'ace/worker/worker_client'], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var HighlightRules = require("./json_highlight_rules").JsonHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var WorkerClient = require("../worker/worker_client").WorkerClient; var Mode = function() { this.HighlightRules = HighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/json_worker", "JsonWorker"); worker.attachToDocument(session.getDocument()); worker.on("error", function(e) { session.setAnnotations([e.data]); }); worker.on("ok", function() { session.clearAnnotations(); }); return worker; }; }).call(Mode.prototype); exports.Mode = Mode; }); define('ace/mode/json_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JsonHighlightRules = function() { this.$rules = { "start" : [ { token : "variable", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)' }, { token : "string", // single line regex : '"', next : "string" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : "invalid.illegal", // single quoted strings are not allowed regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "invalid.illegal", // comments are not allowed regex : "\\/\\/.*$" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "string" : [ { token : "constant.language.escape", regex : /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/ }, { token : "string", regex : '[^"\\\\]+' }, { token : "string", regex : '"', next : "start" }, { token : "string", regex : "", next : "start" } ] }; }; oop.inherits(JsonHighlightRules, TextHighlightRules); exports.JsonHighlightRules = JsonHighlightRules; }); define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) { var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) { var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var autoInsertedBrackets = 0; var autoInsertedRow = -1; var autoInsertedLineEnd = ""; var maybeInsertedBrackets = 0; var maybeInsertedRow = -1; var maybeInsertedLineStart = ""; var maybeInsertedLineEnd = ""; var CstyleBehaviour = function () { CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0])) autoInsertedBrackets = 0; autoInsertedRow = cursor.row; autoInsertedLineEnd = bracket + line.substr(cursor.column); autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) maybeInsertedBrackets = 0; maybeInsertedRow = cursor.row; maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; maybeInsertedLineEnd = line.substr(cursor.column); maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return autoInsertedBrackets > 0 && cursor.row === autoInsertedRow && bracket === autoInsertedLineEnd[0] && line.substr(cursor.column) === autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return maybeInsertedBrackets > 0 && cursor.row === maybeInsertedRow && line.substr(cursor.column) === maybeInsertedLineEnd && line.substr(0, cursor.column) == maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { autoInsertedLineEnd = autoInsertedLineEnd.substr(1); autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { maybeInsertedBrackets = 0; maybeInsertedRow = -1; }; this.add("braces", "insertion", function (state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column])) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}' || closing !== "") { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString()); var next_indent = this.$getIndent(line); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } } }); this.add("braces", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function (state, action, editor, session, text) { if (text == '(') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function (state, action, editor, session, text) { if (text == '[') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); if (leftChar == '\\') { return null; } var tokens = session.getTokens(selection.start.row); var col = 0, token; var quotepos = -1; // Track whether we're inside an open quote. for (var x = 0; x < tokens.length; x++) { token = tokens[x]; if (token.type == "string") { quotepos = -1; } else if (quotepos < 0) { quotepos = token.value.indexOf(quote); } if ((token.value.length + col) > selection.start.column) { break; } col += tokens[x].value.length; } if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) { if (!CstyleBehaviour.isSaneInsertion(editor, session)) return; return { text: quote + quote, selection: [1,1] }; } else if (token && token.type === "string") { var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == quote) { return { text: '', selection: [1, 1] }; } } } } }); this.add("string_dquotes", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) { var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; }).call(FoldMode.prototype); }); ================================================ FILE: browser/plugins/ace/mode-svg.js ================================================ /* ***** BEGIN LICENSE BLOCK ***** * Distributed under the BSD license: * * Copyright (c) 2010, Ajax.org B.V. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Ajax.org B.V. nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ***** END LICENSE BLOCK ***** */ define('ace/mode/svg', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml', 'ace/mode/javascript', 'ace/tokenizer', 'ace/mode/svg_highlight_rules', 'ace/mode/folding/mixed', 'ace/mode/folding/xml', 'ace/mode/folding/cstyle'], function(require, exports, module) { var oop = require("../lib/oop"); var XmlMode = require("./xml").Mode; var JavaScriptMode = require("./javascript").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var SvgHighlightRules = require("./svg_highlight_rules").SvgHighlightRules; var MixedFoldMode = require("./folding/mixed").FoldMode; var XmlFoldMode = require("./folding/xml").FoldMode; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { XmlMode.call(this); this.HighlightRules = SvgHighlightRules; this.createModeDelegates({ "js-": JavaScriptMode }); this.foldingRules = new MixedFoldMode(new XmlFoldMode({}), { "js-": new CStyleFoldMode() }); }; oop.inherits(Mode, XmlMode); (function() { this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; }).call(Mode.prototype); exports.Mode = Mode; }); define('ace/mode/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/xml_highlight_rules', 'ace/mode/behaviour/xml', 'ace/mode/folding/xml'], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var XmlFoldMode = require("./folding/xml").FoldMode; var Mode = function() { this.HighlightRules = XmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.foldingRules = new XmlFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; }).call(Mode.prototype); exports.Mode = Mode; }); define('ace/mode/xml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var xmlUtil = require("./xml_util"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "punctuation.string.begin", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.instruction.begin", "keyword.instruction"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_declaration" }, { token : ["punctuation.instruction.begin", "keyword.instruction"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "instruction" }, {token : "comment", regex : "<\\!--", next : "comment"}, { token : ["punctuation.doctype.begin", "meta.tag.doctype"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype" }, {include : "tag"}, {include : "reference"} ], xml_declaration : [ {include : "attributes"}, {include : "instruction"} ], instruction : [ {token : "punctuation.instruction.end", regex : "\\?>", next : "start"} ], doctype : [ {include : "space"}, {include : "string"}, {token : "punctuation.doctype.end", regex : ">", next : "start"}, {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.begin", regex : "\\[", push : "declarations"} ], declarations : [{ token : "text", regex : "\\s+" }, { token: "punctuation.end", regex: "]", next: "pop" }, { token : ["punctuation.begin", "keyword"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.end", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.end", regex : "\\]\\]>", next : "start"}, {token : "text", regex : "\\s+"}, {token : "text", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment", regex : "-->", next : "start"}, {defaultToken : "comment"} ], tag : [{ token : ["meta.tag.punctuation.begin", "meta.tag.name"], regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"} ] }, { token : ["meta.tag.punctuation.begin", "meta.tag.name"], regex : "(", next : "start"} ] }], space : [ {token : "text", regex : "\\s+"} ], reference : [{ token : "constant.language.escape", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }, { token : "invalid.illegal", regex : "&" }], string: [{ token : "string", regex : "'", push : "qstring_inner" }, { token : "string", regex : '"', push : "qqstring_inner" }], qstring_inner: [ {token : "string", regex: "'", next: "pop"}, {include : "reference"}, {defaultToken : "string"} ], qqstring_inner: [ {token : "string", regex: '"', next: "pop"}, {include : "reference"}, {defaultToken : "string"} ], attributes: [{ token : "entity.other.attribute-name", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.separator", regex : "=" }, { include : "space" }, { include : "string" }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag], regex : "(<)(" + tag + ")", next: [ {include : "space"}, {include : "attributes"}, {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "space"}, {token : "meta.tag.punctuation.end", regex : ">", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag], regex : "(" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); define('ace/mode/xml_util', ['require', 'exports', 'module' ], function(require, exports, module) { function string(state) { return [{ token : "string", regex : '"', next : state + "_qqstring" }, { token : "string", regex : "'", next : state + "_qstring" }]; } function multiLineString(quote, state) { return [ {token : "string", regex : quote, next : state}, { token : "constant.language.escape", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }, {defaultToken : "string"} ]; } exports.tag = function(states, name, nextState, tagMap) { states[name] = [{ token : "text", regex : "\\s+" }, { token : !tagMap ? "meta.tag.tag-name" : function(value) { if (tagMap[value]) return "meta.tag.tag-name." + tagMap[value]; else return "meta.tag.tag-name"; }, regex : "[-_a-zA-Z0-9:]+", next : name + "_embed_attribute_list" }, { token: "empty", regex: "", next : name + "_embed_attribute_list" }]; states[name + "_qstring"] = multiLineString("'", name + "_embed_attribute_list"); states[name + "_qqstring"] = multiLineString("\"", name + "_embed_attribute_list"); states[name + "_embed_attribute_list"] = [{ token : "meta.tag.r", regex : "/?>", next : nextState }, { token : "keyword.operator", regex : "=" }, { token : "entity.other.attribute-name", regex : "[-_a-zA-Z0-9:]+" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "text", regex : "\\s+" }].concat(string(name)); }; }); define('ace/mode/behaviour/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) { var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; function hasType(token, type) { var tokenTypes = token.type.split('.'); return type.split('.').every(function(type){ return (tokenTypes.indexOf(type) !== -1); }); return hasType; } var XmlBehaviour = function () { this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken(); if (token && hasType(token, 'string') && iterator.getCurrentTokenColumn() + token.value.length > position.column) return; var atCursor = false; if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){ do { token = iterator.stepBackward(); } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text'))); } else { atCursor = true; } if (!token || !hasType(token, 'meta.tag.name') || iterator.stepBackward().value.match('/')) { return; } var tag = token.value; if (atCursor){ var tag = tag.substring(0, position.column - token.start); } return { text: '>' + '', selection: [1, 1] } } }); this.add('autoindent', 'insertion', function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var rightChars = line.substring(cursor.column, cursor.column + 2); if (rightChars == ' -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0])) autoInsertedBrackets = 0; autoInsertedRow = cursor.row; autoInsertedLineEnd = bracket + line.substr(cursor.column); autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) maybeInsertedBrackets = 0; maybeInsertedRow = cursor.row; maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; maybeInsertedLineEnd = line.substr(cursor.column); maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return autoInsertedBrackets > 0 && cursor.row === autoInsertedRow && bracket === autoInsertedLineEnd[0] && line.substr(cursor.column) === autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return maybeInsertedBrackets > 0 && cursor.row === maybeInsertedRow && line.substr(cursor.column) === maybeInsertedLineEnd && line.substr(0, cursor.column) == maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { autoInsertedLineEnd = autoInsertedLineEnd.substr(1); autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { maybeInsertedBrackets = 0; maybeInsertedRow = -1; }; this.add("braces", "insertion", function (state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column])) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}' || closing !== "") { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString()); var next_indent = this.$getIndent(line); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } } }); this.add("braces", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function (state, action, editor, session, text) { if (text == '(') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function (state, action, editor, session, text) { if (text == '[') { var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); if (leftChar == '\\') { return null; } var tokens = session.getTokens(selection.start.row); var col = 0, token; var quotepos = -1; // Track whether we're inside an open quote. for (var x = 0; x < tokens.length; x++) { token = tokens[x]; if (token.type == "string") { quotepos = -1; } else if (quotepos < 0) { quotepos = token.value.indexOf(quote); } if ((token.value.length + col) > selection.start.column) { break; } col += tokens[x].value.length; } if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) { if (!CstyleBehaviour.isSaneInsertion(editor, session)) return; return { text: quote + quote, selection: [1,1] }; } else if (token && token.type === "string") { var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == quote) { return { text: '', selection: [1, 1] }; } } } } }); this.add("string_dquotes", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); define('ace/mode/folding/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/range', 'ace/mode/folding/fold_mode', 'ace/token_iterator'], function(require, exports, module) { var oop = require("../../lib/oop"); var lang = require("../../lib/lang"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var TokenIterator = require("../../token_iterator").TokenIterator; var FoldMode = exports.FoldMode = function(voidElements) { BaseFoldMode.call(this); this.voidElements = voidElements || {}; }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (tag.closing) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()]) return ""; if (tag.selfClosing) return ""; if (tag.value.indexOf("/" + tag.tagName) !== -1) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var value = ""; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (token.type.lastIndexOf("meta.tag", 0) === 0) value += token.value; else value += lang.stringRepeat(" ", token.value.length); } return this._parseTag(value); }; this.tagRe = /^(\s*)(?)/; this._parseTag = function(tag) { var match = tag.match(this.tagRe); var column = 0; return { value: tag, match: match ? match[2] : "", closing: match ? !!match[3] : false, selfClosing: match ? !!match[5] || match[2] == "/>" : false, tagName: match ? match[4] : "", column: match[1] ? column + match[1].length : column }; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var value = ""; var start; do { if (token.type.lastIndexOf("meta.tag", 0) === 0) { if (!start) { var start = { row: iterator.getCurrentTokenRow(), column: iterator.getCurrentTokenColumn() }; } value += token.value; if (value.indexOf(">") !== -1) { var tag = this._parseTag(value); tag.start = start; tag.end = { row: iterator.getCurrentTokenRow(), column: iterator.getCurrentTokenColumn() + token.value.length }; iterator.stepForward(); return tag; } } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var value = ""; var end; do { if (token.type.lastIndexOf("meta.tag", 0) === 0) { if (!end) { end = { row: iterator.getCurrentTokenRow(), column: iterator.getCurrentTokenColumn() + token.value.length }; } value = token.value + value; if (value.indexOf("<") !== -1) { var tag = this._parseTag(value); tag.end = end; tag.start = { row: iterator.getCurrentTokenRow(), column: iterator.getCurrentTokenColumn() }; iterator.stepBackward(); return tag; } } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.voidElements[tag.tagName]) { return; } else if (this.voidElements[top.tagName]) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag.match) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.column); var start = { row: row, column: firstTag.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag) } } } else { var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length); var end = { row: row, column: firstTag.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag) } } } }; }).call(FoldMode.prototype); }); define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; }).call(Mode.prototype); exports.Mode = Mode; }); define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|[!$%&*+\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=/, next : "start" }, { token : "punctuation.operator", regex : /\?|\:|\,|\;|\./, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token : "keyword.operator", regex : /\/=?/, next : "start" }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/\\w*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment"} ], "comment" : [ {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment"} ], "line_comment_regex_allowed" : [ {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment"} ], "line_comment" : [ {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment"} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, { token : "comment.doc.tag", regex : "\\bTODO\\b" }, { defaultToken : "comment.doc" }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) { var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) { var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; }).call(FoldMode.prototype); }); define('ace/mode/svg_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/javascript_highlight_rules', 'ace/mode/xml_highlight_rules'], function(require, exports, module) { var oop = require("../lib/oop"); var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var SvgHighlightRules = function() { XmlHighlightRules.call(this); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); this.normalizeRules(); }; oop.inherits(SvgHighlightRules, XmlHighlightRules); exports.SvgHighlightRules = SvgHighlightRules; }); define('ace/mode/folding/mixed', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode'], function(require, exports, module) { var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(defaultMode, subModes) { this.defaultMode = defaultMode; this.subModes = subModes; }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.$getMode = function(state) { if (typeof state != "string") state = state[0]; for (var key in this.subModes) { if (state.indexOf(key) === 0) return this.subModes[key]; } return null; }; this.$tryMode = function(state, session, foldStyle, row) { var mode = this.$getMode(state); return (mode ? mode.getFoldWidget(session, foldStyle, row) : ""); }; this.getFoldWidget = function(session, foldStyle, row) { return ( this.$tryMode(session.getState(row-1), session, foldStyle, row) || this.$tryMode(session.getState(row), session, foldStyle, row) || this.defaultMode.getFoldWidget(session, foldStyle, row) ); }; this.getFoldWidgetRange = function(session, foldStyle, row) { var mode = this.$getMode(session.getState(row-1)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.$getMode(session.getState(row)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.defaultMode; return mode.getFoldWidgetRange(session, foldStyle, row); }; }).call(FoldMode.prototype); }); ================================================ FILE: browser/plugins/ace/src-noconflict/ace.js ================================================ /* ***** BEGIN LICENSE BLOCK ***** * Distributed under the BSD license: * * Copyright (c) 2010, Ajax.org B.V. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Ajax.org B.V. nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ***** END LICENSE BLOCK ***** */ /** * Define a module along with a payload * @param module a name for the payload * @param payload a function to call with (require, exports, module) params */ (function() { var ACE_NAMESPACE = "ace"; var global = (function() { return this; })(); if (!ACE_NAMESPACE && typeof requirejs !== "undefined") return; var _define = function(module, deps, payload) { if (typeof module !== 'string') { if (_define.original) _define.original.apply(window, arguments); else { console.error('dropping module because define wasn\'t a string.'); console.trace(); } return; } if (arguments.length == 2) payload = deps; if (!_define.modules) { _define.modules = {}; _define.payloads = {}; } _define.payloads[module] = payload; _define.modules[module] = null; }; /** * Get at functionality ace.define()ed using the function above */ var _require = function(parentId, module, callback) { if (Object.prototype.toString.call(module) === "[object Array]") { var params = []; for (var i = 0, l = module.length; i < l; ++i) { var dep = lookup(parentId, module[i]); if (!dep && _require.original) return _require.original.apply(window, arguments); params.push(dep); } if (callback) { callback.apply(null, params); } } else if (typeof module === 'string') { var payload = lookup(parentId, module); if (!payload && _require.original) return _require.original.apply(window, arguments); if (callback) { callback(); } return payload; } else { if (_require.original) return _require.original.apply(window, arguments); } }; var normalizeModule = function(parentId, moduleName) { // normalize plugin requires if (moduleName.indexOf("!") !== -1) { var chunks = moduleName.split("!"); return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]); } // normalize relative requires if (moduleName.charAt(0) == ".") { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = base + "/" + moduleName; while(moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } } return moduleName; }; /** * Internal function to lookup moduleNames and resolve them by calling the * definition function if needed. */ var lookup = function(parentId, moduleName) { moduleName = normalizeModule(parentId, moduleName); var module = _define.modules[moduleName]; if (!module) { module = _define.payloads[moduleName]; if (typeof module === 'function') { var exports = {}; var mod = { id: moduleName, uri: '', exports: exports, packaged: true }; var req = function(module, callback) { return _require(moduleName, module, callback); }; var returnValue = module(req, exports, mod); exports = returnValue || mod.exports; _define.modules[moduleName] = exports; delete _define.payloads[moduleName]; } module = _define.modules[moduleName] = exports || module; } return module; }; function exportAce(ns) { var require = function(module, callback) { return _require("", module, callback); }; var root = global; if (ns) { if (!global[ns]) global[ns] = {}; root = global[ns]; } if (!root.define || !root.define.packaged) { _define.original = root.define; root.define = _define; root.define.packaged = true; } if (!root.require || !root.require.packaged) { _require.original = root.require; root.require = require; root.require.packaged = true; } } exportAce(ACE_NAMESPACE); })(); ace.define("ace/lib/regexp",["require","exports","module"], function(require, exports, module) { "use strict"; var real = { exec: RegExp.prototype.exec, test: RegExp.prototype.test, match: String.prototype.match, replace: String.prototype.replace, split: String.prototype.split }, compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups compliantLastIndexIncrement = function () { var x = /^/g; real.test.call(x, ""); return !x.lastIndex; }(); if (compliantLastIndexIncrement && compliantExecNpcg) return; RegExp.prototype.exec = function (str) { var match = real.exec.apply(this, arguments), name, r2; if ( typeof(str) == 'string' && match) { if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) { r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", "")); real.replace.call(str.slice(match.index), r2, function () { for (var i = 1; i < arguments.length - 2; i++) { if (arguments[i] === undefined) match[i] = undefined; } }); } if (this._xregexp && this._xregexp.captureNames) { for (var i = 1; i < match.length; i++) { name = this._xregexp.captureNames[i - 1]; if (name) match[name] = match[i]; } } if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) this.lastIndex--; } return match; }; if (!compliantLastIndexIncrement) { RegExp.prototype.test = function (str) { var match = real.exec.call(this, str); if (match && this.global && !match[0].length && (this.lastIndex > match.index)) this.lastIndex--; return !!match; }; } function getNativeFlags (regex) { return (regex.global ? "g" : "") + (regex.ignoreCase ? "i" : "") + (regex.multiline ? "m" : "") + (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3 (regex.sticky ? "y" : ""); } function indexOf (array, item, from) { if (Array.prototype.indexOf) // Use the native array method if available return array.indexOf(item, from); for (var i = from || 0; i < array.length; i++) { if (array[i] === item) return i; } return -1; } }); ace.define("ace/lib/es5-shim",["require","exports","module"], function(require, exports, module) { function Empty() {} if (!Function.prototype.bind) { Function.prototype.bind = function bind(that) { // .length is 1 var target = this; if (typeof target != "function") { throw new TypeError("Function.prototype.bind called on incompatible " + target); } var args = slice.call(arguments, 1); // for normal call var bound = function () { if (this instanceof bound) { var result = target.apply( this, args.concat(slice.call(arguments)) ); if (Object(result) === result) { return result; } return this; } else { return target.apply( that, args.concat(slice.call(arguments)) ); } }; if(target.prototype) { Empty.prototype = target.prototype; bound.prototype = new Empty(); Empty.prototype = null; } return bound; }; } var call = Function.prototype.call; var prototypeOfArray = Array.prototype; var prototypeOfObject = Object.prototype; var slice = prototypeOfArray.slice; var _toString = call.bind(prototypeOfObject.toString); var owns = call.bind(prototypeOfObject.hasOwnProperty); var defineGetter; var defineSetter; var lookupGetter; var lookupSetter; var supportsAccessors; if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { defineGetter = call.bind(prototypeOfObject.__defineGetter__); defineSetter = call.bind(prototypeOfObject.__defineSetter__); lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); } if ([1,2].splice(0).length != 2) { if(function() { // test IE < 9 to splice bug - see issue #138 function makeArray(l) { var a = new Array(l+2); a[0] = a[1] = 0; return a; } var array = [], lengthBefore; array.splice.apply(array, makeArray(20)); array.splice.apply(array, makeArray(26)); lengthBefore = array.length; //46 array.splice(5, 0, "XXX"); // add one element lengthBefore + 1 == array.length if (lengthBefore + 1 == array.length) { return true;// has right splice implementation without bugs } }()) {//IE 6/7 var array_splice = Array.prototype.splice; Array.prototype.splice = function(start, deleteCount) { if (!arguments.length) { return []; } else { return array_splice.apply(this, [ start === void 0 ? 0 : start, deleteCount === void 0 ? (this.length - start) : deleteCount ].concat(slice.call(arguments, 2))) } }; } else {//IE8 Array.prototype.splice = function(pos, removeCount){ var length = this.length; if (pos > 0) { if (pos > length) pos = length; } else if (pos == void 0) { pos = 0; } else if (pos < 0) { pos = Math.max(length + pos, 0); } if (!(pos+removeCount < length)) removeCount = length - pos; var removed = this.slice(pos, pos+removeCount); var insert = slice.call(arguments, 2); var add = insert.length; if (pos === length) { if (add) { this.push.apply(this, insert); } } else { var remove = Math.min(removeCount, length - pos); var tailOldPos = pos + remove; var tailNewPos = tailOldPos + add - remove; var tailCount = length - tailOldPos; var lengthAfterRemove = length - remove; if (tailNewPos < tailOldPos) { // case A for (var i = 0; i < tailCount; ++i) { this[tailNewPos+i] = this[tailOldPos+i]; } } else if (tailNewPos > tailOldPos) { // case B for (i = tailCount; i--; ) { this[tailNewPos+i] = this[tailOldPos+i]; } } // else, add == remove (nothing to do) if (add && pos === lengthAfterRemove) { this.length = lengthAfterRemove; // truncate array this.push.apply(this, insert); } else { this.length = lengthAfterRemove + add; // reserves space for (i = 0; i < add; ++i) { this[pos+i] = insert[i]; } } } return removed; }; } } if (!Array.isArray) { Array.isArray = function isArray(obj) { return _toString(obj) == "[object Array]"; }; } var boxedString = Object("a"), splitString = boxedString[0] != "a" || !(0 in boxedString); if (!Array.prototype.forEach) { Array.prototype.forEach = function forEach(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, thisp = arguments[1], i = -1, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(); // TODO message } while (++i < length) { if (i in self) { fun.call(thisp, self[i], i, object); } } }; } if (!Array.prototype.map) { Array.prototype.map = function map(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = Array(length), thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) result[i] = fun.call(thisp, self[i], i, object); } return result; }; } if (!Array.prototype.filter) { Array.prototype.filter = function filter(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = [], value, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) { value = self[i]; if (fun.call(thisp, value, i, object)) { result.push(value); } } } return result; }; } if (!Array.prototype.every) { Array.prototype.every = function every(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && !fun.call(thisp, self[i], i, object)) { return false; } } return true; }; } if (!Array.prototype.some) { Array.prototype.some = function some(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && fun.call(thisp, self[i], i, object)) { return true; } } return false; }; } if (!Array.prototype.reduce) { Array.prototype.reduce = function reduce(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduce of empty array with no initial value"); } var i = 0; var result; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i++]; break; } if (++i >= length) { throw new TypeError("reduce of empty array with no initial value"); } } while (true); } for (; i < length; i++) { if (i in self) { result = fun.call(void 0, result, self[i], i, object); } } return result; }; } if (!Array.prototype.reduceRight) { Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduceRight of empty array with no initial value"); } var result, i = length - 1; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i--]; break; } if (--i < 0) { throw new TypeError("reduceRight of empty array with no initial value"); } } while (true); } do { if (i in this) { result = fun.call(void 0, result, self[i], i, object); } } while (i--); return result; }; } if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) { Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = 0; if (arguments.length > 1) { i = toInteger(arguments[1]); } i = i >= 0 ? i : Math.max(0, length + i); for (; i < length; i++) { if (i in self && self[i] === sought) { return i; } } return -1; }; } if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) { Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = length - 1; if (arguments.length > 1) { i = Math.min(i, toInteger(arguments[1])); } i = i >= 0 ? i : length - Math.abs(i); for (; i >= 0; i--) { if (i in self && sought === self[i]) { return i; } } return -1; }; } if (!Object.getPrototypeOf) { Object.getPrototypeOf = function getPrototypeOf(object) { return object.__proto__ || ( object.constructor ? object.constructor.prototype : prototypeOfObject ); }; } if (!Object.getOwnPropertyDescriptor) { var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " + "non-object: "; Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT + object); if (!owns(object, property)) return; var descriptor, getter, setter; descriptor = { enumerable: true, configurable: true }; if (supportsAccessors) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; var getter = lookupGetter(object, property); var setter = lookupSetter(object, property); object.__proto__ = prototype; if (getter || setter) { if (getter) descriptor.get = getter; if (setter) descriptor.set = setter; return descriptor; } } descriptor.value = object[property]; return descriptor; }; } if (!Object.getOwnPropertyNames) { Object.getOwnPropertyNames = function getOwnPropertyNames(object) { return Object.keys(object); }; } if (!Object.create) { var createEmpty; if (Object.prototype.__proto__ === null) { createEmpty = function () { return { "__proto__": null }; }; } else { createEmpty = function () { var empty = {}; for (var i in empty) empty[i] = null; empty.constructor = empty.hasOwnProperty = empty.propertyIsEnumerable = empty.isPrototypeOf = empty.toLocaleString = empty.toString = empty.valueOf = empty.__proto__ = null; return empty; } } Object.create = function create(prototype, properties) { var object; if (prototype === null) { object = createEmpty(); } else { if (typeof prototype != "object") throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'"); var Type = function () {}; Type.prototype = prototype; object = new Type(); object.__proto__ = prototype; } if (properties !== void 0) Object.defineProperties(object, properties); return object; }; } function doesDefinePropertyWork(object) { try { Object.defineProperty(object, "sentinel", {}); return "sentinel" in object; } catch (exception) { } } if (Object.defineProperty) { var definePropertyWorksOnObject = doesDefinePropertyWork({}); var definePropertyWorksOnDom = typeof document == "undefined" || doesDefinePropertyWork(document.createElement("div")); if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) { var definePropertyFallback = Object.defineProperty; } } if (!Object.defineProperty || definePropertyFallback) { var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: "; var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: " var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " + "on this javascript engine"; Object.defineProperty = function defineProperty(object, property, descriptor) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT_TARGET + object); if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null) throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor); if (definePropertyFallback) { try { return definePropertyFallback.call(Object, object, property, descriptor); } catch (exception) { } } if (owns(descriptor, "value")) { if (supportsAccessors && (lookupGetter(object, property) || lookupSetter(object, property))) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; delete object[property]; object[property] = descriptor.value; object.__proto__ = prototype; } else { object[property] = descriptor.value; } } else { if (!supportsAccessors) throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED); if (owns(descriptor, "get")) defineGetter(object, property, descriptor.get); if (owns(descriptor, "set")) defineSetter(object, property, descriptor.set); } return object; }; } if (!Object.defineProperties) { Object.defineProperties = function defineProperties(object, properties) { for (var property in properties) { if (owns(properties, property)) Object.defineProperty(object, property, properties[property]); } return object; }; } if (!Object.seal) { Object.seal = function seal(object) { return object; }; } if (!Object.freeze) { Object.freeze = function freeze(object) { return object; }; } try { Object.freeze(function () {}); } catch (exception) { Object.freeze = (function freeze(freezeObject) { return function freeze(object) { if (typeof object == "function") { return object; } else { return freezeObject(object); } }; })(Object.freeze); } if (!Object.preventExtensions) { Object.preventExtensions = function preventExtensions(object) { return object; }; } if (!Object.isSealed) { Object.isSealed = function isSealed(object) { return false; }; } if (!Object.isFrozen) { Object.isFrozen = function isFrozen(object) { return false; }; } if (!Object.isExtensible) { Object.isExtensible = function isExtensible(object) { if (Object(object) === object) { throw new TypeError(); // TODO message } var name = ''; while (owns(object, name)) { name += '?'; } object[name] = true; var returnValue = owns(object, name); delete object[name]; return returnValue; }; } if (!Object.keys) { var hasDontEnumBug = true, dontEnums = [ "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor" ], dontEnumsLength = dontEnums.length; for (var key in {"toString": null}) { hasDontEnumBug = false; } Object.keys = function keys(object) { if ( (typeof object != "object" && typeof object != "function") || object === null ) { throw new TypeError("Object.keys called on a non-object"); } var keys = []; for (var name in object) { if (owns(object, name)) { keys.push(name); } } if (hasDontEnumBug) { for (var i = 0, ii = dontEnumsLength; i < ii; i++) { var dontEnum = dontEnums[i]; if (owns(object, dontEnum)) { keys.push(dontEnum); } } } return keys; }; } if (!Date.now) { Date.now = function now() { return new Date().getTime(); }; } var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + "\u2029\uFEFF"; if (!String.prototype.trim || ws.trim()) { ws = "[" + ws + "]"; var trimBeginRegexp = new RegExp("^" + ws + ws + "*"), trimEndRegexp = new RegExp(ws + ws + "*$"); String.prototype.trim = function trim() { return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, ""); }; } function toInteger(n) { n = +n; if (n !== n) { // isNaN n = 0; } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } return n; } function isPrimitive(input) { var type = typeof input; return ( input === null || type === "undefined" || type === "boolean" || type === "number" || type === "string" ); } function toPrimitive(input) { var val, valueOf, toString; if (isPrimitive(input)) { return input; } valueOf = input.valueOf; if (typeof valueOf === "function") { val = valueOf.call(input); if (isPrimitive(val)) { return val; } } toString = input.toString; if (typeof toString === "function") { val = toString.call(input); if (isPrimitive(val)) { return val; } } throw new TypeError(); } var toObject = function (o) { if (o == null) { // this matches both null and undefined throw new TypeError("can't convert "+o+" to object"); } return Object(o); }; }); ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"], function(require, exports, module) { "use strict"; require("./regexp"); require("./es5-shim"); }); ace.define("ace/lib/dom",["require","exports","module"], function(require, exports, module) { "use strict"; var XHTML_NS = "http://www.w3.org/1999/xhtml"; exports.getDocumentHead = function(doc) { if (!doc) doc = document; return doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement; } exports.createElement = function(tag, ns) { return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag); }; exports.hasCssClass = function(el, name) { var classes = (el.className || "").split(/\s+/g); return classes.indexOf(name) !== -1; }; exports.addCssClass = function(el, name) { if (!exports.hasCssClass(el, name)) { el.className += " " + name; } }; exports.removeCssClass = function(el, name) { var classes = el.className.split(/\s+/g); while (true) { var index = classes.indexOf(name); if (index == -1) { break; } classes.splice(index, 1); } el.className = classes.join(" "); }; exports.toggleCssClass = function(el, name) { var classes = el.className.split(/\s+/g), add = true; while (true) { var index = classes.indexOf(name); if (index == -1) { break; } add = false; classes.splice(index, 1); } if(add) classes.push(name); el.className = classes.join(" "); return add; }; exports.setCssClass = function(node, className, include) { if (include) { exports.addCssClass(node, className); } else { exports.removeCssClass(node, className); } }; exports.hasCssString = function(id, doc) { var index = 0, sheets; doc = doc || document; if (doc.createStyleSheet && (sheets = doc.styleSheets)) { while (index < sheets.length) if (sheets[index++].owningElement.id === id) return true; } else if ((sheets = doc.getElementsByTagName("style"))) { while (index < sheets.length) if (sheets[index++].id === id) return true; } return false; }; exports.importCssString = function importCssString(cssText, id, doc) { doc = doc || document; if (id && exports.hasCssString(id, doc)) return null; var style; if (doc.createStyleSheet) { style = doc.createStyleSheet(); style.cssText = cssText; if (id) style.owningElement.id = id; } else { style = doc.createElementNS ? doc.createElementNS(XHTML_NS, "style") : doc.createElement("style"); style.appendChild(doc.createTextNode(cssText)); if (id) style.id = id; exports.getDocumentHead(doc).appendChild(style); } }; exports.importCssStylsheet = function(uri, doc) { if (doc.createStyleSheet) { doc.createStyleSheet(uri); } else { var link = exports.createElement('link'); link.rel = 'stylesheet'; link.href = uri; exports.getDocumentHead(doc).appendChild(link); } }; exports.getInnerWidth = function(element) { return ( parseInt(exports.computedStyle(element, "paddingLeft"), 10) + parseInt(exports.computedStyle(element, "paddingRight"), 10) + element.clientWidth ); }; exports.getInnerHeight = function(element) { return ( parseInt(exports.computedStyle(element, "paddingTop"), 10) + parseInt(exports.computedStyle(element, "paddingBottom"), 10) + element.clientHeight ); }; if (typeof document == "undefined") return; if (window.pageYOffset !== undefined) { exports.getPageScrollTop = function() { return window.pageYOffset; }; exports.getPageScrollLeft = function() { return window.pageXOffset; }; } else { exports.getPageScrollTop = function() { return document.body.scrollTop; }; exports.getPageScrollLeft = function() { return document.body.scrollLeft; }; } if (window.getComputedStyle) exports.computedStyle = function(element, style) { if (style) return (window.getComputedStyle(element, "") || {})[style] || ""; return window.getComputedStyle(element, "") || {}; }; else exports.computedStyle = function(element, style) { if (style) return element.currentStyle[style]; return element.currentStyle; }; exports.scrollbarWidth = function(document) { var inner = exports.createElement("ace_inner"); inner.style.width = "100%"; inner.style.minWidth = "0px"; inner.style.height = "200px"; inner.style.display = "block"; var outer = exports.createElement("ace_outer"); var style = outer.style; style.position = "absolute"; style.left = "-10000px"; style.overflow = "hidden"; style.width = "200px"; style.minWidth = "0px"; style.height = "150px"; style.display = "block"; outer.appendChild(inner); var body = document.documentElement; body.appendChild(outer); var noScrollbar = inner.offsetWidth; style.overflow = "scroll"; var withScrollbar = inner.offsetWidth; if (noScrollbar == withScrollbar) { withScrollbar = outer.clientWidth; } body.removeChild(outer); return noScrollbar-withScrollbar; }; exports.setInnerHtml = function(el, innerHtml) { var element = el.cloneNode(false);//document.createElement("div"); element.innerHTML = innerHtml; el.parentNode.replaceChild(element, el); return element; }; if ("textContent" in document.documentElement) { exports.setInnerText = function(el, innerText) { el.textContent = innerText; }; exports.getInnerText = function(el) { return el.textContent; }; } else { exports.setInnerText = function(el, innerText) { el.innerText = innerText; }; exports.getInnerText = function(el) { return el.innerText; }; } exports.getParentWindow = function(document) { return document.defaultView || document.parentWindow; }; }); ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module) { "use strict"; exports.inherits = function(ctor, superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; exports.mixin = function(obj, mixin) { for (var key in mixin) { obj[key] = mixin[key]; } return obj; }; exports.implement = function(proto, mixin) { exports.mixin(proto, mixin); }; }); ace.define("ace/lib/keys",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop"], function(require, exports, module) { "use strict"; require("./fixoldbrowsers"); var oop = require("./oop"); var Keys = (function() { var ret = { MODIFIER_KEYS: { 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta' }, KEY_MODS: { "ctrl": 1, "alt": 2, "option" : 2, "shift": 4, "super": 8, "meta": 8, "command": 8, "cmd": 8 }, FUNCTION_KEYS : { 8 : "Backspace", 9 : "Tab", 13 : "Return", 19 : "Pause", 27 : "Esc", 32 : "Space", 33 : "PageUp", 34 : "PageDown", 35 : "End", 36 : "Home", 37 : "Left", 38 : "Up", 39 : "Right", 40 : "Down", 44 : "Print", 45 : "Insert", 46 : "Delete", 96 : "Numpad0", 97 : "Numpad1", 98 : "Numpad2", 99 : "Numpad3", 100: "Numpad4", 101: "Numpad5", 102: "Numpad6", 103: "Numpad7", 104: "Numpad8", 105: "Numpad9", '-13': "NumpadEnter", 112: "F1", 113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7", 119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 144: "Numlock", 145: "Scrolllock" }, PRINTABLE_KEYS: { 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a', 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h', 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o', 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v', 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`', 219: '[', 220: '\\',221: ']', 222: '\'' } }; var name, i; for (i in ret.FUNCTION_KEYS) { name = ret.FUNCTION_KEYS[i].toLowerCase(); ret[name] = parseInt(i, 10); } for (i in ret.PRINTABLE_KEYS) { name = ret.PRINTABLE_KEYS[i].toLowerCase(); ret[name] = parseInt(i, 10); } oop.mixin(ret, ret.MODIFIER_KEYS); oop.mixin(ret, ret.PRINTABLE_KEYS); oop.mixin(ret, ret.FUNCTION_KEYS); ret.enter = ret["return"]; ret.escape = ret.esc; ret.del = ret["delete"]; ret[173] = '-'; (function() { var mods = ["cmd", "ctrl", "alt", "shift"]; for (var i = Math.pow(2, mods.length); i--;) { ret.KEY_MODS[i] = mods.filter(function(x) { return i & ret.KEY_MODS[x]; }).join("-") + "-"; } })(); ret.KEY_MODS[0] = ""; ret.KEY_MODS[-1] = "input"; return ret; })(); oop.mixin(exports, Keys); exports.keyCodeToString = function(keyCode) { var keyString = Keys[keyCode]; if (typeof keyString != "string") keyString = String.fromCharCode(keyCode); return keyString.toLowerCase(); }; }); ace.define("ace/lib/useragent",["require","exports","module"], function(require, exports, module) { "use strict"; exports.OS = { LINUX: "LINUX", MAC: "MAC", WINDOWS: "WINDOWS" }; exports.getOS = function() { if (exports.isMac) { return exports.OS.MAC; } else if (exports.isLinux) { return exports.OS.LINUX; } else { return exports.OS.WINDOWS; } }; if (typeof navigator != "object") return; var os = (navigator.platform.match(/mac|win|linux/i) || ["other"])[0].toLowerCase(); var ua = navigator.userAgent; exports.isWin = (os == "win"); exports.isMac = (os == "mac"); exports.isLinux = (os == "linux"); exports.isIE = (navigator.appName == "Microsoft Internet Explorer" || navigator.appName.indexOf("MSAppHost") >= 0) ? parseFloat((ua.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]) : parseFloat((ua.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]); // for ie exports.isOldIE = exports.isIE && exports.isIE < 9; exports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === "Gecko"; exports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv\:(\d+)/)||[])[1], 10) < 4; exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == "[object Opera]"; exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined; exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined; exports.isAIR = ua.indexOf("AdobeAIR") >= 0; exports.isIPad = ua.indexOf("iPad") >= 0; exports.isTouchPad = ua.indexOf("TouchPad") >= 0; exports.isChromeOS = ua.indexOf(" CrOS ") >= 0; }); ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module) { "use strict"; var keys = require("./keys"); var useragent = require("./useragent"); exports.addListener = function(elem, type, callback) { if (elem.addEventListener) { return elem.addEventListener(type, callback, false); } if (elem.attachEvent) { var wrapper = function() { callback.call(elem, window.event); }; callback._wrapper = wrapper; elem.attachEvent("on" + type, wrapper); } }; exports.removeListener = function(elem, type, callback) { if (elem.removeEventListener) { return elem.removeEventListener(type, callback, false); } if (elem.detachEvent) { elem.detachEvent("on" + type, callback._wrapper || callback); } }; exports.stopEvent = function(e) { exports.stopPropagation(e); exports.preventDefault(e); return false; }; exports.stopPropagation = function(e) { if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; }; exports.preventDefault = function(e) { if (e.preventDefault) e.preventDefault(); else e.returnValue = false; }; exports.getButton = function(e) { if (e.type == "dblclick") return 0; if (e.type == "contextmenu" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey))) return 2; if (e.preventDefault) { return e.button; } else { return {1:0, 2:2, 4:1}[e.button]; } }; exports.capture = function(el, eventHandler, releaseCaptureHandler) { function onMouseUp(e) { eventHandler && eventHandler(e); releaseCaptureHandler && releaseCaptureHandler(e); exports.removeListener(document, "mousemove", eventHandler, true); exports.removeListener(document, "mouseup", onMouseUp, true); exports.removeListener(document, "dragstart", onMouseUp, true); } exports.addListener(document, "mousemove", eventHandler, true); exports.addListener(document, "mouseup", onMouseUp, true); exports.addListener(document, "dragstart", onMouseUp, true); return onMouseUp; }; exports.addMouseWheelListener = function(el, callback) { if ("onmousewheel" in el) { exports.addListener(el, "mousewheel", function(e) { var factor = 8; if (e.wheelDeltaX !== undefined) { e.wheelX = -e.wheelDeltaX / factor; e.wheelY = -e.wheelDeltaY / factor; } else { e.wheelX = 0; e.wheelY = -e.wheelDelta / factor; } callback(e); }); } else if ("onwheel" in el) { exports.addListener(el, "wheel", function(e) { var factor = 0.35; switch (e.deltaMode) { case e.DOM_DELTA_PIXEL: e.wheelX = e.deltaX * factor || 0; e.wheelY = e.deltaY * factor || 0; break; case e.DOM_DELTA_LINE: case e.DOM_DELTA_PAGE: e.wheelX = (e.deltaX || 0) * 5; e.wheelY = (e.deltaY || 0) * 5; break; } callback(e); }); } else { exports.addListener(el, "DOMMouseScroll", function(e) { if (e.axis && e.axis == e.HORIZONTAL_AXIS) { e.wheelX = (e.detail || 0) * 5; e.wheelY = 0; } else { e.wheelX = 0; e.wheelY = (e.detail || 0) * 5; } callback(e); }); } }; exports.addMultiMouseDownListener = function(el, timeouts, eventHandler, callbackName) { var clicks = 0; var startX, startY, timer; var eventNames = { 2: "dblclick", 3: "tripleclick", 4: "quadclick" }; exports.addListener(el, "mousedown", function(e) { if (exports.getButton(e) !== 0) { clicks = 0; } else if (e.detail > 1) { clicks++; if (clicks > 4) clicks = 1; } else { clicks = 1; } if (useragent.isIE) { var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5; if (!timer || isNewClick) clicks = 1; if (timer) clearTimeout(timer); timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600); if (clicks == 1) { startX = e.clientX; startY = e.clientY; } } e._clicks = clicks; eventHandler[callbackName]("mousedown", e); if (clicks > 4) clicks = 0; else if (clicks > 1) return eventHandler[callbackName](eventNames[clicks], e); }); if (useragent.isOldIE) { exports.addListener(el, "dblclick", function(e) { clicks = 2; if (timer) clearTimeout(timer); timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600); eventHandler[callbackName]("mousedown", e); eventHandler[callbackName](eventNames[clicks], e); }); } }; var getModifierHash = useragent.isMac && useragent.isOpera && !("KeyboardEvent" in window) ? function(e) { return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0); } : function(e) { return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0); }; exports.getModifierString = function(e) { return keys.KEY_MODS[getModifierHash(e)]; }; function normalizeCommandKeys(callback, e, keyCode) { var hashId = getModifierHash(e); if (!useragent.isMac && pressedKeys) { if (pressedKeys[91] || pressedKeys[92]) hashId |= 8; if (pressedKeys.altGr) { if ((3 & hashId) != 3) pressedKeys.altGr = 0; else return; } if (keyCode === 18 || keyCode === 17) { var location = "location" in e ? e.location : e.keyLocation; if (keyCode === 17 && location === 1) { ts = e.timeStamp; } else if (keyCode === 18 && hashId === 3 && location === 2) { var dt = -ts; ts = e.timeStamp; dt += ts; if (dt < 3) pressedKeys.altGr = true; } } } if (keyCode in keys.MODIFIER_KEYS) { switch (keys.MODIFIER_KEYS[keyCode]) { case "Alt": hashId = 2; break; case "Shift": hashId = 4; break; case "Ctrl": hashId = 1; break; default: hashId = 8; break; } keyCode = -1; } if (hashId & 8 && (keyCode === 91 || keyCode === 93)) { keyCode = -1; } if (!hashId && keyCode === 13) { var location = "location" in e ? e.location : e.keyLocation; if (location === 3) { callback(e, hashId, -keyCode); if (e.defaultPrevented) return; } } if (useragent.isChromeOS && hashId & 8) { callback(e, hashId, keyCode); if (e.defaultPrevented) return; else hashId &= ~8; } if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) { return false; } return callback(e, hashId, keyCode); } var pressedKeys = null; var ts = 0; exports.addCommandKeyListener = function(el, callback) { var addListener = exports.addListener; if (useragent.isOldGecko || (useragent.isOpera && !("KeyboardEvent" in window))) { var lastKeyDownKeyCode = null; addListener(el, "keydown", function(e) { lastKeyDownKeyCode = e.keyCode; }); addListener(el, "keypress", function(e) { return normalizeCommandKeys(callback, e, lastKeyDownKeyCode); }); } else { var lastDefaultPrevented = null; addListener(el, "keydown", function(e) { pressedKeys[e.keyCode] = true; var result = normalizeCommandKeys(callback, e, e.keyCode); lastDefaultPrevented = e.defaultPrevented; return result; }); addListener(el, "keypress", function(e) { if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) { exports.stopEvent(e); lastDefaultPrevented = null; } }); addListener(el, "keyup", function(e) { pressedKeys[e.keyCode] = null; }); if (!pressedKeys) { pressedKeys = Object.create(null); addListener(window, "focus", function(e) { pressedKeys = Object.create(null); }); } } }; if (window.postMessage && !useragent.isOldIE) { var postMessageId = 1; exports.nextTick = function(callback, win) { win = win || window; var messageName = "zero-timeout-message-" + postMessageId; exports.addListener(win, "message", function listener(e) { if (e.data == messageName) { exports.stopPropagation(e); exports.removeListener(win, "message", listener); callback(); } }); win.postMessage(messageName, "*"); }; } exports.nextFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame; if (exports.nextFrame) exports.nextFrame = exports.nextFrame.bind(window); else exports.nextFrame = function(callback) { setTimeout(callback, 17); }; }); ace.define("ace/lib/lang",["require","exports","module"], function(require, exports, module) { "use strict"; exports.last = function(a) { return a[a.length - 1]; }; exports.stringReverse = function(string) { return string.split("").reverse().join(""); }; exports.stringRepeat = function (string, count) { var result = ''; while (count > 0) { if (count & 1) result += string; if (count >>= 1) string += string; } return result; }; var trimBeginRegexp = /^\s\s*/; var trimEndRegexp = /\s\s*$/; exports.stringTrimLeft = function (string) { return string.replace(trimBeginRegexp, ''); }; exports.stringTrimRight = function (string) { return string.replace(trimEndRegexp, ''); }; exports.copyObject = function(obj) { var copy = {}; for (var key in obj) { copy[key] = obj[key]; } return copy; }; exports.copyArray = function(array){ var copy = []; for (var i=0, l=array.length; i 1); return ev.preventDefault(); }; this.startSelect = function(pos, waitForClickSelection) { pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y); var editor = this.editor; editor.$blockScrolling++; if (this.mousedownEvent.getShiftKey()) editor.selection.selectToPosition(pos); else if (!waitForClickSelection) editor.selection.moveToPosition(pos); if (!waitForClickSelection) this.select(); if (editor.renderer.scroller.setCapture) { editor.renderer.scroller.setCapture(); } editor.setStyle("ace_selecting"); this.setState("select"); editor.$blockScrolling--; }; this.select = function() { var anchor, editor = this.editor; var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); editor.$blockScrolling++; if (this.$clickSelection) { var cmp = this.$clickSelection.comparePoint(cursor); if (cmp == -1) { anchor = this.$clickSelection.end; } else if (cmp == 1) { anchor = this.$clickSelection.start; } else { var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); cursor = orientedRange.cursor; anchor = orientedRange.anchor; } editor.selection.setSelectionAnchor(anchor.row, anchor.column); } editor.selection.selectToPosition(cursor); editor.$blockScrolling--; editor.renderer.scrollCursorIntoView(); }; this.extendSelectionBy = function(unitName) { var anchor, editor = this.editor; var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); var range = editor.selection[unitName](cursor.row, cursor.column); editor.$blockScrolling++; if (this.$clickSelection) { var cmpStart = this.$clickSelection.comparePoint(range.start); var cmpEnd = this.$clickSelection.comparePoint(range.end); if (cmpStart == -1 && cmpEnd <= 0) { anchor = this.$clickSelection.end; if (range.end.row != cursor.row || range.end.column != cursor.column) cursor = range.start; } else if (cmpEnd == 1 && cmpStart >= 0) { anchor = this.$clickSelection.start; if (range.start.row != cursor.row || range.start.column != cursor.column) cursor = range.end; } else if (cmpStart == -1 && cmpEnd == 1) { cursor = range.end; anchor = range.start; } else { var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); cursor = orientedRange.cursor; anchor = orientedRange.anchor; } editor.selection.setSelectionAnchor(anchor.row, anchor.column); } editor.selection.selectToPosition(cursor); editor.$blockScrolling--; editor.renderer.scrollCursorIntoView(); }; this.selectEnd = this.selectAllEnd = this.selectByWordsEnd = this.selectByLinesEnd = function() { this.$clickSelection = null; this.editor.unsetStyle("ace_selecting"); if (this.editor.renderer.scroller.releaseCapture) { this.editor.renderer.scroller.releaseCapture(); } }; this.focusWait = function() { var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); var time = Date.now(); if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout) this.startSelect(this.mousedownEvent.getDocumentPosition()); }; this.onDoubleClick = function(ev) { var pos = ev.getDocumentPosition(); var editor = this.editor; var session = editor.session; var range = session.getBracketRange(pos); if (range) { if (range.isEmpty()) { range.start.column--; range.end.column++; } this.setState("select"); } else { range = editor.selection.getWordRange(pos.row, pos.column); this.setState("selectByWords"); } this.$clickSelection = range; this.select(); }; this.onTripleClick = function(ev) { var pos = ev.getDocumentPosition(); var editor = this.editor; this.setState("selectByLines"); var range = editor.getSelectionRange(); if (range.isMultiLine() && range.contains(pos.row, pos.column)) { this.$clickSelection = editor.selection.getLineRange(range.start.row); this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end; } else { this.$clickSelection = editor.selection.getLineRange(pos.row); } this.select(); }; this.onQuadClick = function(ev) { var editor = this.editor; editor.selectAll(); this.$clickSelection = editor.getSelectionRange(); this.setState("selectAll"); }; this.onMouseWheel = function(ev) { if (ev.getAccelKey()) return; if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) { ev.wheelX = ev.wheelY; ev.wheelY = 0; } var t = ev.domEvent.timeStamp; var dt = t - (this.$lastScrollTime||0); var editor = this.editor; var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); if (isScrolable || dt < 200) { this.$lastScrollTime = t; editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); return ev.stop(); } }; }).call(DefaultHandlers.prototype); exports.DefaultHandlers = DefaultHandlers; function calcDistance(ax, ay, bx, by) { return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); } function calcRangeOrientation(range, cursor) { if (range.start.row == range.end.row) var cmp = 2 * cursor.column - range.start.column - range.end.column; else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) var cmp = cursor.column - 4; else var cmp = 2 * cursor.row - range.start.row - range.end.row; if (cmp < 0) return {cursor: range.start, anchor: range.end}; else return {cursor: range.end, anchor: range.start}; } }); ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var dom = require("./lib/dom"); function Tooltip (parentNode) { this.isOpen = false; this.$element = null; this.$parentNode = parentNode; } (function() { this.$init = function() { this.$element = dom.createElement("div"); this.$element.className = "ace_tooltip"; this.$element.style.display = "none"; this.$parentNode.appendChild(this.$element); return this.$element; }; this.getElement = function() { return this.$element || this.$init(); }; this.setText = function(text) { dom.setInnerText(this.getElement(), text); }; this.setHtml = function(html) { this.getElement().innerHTML = html; }; this.setPosition = function(x, y) { this.getElement().style.left = x + "px"; this.getElement().style.top = y + "px"; }; this.setClassName = function(className) { dom.addCssClass(this.getElement(), className); }; this.show = function(text, x, y) { if (text != null) this.setText(text); if (x != null && y != null) this.setPosition(x, y); if (!this.isOpen) { this.getElement().style.display = "block"; this.isOpen = true; } }; this.hide = function() { if (this.isOpen) { this.getElement().style.display = "none"; this.isOpen = false; } }; this.getHeight = function() { return this.getElement().offsetHeight; }; this.getWidth = function() { return this.getElement().offsetWidth; }; }).call(Tooltip.prototype); exports.Tooltip = Tooltip; }); ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var oop = require("../lib/oop"); var event = require("../lib/event"); var Tooltip = require("../tooltip").Tooltip; function GutterHandler(mouseHandler) { var editor = mouseHandler.editor; var gutter = editor.renderer.$gutterLayer; var tooltip = new GutterTooltip(editor.container); mouseHandler.editor.setDefaultHandler("guttermousedown", function(e) { if (!editor.isFocused() || e.getButton() != 0) return; var gutterRegion = gutter.getRegion(e); if (gutterRegion == "foldWidgets") return; var row = e.getDocumentPosition().row; var selection = editor.session.selection; if (e.getShiftKey()) selection.selectTo(row, 0); else { if (e.domEvent.detail == 2) { editor.selectAll(); return e.preventDefault(); } mouseHandler.$clickSelection = editor.selection.getLineRange(row); } mouseHandler.setState("selectByLines"); mouseHandler.captureMouse(e); return e.preventDefault(); }); var tooltipTimeout, mouseEvent, tooltipAnnotation; function showTooltip() { var row = mouseEvent.getDocumentPosition().row; var annotation = gutter.$annotations[row]; if (!annotation) return hideTooltip(); var maxRow = editor.session.getLength(); if (row == maxRow) { var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row; var pos = mouseEvent.$pos; if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column)) return hideTooltip(); } if (tooltipAnnotation == annotation) return; tooltipAnnotation = annotation.text.join("
"); tooltip.setHtml(tooltipAnnotation); tooltip.show(); editor.on("mousewheel", hideTooltip); if (mouseHandler.$tooltipFollowsMouse) { moveTooltip(mouseEvent); } else { var gutterElement = gutter.$cells[editor.session.documentToScreenRow(row, 0)].element; var rect = gutterElement.getBoundingClientRect(); var style = tooltip.getElement().style; style.left = rect.right + "px"; style.top = rect.bottom + "px"; } } function hideTooltip() { if (tooltipTimeout) tooltipTimeout = clearTimeout(tooltipTimeout); if (tooltipAnnotation) { tooltip.hide(); tooltipAnnotation = null; editor.removeEventListener("mousewheel", hideTooltip); } } function moveTooltip(e) { tooltip.setPosition(e.x, e.y); } mouseHandler.editor.setDefaultHandler("guttermousemove", function(e) { var target = e.domEvent.target || e.domEvent.srcElement; if (dom.hasCssClass(target, "ace_fold-widget")) return hideTooltip(); if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse) moveTooltip(e); mouseEvent = e; if (tooltipTimeout) return; tooltipTimeout = setTimeout(function() { tooltipTimeout = null; if (mouseEvent && !mouseHandler.isMousePressed) showTooltip(); else hideTooltip(); }, 50); }); event.addListener(editor.renderer.$gutter, "mouseout", function(e) { mouseEvent = null; if (!tooltipAnnotation || tooltipTimeout) return; tooltipTimeout = setTimeout(function() { tooltipTimeout = null; hideTooltip(); }, 50); }); editor.on("changeSession", hideTooltip); } function GutterTooltip(parentNode) { Tooltip.call(this, parentNode); } oop.inherits(GutterTooltip, Tooltip); (function(){ this.setPosition = function(x, y) { var windowWidth = window.innerWidth || document.documentElement.clientWidth; var windowHeight = window.innerHeight || document.documentElement.clientHeight; var width = this.getWidth(); var height = this.getHeight(); x += 15; y += 15; if (x + width > windowWidth) { x -= (x + width) - windowWidth; } if (y + height > windowHeight) { y -= 20 + height; } Tooltip.prototype.setPosition.call(this, x, y); }; }).call(GutterTooltip.prototype); exports.GutterHandler = GutterHandler; }); ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module) { "use strict"; var event = require("../lib/event"); var useragent = require("../lib/useragent"); var MouseEvent = exports.MouseEvent = function(domEvent, editor) { this.domEvent = domEvent; this.editor = editor; this.x = this.clientX = domEvent.clientX; this.y = this.clientY = domEvent.clientY; this.$pos = null; this.$inSelection = null; this.propagationStopped = false; this.defaultPrevented = false; }; (function() { this.stopPropagation = function() { event.stopPropagation(this.domEvent); this.propagationStopped = true; }; this.preventDefault = function() { event.preventDefault(this.domEvent); this.defaultPrevented = true; }; this.stop = function() { this.stopPropagation(); this.preventDefault(); }; this.getDocumentPosition = function() { if (this.$pos) return this.$pos; this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY); return this.$pos; }; this.inSelection = function() { if (this.$inSelection !== null) return this.$inSelection; var editor = this.editor; var selectionRange = editor.getSelectionRange(); if (selectionRange.isEmpty()) this.$inSelection = false; else { var pos = this.getDocumentPosition(); this.$inSelection = selectionRange.contains(pos.row, pos.column); } return this.$inSelection; }; this.getButton = function() { return event.getButton(this.domEvent); }; this.getShiftKey = function() { return this.domEvent.shiftKey; }; this.getAccelKey = useragent.isMac ? function() { return this.domEvent.metaKey; } : function() { return this.domEvent.ctrlKey; }; }).call(MouseEvent.prototype); }); ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var event = require("../lib/event"); var useragent = require("../lib/useragent"); var AUTOSCROLL_DELAY = 200; var SCROLL_CURSOR_DELAY = 200; var SCROLL_CURSOR_HYSTERESIS = 5; function DragdropHandler(mouseHandler) { var editor = mouseHandler.editor; var blankImage = dom.createElement("img"); blankImage.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; if (useragent.isOpera) blankImage.style.cssText = "width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;"; var exports = ["dragWait", "dragWaitEnd", "startDrag", "dragReadyEnd", "onMouseDrag"]; exports.forEach(function(x) { mouseHandler[x] = this[x]; }, this); editor.addEventListener("mousedown", this.onMouseDown.bind(mouseHandler)); var mouseTarget = editor.container; var dragSelectionMarker, x, y; var timerId, range; var dragCursor, counter = 0; var dragOperation; var isInternal; var autoScrollStartTime; var cursorMovedTime; var cursorPointOnCaretMoved; this.onDragStart = function(e) { if (this.cancelDrag || !mouseTarget.draggable) { var self = this; setTimeout(function(){ self.startSelect(); self.captureMouse(e); }, 0); return e.preventDefault(); } range = editor.getSelectionRange(); var dataTransfer = e.dataTransfer; dataTransfer.effectAllowed = editor.getReadOnly() ? "copy" : "copyMove"; if (useragent.isOpera) { editor.container.appendChild(blankImage); blankImage.scrollTop = 0; } dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0); if (useragent.isOpera) { editor.container.removeChild(blankImage); } dataTransfer.clearData(); dataTransfer.setData("Text", editor.session.getTextRange()); isInternal = true; this.setState("drag"); }; this.onDragEnd = function(e) { mouseTarget.draggable = false; isInternal = false; this.setState(null); if (!editor.getReadOnly()) { var dropEffect = e.dataTransfer.dropEffect; if (!dragOperation && dropEffect == "move") editor.session.remove(editor.getSelectionRange()); editor.renderer.$cursorLayer.setBlinking(true); } this.editor.unsetStyle("ace_dragging"); this.editor.renderer.setCursorStyle(""); }; this.onDragEnter = function(e) { if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return; x = e.clientX; y = e.clientY; if (!dragSelectionMarker) addDragMarker(); counter++; e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); return event.preventDefault(e); }; this.onDragOver = function(e) { if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return; x = e.clientX; y = e.clientY; if (!dragSelectionMarker) { addDragMarker(); counter++; } if (onMouseMoveTimer !== null) onMouseMoveTimer = null; e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); return event.preventDefault(e); }; this.onDragLeave = function(e) { counter--; if (counter <= 0 && dragSelectionMarker) { clearDragMarker(); dragOperation = null; return event.preventDefault(e); } }; this.onDrop = function(e) { if (!dragCursor) return; var dataTransfer = e.dataTransfer; if (isInternal) { switch (dragOperation) { case "move": if (range.contains(dragCursor.row, dragCursor.column)) { range = { start: dragCursor, end: dragCursor }; } else { range = editor.moveText(range, dragCursor); } break; case "copy": range = editor.moveText(range, dragCursor, true); break; } } else { var dropData = dataTransfer.getData('Text'); range = { start: dragCursor, end: editor.session.insert(dragCursor, dropData) }; editor.focus(); dragOperation = null; } clearDragMarker(); return event.preventDefault(e); }; event.addListener(mouseTarget, "dragstart", this.onDragStart.bind(mouseHandler)); event.addListener(mouseTarget, "dragend", this.onDragEnd.bind(mouseHandler)); event.addListener(mouseTarget, "dragenter", this.onDragEnter.bind(mouseHandler)); event.addListener(mouseTarget, "dragover", this.onDragOver.bind(mouseHandler)); event.addListener(mouseTarget, "dragleave", this.onDragLeave.bind(mouseHandler)); event.addListener(mouseTarget, "drop", this.onDrop.bind(mouseHandler)); function scrollCursorIntoView(cursor, prevCursor) { var now = Date.now(); var vMovement = !prevCursor || cursor.row != prevCursor.row; var hMovement = !prevCursor || cursor.column != prevCursor.column; if (!cursorMovedTime || vMovement || hMovement) { editor.$blockScrolling += 1; editor.moveCursorToPosition(cursor); editor.$blockScrolling -= 1; cursorMovedTime = now; cursorPointOnCaretMoved = {x: x, y: y}; } else { var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y); if (distance > SCROLL_CURSOR_HYSTERESIS) { cursorMovedTime = null; } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) { editor.renderer.scrollCursorIntoView(); cursorMovedTime = null; } } } function autoScroll(cursor, prevCursor) { var now = Date.now(); var lineHeight = editor.renderer.layerConfig.lineHeight; var characterWidth = editor.renderer.layerConfig.characterWidth; var editorRect = editor.renderer.scroller.getBoundingClientRect(); var offsets = { x: { left: x - editorRect.left, right: editorRect.right - x }, y: { top: y - editorRect.top, bottom: editorRect.bottom - y } }; var nearestXOffset = Math.min(offsets.x.left, offsets.x.right); var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom); var scrollCursor = {row: cursor.row, column: cursor.column}; if (nearestXOffset / characterWidth <= 2) { scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2); } if (nearestYOffset / lineHeight <= 1) { scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1); } var vScroll = cursor.row != scrollCursor.row; var hScroll = cursor.column != scrollCursor.column; var vMovement = !prevCursor || cursor.row != prevCursor.row; if (vScroll || (hScroll && !vMovement)) { if (!autoScrollStartTime) autoScrollStartTime = now; else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) editor.renderer.scrollCursorIntoView(scrollCursor); } else { autoScrollStartTime = null; } } function onDragInterval() { var prevCursor = dragCursor; dragCursor = editor.renderer.screenToTextCoordinates(x, y); scrollCursorIntoView(dragCursor, prevCursor); autoScroll(dragCursor, prevCursor); } function addDragMarker() { range = editor.selection.toOrientedRange(); dragSelectionMarker = editor.session.addMarker(range, "ace_selection", editor.getSelectionStyle()); editor.clearSelection(); if (editor.isFocused()) editor.renderer.$cursorLayer.setBlinking(false); clearInterval(timerId); onDragInterval(); timerId = setInterval(onDragInterval, 20); counter = 0; event.addListener(document, "mousemove", onMouseMove); } function clearDragMarker() { clearInterval(timerId); editor.session.removeMarker(dragSelectionMarker); dragSelectionMarker = null; editor.$blockScrolling += 1; editor.selection.fromOrientedRange(range); editor.$blockScrolling -= 1; if (editor.isFocused() && !isInternal) editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly()); range = null; dragCursor = null; counter = 0; autoScrollStartTime = null; cursorMovedTime = null; event.removeListener(document, "mousemove", onMouseMove); } var onMouseMoveTimer = null; function onMouseMove() { if (onMouseMoveTimer == null) { onMouseMoveTimer = setTimeout(function() { if (onMouseMoveTimer != null && dragSelectionMarker) clearDragMarker(); }, 20); } } function canAccept(dataTransfer) { var types = dataTransfer.types; return !types || Array.prototype.some.call(types, function(type) { return type == 'text/plain' || type == 'Text'; }); } function getDropEffect(e) { var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized']; var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized']; var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey; var effectAllowed = "uninitialized"; try { effectAllowed = e.dataTransfer.effectAllowed.toLowerCase(); } catch (e) {} var dropEffect = "none"; if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = "copy"; else if (moveAllowed.indexOf(effectAllowed) >= 0) dropEffect = "move"; else if (copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = "copy"; return dropEffect; } } (function() { this.dragWait = function() { var interval = Date.now() - this.mousedownEvent.time; if (interval > this.editor.getDragDelay()) this.startDrag(); }; this.dragWaitEnd = function() { var target = this.editor.container; target.draggable = false; this.startSelect(this.mousedownEvent.getDocumentPosition()); this.selectEnd(); }; this.dragReadyEnd = function(e) { this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()); this.editor.unsetStyle("ace_dragging"); this.editor.renderer.setCursorStyle(""); this.dragWaitEnd(); }; this.startDrag = function(){ this.cancelDrag = false; var editor = this.editor; var target = editor.container; target.draggable = true; editor.renderer.$cursorLayer.setBlinking(false); editor.setStyle("ace_dragging"); var cursorStyle = useragent.isWin ? "default" : "move"; editor.renderer.setCursorStyle(cursorStyle); this.setState("dragReady"); }; this.onMouseDrag = function(e) { var target = this.editor.container; if (useragent.isIE && this.state == "dragReady") { var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); if (distance > 3) target.dragDrop(); } if (this.state === "dragWait") { var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); if (distance > 0) { target.draggable = false; this.startSelect(this.mousedownEvent.getDocumentPosition()); } } }; this.onMouseDown = function(e) { if (!this.$dragEnabled) return; this.mousedownEvent = e; var editor = this.editor; var inSelection = e.inSelection(); var button = e.getButton(); var clickCount = e.domEvent.detail || 1; if (clickCount === 1 && button === 0 && inSelection) { if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey())) return; this.mousedownEvent.time = Date.now(); var eventTarget = e.domEvent.target || e.domEvent.srcElement; if ("unselectable" in eventTarget) eventTarget.unselectable = "on"; if (editor.getDragDelay()) { if (useragent.isWebKit) { this.cancelDrag = true; var mouseTarget = editor.container; mouseTarget.draggable = true; } this.setState("dragWait"); } else { this.startDrag(); } this.captureMouse(e, this.onMouseDrag.bind(this)); e.defaultPrevented = true; } }; }).call(DragdropHandler.prototype); function calcDistance(ax, ay, bx, by) { return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); } exports.DragdropHandler = DragdropHandler; }); ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; var dom = require("./dom"); exports.get = function (url, callback) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { callback(xhr.responseText); } }; xhr.send(null); }; exports.loadScript = function(path, callback) { var head = dom.getDocumentHead(); var s = document.createElement('script'); s.src = path; head.appendChild(s); s.onload = s.onreadystatechange = function(_, isAbort) { if (isAbort || !s.readyState || s.readyState == "loaded" || s.readyState == "complete") { s = s.onload = s.onreadystatechange = null; if (!isAbort) callback(); } }; }; exports.qualifyURL = function(url) { var a = document.createElement('a'); a.href = url; return a.href; } }); ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { "use strict"; var EventEmitter = {}; var stopPropagation = function() { this.propagationStopped = true; }; var preventDefault = function() { this.defaultPrevented = true; }; EventEmitter._emit = EventEmitter._dispatchEvent = function(eventName, e) { this._eventRegistry || (this._eventRegistry = {}); this._defaultHandlers || (this._defaultHandlers = {}); var listeners = this._eventRegistry[eventName] || []; var defaultHandler = this._defaultHandlers[eventName]; if (!listeners.length && !defaultHandler) return; if (typeof e != "object" || !e) e = {}; if (!e.type) e.type = eventName; if (!e.stopPropagation) e.stopPropagation = stopPropagation; if (!e.preventDefault) e.preventDefault = preventDefault; listeners = listeners.slice(); for (var i=0; i 1) base = parts[parts.length - 2]; var path = options[component + "Path"]; if (path == null) { path = options.basePath; } else if (sep == "/") { component = sep = ""; } if (path && path.slice(-1) != "/") path += "/"; return path + component + sep + base + this.get("suffix"); }; exports.setModuleUrl = function(name, subst) { return options.$moduleUrls[name] = subst; }; exports.$loading = {}; exports.loadModule = function(moduleName, onLoad) { var module, moduleType; if (Array.isArray(moduleName)) { moduleType = moduleName[0]; moduleName = moduleName[1]; } try { module = require(moduleName); } catch (e) {} if (module && !exports.$loading[moduleName]) return onLoad && onLoad(module); if (!exports.$loading[moduleName]) exports.$loading[moduleName] = []; exports.$loading[moduleName].push(onLoad); if (exports.$loading[moduleName].length > 1) return; var afterLoad = function() { require([moduleName], function(module) { exports._emit("load.module", {name: moduleName, module: module}); var listeners = exports.$loading[moduleName]; exports.$loading[moduleName] = null; listeners.forEach(function(onLoad) { onLoad && onLoad(module); }); }); }; if (!exports.get("packaged")) return afterLoad(); net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad); }; init(true);function init(packaged) { options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged); if (!global.document) return ""; var scriptOptions = {}; var scriptUrl = ""; var currentScript = (document.currentScript || document._currentScript ); // native or polyfill var currentDocument = currentScript && currentScript.ownerDocument || document; var scripts = currentDocument.getElementsByTagName("script"); for (var i=0; i [" + this.end.row + "/" + this.end.column + "]"); }; this.contains = function(row, column) { return this.compare(row, column) == 0; }; this.compareRange = function(range) { var cmp, end = range.end, start = range.start; cmp = this.compare(end.row, end.column); if (cmp == 1) { cmp = this.compare(start.row, start.column); if (cmp == 1) { return 2; } else if (cmp == 0) { return 1; } else { return 0; } } else if (cmp == -1) { return -2; } else { cmp = this.compare(start.row, start.column); if (cmp == -1) { return -1; } else if (cmp == 1) { return 42; } else { return 0; } } }; this.comparePoint = function(p) { return this.compare(p.row, p.column); }; this.containsRange = function(range) { return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; }; this.intersects = function(range) { var cmp = this.compareRange(range); return (cmp == -1 || cmp == 0 || cmp == 1); }; this.isEnd = function(row, column) { return this.end.row == row && this.end.column == column; }; this.isStart = function(row, column) { return this.start.row == row && this.start.column == column; }; this.setStart = function(row, column) { if (typeof row == "object") { this.start.column = row.column; this.start.row = row.row; } else { this.start.row = row; this.start.column = column; } }; this.setEnd = function(row, column) { if (typeof row == "object") { this.end.column = row.column; this.end.row = row.row; } else { this.end.row = row; this.end.column = column; } }; this.inside = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column) || this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.insideStart = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column)) { return false; } else { return true; } } return false; }; this.insideEnd = function(row, column) { if (this.compare(row, column) == 0) { if (this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.compare = function(row, column) { if (!this.isMultiLine()) { if (row === this.start.row) { return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); }; } if (row < this.start.row) return -1; if (row > this.end.row) return 1; if (this.start.row === row) return column >= this.start.column ? 0 : -1; if (this.end.row === row) return column <= this.end.column ? 0 : 1; return 0; }; this.compareStart = function(row, column) { if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.compareEnd = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else { return this.compare(row, column); } }; this.compareInside = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.clipRows = function(firstRow, lastRow) { if (this.end.row > lastRow) var end = {row: lastRow + 1, column: 0}; else if (this.end.row < firstRow) var end = {row: firstRow, column: 0}; if (this.start.row > lastRow) var start = {row: lastRow + 1, column: 0}; else if (this.start.row < firstRow) var start = {row: firstRow, column: 0}; return Range.fromPoints(start || this.start, end || this.end); }; this.extend = function(row, column) { var cmp = this.compare(row, column); if (cmp == 0) return this; else if (cmp == -1) var start = {row: row, column: column}; else var end = {row: row, column: column}; return Range.fromPoints(start || this.start, end || this.end); }; this.isEmpty = function() { return (this.start.row === this.end.row && this.start.column === this.end.column); }; this.isMultiLine = function() { return (this.start.row !== this.end.row); }; this.clone = function() { return Range.fromPoints(this.start, this.end); }; this.collapseRows = function() { if (this.end.column == 0) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0) else return new Range(this.start.row, 0, this.end.row, 0) }; this.toScreenRange = function(session) { var screenPosStart = session.documentToScreenPosition(this.start); var screenPosEnd = session.documentToScreenPosition(this.end); return new Range( screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column ); }; this.moveBy = function(row, column) { this.start.row += row; this.start.column += column; this.end.row += row; this.end.column += column; }; }).call(Range.prototype); Range.fromPoints = function(start, end) { return new Range(start.row, start.column, end.row, end.column); }; Range.comparePoints = comparePoints; Range.comparePoints = function(p1, p2) { return p1.row - p2.row || p1.column - p2.column; }; exports.Range = Range; }); ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var lang = require("./lib/lang"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Selection = function(session) { this.session = session; this.doc = session.getDocument(); this.clearSelection(); this.lead = this.selectionLead = this.doc.createAnchor(0, 0); this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0); var self = this; this.lead.on("change", function(e) { self._emit("changeCursor"); if (!self.$isEmpty) self._emit("changeSelection"); if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) self.$desiredColumn = null; }); this.selectionAnchor.on("change", function() { if (!self.$isEmpty) self._emit("changeSelection"); }); }; (function() { oop.implement(this, EventEmitter); this.isEmpty = function() { return (this.$isEmpty || ( this.anchor.row == this.lead.row && this.anchor.column == this.lead.column )); }; this.isMultiLine = function() { if (this.isEmpty()) { return false; } return this.getRange().isMultiLine(); }; this.getCursor = function() { return this.lead.getPosition(); }; this.setSelectionAnchor = function(row, column) { this.anchor.setPosition(row, column); if (this.$isEmpty) { this.$isEmpty = false; this._emit("changeSelection"); } }; this.getSelectionAnchor = function() { if (this.$isEmpty) return this.getSelectionLead(); else return this.anchor.getPosition(); }; this.getSelectionLead = function() { return this.lead.getPosition(); }; this.shiftSelection = function(columns) { if (this.$isEmpty) { this.moveCursorTo(this.lead.row, this.lead.column + columns); return; } var anchor = this.getSelectionAnchor(); var lead = this.getSelectionLead(); var isBackwards = this.isBackwards(); if (!isBackwards || anchor.column !== 0) this.setSelectionAnchor(anchor.row, anchor.column + columns); if (isBackwards || lead.column !== 0) { this.$moveSelection(function() { this.moveCursorTo(lead.row, lead.column + columns); }); } }; this.isBackwards = function() { var anchor = this.anchor; var lead = this.lead; return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column)); }; this.getRange = function() { var anchor = this.anchor; var lead = this.lead; if (this.isEmpty()) return Range.fromPoints(lead, lead); if (this.isBackwards()) { return Range.fromPoints(lead, anchor); } else { return Range.fromPoints(anchor, lead); } }; this.clearSelection = function() { if (!this.$isEmpty) { this.$isEmpty = true; this._emit("changeSelection"); } }; this.selectAll = function() { var lastRow = this.doc.getLength() - 1; this.setSelectionAnchor(0, 0); this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length); }; this.setRange = this.setSelectionRange = function(range, reverse) { if (reverse) { this.setSelectionAnchor(range.end.row, range.end.column); this.selectTo(range.start.row, range.start.column); } else { this.setSelectionAnchor(range.start.row, range.start.column); this.selectTo(range.end.row, range.end.column); } if (this.getRange().isEmpty()) this.$isEmpty = true; this.$desiredColumn = null; }; this.$moveSelection = function(mover) { var lead = this.lead; if (this.$isEmpty) this.setSelectionAnchor(lead.row, lead.column); mover.call(this); }; this.selectTo = function(row, column) { this.$moveSelection(function() { this.moveCursorTo(row, column); }); }; this.selectToPosition = function(pos) { this.$moveSelection(function() { this.moveCursorToPosition(pos); }); }; this.moveTo = function(row, column) { this.clearSelection(); this.moveCursorTo(row, column); }; this.moveToPosition = function(pos) { this.clearSelection(); this.moveCursorToPosition(pos); }; this.selectUp = function() { this.$moveSelection(this.moveCursorUp); }; this.selectDown = function() { this.$moveSelection(this.moveCursorDown); }; this.selectRight = function() { this.$moveSelection(this.moveCursorRight); }; this.selectLeft = function() { this.$moveSelection(this.moveCursorLeft); }; this.selectLineStart = function() { this.$moveSelection(this.moveCursorLineStart); }; this.selectLineEnd = function() { this.$moveSelection(this.moveCursorLineEnd); }; this.selectFileEnd = function() { this.$moveSelection(this.moveCursorFileEnd); }; this.selectFileStart = function() { this.$moveSelection(this.moveCursorFileStart); }; this.selectWordRight = function() { this.$moveSelection(this.moveCursorWordRight); }; this.selectWordLeft = function() { this.$moveSelection(this.moveCursorWordLeft); }; this.getWordRange = function(row, column) { if (typeof column == "undefined") { var cursor = row || this.lead; row = cursor.row; column = cursor.column; } return this.session.getWordRange(row, column); }; this.selectWord = function() { this.setSelectionRange(this.getWordRange()); }; this.selectAWord = function() { var cursor = this.getCursor(); var range = this.session.getAWordRange(cursor.row, cursor.column); this.setSelectionRange(range); }; this.getLineRange = function(row, excludeLastChar) { var rowStart = typeof row == "number" ? row : this.lead.row; var rowEnd; var foldLine = this.session.getFoldLine(rowStart); if (foldLine) { rowStart = foldLine.start.row; rowEnd = foldLine.end.row; } else { rowEnd = rowStart; } if (excludeLastChar === true) return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length); else return new Range(rowStart, 0, rowEnd + 1, 0); }; this.selectLine = function() { this.setSelectionRange(this.getLineRange()); }; this.moveCursorUp = function() { this.moveCursorBy(-1, 0); }; this.moveCursorDown = function() { this.moveCursorBy(1, 0); }; this.moveCursorLeft = function() { var cursor = this.lead.getPosition(), fold; if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) { this.moveCursorTo(fold.start.row, fold.start.column); } else if (cursor.column === 0) { if (cursor.row > 0) { this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length); } } else { var tabSize = this.session.getTabSize(); if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(" ").length-1 == tabSize) this.moveCursorBy(0, -tabSize); else this.moveCursorBy(0, -1); } }; this.moveCursorRight = function() { var cursor = this.lead.getPosition(), fold; if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) { this.moveCursorTo(fold.end.row, fold.end.column); } else if (this.lead.column == this.doc.getLine(this.lead.row).length) { if (this.lead.row < this.doc.getLength() - 1) { this.moveCursorTo(this.lead.row + 1, 0); } } else { var tabSize = this.session.getTabSize(); var cursor = this.lead; if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(" ").length-1 == tabSize) this.moveCursorBy(0, tabSize); else this.moveCursorBy(0, 1); } }; this.moveCursorLineStart = function() { var row = this.lead.row; var column = this.lead.column; var screenRow = this.session.documentToScreenRow(row, column); var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0); var beforeCursor = this.session.getDisplayLine( row, null, firstColumnPosition.row, firstColumnPosition.column ); var leadingSpace = beforeCursor.match(/^\s*/); if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) firstColumnPosition.column += leadingSpace[0].length; this.moveCursorToPosition(firstColumnPosition); }; this.moveCursorLineEnd = function() { var lead = this.lead; var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column); if (this.lead.column == lineEnd.column) { var line = this.session.getLine(lineEnd.row); if (lineEnd.column == line.length) { var textEnd = line.search(/\s+$/); if (textEnd > 0) lineEnd.column = textEnd; } } this.moveCursorTo(lineEnd.row, lineEnd.column); }; this.moveCursorFileEnd = function() { var row = this.doc.getLength() - 1; var column = this.doc.getLine(row).length; this.moveCursorTo(row, column); }; this.moveCursorFileStart = function() { this.moveCursorTo(0, 0); }; this.moveCursorLongWordRight = function() { var row = this.lead.row; var column = this.lead.column; var line = this.doc.getLine(row); var rightOfCursor = line.substring(column); var match; this.session.nonTokenRe.lastIndex = 0; this.session.tokenRe.lastIndex = 0; var fold = this.session.getFoldAt(row, column, 1); if (fold) { this.moveCursorTo(fold.end.row, fold.end.column); return; } if (match = this.session.nonTokenRe.exec(rightOfCursor)) { column += this.session.nonTokenRe.lastIndex; this.session.nonTokenRe.lastIndex = 0; rightOfCursor = line.substring(column); } if (column >= line.length) { this.moveCursorTo(row, line.length); this.moveCursorRight(); if (row < this.doc.getLength() - 1) this.moveCursorWordRight(); return; } if (match = this.session.tokenRe.exec(rightOfCursor)) { column += this.session.tokenRe.lastIndex; this.session.tokenRe.lastIndex = 0; } this.moveCursorTo(row, column); }; this.moveCursorLongWordLeft = function() { var row = this.lead.row; var column = this.lead.column; var fold; if (fold = this.session.getFoldAt(row, column, -1)) { this.moveCursorTo(fold.start.row, fold.start.column); return; } var str = this.session.getFoldStringAt(row, column, -1); if (str == null) { str = this.doc.getLine(row).substring(0, column); } var leftOfCursor = lang.stringReverse(str); var match; this.session.nonTokenRe.lastIndex = 0; this.session.tokenRe.lastIndex = 0; if (match = this.session.nonTokenRe.exec(leftOfCursor)) { column -= this.session.nonTokenRe.lastIndex; leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex); this.session.nonTokenRe.lastIndex = 0; } if (column <= 0) { this.moveCursorTo(row, 0); this.moveCursorLeft(); if (row > 0) this.moveCursorWordLeft(); return; } if (match = this.session.tokenRe.exec(leftOfCursor)) { column -= this.session.tokenRe.lastIndex; this.session.tokenRe.lastIndex = 0; } this.moveCursorTo(row, column); }; this.$shortWordEndIndex = function(rightOfCursor) { var match, index = 0, ch; var whitespaceRe = /\s/; var tokenRe = this.session.tokenRe; tokenRe.lastIndex = 0; if (match = this.session.tokenRe.exec(rightOfCursor)) { index = this.session.tokenRe.lastIndex; } else { while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) index ++; if (index < 1) { tokenRe.lastIndex = 0; while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) { tokenRe.lastIndex = 0; index ++; if (whitespaceRe.test(ch)) { if (index > 2) { index--; break; } else { while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) index ++; if (index > 2) break; } } } } } tokenRe.lastIndex = 0; return index; }; this.moveCursorShortWordRight = function() { var row = this.lead.row; var column = this.lead.column; var line = this.doc.getLine(row); var rightOfCursor = line.substring(column); var fold = this.session.getFoldAt(row, column, 1); if (fold) return this.moveCursorTo(fold.end.row, fold.end.column); if (column == line.length) { var l = this.doc.getLength(); do { row++; rightOfCursor = this.doc.getLine(row); } while (row < l && /^\s*$/.test(rightOfCursor)); if (!/^\s+/.test(rightOfCursor)) rightOfCursor = ""; column = 0; } var index = this.$shortWordEndIndex(rightOfCursor); this.moveCursorTo(row, column + index); }; this.moveCursorShortWordLeft = function() { var row = this.lead.row; var column = this.lead.column; var fold; if (fold = this.session.getFoldAt(row, column, -1)) return this.moveCursorTo(fold.start.row, fold.start.column); var line = this.session.getLine(row).substring(0, column); if (column === 0) { do { row--; line = this.doc.getLine(row); } while (row > 0 && /^\s*$/.test(line)); column = line.length; if (!/\s+$/.test(line)) line = ""; } var leftOfCursor = lang.stringReverse(line); var index = this.$shortWordEndIndex(leftOfCursor); return this.moveCursorTo(row, column - index); }; this.moveCursorWordRight = function() { if (this.session.$selectLongWords) this.moveCursorLongWordRight(); else this.moveCursorShortWordRight(); }; this.moveCursorWordLeft = function() { if (this.session.$selectLongWords) this.moveCursorLongWordLeft(); else this.moveCursorShortWordLeft(); }; this.moveCursorBy = function(rows, chars) { var screenPos = this.session.documentToScreenPosition( this.lead.row, this.lead.column ); if (chars === 0) { if (this.$desiredColumn) screenPos.column = this.$desiredColumn; else this.$desiredColumn = screenPos.column; } var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column); if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) { if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) docPos.row++; } this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); }; this.moveCursorToPosition = function(position) { this.moveCursorTo(position.row, position.column); }; this.moveCursorTo = function(row, column, keepDesiredColumn) { var fold = this.session.getFoldAt(row, column, 1); if (fold) { row = fold.start.row; column = fold.start.column; } this.$keepDesiredColumnOnChange = true; this.lead.setPosition(row, column); this.$keepDesiredColumnOnChange = false; if (!keepDesiredColumn) this.$desiredColumn = null; }; this.moveCursorToScreen = function(row, column, keepDesiredColumn) { var pos = this.session.screenToDocumentPosition(row, column); this.moveCursorTo(pos.row, pos.column, keepDesiredColumn); }; this.detach = function() { this.lead.detach(); this.anchor.detach(); this.session = this.doc = null; }; this.fromOrientedRange = function(range) { this.setSelectionRange(range, range.cursor == range.start); this.$desiredColumn = range.desiredColumn || this.$desiredColumn; }; this.toOrientedRange = function(range) { var r = this.getRange(); if (range) { range.start.column = r.start.column; range.start.row = r.start.row; range.end.column = r.end.column; range.end.row = r.end.row; } else { range = r; } range.cursor = this.isBackwards() ? range.start : range.end; range.desiredColumn = this.$desiredColumn; return range; }; this.getRangeOfMovements = function(func) { var start = this.getCursor(); try { func.call(null, this); var end = this.getCursor(); return Range.fromPoints(start,end); } catch(e) { return Range.fromPoints(start,start); } finally { this.moveCursorToPosition(start); } }; this.toJSON = function() { if (this.rangeCount) { var data = this.ranges.map(function(r) { var r1 = r.clone(); r1.isBackwards = r.cursor == r.start; return r1; }); } else { var data = this.getRange(); data.isBackwards = this.isBackwards(); } return data; }; this.fromJSON = function(data) { if (data.start == undefined) { if (this.rangeList) { this.toSingleRange(data[0]); for (var i = data.length; i--; ) { var r = Range.fromPoints(data[i].start, data[i].end); if (data.isBackwards) r.cursor = r.start; this.addRange(r, true); } return; } else data = data[0]; } if (this.rangeList) this.toSingleRange(data); this.setSelectionRange(data, data.isBackwards); }; this.isEqual = function(data) { if ((data.length || this.rangeCount) && data.length != this.rangeCount) return false; if (!data.length || !this.ranges) return this.getRange().isEqual(data); for (var i = this.ranges.length; i--; ) { if (!this.ranges[i].isEqual(data[i])) return false; } return true; }; }).call(Selection.prototype); exports.Selection = Selection; }); ace.define("ace/tokenizer",["require","exports","module","ace/config"], function(require, exports, module) { "use strict"; var config = require("./config"); var MAX_TOKEN_COUNT = 2000; var Tokenizer = function(rules) { this.states = rules; this.regExps = {}; this.matchMappings = {}; for (var key in this.states) { var state = this.states[key]; var ruleRegExps = []; var matchTotal = 0; var mapping = this.matchMappings[key] = {defaultToken: "text"}; var flag = "g"; var splitterRurles = []; for (var i = 0; i < state.length; i++) { var rule = state[i]; if (rule.defaultToken) mapping.defaultToken = rule.defaultToken; if (rule.caseInsensitive) flag = "gi"; if (rule.regex == null) continue; if (rule.regex instanceof RegExp) rule.regex = rule.regex.toString().slice(1, -1); var adjustedregex = rule.regex; var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2; if (Array.isArray(rule.token)) { if (rule.token.length == 1 || matchcount == 1) { rule.token = rule.token[0]; } else if (matchcount - 1 != rule.token.length) { this.reportError("number of classes and regexp groups doesn't match", { rule: rule, groupCount: matchcount - 1 }); rule.token = rule.token[0]; } else { rule.tokenArray = rule.token; rule.token = null; rule.onMatch = this.$arrayTokens; } } else if (typeof rule.token == "function" && !rule.onMatch) { if (matchcount > 1) rule.onMatch = this.$applyToken; else rule.onMatch = rule.token; } if (matchcount > 1) { if (/\\\d/.test(rule.regex)) { adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function(match, digit) { return "\\" + (parseInt(digit, 10) + matchTotal + 1); }); } else { matchcount = 1; adjustedregex = this.removeCapturingGroups(rule.regex); } if (!rule.splitRegex && typeof rule.token != "string") splitterRurles.push(rule); // flag will be known only at the very end } mapping[matchTotal] = i; matchTotal += matchcount; ruleRegExps.push(adjustedregex); if (!rule.onMatch) rule.onMatch = null; } if (!ruleRegExps.length) { mapping[0] = 0; ruleRegExps.push("$"); } splitterRurles.forEach(function(rule) { rule.splitRegex = this.createSplitterRegexp(rule.regex, flag); }, this); this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag); } }; (function() { this.$setMaxTokenCount = function(m) { MAX_TOKEN_COUNT = m | 0; }; this.$applyToken = function(str) { var values = this.splitRegex.exec(str).slice(1); var types = this.token.apply(this, values); if (typeof types === "string") return [{type: types, value: str}]; var tokens = []; for (var i = 0, l = types.length; i < l; i++) { if (values[i]) tokens[tokens.length] = { type: types[i], value: values[i] }; } return tokens; }, this.$arrayTokens = function(str) { if (!str) return []; var values = this.splitRegex.exec(str); if (!values) return "text"; var tokens = []; var types = this.tokenArray; for (var i = 0, l = types.length; i < l; i++) { if (values[i + 1]) tokens[tokens.length] = { type: types[i], value: values[i + 1] }; } return tokens; }; this.removeCapturingGroups = function(src) { var r = src.replace( /\[(?:\\.|[^\]])*?\]|\\.|\(\?[:=!]|(\()/g, function(x, y) {return y ? "(?:" : x;} ); return r; }; this.createSplitterRegexp = function(src, flag) { if (src.indexOf("(?=") != -1) { var stack = 0; var inChClass = false; var lastCapture = {}; src.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g, function( m, esc, parenOpen, parenClose, square, index ) { if (inChClass) { inChClass = square != "]"; } else if (square) { inChClass = true; } else if (parenClose) { if (stack == lastCapture.stack) { lastCapture.end = index+1; lastCapture.stack = -1; } stack--; } else if (parenOpen) { stack++; if (parenOpen.length != 1) { lastCapture.stack = stack lastCapture.start = index; } } return m; }); if (lastCapture.end != null && /^\)*$/.test(src.substr(lastCapture.end))) src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end); } return new RegExp(src, (flag||"").replace("g", "")); }; this.getLineTokens = function(line, startState) { if (startState && typeof startState != "string") { var stack = startState.slice(0); startState = stack[0]; if (startState === "#tmp") { stack.shift() startState = stack.shift() } } else var stack = []; var currentState = startState || "start"; var state = this.states[currentState]; if (!state) { currentState = "start"; state = this.states[currentState]; } var mapping = this.matchMappings[currentState]; var re = this.regExps[currentState]; re.lastIndex = 0; var match, tokens = []; var lastIndex = 0; var matchAttempts = 0; var token = {type: null, value: ""}; while (match = re.exec(line)) { var type = mapping.defaultToken; var rule = null; var value = match[0]; var index = re.lastIndex; if (index - value.length > lastIndex) { var skipped = line.substring(lastIndex, index - value.length); if (token.type == type) { token.value += skipped; } else { if (token.type) tokens.push(token); token = {type: type, value: skipped}; } } for (var i = 0; i < match.length-2; i++) { if (match[i + 1] === undefined) continue; rule = state[mapping[i]]; if (rule.onMatch) type = rule.onMatch(value, currentState, stack); else type = rule.token; if (rule.next) { if (typeof rule.next == "string") { currentState = rule.next; } else { currentState = rule.next(currentState, stack); } state = this.states[currentState]; if (!state) { this.reportError("state doesn't exist", currentState); currentState = "start"; state = this.states[currentState]; } mapping = this.matchMappings[currentState]; lastIndex = index; re = this.regExps[currentState]; re.lastIndex = index; } break; } if (value) { if (typeof type === "string") { if ((!rule || rule.merge !== false) && token.type === type) { token.value += value; } else { if (token.type) tokens.push(token); token = {type: type, value: value}; } } else if (type) { if (token.type) tokens.push(token); token = {type: null, value: ""}; for (var i = 0; i < type.length; i++) tokens.push(type[i]); } } if (lastIndex == line.length) break; lastIndex = index; if (matchAttempts++ > MAX_TOKEN_COUNT) { if (matchAttempts > 2 * line.length) { this.reportError("infinite loop with in ace tokenizer", { startState: startState, line: line }); } while (lastIndex < line.length) { if (token.type) tokens.push(token); token = { value: line.substring(lastIndex, lastIndex += 2000), type: "overflow" }; } currentState = "start"; stack = []; break; } } if (token.type) tokens.push(token); if (stack.length > 1) { if (stack[0] !== currentState) stack.unshift("#tmp", currentState); } return { tokens : tokens, state : stack.length ? stack : currentState }; }; this.reportError = config.reportError; }).call(Tokenizer.prototype); exports.Tokenizer = Tokenizer; }); ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"], function(require, exports, module) { "use strict"; var lang = require("../lib/lang"); var TextHighlightRules = function() { this.$rules = { "start" : [{ token : "empty_line", regex : '^$' }, { defaultToken : "text" }] }; }; (function() { this.addRules = function(rules, prefix) { if (!prefix) { for (var key in rules) this.$rules[key] = rules[key]; return; } for (var key in rules) { var state = rules[key]; for (var i = 0; i < state.length; i++) { var rule = state[i]; if (rule.next || rule.onMatch) { if (typeof rule.next != "string") { if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) rule.nextState = prefix + rule.nextState; } else { if (rule.next.indexOf(prefix) !== 0) rule.next = prefix + rule.next; } } } this.$rules[prefix + key] = state; } }; this.getRules = function() { return this.$rules; }; this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) { var embedRules = typeof HighlightRules == "function" ? new HighlightRules().getRules() : HighlightRules; if (states) { for (var i = 0; i < states.length; i++) states[i] = prefix + states[i]; } else { states = []; for (var key in embedRules) states.push(prefix + key); } this.addRules(embedRules, prefix); if (escapeRules) { var addRules = Array.prototype[append ? "push" : "unshift"]; for (var i = 0; i < states.length; i++) addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules)); } if (!this.$embeds) this.$embeds = []; this.$embeds.push(prefix); }; this.getEmbeds = function() { return this.$embeds; }; var pushState = function(currentState, stack) { if (currentState != "start" || stack.length) stack.unshift(this.nextState, currentState); return this.nextState; }; var popState = function(currentState, stack) { stack.shift(); return stack.shift() || "start"; }; this.normalizeRules = function() { var id = 0; var rules = this.$rules; function processState(key) { var state = rules[key]; state.processed = true; for (var i = 0; i < state.length; i++) { var rule = state[i]; if (!rule.regex && rule.start) { rule.regex = rule.start; if (!rule.next) rule.next = []; rule.next.push({ defaultToken: rule.token }, { token: rule.token + ".end", regex: rule.end || rule.start, next: "pop" }); rule.token = rule.token + ".start"; rule.push = true; } var next = rule.next || rule.push; if (next && Array.isArray(next)) { var stateName = rule.stateName; if (!stateName) { stateName = rule.token; if (typeof stateName != "string") stateName = stateName[0] || ""; if (rules[stateName]) stateName += id++; } rules[stateName] = next; rule.next = stateName; processState(stateName); } else if (next == "pop") { rule.next = popState; } if (rule.push) { rule.nextState = rule.next || rule.push; rule.next = pushState; delete rule.push; } if (rule.rules) { for (var r in rule.rules) { if (rules[r]) { if (rules[r].push) rules[r].push.apply(rules[r], rule.rules[r]); } else { rules[r] = rule.rules[r]; } } } if (rule.include || typeof rule == "string") { var includeName = rule.include || rule; var toInsert = rules[includeName]; } else if (Array.isArray(rule)) toInsert = rule; if (toInsert) { var args = [i, 1].concat(toInsert); if (rule.noEscape) args = args.filter(function(x) {return !x.next;}); state.splice.apply(state, args); i--; toInsert = null; } if (rule.keywordMap) { rule.token = this.createKeywordMapper( rule.keywordMap, rule.defaultToken || "text", rule.caseInsensitive ); delete rule.defaultToken; } } } Object.keys(rules).forEach(processState, this); }; this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) { var keywords = Object.create(null); Object.keys(map).forEach(function(className) { var a = map[className]; if (ignoreCase) a = a.toLowerCase(); var list = a.split(splitChar || "|"); for (var i = list.length; i--; ) keywords[list[i]] = className; }); if (Object.getPrototypeOf(keywords)) { keywords.__proto__ = null; } this.$keywordList = Object.keys(keywords); map = null; return ignoreCase ? function(value) {return keywords[value.toLowerCase()] || defaultToken } : function(value) {return keywords[value] || defaultToken }; }; this.getKeywords = function() { return this.$keywords; }; }).call(TextHighlightRules.prototype); exports.TextHighlightRules = TextHighlightRules; }); ace.define("ace/mode/behaviour",["require","exports","module"], function(require, exports, module) { "use strict"; var Behaviour = function() { this.$behaviours = {}; }; (function () { this.add = function (name, action, callback) { switch (undefined) { case this.$behaviours: this.$behaviours = {}; case this.$behaviours[name]: this.$behaviours[name] = {}; } this.$behaviours[name][action] = callback; } this.addBehaviours = function (behaviours) { for (var key in behaviours) { for (var action in behaviours[key]) { this.add(key, action, behaviours[key][action]); } } } this.remove = function (name) { if (this.$behaviours && this.$behaviours[name]) { delete this.$behaviours[name]; } } this.inherit = function (mode, filter) { if (typeof mode === "function") { var behaviours = new mode().getBehaviours(filter); } else { var behaviours = mode.getBehaviours(filter); } this.addBehaviours(behaviours); } this.getBehaviours = function (filter) { if (!filter) { return this.$behaviours; } else { var ret = {} for (var i = 0; i < filter.length; i++) { if (this.$behaviours[filter[i]]) { ret[filter[i]] = this.$behaviours[filter[i]]; } } return ret; } } }).call(Behaviour.prototype); exports.Behaviour = Behaviour; }); ace.define("ace/unicode",["require","exports","module"], function(require, exports, module) { "use strict"; exports.packages = {}; addUnicodePackage({ L: "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", Ll: "0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A", Lu: "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A", Lt: "01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC", Lm: "02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F", Lo: "01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", M: "0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26", Mn: "0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26", Mc: "0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC", Me: "0488048906DE20DD-20E020E2-20E4A670-A672", N: "0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", Nd: "0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", Nl: "16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF", No: "00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835", P: "0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65", Pd: "002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D", Ps: "0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62", Pe: "0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63", Pi: "00AB2018201B201C201F20392E022E042E092E0C2E1C2E20", Pf: "00BB2019201D203A2E032E052E0A2E0D2E1D2E21", Pc: "005F203F20402054FE33FE34FE4D-FE4FFF3F", Po: "0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65", S: "0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD", Sm: "002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC", Sc: "002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6", Sk: "005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3", So: "00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD", Z: "002000A01680180E2000-200A20282029202F205F3000", Zs: "002000A01680180E2000-200A202F205F3000", Zl: "2028", Zp: "2029", C: "0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF", Cc: "0000-001F007F-009F", Cf: "00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB", Co: "E000-F8FF", Cs: "D800-DFFF", Cn: "03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF" }); function addUnicodePackage (pack) { var codePoint = /\w{4}/g; for (var name in pack) exports.packages[name] = pack[name].replace(codePoint, "\\u$&"); }; }); ace.define("ace/token_iterator",["require","exports","module"], function(require, exports, module) { "use strict"; var TokenIterator = function(session, initialRow, initialColumn) { this.$session = session; this.$row = initialRow; this.$rowTokens = session.getTokens(initialRow); var token = session.getTokenAt(initialRow, initialColumn); this.$tokenIndex = token ? token.index : -1; }; (function() { this.stepBackward = function() { this.$tokenIndex -= 1; while (this.$tokenIndex < 0) { this.$row -= 1; if (this.$row < 0) { this.$row = 0; return null; } this.$rowTokens = this.$session.getTokens(this.$row); this.$tokenIndex = this.$rowTokens.length - 1; } return this.$rowTokens[this.$tokenIndex]; }; this.stepForward = function() { this.$tokenIndex += 1; var rowCount; while (this.$tokenIndex >= this.$rowTokens.length) { this.$row += 1; if (!rowCount) rowCount = this.$session.getLength(); if (this.$row >= rowCount) { this.$row = rowCount - 1; return null; } this.$rowTokens = this.$session.getTokens(this.$row); this.$tokenIndex = 0; } return this.$rowTokens[this.$tokenIndex]; }; this.getCurrentToken = function () { return this.$rowTokens[this.$tokenIndex]; }; this.getCurrentTokenRow = function () { return this.$row; }; this.getCurrentTokenColumn = function() { var rowTokens = this.$rowTokens; var tokenIndex = this.$tokenIndex; var column = rowTokens[tokenIndex].start; if (column !== undefined) return column; column = 0; while (tokenIndex > 0) { tokenIndex -= 1; column += rowTokens[tokenIndex].value.length; } return column; }; }).call(TokenIterator.prototype); exports.TokenIterator = TokenIterator; }); ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"], function(require, exports, module) { "use strict"; var Tokenizer = require("../tokenizer").Tokenizer; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var Behaviour = require("./behaviour").Behaviour; var unicode = require("../unicode"); var lang = require("../lib/lang"); var TokenIterator = require("../token_iterator").TokenIterator; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = TextHighlightRules; this.$behaviour = new Behaviour(); }; (function() { this.tokenRe = new RegExp("^[" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + "\\$_]+", "g" ); this.nonTokenRe = new RegExp("^(?:[^" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + "\\$_]|\\s])+", "g" ); this.getTokenizer = function() { if (!this.$tokenizer) { this.$highlightRules = this.$highlightRules || new this.HighlightRules(); this.$tokenizer = new Tokenizer(this.$highlightRules.getRules()); } return this.$tokenizer; }; this.lineCommentStart = ""; this.blockComment = ""; this.toggleCommentLines = function(state, session, startRow, endRow) { var doc = session.doc; var ignoreBlankLines = true; var shouldRemove = true; var minIndent = Infinity; var tabSize = session.getTabSize(); var insertAtTabStop = false; if (!this.lineCommentStart) { if (!this.blockComment) return false; var lineCommentStart = this.blockComment.start; var lineCommentEnd = this.blockComment.end; var regexpStart = new RegExp("^(\\s*)(?:" + lang.escapeRegExp(lineCommentStart) + ")"); var regexpEnd = new RegExp("(?:" + lang.escapeRegExp(lineCommentEnd) + ")\\s*$"); var comment = function(line, i) { if (testRemove(line, i)) return; if (!ignoreBlankLines || /\S/.test(line)) { doc.insertInLine({row: i, column: line.length}, lineCommentEnd); doc.insertInLine({row: i, column: minIndent}, lineCommentStart); } }; var uncomment = function(line, i) { var m; if (m = line.match(regexpEnd)) doc.removeInLine(i, line.length - m[0].length, line.length); if (m = line.match(regexpStart)) doc.removeInLine(i, m[1].length, m[0].length); }; var testRemove = function(line, row) { if (regexpStart.test(line)) return true; var tokens = session.getTokens(row); for (var i = 0; i < tokens.length; i++) { if (tokens[i].type === 'comment') return true; } }; } else { if (Array.isArray(this.lineCommentStart)) { var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join("|"); var lineCommentStart = this.lineCommentStart[0]; } else { var regexpStart = lang.escapeRegExp(this.lineCommentStart); var lineCommentStart = this.lineCommentStart; } regexpStart = new RegExp("^(\\s*)(?:" + regexpStart + ") ?"); insertAtTabStop = session.getUseSoftTabs(); var uncomment = function(line, i) { var m = line.match(regexpStart); if (!m) return; var start = m[1].length, end = m[0].length; if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == " ") end--; doc.removeInLine(i, start, end); }; var commentWithSpace = lineCommentStart + " "; var comment = function(line, i) { if (!ignoreBlankLines || /\S/.test(line)) { if (shouldInsertSpace(line, minIndent, minIndent)) doc.insertInLine({row: i, column: minIndent}, commentWithSpace); else doc.insertInLine({row: i, column: minIndent}, lineCommentStart); } }; var testRemove = function(line, i) { return regexpStart.test(line); }; var shouldInsertSpace = function(line, before, after) { var spaces = 0; while (before-- && line.charAt(before) == " ") spaces++; if (spaces % tabSize != 0) return false; var spaces = 0; while (line.charAt(after++) == " ") spaces++; if (tabSize > 2) return spaces % tabSize != tabSize - 1; else return spaces % tabSize == 0; return true; }; } function iter(fun) { for (var i = startRow; i <= endRow; i++) fun(doc.getLine(i), i); } var minEmptyLength = Infinity; iter(function(line, i) { var indent = line.search(/\S/); if (indent !== -1) { if (indent < minIndent) minIndent = indent; if (shouldRemove && !testRemove(line, i)) shouldRemove = false; } else if (minEmptyLength > line.length) { minEmptyLength = line.length; } }); if (minIndent == Infinity) { minIndent = minEmptyLength; ignoreBlankLines = false; shouldRemove = false; } if (insertAtTabStop && minIndent % tabSize != 0) minIndent = Math.floor(minIndent / tabSize) * tabSize; iter(shouldRemove ? uncomment : comment); }; this.toggleBlockComment = function(state, session, range, cursor) { var comment = this.blockComment; if (!comment) return; if (!comment.start && comment[0]) comment = comment[0]; var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); var sel = session.selection; var initialRange = session.selection.toOrientedRange(); var startRow, colDiff; if (token && /comment/.test(token.type)) { var startRange, endRange; while (token && /comment/.test(token.type)) { var i = token.value.indexOf(comment.start); if (i != -1) { var row = iterator.getCurrentTokenRow(); var column = iterator.getCurrentTokenColumn() + i; startRange = new Range(row, column, row, column + comment.start.length); break; } token = iterator.stepBackward(); } var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); while (token && /comment/.test(token.type)) { var i = token.value.indexOf(comment.end); if (i != -1) { var row = iterator.getCurrentTokenRow(); var column = iterator.getCurrentTokenColumn() + i; endRange = new Range(row, column, row, column + comment.end.length); break; } token = iterator.stepForward(); } if (endRange) session.remove(endRange); if (startRange) { session.remove(startRange); startRow = startRange.start.row; colDiff = -comment.start.length; } } else { colDiff = comment.start.length; startRow = range.start.row; session.insert(range.end, comment.end); session.insert(range.start, comment.start); } if (initialRange.start.row == startRow) initialRange.start.column += colDiff; if (initialRange.end.row == startRow) initialRange.end.column += colDiff; session.selection.fromOrientedRange(initialRange); }; this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.autoOutdent = function(state, doc, row) { }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; this.createWorker = function(session) { return null; }; this.createModeDelegates = function (mapping) { this.$embeds = []; this.$modes = {}; for (var i in mapping) { if (mapping[i]) { this.$embeds.push(i); this.$modes[i] = new mapping[i](); } } var delegations = ['toggleBlockComment', 'toggleCommentLines', 'getNextLineIndent', 'checkOutdent', 'autoOutdent', 'transformAction', 'getCompletions']; for (var i = 0; i < delegations.length; i++) { (function(scope) { var functionName = delegations[i]; var defaultHandler = scope[functionName]; scope[delegations[i]] = function() { return this.$delegator(functionName, arguments, defaultHandler); }; } (this)); } }; this.$delegator = function(method, args, defaultHandler) { var state = args[0]; if (typeof state != "string") state = state[0]; for (var i = 0; i < this.$embeds.length; i++) { if (!this.$modes[this.$embeds[i]]) continue; var split = state.split(this.$embeds[i]); if (!split[0] && split[1]) { args[0] = split[1]; var mode = this.$modes[this.$embeds[i]]; return mode[method].apply(mode, args); } } var ret = defaultHandler.apply(this, args); return defaultHandler ? ret : undefined; }; this.transformAction = function(state, action, editor, session, param) { if (this.$behaviour) { var behaviours = this.$behaviour.getBehaviours(); for (var key in behaviours) { if (behaviours[key][action]) { var ret = behaviours[key][action].apply(this, arguments); if (ret) { return ret; } } } } }; this.getKeywords = function(append) { if (!this.completionKeywords) { var rules = this.$tokenizer.rules; var completionKeywords = []; for (var rule in rules) { var ruleItr = rules[rule]; for (var r = 0, l = ruleItr.length; r < l; r++) { if (typeof ruleItr[r].token === "string") { if (/keyword|support|storage/.test(ruleItr[r].token)) completionKeywords.push(ruleItr[r].regex); } else if (typeof ruleItr[r].token === "object") { for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { if (/keyword|support|storage/.test(ruleItr[r].token[a])) { var rule = ruleItr[r].regex.match(/\(.+?\)/g)[a]; completionKeywords.push(rule.substr(1, rule.length - 2)); } } } } } this.completionKeywords = completionKeywords; } if (!append) return this.$keywordList; return completionKeywords.concat(this.$keywordList || []); }; this.$createKeywordList = function() { if (!this.$highlightRules) this.getTokenizer(); return this.$keywordList = this.$highlightRules.$keywordList || []; }; this.getCompletions = function(state, session, pos, prefix) { var keywords = this.$keywordList || this.$createKeywordList(); return keywords.map(function(word) { return { name: word, value: word, score: 0, meta: "keyword" }; }); }; this.$id = "ace/mode/text"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Anchor = exports.Anchor = function(doc, row, column) { this.$onChange = this.onChange.bind(this); this.attach(doc); if (typeof column == "undefined") this.setPosition(row.row, row.column); else this.setPosition(row, column); }; (function() { oop.implement(this, EventEmitter); this.getPosition = function() { return this.$clipPositionToDocument(this.row, this.column); }; this.getDocument = function() { return this.document; }; this.$insertRight = false; this.onChange = function(e) { var delta = e.data; var range = delta.range; if (range.start.row == range.end.row && range.start.row != this.row) return; if (range.start.row > this.row) return; if (range.start.row == this.row && range.start.column > this.column) return; var row = this.row; var column = this.column; var start = range.start; var end = range.end; if (delta.action === "insertText") { if (start.row === row && start.column <= column) { if (start.column === column && this.$insertRight) { } else if (start.row === end.row) { column += end.column - start.column; } else { column -= start.column; row += end.row - start.row; } } else if (start.row !== end.row && start.row < row) { row += end.row - start.row; } } else if (delta.action === "insertLines") { if (start.row === row && column === 0 && this.$insertRight) { } else if (start.row <= row) { row += end.row - start.row; } } else if (delta.action === "removeText") { if (start.row === row && start.column < column) { if (end.column >= column) column = start.column; else column = Math.max(0, column - (end.column - start.column)); } else if (start.row !== end.row && start.row < row) { if (end.row === row) column = Math.max(0, column - end.column) + start.column; row -= (end.row - start.row); } else if (end.row === row) { row -= end.row - start.row; column = Math.max(0, column - end.column) + start.column; } } else if (delta.action == "removeLines") { if (start.row <= row) { if (end.row <= row) row -= end.row - start.row; else { row = start.row; column = 0; } } } this.setPosition(row, column, true); }; this.setPosition = function(row, column, noClip) { var pos; if (noClip) { pos = { row: row, column: column }; } else { pos = this.$clipPositionToDocument(row, column); } if (this.row == pos.row && this.column == pos.column) return; var old = { row: this.row, column: this.column }; this.row = pos.row; this.column = pos.column; this._signal("change", { old: old, value: pos }); }; this.detach = function() { this.document.removeEventListener("change", this.$onChange); }; this.attach = function(doc) { this.document = doc || this.document; this.document.on("change", this.$onChange); }; this.$clipPositionToDocument = function(row, column) { var pos = {}; if (row >= this.document.getLength()) { pos.row = Math.max(0, this.document.getLength() - 1); pos.column = this.document.getLine(pos.row).length; } else if (row < 0) { pos.row = 0; pos.column = 0; } else { pos.row = row; pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); } if (column < 0) pos.column = 0; return pos; }; }).call(Anchor.prototype); }); ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var Document = function(text) { this.$lines = []; if (text.length === 0) { this.$lines = [""]; } else if (Array.isArray(text)) { this._insertLines(0, text); } else { this.insert({row: 0, column:0}, text); } }; (function() { oop.implement(this, EventEmitter); this.setValue = function(text) { var len = this.getLength(); this.remove(new Range(0, 0, len, this.getLine(len-1).length)); this.insert({row: 0, column:0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); }; this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; if ("aaa".split(/a/).length === 0) this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; else this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; this.$detectNewLine = function(text) { var match = text.match(/^.*?(\r\n|\r|\n)/m); this.$autoNewLine = match ? match[1] : "\n"; this._signal("changeNewLineMode"); }; this.getNewLineCharacter = function() { switch (this.$newLineMode) { case "windows": return "\r\n"; case "unix": return "\n"; default: return this.$autoNewLine || "\n"; } }; this.$autoNewLine = ""; this.$newLineMode = "auto"; this.setNewLineMode = function(newLineMode) { if (this.$newLineMode === newLineMode) return; this.$newLineMode = newLineMode; this._signal("changeNewLineMode"); }; this.getNewLineMode = function() { return this.$newLineMode; }; this.isNewLine = function(text) { return (text == "\r\n" || text == "\r" || text == "\n"); }; this.getLine = function(row) { return this.$lines[row] || ""; }; this.getLines = function(firstRow, lastRow) { return this.$lines.slice(firstRow, lastRow + 1); }; this.getAllLines = function() { return this.getLines(0, this.getLength()); }; this.getLength = function() { return this.$lines.length; }; this.getTextRange = function(range) { if (range.start.row == range.end.row) { return this.getLine(range.start.row) .substring(range.start.column, range.end.column); } var lines = this.getLines(range.start.row, range.end.row); lines[0] = (lines[0] || "").substring(range.start.column); var l = lines.length - 1; if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column); return lines.join(this.getNewLineCharacter()); }; this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); position.column = this.getLine(length-1).length; } else if (position.row < 0) position.row = 0; return position; }; this.insert = function(position, text) { if (!text || text.length === 0) return position; position = this.$clipPosition(position); if (this.getLength() <= 1) this.$detectNewLine(text); var lines = this.$split(text); var firstLine = lines.splice(0, 1)[0]; var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0]; position = this.insertInLine(position, firstLine); if (lastLine !== null) { position = this.insertNewLine(position); // terminate first line position = this._insertLines(position.row, lines); position = this.insertInLine(position, lastLine || ""); } return position; }; this.insertLines = function(row, lines) { if (row >= this.getLength()) return this.insert({row: row, column: 0}, "\n" + lines.join("\n")); return this._insertLines(Math.max(row, 0), lines); }; this._insertLines = function(row, lines) { if (lines.length == 0) return {row: row, column: 0}; while (lines.length > 0xF000) { var end = this._insertLines(row, lines.slice(0, 0xF000)); lines = lines.slice(0xF000); row = end.row; } var args = [row, 0]; args.push.apply(args, lines); this.$lines.splice.apply(this.$lines, args); var range = new Range(row, 0, row + lines.length, 0); var delta = { action: "insertLines", range: range, lines: lines }; this._signal("change", { data: delta }); return range.end; }; this.insertNewLine = function(position) { position = this.$clipPosition(position); var line = this.$lines[position.row] || ""; this.$lines[position.row] = line.substring(0, position.column); this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length)); var end = { row : position.row + 1, column : 0 }; var delta = { action: "insertText", range: Range.fromPoints(position, end), text: this.getNewLineCharacter() }; this._signal("change", { data: delta }); return end; }; this.insertInLine = function(position, text) { if (text.length == 0) return position; var line = this.$lines[position.row] || ""; this.$lines[position.row] = line.substring(0, position.column) + text + line.substring(position.column); var end = { row : position.row, column : position.column + text.length }; var delta = { action: "insertText", range: Range.fromPoints(position, end), text: text }; this._signal("change", { data: delta }); return end; }; this.remove = function(range) { if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end); range.start = this.$clipPosition(range.start); range.end = this.$clipPosition(range.end); if (range.isEmpty()) return range.start; var firstRow = range.start.row; var lastRow = range.end.row; if (range.isMultiLine()) { var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1; var lastFullRow = lastRow - 1; if (range.end.column > 0) this.removeInLine(lastRow, 0, range.end.column); if (lastFullRow >= firstFullRow) this._removeLines(firstFullRow, lastFullRow); if (firstFullRow != firstRow) { this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length); this.removeNewLine(range.start.row); } } else { this.removeInLine(firstRow, range.start.column, range.end.column); } return range.start; }; this.removeInLine = function(row, startColumn, endColumn) { if (startColumn == endColumn) return; var range = new Range(row, startColumn, row, endColumn); var line = this.getLine(row); var removed = line.substring(startColumn, endColumn); var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length); this.$lines.splice(row, 1, newLine); var delta = { action: "removeText", range: range, text: removed }; this._signal("change", { data: delta }); return range.start; }; this.removeLines = function(firstRow, lastRow) { if (firstRow < 0 || lastRow >= this.getLength()) return this.remove(new Range(firstRow, 0, lastRow + 1, 0)); return this._removeLines(firstRow, lastRow); }; this._removeLines = function(firstRow, lastRow) { var range = new Range(firstRow, 0, lastRow + 1, 0); var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1); var delta = { action: "removeLines", range: range, nl: this.getNewLineCharacter(), lines: removed }; this._signal("change", { data: delta }); return removed; }; this.removeNewLine = function(row) { var firstLine = this.getLine(row); var secondLine = this.getLine(row+1); var range = new Range(row, firstLine.length, row+1, 0); var line = firstLine + secondLine; this.$lines.splice(row, 2, line); var delta = { action: "removeText", range: range, text: this.getNewLineCharacter() }; this._signal("change", { data: delta }); }; this.replace = function(range, text) { if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end); if (text.length == 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); if (text) { var end = this.insert(range.start, text); } else { end = range.start; } return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { var delta = deltas[i]; var range = Range.fromPoints(delta.range.start, delta.range.end); if (delta.action == "insertLines") this._removeLines(range.start.row, range.end.row - 1); else if (delta.action == "insertText") this.remove(range); else if (delta.action == "removeLines") this._insertLines(range.start.row, delta.lines); else if (delta.action == "removeText") this.insert(range.start, delta.text); } }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; for (var i = startRow || 0, l = lines.length; i < l; i++) { index -= lines[i].length + newlineLength; if (index < 0) return {row: i, column: index + lines[i].length + newlineLength}; } return {row: l-1, column: lines[l-1].length}; }; this.positionToIndex = function(pos, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; var index = 0; var row = Math.min(pos.row, lines.length); for (var i = startRow || 0; i < row; ++i) index += lines[i].length + newlineLength; return index + pos.column; }; }).call(Document.prototype); exports.Document = Document; }); ace.define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var BackgroundTokenizer = function(tokenizer, editor) { this.running = false; this.lines = []; this.states = []; this.currentLine = 0; this.tokenizer = tokenizer; var self = this; this.$worker = function() { if (!self.running) { return; } var workerStart = new Date(); var currentLine = self.currentLine; var endLine = -1; var doc = self.doc; while (self.lines[currentLine]) currentLine++; var startLine = currentLine; var len = doc.getLength(); var processedLines = 0; self.running = false; while (currentLine < len) { self.$tokenizeRow(currentLine); endLine = currentLine; do { currentLine++; } while (self.lines[currentLine]); processedLines ++; if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { self.running = setTimeout(self.$worker, 20); break; } } self.currentLine = currentLine; if (startLine <= endLine) self.fireUpdateEvent(startLine, endLine); }; }; (function(){ oop.implement(this, EventEmitter); this.setTokenizer = function(tokenizer) { this.tokenizer = tokenizer; this.lines = []; this.states = []; this.start(0); }; this.setDocument = function(doc) { this.doc = doc; this.lines = []; this.states = []; this.stop(); }; this.fireUpdateEvent = function(firstRow, lastRow) { var data = { first: firstRow, last: lastRow }; this._signal("update", {data: data}); }; this.start = function(startRow) { this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength()); this.lines.splice(this.currentLine, this.lines.length); this.states.splice(this.currentLine, this.states.length); this.stop(); this.running = setTimeout(this.$worker, 700); }; this.scheduleStart = function() { if (!this.running) this.running = setTimeout(this.$worker, 700); } this.$updateOnChange = function(delta) { var range = delta.range; var startRow = range.start.row; var len = range.end.row - startRow; if (len === 0) { this.lines[startRow] = null; } else if (delta.action == "removeText" || delta.action == "removeLines") { this.lines.splice(startRow, len + 1, null); this.states.splice(startRow, len + 1, null); } else { var args = Array(len + 1); args.unshift(startRow, 1); this.lines.splice.apply(this.lines, args); this.states.splice.apply(this.states, args); } this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength()); this.stop(); }; this.stop = function() { if (this.running) clearTimeout(this.running); this.running = false; }; this.getTokens = function(row) { return this.lines[row] || this.$tokenizeRow(row); }; this.getState = function(row) { if (this.currentLine == row) this.$tokenizeRow(row); return this.states[row] || "start"; }; this.$tokenizeRow = function(row) { var line = this.doc.getLine(row); var state = this.states[row - 1]; var data = this.tokenizer.getLineTokens(line, state, row); if (this.states[row] + "" !== data.state + "") { this.states[row] = data.state; this.lines[row + 1] = null; if (this.currentLine > row + 1) this.currentLine = row + 1; } else if (this.currentLine == row) { this.currentLine = row + 1; } return this.lines[row] = data.tokens; }; }).call(BackgroundTokenizer.prototype); exports.BackgroundTokenizer = BackgroundTokenizer; }); ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module) { "use strict"; var lang = require("./lib/lang"); var oop = require("./lib/oop"); var Range = require("./range").Range; var SearchHighlight = function(regExp, clazz, type) { this.setRegexp(regExp); this.clazz = clazz; this.type = type || "text"; }; (function() { this.MAX_RANGES = 500; this.setRegexp = function(regExp) { if (this.regExp+"" == regExp+"") return; this.regExp = regExp; this.cache = []; }; this.update = function(html, markerLayer, session, config) { if (!this.regExp) return; var start = config.firstRow, end = config.lastRow; for (var i = start; i <= end; i++) { var ranges = this.cache[i]; if (ranges == null) { ranges = lang.getMatchOffsets(session.getLine(i), this.regExp); if (ranges.length > this.MAX_RANGES) ranges = ranges.slice(0, this.MAX_RANGES); ranges = ranges.map(function(match) { return new Range(i, match.offset, i, match.offset + match.length); }); this.cache[i] = ranges.length ? ranges : ""; } for (var j = ranges.length; j --; ) { markerLayer.drawSingleLineMarker( html, ranges[j].toScreenRange(session), this.clazz, config); } } }; }).call(SearchHighlight.prototype); exports.SearchHighlight = SearchHighlight; }); ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; function FoldLine(foldData, folds) { this.foldData = foldData; if (Array.isArray(folds)) { this.folds = folds; } else { folds = this.folds = [ folds ]; } var last = folds[folds.length - 1]; this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column); this.start = this.range.start; this.end = this.range.end; this.folds.forEach(function(fold) { fold.setFoldLine(this); }, this); } (function() { this.shiftRow = function(shift) { this.start.row += shift; this.end.row += shift; this.folds.forEach(function(fold) { fold.start.row += shift; fold.end.row += shift; }); }; this.addFold = function(fold) { if (fold.sameRow) { if (fold.start.row < this.startRow || fold.endRow > this.endRow) { throw new Error("Can't add a fold to this FoldLine as it has no connection"); } this.folds.push(fold); this.folds.sort(function(a, b) { return -a.range.compareEnd(b.start.row, b.start.column); }); if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) { this.end.row = fold.end.row; this.end.column = fold.end.column; } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) { this.start.row = fold.start.row; this.start.column = fold.start.column; } } else if (fold.start.row == this.end.row) { this.folds.push(fold); this.end.row = fold.end.row; this.end.column = fold.end.column; } else if (fold.end.row == this.start.row) { this.folds.unshift(fold); this.start.row = fold.start.row; this.start.column = fold.start.column; } else { throw new Error("Trying to add fold to FoldRow that doesn't have a matching row"); } fold.foldLine = this; }; this.containsRow = function(row) { return row >= this.start.row && row <= this.end.row; }; this.walk = function(callback, endRow, endColumn) { var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true; if (endRow == null) { endRow = this.end.row; endColumn = this.end.column; } for (var i = 0; i < folds.length; i++) { fold = folds[i]; cmp = fold.range.compareStart(endRow, endColumn); if (cmp == -1) { callback(null, endRow, endColumn, lastEnd, isNewRow); return; } stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow); stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd); if (stop || cmp === 0) { return; } isNewRow = !fold.sameRow; lastEnd = fold.end.column; } callback(null, endRow, endColumn, lastEnd, isNewRow); }; this.getNextFoldTo = function(row, column) { var fold, cmp; for (var i = 0; i < this.folds.length; i++) { fold = this.folds[i]; cmp = fold.range.compareEnd(row, column); if (cmp == -1) { return { fold: fold, kind: "after" }; } else if (cmp === 0) { return { fold: fold, kind: "inside" }; } } return null; }; this.addRemoveChars = function(row, column, len) { var ret = this.getNextFoldTo(row, column), fold, folds; if (ret) { fold = ret.fold; if (ret.kind == "inside" && fold.start.column != column && fold.start.row != row) { window.console && window.console.log(row, column, fold); } else if (fold.start.row == row) { folds = this.folds; var i = folds.indexOf(fold); if (i === 0) { this.start.column += len; } for (i; i < folds.length; i++) { fold = folds[i]; fold.start.column += len; if (!fold.sameRow) { return; } fold.end.column += len; } this.end.column += len; } } }; this.split = function(row, column) { var pos = this.getNextFoldTo(row, column); if (!pos || pos.kind == "inside") return null; var fold = pos.fold; var folds = this.folds; var foldData = this.foldData; var i = folds.indexOf(fold); var foldBefore = folds[i - 1]; this.end.row = foldBefore.end.row; this.end.column = foldBefore.end.column; folds = folds.splice(i, folds.length - i); var newFoldLine = new FoldLine(foldData, folds); foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine); return newFoldLine; }; this.merge = function(foldLineNext) { var folds = foldLineNext.folds; for (var i = 0; i < folds.length; i++) { this.addFold(folds[i]); } var foldData = this.foldData; foldData.splice(foldData.indexOf(foldLineNext), 1); }; this.toString = function() { var ret = [this.range.toString() + ": [" ]; this.folds.forEach(function(fold) { ret.push(" " + fold.toString()); }); ret.push("]"); return ret.join("\n"); }; this.idxToPosition = function(idx) { var lastFoldEndColumn = 0; for (var i = 0; i < this.folds.length; i++) { var fold = this.folds[i]; idx -= fold.start.column - lastFoldEndColumn; if (idx < 0) { return { row: fold.start.row, column: fold.start.column + idx }; } idx -= fold.placeholder.length; if (idx < 0) { return fold.start; } lastFoldEndColumn = fold.end.column; } return { row: this.end.row, column: this.end.column + idx }; }; }).call(FoldLine.prototype); exports.FoldLine = FoldLine; }); ace.define("ace/range_list",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("./range").Range; var comparePoints = Range.comparePoints; var RangeList = function() { this.ranges = []; }; (function() { this.comparePoints = comparePoints; this.pointIndex = function(pos, excludeEdges, startIndex) { var list = this.ranges; for (var i = startIndex || 0; i < list.length; i++) { var range = list[i]; var cmpEnd = comparePoints(pos, range.end); if (cmpEnd > 0) continue; var cmpStart = comparePoints(pos, range.start); if (cmpEnd === 0) return excludeEdges && cmpStart !== 0 ? -i-2 : i; if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges)) return i; return -i-1; } return -i - 1; }; this.add = function(range) { var excludeEdges = !range.isEmpty(); var startIndex = this.pointIndex(range.start, excludeEdges); if (startIndex < 0) startIndex = -startIndex - 1; var endIndex = this.pointIndex(range.end, excludeEdges, startIndex); if (endIndex < 0) endIndex = -endIndex - 1; else endIndex++; return this.ranges.splice(startIndex, endIndex - startIndex, range); }; this.addList = function(list) { var removed = []; for (var i = list.length; i--; ) { removed.push.call(removed, this.add(list[i])); } return removed; }; this.substractPoint = function(pos) { var i = this.pointIndex(pos); if (i >= 0) return this.ranges.splice(i, 1); }; this.merge = function() { var removed = []; var list = this.ranges; list = list.sort(function(a, b) { return comparePoints(a.start, b.start); }); var next = list[0], range; for (var i = 1; i < list.length; i++) { range = next; next = list[i]; var cmp = comparePoints(range.end, next.start); if (cmp < 0) continue; if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) continue; if (comparePoints(range.end, next.end) < 0) { range.end.row = next.end.row; range.end.column = next.end.column; } list.splice(i, 1); removed.push(next); next = range; i--; } this.ranges = list; return removed; }; this.contains = function(row, column) { return this.pointIndex({row: row, column: column}) >= 0; }; this.containsPoint = function(pos) { return this.pointIndex(pos) >= 0; }; this.rangeAtPoint = function(pos) { var i = this.pointIndex(pos); if (i >= 0) return this.ranges[i]; }; this.clipRows = function(startRow, endRow) { var list = this.ranges; if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) return []; var startIndex = this.pointIndex({row: startRow, column: 0}); if (startIndex < 0) startIndex = -startIndex - 1; var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex); if (endIndex < 0) endIndex = -endIndex - 1; var clipped = []; for (var i = startIndex; i < endIndex; i++) { clipped.push(list[i]); } return clipped; }; this.removeAll = function() { return this.ranges.splice(0, this.ranges.length); }; this.attach = function(session) { if (this.session) this.detach(); this.session = session; this.onChange = this.$onChange.bind(this); this.session.on('change', this.onChange); }; this.detach = function() { if (!this.session) return; this.session.removeListener('change', this.onChange); this.session = null; }; this.$onChange = function(e) { var changeRange = e.data.range; if (e.data.action[0] == "i"){ var start = changeRange.start; var end = changeRange.end; } else { var end = changeRange.start; var start = changeRange.end; } var startRow = start.row; var endRow = end.row; var lineDif = endRow - startRow; var colDiff = -start.column + end.column; var ranges = this.ranges; for (var i = 0, n = ranges.length; i < n; i++) { var r = ranges[i]; if (r.end.row < startRow) continue; if (r.start.row > startRow) break; if (r.start.row == startRow && r.start.column >= start.column ) { if (r.start.column == start.column && this.$insertRight) { } else { r.start.column += colDiff; r.start.row += lineDif; } } if (r.end.row == startRow && r.end.column >= start.column) { if (r.end.column == start.column && this.$insertRight) { continue; } if (r.end.column == start.column && colDiff > 0 && i < n - 1) { if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column) r.end.column -= colDiff; } r.end.column += colDiff; r.end.row += lineDif; } } if (lineDif != 0 && i < n) { for (; i < n; i++) { var r = ranges[i]; r.start.row += lineDif; r.end.row += lineDif; } } }; }).call(RangeList.prototype); exports.RangeList = RangeList; }); ace.define("ace/edit_session/fold",["require","exports","module","ace/range","ace/range_list","ace/lib/oop"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var RangeList = require("../range_list").RangeList; var oop = require("../lib/oop") var Fold = exports.Fold = function(range, placeholder) { this.foldLine = null; this.placeholder = placeholder; this.range = range; this.start = range.start; this.end = range.end; this.sameRow = range.start.row == range.end.row; this.subFolds = this.ranges = []; }; oop.inherits(Fold, RangeList); (function() { this.toString = function() { return '"' + this.placeholder + '" ' + this.range.toString(); }; this.setFoldLine = function(foldLine) { this.foldLine = foldLine; this.subFolds.forEach(function(fold) { fold.setFoldLine(foldLine); }); }; this.clone = function() { var range = this.range.clone(); var fold = new Fold(range, this.placeholder); this.subFolds.forEach(function(subFold) { fold.subFolds.push(subFold.clone()); }); fold.collapseChildren = this.collapseChildren; return fold; }; this.addSubFold = function(fold) { if (this.range.isEqual(fold)) return; if (!this.range.containsRange(fold)) throw new Error("A fold can't intersect already existing fold" + fold.range + this.range); consumeRange(fold, this.start); var row = fold.start.row, column = fold.start.column; for (var i = 0, cmp = -1; i < this.subFolds.length; i++) { cmp = this.subFolds[i].range.compare(row, column); if (cmp != 1) break; } var afterStart = this.subFolds[i]; if (cmp == 0) return afterStart.addSubFold(fold); var row = fold.range.end.row, column = fold.range.end.column; for (var j = i, cmp = -1; j < this.subFolds.length; j++) { cmp = this.subFolds[j].range.compare(row, column); if (cmp != 1) break; } var afterEnd = this.subFolds[j]; if (cmp == 0) throw new Error("A fold can't intersect already existing fold" + fold.range + this.range); var consumedFolds = this.subFolds.splice(i, j - i, fold); fold.setFoldLine(this.foldLine); return fold; }; this.restoreRange = function(range) { return restoreRange(range, this.start); }; }).call(Fold.prototype); function consumePoint(point, anchor) { point.row -= anchor.row; if (point.row == 0) point.column -= anchor.column; } function consumeRange(range, anchor) { consumePoint(range.start, anchor); consumePoint(range.end, anchor); } function restorePoint(point, anchor) { if (point.row == 0) point.column += anchor.column; point.row += anchor.row; } function restoreRange(range, anchor) { restorePoint(range.start, anchor); restorePoint(range.end, anchor); } }); ace.define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var FoldLine = require("./fold_line").FoldLine; var Fold = require("./fold").Fold; var TokenIterator = require("../token_iterator").TokenIterator; function Folding() { this.getFoldAt = function(row, column, side) { var foldLine = this.getFoldLine(row); if (!foldLine) return null; var folds = foldLine.folds; for (var i = 0; i < folds.length; i++) { var fold = folds[i]; if (fold.range.contains(row, column)) { if (side == 1 && fold.range.isEnd(row, column)) { continue; } else if (side == -1 && fold.range.isStart(row, column)) { continue; } return fold; } } }; this.getFoldsInRange = function(range) { var start = range.start; var end = range.end; var foldLines = this.$foldData; var foundFolds = []; start.column += 1; end.column -= 1; for (var i = 0; i < foldLines.length; i++) { var cmp = foldLines[i].range.compareRange(range); if (cmp == 2) { continue; } else if (cmp == -2) { break; } var folds = foldLines[i].folds; for (var j = 0; j < folds.length; j++) { var fold = folds[j]; cmp = fold.range.compareRange(range); if (cmp == -2) { break; } else if (cmp == 2) { continue; } else if (cmp == 42) { break; } foundFolds.push(fold); } } start.column -= 1; end.column += 1; return foundFolds; }; this.getFoldsInRangeList = function(ranges) { if (Array.isArray(ranges)) { var folds = []; ranges.forEach(function(range) { folds = folds.concat(this.getFoldsInRange(range)); }, this); } else { var folds = this.getFoldsInRange(ranges); } return folds; } this.getAllFolds = function() { var folds = []; var foldLines = this.$foldData; for (var i = 0; i < foldLines.length; i++) for (var j = 0; j < foldLines[i].folds.length; j++) folds.push(foldLines[i].folds[j]); return folds; }; this.getFoldStringAt = function(row, column, trim, foldLine) { foldLine = foldLine || this.getFoldLine(row); if (!foldLine) return null; var lastFold = { end: { column: 0 } }; var str, fold; for (var i = 0; i < foldLine.folds.length; i++) { fold = foldLine.folds[i]; var cmp = fold.range.compareEnd(row, column); if (cmp == -1) { str = this .getLine(fold.start.row) .substring(lastFold.end.column, fold.start.column); break; } else if (cmp === 0) { return null; } lastFold = fold; } if (!str) str = this.getLine(fold.start.row).substring(lastFold.end.column); if (trim == -1) return str.substring(0, column - lastFold.end.column); else if (trim == 1) return str.substring(column - lastFold.end.column); else return str; }; this.getFoldLine = function(docRow, startFoldLine) { var foldData = this.$foldData; var i = 0; if (startFoldLine) i = foldData.indexOf(startFoldLine); if (i == -1) i = 0; for (i; i < foldData.length; i++) { var foldLine = foldData[i]; if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) { return foldLine; } else if (foldLine.end.row > docRow) { return null; } } return null; }; this.getNextFoldLine = function(docRow, startFoldLine) { var foldData = this.$foldData; var i = 0; if (startFoldLine) i = foldData.indexOf(startFoldLine); if (i == -1) i = 0; for (i; i < foldData.length; i++) { var foldLine = foldData[i]; if (foldLine.end.row >= docRow) { return foldLine; } } return null; }; this.getFoldedRowCount = function(first, last) { var foldData = this.$foldData, rowCount = last-first+1; for (var i = 0; i < foldData.length; i++) { var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row; if (end >= last) { if(start < last) { if(start >= first) rowCount -= last-start; else rowCount = 0;//in one fold } break; } else if(end >= first){ if (start >= first) //fold inside range rowCount -= end-start; else rowCount -= end-first+1; } } return rowCount; }; this.$addFoldLine = function(foldLine) { this.$foldData.push(foldLine); this.$foldData.sort(function(a, b) { return a.start.row - b.start.row; }); return foldLine; }; this.addFold = function(placeholder, range) { var foldData = this.$foldData; var added = false; var fold; if (placeholder instanceof Fold) fold = placeholder; else { fold = new Fold(range, placeholder); fold.collapseChildren = range.collapseChildren; } this.$clipRangeToDocument(fold.range); var startRow = fold.start.row; var startColumn = fold.start.column; var endRow = fold.end.row; var endColumn = fold.end.column; if (!(startRow < endRow || startRow == endRow && startColumn <= endColumn - 2)) throw new Error("The range has to be at least 2 characters width"); var startFold = this.getFoldAt(startRow, startColumn, 1); var endFold = this.getFoldAt(endRow, endColumn, -1); if (startFold && endFold == startFold) return startFold.addSubFold(fold); if (startFold && !startFold.range.isStart(startRow, startColumn)) this.removeFold(startFold); if (endFold && !endFold.range.isEnd(endRow, endColumn)) this.removeFold(endFold); var folds = this.getFoldsInRange(fold.range); if (folds.length > 0) { this.removeFolds(folds); folds.forEach(function(subFold) { fold.addSubFold(subFold); }); } for (var i = 0; i < foldData.length; i++) { var foldLine = foldData[i]; if (endRow == foldLine.start.row) { foldLine.addFold(fold); added = true; break; } else if (startRow == foldLine.end.row) { foldLine.addFold(fold); added = true; if (!fold.sameRow) { var foldLineNext = foldData[i + 1]; if (foldLineNext && foldLineNext.start.row == endRow) { foldLine.merge(foldLineNext); break; } } break; } else if (endRow <= foldLine.start.row) { break; } } if (!added) foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold)); if (this.$useWrapMode) this.$updateWrapData(foldLine.start.row, foldLine.start.row); else this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row); this.$modified = true; this._emit("changeFold", { data: fold, action: "add" }); return fold; }; this.addFolds = function(folds) { folds.forEach(function(fold) { this.addFold(fold); }, this); }; this.removeFold = function(fold) { var foldLine = fold.foldLine; var startRow = foldLine.start.row; var endRow = foldLine.end.row; var foldLines = this.$foldData; var folds = foldLine.folds; if (folds.length == 1) { foldLines.splice(foldLines.indexOf(foldLine), 1); } else if (foldLine.range.isEnd(fold.end.row, fold.end.column)) { folds.pop(); foldLine.end.row = folds[folds.length - 1].end.row; foldLine.end.column = folds[folds.length - 1].end.column; } else if (foldLine.range.isStart(fold.start.row, fold.start.column)) { folds.shift(); foldLine.start.row = folds[0].start.row; foldLine.start.column = folds[0].start.column; } else if (fold.sameRow) { folds.splice(folds.indexOf(fold), 1); } else { var newFoldLine = foldLine.split(fold.start.row, fold.start.column); folds = newFoldLine.folds; folds.shift(); newFoldLine.start.row = folds[0].start.row; newFoldLine.start.column = folds[0].start.column; } if (!this.$updating) { if (this.$useWrapMode) this.$updateWrapData(startRow, endRow); else this.$updateRowLengthCache(startRow, endRow); } this.$modified = true; this._emit("changeFold", { data: fold, action: "remove" }); }; this.removeFolds = function(folds) { var cloneFolds = []; for (var i = 0; i < folds.length; i++) { cloneFolds.push(folds[i]); } cloneFolds.forEach(function(fold) { this.removeFold(fold); }, this); this.$modified = true; }; this.expandFold = function(fold) { this.removeFold(fold); fold.subFolds.forEach(function(subFold) { fold.restoreRange(subFold); this.addFold(subFold); }, this); if (fold.collapseChildren > 0) { this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1); } fold.subFolds = []; }; this.expandFolds = function(folds) { folds.forEach(function(fold) { this.expandFold(fold); }, this); }; this.unfold = function(location, expandInner) { var range, folds; if (location == null) { range = new Range(0, 0, this.getLength(), 0); expandInner = true; } else if (typeof location == "number") range = new Range(location, 0, location, this.getLine(location).length); else if ("row" in location) range = Range.fromPoints(location, location); else range = location; folds = this.getFoldsInRangeList(range); if (expandInner) { this.removeFolds(folds); } else { var subFolds = folds; while (subFolds.length) { this.expandFolds(subFolds); subFolds = this.getFoldsInRangeList(range); } } if (folds.length) return folds; }; this.isRowFolded = function(docRow, startFoldRow) { return !!this.getFoldLine(docRow, startFoldRow); }; this.getRowFoldEnd = function(docRow, startFoldRow) { var foldLine = this.getFoldLine(docRow, startFoldRow); return foldLine ? foldLine.end.row : docRow; }; this.getRowFoldStart = function(docRow, startFoldRow) { var foldLine = this.getFoldLine(docRow, startFoldRow); return foldLine ? foldLine.start.row : docRow; }; this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) { if (startRow == null) startRow = foldLine.start.row; if (startColumn == null) startColumn = 0; if (endRow == null) endRow = foldLine.end.row; if (endColumn == null) endColumn = this.getLine(endRow).length; var doc = this.doc; var textLine = ""; foldLine.walk(function(placeholder, row, column, lastColumn) { if (row < startRow) return; if (row == startRow) { if (column < startColumn) return; lastColumn = Math.max(startColumn, lastColumn); } if (placeholder != null) { textLine += placeholder; } else { textLine += doc.getLine(row).substring(lastColumn, column); } }, endRow, endColumn); return textLine; }; this.getDisplayLine = function(row, endColumn, startRow, startColumn) { var foldLine = this.getFoldLine(row); if (!foldLine) { var line; line = this.doc.getLine(row); return line.substring(startColumn || 0, endColumn || line.length); } else { return this.getFoldDisplayLine( foldLine, row, endColumn, startRow, startColumn); } }; this.$cloneFoldData = function() { var fd = []; fd = this.$foldData.map(function(foldLine) { var folds = foldLine.folds.map(function(fold) { return fold.clone(); }); return new FoldLine(fd, folds); }); return fd; }; this.toggleFold = function(tryToUnfold) { var selection = this.selection; var range = selection.getRange(); var fold; var bracketPos; if (range.isEmpty()) { var cursor = range.start; fold = this.getFoldAt(cursor.row, cursor.column); if (fold) { this.expandFold(fold); return; } else if (bracketPos = this.findMatchingBracket(cursor)) { if (range.comparePoint(bracketPos) == 1) { range.end = bracketPos; } else { range.start = bracketPos; range.start.column++; range.end.column--; } } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) { if (range.comparePoint(bracketPos) == 1) range.end = bracketPos; else range.start = bracketPos; range.start.column++; } else { range = this.getCommentFoldRange(cursor.row, cursor.column) || range; } } else { var folds = this.getFoldsInRange(range); if (tryToUnfold && folds.length) { this.expandFolds(folds); return; } else if (folds.length == 1 ) { fold = folds[0]; } } if (!fold) fold = this.getFoldAt(range.start.row, range.start.column); if (fold && fold.range.toString() == range.toString()) { this.expandFold(fold); return; } var placeholder = "..."; if (!range.isMultiLine()) { placeholder = this.getTextRange(range); if(placeholder.length < 4) return; placeholder = placeholder.trim().substring(0, 2) + ".."; } this.addFold(placeholder, range); }; this.getCommentFoldRange = function(row, column, dir) { var iterator = new TokenIterator(this, row, column); var token = iterator.getCurrentToken(); if (token && /^comment|string/.test(token.type)) { var range = new Range(); var re = new RegExp(token.type.replace(/\..*/, "\\.")); if (dir != 1) { do { token = iterator.stepBackward(); } while(token && re.test(token.type)); iterator.stepForward(); } range.start.row = iterator.getCurrentTokenRow(); range.start.column = iterator.getCurrentTokenColumn() + 2; iterator = new TokenIterator(this, row, column); if (dir != -1) { do { token = iterator.stepForward(); } while(token && re.test(token.type)); token = iterator.stepBackward(); } else token = iterator.getCurrentToken(); range.end.row = iterator.getCurrentTokenRow(); range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2; return range; } }; this.foldAll = function(startRow, endRow, depth) { if (depth == undefined) depth = 100000; // JSON.stringify doesn't hanle Infinity var foldWidgets = this.foldWidgets; if (!foldWidgets) return; // mode doesn't support folding endRow = endRow || this.getLength(); startRow = startRow || 0; for (var row = startRow; row < endRow; row++) { if (foldWidgets[row] == null) foldWidgets[row] = this.getFoldWidget(row); if (foldWidgets[row] != "start") continue; var range = this.getFoldWidgetRange(row); if (range && range.isMultiLine() && range.end.row <= endRow && range.start.row >= startRow ) { row = range.end.row; try { var fold = this.addFold("...", range); if (fold) fold.collapseChildren = depth; } catch(e) {} } } }; this.$foldStyles = { "manual": 1, "markbegin": 1, "markbeginend": 1 }; this.$foldStyle = "markbegin"; this.setFoldStyle = function(style) { if (!this.$foldStyles[style]) throw new Error("invalid fold style: " + style + "[" + Object.keys(this.$foldStyles).join(", ") + "]"); if (this.$foldStyle == style) return; this.$foldStyle = style; if (style == "manual") this.unfold(); var mode = this.$foldMode; this.$setFolding(null); this.$setFolding(mode); }; this.$setFolding = function(foldMode) { if (this.$foldMode == foldMode) return; this.$foldMode = foldMode; this.off('change', this.$updateFoldWidgets); this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); this._emit("changeAnnotation"); if (!foldMode || this.$foldStyle == "manual") { this.foldWidgets = null; return; } this.foldWidgets = []; this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle); this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle); this.$updateFoldWidgets = this.updateFoldWidgets.bind(this); this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this); this.on('change', this.$updateFoldWidgets); this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); }; this.getParentFoldRangeData = function (row, ignoreCurrent) { var fw = this.foldWidgets; if (!fw || (ignoreCurrent && fw[row])) return {}; var i = row - 1, firstRange; while (i >= 0) { var c = fw[i]; if (c == null) c = fw[i] = this.getFoldWidget(i); if (c == "start") { var range = this.getFoldWidgetRange(i); if (!firstRange) firstRange = range; if (range && range.end.row >= row) break; } i--; } return { range: i !== -1 && range, firstRange: firstRange }; } this.onFoldWidgetClick = function(row, e) { e = e.domEvent; var options = { children: e.shiftKey, all: e.ctrlKey || e.metaKey, siblings: e.altKey }; var range = this.$toggleFoldWidget(row, options); if (!range) { var el = (e.target || e.srcElement) if (el && /ace_fold-widget/.test(el.className)) el.className += " ace_invalid"; } }; this.$toggleFoldWidget = function(row, options) { if (!this.getFoldWidget) return; var type = this.getFoldWidget(row); var line = this.getLine(row); var dir = type === "end" ? -1 : 1; var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir); if (fold) { if (options.children || options.all) this.removeFold(fold); else this.expandFold(fold); return; } var range = this.getFoldWidgetRange(row, true); if (range && !range.isMultiLine()) { fold = this.getFoldAt(range.start.row, range.start.column, 1); if (fold && range.isEqual(fold.range)) { this.removeFold(fold); return; } } if (options.siblings) { var data = this.getParentFoldRangeData(row); if (data.range) { var startRow = data.range.start.row + 1; var endRow = data.range.end.row; } this.foldAll(startRow, endRow, options.all ? 10000 : 0); } else if (options.children) { endRow = range ? range.end.row : this.getLength(); this.foldAll(row + 1, range.end.row, options.all ? 10000 : 0); } else if (range) { if (options.all) range.collapseChildren = 10000; this.addFold("...", range); } return range; }; this.toggleFoldWidget = function(toggleParent) { var row = this.selection.getCursor().row; row = this.getRowFoldStart(row); var range = this.$toggleFoldWidget(row, {}); if (range) return; var data = this.getParentFoldRangeData(row, true); range = data.range || data.firstRange; if (range) { row = range.start.row; var fold = this.getFoldAt(row, this.getLine(row).length, 1); if (fold) { this.removeFold(fold); } else { this.addFold("...", range); } } }; this.updateFoldWidgets = function(e) { var delta = e.data; var range = delta.range; var firstRow = range.start.row; var len = range.end.row - firstRow; if (len === 0) { this.foldWidgets[firstRow] = null; } else if (delta.action == "removeText" || delta.action == "removeLines") { this.foldWidgets.splice(firstRow, len + 1, null); } else { var args = Array(len + 1); args.unshift(firstRow, 1); this.foldWidgets.splice.apply(this.foldWidgets, args); } }; this.tokenizerUpdateFoldWidgets = function(e) { var rows = e.data; if (rows.first != rows.last) { if (this.foldWidgets.length > rows.first) this.foldWidgets.splice(rows.first, this.foldWidgets.length); } } } exports.Folding = Folding; }); ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var Range = require("../range").Range; function BracketMatch() { this.findMatchingBracket = function(position, chr) { if (position.column == 0) return null; var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1); if (charBeforeCursor == "") return null; var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/); if (!match) return null; if (match[1]) return this.$findClosingBracket(match[1], position); else return this.$findOpeningBracket(match[2], position); }; this.getBracketRange = function(pos) { var line = this.getLine(pos.row); var before = true, range; var chr = line.charAt(pos.column-1); var match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); if (!match) { chr = line.charAt(pos.column); pos = {row: pos.row, column: pos.column + 1}; match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); before = false; } if (!match) return null; if (match[1]) { var bracketPos = this.$findClosingBracket(match[1], pos); if (!bracketPos) return null; range = Range.fromPoints(pos, bracketPos); if (!before) { range.end.column++; range.start.column--; } range.cursor = range.end; } else { var bracketPos = this.$findOpeningBracket(match[2], pos); if (!bracketPos) return null; range = Range.fromPoints(bracketPos, pos); if (!before) { range.start.column++; range.end.column--; } range.cursor = range.start; } return range; }; this.$brackets = { ")": "(", "(": ")", "]": "[", "[": "]", "{": "}", "}": "{" }; this.$findOpeningBracket = function(bracket, position, typeRe) { var openBracket = this.$brackets[bracket]; var depth = 1; var iterator = new TokenIterator(this, position.row, position.column); var token = iterator.getCurrentToken(); if (!token) token = iterator.stepForward(); if (!token) return; if (!typeRe){ typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("rparen", ".paren") .replace(/\b(?:end|start|begin)\b/, "") + ")+" ); } var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2; var value = token.value; while (true) { while (valueIndex >= 0) { var chr = value.charAt(valueIndex); if (chr == openBracket) { depth -= 1; if (depth == 0) { return {row: iterator.getCurrentTokenRow(), column: valueIndex + iterator.getCurrentTokenColumn()}; } } else if (chr == bracket) { depth += 1; } valueIndex -= 1; } do { token = iterator.stepBackward(); } while (token && !typeRe.test(token.type)); if (token == null) break; value = token.value; valueIndex = value.length - 1; } return null; }; this.$findClosingBracket = function(bracket, position, typeRe) { var closingBracket = this.$brackets[bracket]; var depth = 1; var iterator = new TokenIterator(this, position.row, position.column); var token = iterator.getCurrentToken(); if (!token) token = iterator.stepForward(); if (!token) return; if (!typeRe){ typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("lparen", ".paren") .replace(/\b(?:end|start|begin)\b/, "") + ")+" ); } var valueIndex = position.column - iterator.getCurrentTokenColumn(); while (true) { var value = token.value; var valueLength = value.length; while (valueIndex < valueLength) { var chr = value.charAt(valueIndex); if (chr == closingBracket) { depth -= 1; if (depth == 0) { return {row: iterator.getCurrentTokenRow(), column: valueIndex + iterator.getCurrentTokenColumn()}; } } else if (chr == bracket) { depth += 1; } valueIndex += 1; } do { token = iterator.stepForward(); } while (token && !typeRe.test(token.type)); if (token == null) break; valueIndex = 0; } return null; }; } exports.BracketMatch = BracketMatch; }); ace.define("ace/edit_session",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/config","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/document","ace/background_tokenizer","ace/search_highlight","ace/edit_session/folding","ace/edit_session/bracket_match"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var lang = require("./lib/lang"); var config = require("./config"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Selection = require("./selection").Selection; var TextMode = require("./mode/text").Mode; var Range = require("./range").Range; var Document = require("./document").Document; var BackgroundTokenizer = require("./background_tokenizer").BackgroundTokenizer; var SearchHighlight = require("./search_highlight").SearchHighlight; var EditSession = function(text, mode) { this.$breakpoints = []; this.$decorations = []; this.$frontMarkers = {}; this.$backMarkers = {}; this.$markerId = 1; this.$undoSelect = true; this.$foldData = []; this.$foldData.toString = function() { return this.join("\n"); } this.on("changeFold", this.onChangeFold.bind(this)); this.$onChange = this.onChange.bind(this); if (typeof text != "object" || !text.getLine) text = new Document(text); this.setDocument(text); this.selection = new Selection(this); config.resetOptions(this); this.setMode(mode); config._signal("session", this); }; (function() { oop.implement(this, EventEmitter); this.setDocument = function(doc) { if (this.doc) this.doc.removeListener("change", this.$onChange); this.doc = doc; doc.on("change", this.$onChange); if (this.bgTokenizer) this.bgTokenizer.setDocument(this.getDocument()); this.resetCaches(); }; this.getDocument = function() { return this.doc; }; this.$resetRowCache = function(docRow) { if (!docRow) { this.$docRowCache = []; this.$screenRowCache = []; return; } var l = this.$docRowCache.length; var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1; if (l > i) { this.$docRowCache.splice(i, l); this.$screenRowCache.splice(i, l); } }; this.$getRowCacheIndex = function(cacheArray, val) { var low = 0; var hi = cacheArray.length - 1; while (low <= hi) { var mid = (low + hi) >> 1; var c = cacheArray[mid]; if (val > c) low = mid + 1; else if (val < c) hi = mid - 1; else return mid; } return low -1; }; this.resetCaches = function() { this.$modified = true; this.$wrapData = []; this.$rowLengthCache = []; this.$resetRowCache(0); if (this.bgTokenizer) this.bgTokenizer.start(0); }; this.onChangeFold = function(e) { var fold = e.data; this.$resetRowCache(fold.start.row); }; this.onChange = function(e) { var delta = e.data; this.$modified = true; this.$resetRowCache(delta.range.start.row); var removedFolds = this.$updateInternalDataOnChange(e); if (!this.$fromUndo && this.$undoManager && !delta.ignore) { this.$deltasDoc.push(delta); if (removedFolds && removedFolds.length != 0) { this.$deltasFold.push({ action: "removeFolds", folds: removedFolds }); } this.$informUndoManager.schedule(); } this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta); this._signal("change", e); }; this.setValue = function(text) { this.doc.setValue(text); this.selection.moveTo(0, 0); this.$resetRowCache(0); this.$deltas = []; this.$deltasDoc = []; this.$deltasFold = []; this.setUndoManager(this.$undoManager); this.getUndoManager().reset(); }; this.getValue = this.toString = function() { return this.doc.getValue(); }; this.getSelection = function() { return this.selection; }; this.getState = function(row) { return this.bgTokenizer.getState(row); }; this.getTokens = function(row) { return this.bgTokenizer.getTokens(row); }; this.getTokenAt = function(row, column) { var tokens = this.bgTokenizer.getTokens(row); var token, c = 0; if (column == null) { i = tokens.length - 1; c = this.getLine(row).length; } else { for (var i = 0; i < tokens.length; i++) { c += tokens[i].value.length; if (c >= column) break; } } token = tokens[i]; if (!token) return null; token.index = i; token.start = c - token.value.length; return token; }; this.setUndoManager = function(undoManager) { this.$undoManager = undoManager; this.$deltas = []; this.$deltasDoc = []; this.$deltasFold = []; if (this.$informUndoManager) this.$informUndoManager.cancel(); if (undoManager) { var self = this; this.$syncInformUndoManager = function() { self.$informUndoManager.cancel(); if (self.$deltasFold.length) { self.$deltas.push({ group: "fold", deltas: self.$deltasFold }); self.$deltasFold = []; } if (self.$deltasDoc.length) { self.$deltas.push({ group: "doc", deltas: self.$deltasDoc }); self.$deltasDoc = []; } if (self.$deltas.length > 0) { undoManager.execute({ action: "aceupdate", args: [self.$deltas, self], merge: self.mergeUndoDeltas }); } self.mergeUndoDeltas = false; self.$deltas = []; }; this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager); } }; this.markUndoGroup = function() { if (this.$syncInformUndoManager) this.$syncInformUndoManager(); }; this.$defaultUndoManager = { undo: function() {}, redo: function() {}, reset: function() {} }; this.getUndoManager = function() { return this.$undoManager || this.$defaultUndoManager; }; this.getTabString = function() { if (this.getUseSoftTabs()) { return lang.stringRepeat(" ", this.getTabSize()); } else { return "\t"; } }; this.setUseSoftTabs = function(val) { this.setOption("useSoftTabs", val); }; this.getUseSoftTabs = function() { return this.$useSoftTabs && !this.$mode.$indentWithTabs; }; this.setTabSize = function(tabSize) { this.setOption("tabSize", tabSize); }; this.getTabSize = function() { return this.$tabSize; }; this.isTabStop = function(position) { return this.$useSoftTabs && (position.column % this.$tabSize === 0); }; this.$overwrite = false; this.setOverwrite = function(overwrite) { this.setOption("overwrite", overwrite); }; this.getOverwrite = function() { return this.$overwrite; }; this.toggleOverwrite = function() { this.setOverwrite(!this.$overwrite); }; this.addGutterDecoration = function(row, className) { if (!this.$decorations[row]) this.$decorations[row] = ""; this.$decorations[row] += " " + className; this._signal("changeBreakpoint", {}); }; this.removeGutterDecoration = function(row, className) { this.$decorations[row] = (this.$decorations[row] || "").replace(" " + className, ""); this._signal("changeBreakpoint", {}); }; this.getBreakpoints = function() { return this.$breakpoints; }; this.setBreakpoints = function(rows) { this.$breakpoints = []; for (var i=0; i 0) inToken = !!line.charAt(column - 1).match(this.tokenRe); if (!inToken) inToken = !!line.charAt(column).match(this.tokenRe); if (inToken) var re = this.tokenRe; else if (/^\s+$/.test(line.slice(column-1, column+1))) var re = /\s/; else var re = this.nonTokenRe; var start = column; if (start > 0) { do { start--; } while (start >= 0 && line.charAt(start).match(re)); start++; } var end = column; while (end < line.length && line.charAt(end).match(re)) { end++; } return new Range(row, start, row, end); }; this.getAWordRange = function(row, column) { var wordRange = this.getWordRange(row, column); var line = this.getLine(wordRange.end.row); while (line.charAt(wordRange.end.column).match(/[ \t]/)) { wordRange.end.column += 1; } return wordRange; }; this.setNewLineMode = function(newLineMode) { this.doc.setNewLineMode(newLineMode); }; this.getNewLineMode = function() { return this.doc.getNewLineMode(); }; this.setUseWorker = function(useWorker) { this.setOption("useWorker", useWorker); }; this.getUseWorker = function() { return this.$useWorker; }; this.onReloadTokenizer = function(e) { var rows = e.data; this.bgTokenizer.start(rows.first); this._signal("tokenizerUpdate", e); }; this.$modes = {}; this.$mode = null; this.$modeId = null; this.setMode = function(mode, cb) { if (mode && typeof mode === "object") { if (mode.getTokenizer) return this.$onChangeMode(mode); var options = mode; var path = options.path; } else { path = mode || "ace/mode/text"; } if (!this.$modes["ace/mode/text"]) this.$modes["ace/mode/text"] = new TextMode(); if (this.$modes[path] && !options) { this.$onChangeMode(this.$modes[path]); cb && cb(); return; } this.$modeId = path; config.loadModule(["mode", path], function(m) { if (this.$modeId !== path) return cb && cb(); if (this.$modes[path] && !options) return this.$onChangeMode(this.$modes[path]); if (m && m.Mode) { m = new m.Mode(options); if (!options) { this.$modes[path] = m; m.$id = path; } this.$onChangeMode(m); cb && cb(); } }.bind(this)); if (!this.$mode) this.$onChangeMode(this.$modes["ace/mode/text"], true); }; this.$onChangeMode = function(mode, $isPlaceholder) { if (!$isPlaceholder) this.$modeId = mode.$id; if (this.$mode === mode) return; this.$mode = mode; this.$stopWorker(); if (this.$useWorker) this.$startWorker(); var tokenizer = mode.getTokenizer(); if(tokenizer.addEventListener !== undefined) { var onReloadTokenizer = this.onReloadTokenizer.bind(this); tokenizer.addEventListener("update", onReloadTokenizer); } if (!this.bgTokenizer) { this.bgTokenizer = new BackgroundTokenizer(tokenizer); var _self = this; this.bgTokenizer.addEventListener("update", function(e) { _self._signal("tokenizerUpdate", e); }); } else { this.bgTokenizer.setTokenizer(tokenizer); } this.bgTokenizer.setDocument(this.getDocument()); this.tokenRe = mode.tokenRe; this.nonTokenRe = mode.nonTokenRe; if (!$isPlaceholder) { if (mode.attachToSession) mode.attachToSession(this); this.$options.wrapMethod.set.call(this, this.$wrapMethod); this.$setFolding(mode.foldingRules); this.bgTokenizer.start(0); this._emit("changeMode"); } }; this.$stopWorker = function() { if (this.$worker) { this.$worker.terminate(); this.$worker = null; } }; this.$startWorker = function() { try { this.$worker = this.$mode.createWorker(this); } catch (e) { config.warn("Could not load worker", e); this.$worker = null; } }; this.getMode = function() { return this.$mode; }; this.$scrollTop = 0; this.setScrollTop = function(scrollTop) { if (this.$scrollTop === scrollTop || isNaN(scrollTop)) return; this.$scrollTop = scrollTop; this._signal("changeScrollTop", scrollTop); }; this.getScrollTop = function() { return this.$scrollTop; }; this.$scrollLeft = 0; this.setScrollLeft = function(scrollLeft) { if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) return; this.$scrollLeft = scrollLeft; this._signal("changeScrollLeft", scrollLeft); }; this.getScrollLeft = function() { return this.$scrollLeft; }; this.getScreenWidth = function() { this.$computeWidth(); if (this.lineWidgets) return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth); return this.screenWidth; }; this.getLineWidgetMaxWidth = function() { if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth; var width = 0; this.lineWidgets.forEach(function(w) { if (w && w.screenWidth > width) width = w.screenWidth; }); return this.lineWidgetWidth = width; }; this.$computeWidth = function(force) { if (this.$modified || force) { this.$modified = false; if (this.$useWrapMode) return this.screenWidth = this.$wrapLimit; var lines = this.doc.getAllLines(); var cache = this.$rowLengthCache; var longestScreenLine = 0; var foldIndex = 0; var foldLine = this.$foldData[foldIndex]; var foldStart = foldLine ? foldLine.start.row : Infinity; var len = lines.length; for (var i = 0; i < len; i++) { if (i > foldStart) { i = foldLine.end.row + 1; if (i >= len) break; foldLine = this.$foldData[foldIndex++]; foldStart = foldLine ? foldLine.start.row : Infinity; } if (cache[i] == null) cache[i] = this.$getStringScreenWidth(lines[i])[0]; if (cache[i] > longestScreenLine) longestScreenLine = cache[i]; } this.screenWidth = longestScreenLine; } }; this.getLine = function(row) { return this.doc.getLine(row); }; this.getLines = function(firstRow, lastRow) { return this.doc.getLines(firstRow, lastRow); }; this.getLength = function() { return this.doc.getLength(); }; this.getTextRange = function(range) { return this.doc.getTextRange(range || this.selection.getRange()); }; this.insert = function(position, text) { return this.doc.insert(position, text); }; this.remove = function(range) { return this.doc.remove(range); }; this.undoChanges = function(deltas, dontSelect) { if (!deltas.length) return; this.$fromUndo = true; var lastUndoRange = null; for (var i = deltas.length - 1; i != -1; i--) { var delta = deltas[i]; if (delta.group == "doc") { this.doc.revertDeltas(delta.deltas); lastUndoRange = this.$getUndoSelection(delta.deltas, true, lastUndoRange); } else { delta.deltas.forEach(function(foldDelta) { this.addFolds(foldDelta.folds); }, this); } } this.$fromUndo = false; lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange); return lastUndoRange; }; this.redoChanges = function(deltas, dontSelect) { if (!deltas.length) return; this.$fromUndo = true; var lastUndoRange = null; for (var i = 0; i < deltas.length; i++) { var delta = deltas[i]; if (delta.group == "doc") { this.doc.applyDeltas(delta.deltas); lastUndoRange = this.$getUndoSelection(delta.deltas, false, lastUndoRange); } } this.$fromUndo = false; lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange); return lastUndoRange; }; this.setUndoSelect = function(enable) { this.$undoSelect = enable; }; this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) { function isInsert(delta) { var insert = delta.action === "insertText" || delta.action === "insertLines"; return isUndo ? !insert : insert; } var delta = deltas[0]; var range, point; var lastDeltaIsInsert = false; if (isInsert(delta)) { range = Range.fromPoints(delta.range.start, delta.range.end); lastDeltaIsInsert = true; } else { range = Range.fromPoints(delta.range.start, delta.range.start); lastDeltaIsInsert = false; } for (var i = 1; i < deltas.length; i++) { delta = deltas[i]; if (isInsert(delta)) { point = delta.range.start; if (range.compare(point.row, point.column) == -1) { range.setStart(delta.range.start); } point = delta.range.end; if (range.compare(point.row, point.column) == 1) { range.setEnd(delta.range.end); } lastDeltaIsInsert = true; } else { point = delta.range.start; if (range.compare(point.row, point.column) == -1) { range = Range.fromPoints(delta.range.start, delta.range.start); } lastDeltaIsInsert = false; } } if (lastUndoRange != null) { if (Range.comparePoints(lastUndoRange.start, range.start) === 0) { lastUndoRange.start.column += range.end.column - range.start.column; lastUndoRange.end.column += range.end.column - range.start.column; } var cmp = lastUndoRange.compareRange(range); if (cmp == 1) { range.setStart(lastUndoRange.start); } else if (cmp == -1) { range.setEnd(lastUndoRange.end); } } return range; }; this.replace = function(range, text) { return this.doc.replace(range, text); }; this.moveText = function(fromRange, toPosition, copy) { var text = this.getTextRange(fromRange); var folds = this.getFoldsInRange(fromRange); var toRange = Range.fromPoints(toPosition, toPosition); if (!copy) { this.remove(fromRange); var rowDiff = fromRange.start.row - fromRange.end.row; var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column; if (collDiff) { if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) toRange.start.column += collDiff; if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) toRange.end.column += collDiff; } if (rowDiff && toRange.start.row >= fromRange.end.row) { toRange.start.row += rowDiff; toRange.end.row += rowDiff; } } toRange.end = this.insert(toRange.start, text); if (folds.length) { var oldStart = fromRange.start; var newStart = toRange.start; var rowDiff = newStart.row - oldStart.row; var collDiff = newStart.column - oldStart.column; this.addFolds(folds.map(function(x) { x = x.clone(); if (x.start.row == oldStart.row) x.start.column += collDiff; if (x.end.row == oldStart.row) x.end.column += collDiff; x.start.row += rowDiff; x.end.row += rowDiff; return x; })); } return toRange; }; this.indentRows = function(startRow, endRow, indentString) { indentString = indentString.replace(/\t/g, this.getTabString()); for (var row=startRow; row<=endRow; row++) this.insert({row: row, column:0}, indentString); }; this.outdentRows = function (range) { var rowRange = range.collapseRows(); var deleteRange = new Range(0, 0, 0, 0); var size = this.getTabSize(); for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) { var line = this.getLine(i); deleteRange.start.row = i; deleteRange.end.row = i; for (var j = 0; j < size; ++j) if (line.charAt(j) != ' ') break; if (j < size && line.charAt(j) == '\t') { deleteRange.start.column = j; deleteRange.end.column = j + 1; } else { deleteRange.start.column = 0; deleteRange.end.column = j; } this.remove(deleteRange); } }; this.$moveLines = function(firstRow, lastRow, dir) { firstRow = this.getRowFoldStart(firstRow); lastRow = this.getRowFoldEnd(lastRow); if (dir < 0) { var row = this.getRowFoldStart(firstRow + dir); if (row < 0) return 0; var diff = row-firstRow; } else if (dir > 0) { var row = this.getRowFoldEnd(lastRow + dir); if (row > this.doc.getLength()-1) return 0; var diff = row-lastRow; } else { firstRow = this.$clipRowToDocument(firstRow); lastRow = this.$clipRowToDocument(lastRow); var diff = lastRow - firstRow + 1; } var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE); var folds = this.getFoldsInRange(range).map(function(x){ x = x.clone(); x.start.row += diff; x.end.row += diff; return x; }); var lines = dir == 0 ? this.doc.getLines(firstRow, lastRow) : this.doc.removeLines(firstRow, lastRow); this.doc.insertLines(firstRow+diff, lines); folds.length && this.addFolds(folds); return diff; }; this.moveLinesUp = function(firstRow, lastRow) { return this.$moveLines(firstRow, lastRow, -1); }; this.moveLinesDown = function(firstRow, lastRow) { return this.$moveLines(firstRow, lastRow, 1); }; this.duplicateLines = function(firstRow, lastRow) { return this.$moveLines(firstRow, lastRow, 0); }; this.$clipRowToDocument = function(row) { return Math.max(0, Math.min(row, this.doc.getLength()-1)); }; this.$clipColumnToRow = function(row, column) { if (column < 0) return 0; return Math.min(this.doc.getLine(row).length, column); }; this.$clipPositionToDocument = function(row, column) { column = Math.max(0, column); if (row < 0) { row = 0; column = 0; } else { var len = this.doc.getLength(); if (row >= len) { row = len - 1; column = this.doc.getLine(len-1).length; } else { column = Math.min(this.doc.getLine(row).length, column); } } return { row: row, column: column }; }; this.$clipRangeToDocument = function(range) { if (range.start.row < 0) { range.start.row = 0; range.start.column = 0; } else { range.start.column = this.$clipColumnToRow( range.start.row, range.start.column ); } var len = this.doc.getLength() - 1; if (range.end.row > len) { range.end.row = len; range.end.column = this.doc.getLine(len).length; } else { range.end.column = this.$clipColumnToRow( range.end.row, range.end.column ); } return range; }; this.$wrapLimit = 80; this.$useWrapMode = false; this.$wrapLimitRange = { min : null, max : null }; this.setUseWrapMode = function(useWrapMode) { if (useWrapMode != this.$useWrapMode) { this.$useWrapMode = useWrapMode; this.$modified = true; this.$resetRowCache(0); if (useWrapMode) { var len = this.getLength(); this.$wrapData = Array(len); this.$updateWrapData(0, len - 1); } this._signal("changeWrapMode"); } }; this.getUseWrapMode = function() { return this.$useWrapMode; }; this.setWrapLimitRange = function(min, max) { if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) { this.$wrapLimitRange = { min: min, max: max }; this.$modified = true; this._signal("changeWrapMode"); } }; this.adjustWrapLimit = function(desiredLimit, $printMargin) { var limits = this.$wrapLimitRange; if (limits.max < 0) limits = {min: $printMargin, max: $printMargin}; var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max); if (wrapLimit != this.$wrapLimit && wrapLimit > 1) { this.$wrapLimit = wrapLimit; this.$modified = true; if (this.$useWrapMode) { this.$updateWrapData(0, this.getLength() - 1); this.$resetRowCache(0); this._signal("changeWrapLimit"); } return true; } return false; }; this.$constrainWrapLimit = function(wrapLimit, min, max) { if (min) wrapLimit = Math.max(min, wrapLimit); if (max) wrapLimit = Math.min(max, wrapLimit); return wrapLimit; }; this.getWrapLimit = function() { return this.$wrapLimit; }; this.setWrapLimit = function (limit) { this.setWrapLimitRange(limit, limit); }; this.getWrapLimitRange = function() { return { min : this.$wrapLimitRange.min, max : this.$wrapLimitRange.max }; }; this.$updateInternalDataOnChange = function(e) { var useWrapMode = this.$useWrapMode; var len; var action = e.data.action; var firstRow = e.data.range.start.row; var lastRow = e.data.range.end.row; var start = e.data.range.start; var end = e.data.range.end; var removedFolds = null; if (action.indexOf("Lines") != -1) { if (action == "insertLines") { lastRow = firstRow + (e.data.lines.length); } else { lastRow = firstRow; } len = e.data.lines ? e.data.lines.length : lastRow - firstRow; } else { len = lastRow - firstRow; } this.$updating = true; if (len != 0) { if (action.indexOf("remove") != -1) { this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len); var foldLines = this.$foldData; removedFolds = this.getFoldsInRange(e.data.range); this.removeFolds(removedFolds); var foldLine = this.getFoldLine(end.row); var idx = 0; if (foldLine) { foldLine.addRemoveChars(end.row, end.column, start.column - end.column); foldLine.shiftRow(-len); var foldLineBefore = this.getFoldLine(firstRow); if (foldLineBefore && foldLineBefore !== foldLine) { foldLineBefore.merge(foldLine); foldLine = foldLineBefore; } idx = foldLines.indexOf(foldLine) + 1; } for (idx; idx < foldLines.length; idx++) { var foldLine = foldLines[idx]; if (foldLine.start.row >= end.row) { foldLine.shiftRow(-len); } } lastRow = firstRow; } else { var args = Array(len); args.unshift(firstRow, 0); var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache arr.splice.apply(arr, args); var foldLines = this.$foldData; var foldLine = this.getFoldLine(firstRow); var idx = 0; if (foldLine) { var cmp = foldLine.range.compareInside(start.row, start.column); if (cmp == 0) { foldLine = foldLine.split(start.row, start.column); if (foldLine) { foldLine.shiftRow(len); foldLine.addRemoveChars(lastRow, 0, end.column - start.column); } } else if (cmp == -1) { foldLine.addRemoveChars(firstRow, 0, end.column - start.column); foldLine.shiftRow(len); } idx = foldLines.indexOf(foldLine) + 1; } for (idx; idx < foldLines.length; idx++) { var foldLine = foldLines[idx]; if (foldLine.start.row >= firstRow) { foldLine.shiftRow(len); } } } } else { len = Math.abs(e.data.range.start.column - e.data.range.end.column); if (action.indexOf("remove") != -1) { removedFolds = this.getFoldsInRange(e.data.range); this.removeFolds(removedFolds); len = -len; } var foldLine = this.getFoldLine(firstRow); if (foldLine) { foldLine.addRemoveChars(firstRow, start.column, len); } } if (useWrapMode && this.$wrapData.length != this.doc.getLength()) { console.error("doc.getLength() and $wrapData.length have to be the same!"); } this.$updating = false; if (useWrapMode) this.$updateWrapData(firstRow, lastRow); else this.$updateRowLengthCache(firstRow, lastRow); return removedFolds; }; this.$updateRowLengthCache = function(firstRow, lastRow, b) { this.$rowLengthCache[firstRow] = null; this.$rowLengthCache[lastRow] = null; }; this.$updateWrapData = function(firstRow, lastRow) { var lines = this.doc.getAllLines(); var tabSize = this.getTabSize(); var wrapData = this.$wrapData; var wrapLimit = this.$wrapLimit; var tokens; var foldLine; var row = firstRow; lastRow = Math.min(lastRow, lines.length - 1); while (row <= lastRow) { foldLine = this.getFoldLine(row, foldLine); if (!foldLine) { tokens = this.$getDisplayTokens(lines[row]); wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); row ++; } else { tokens = []; foldLine.walk(function(placeholder, row, column, lastColumn) { var walkTokens; if (placeholder != null) { walkTokens = this.$getDisplayTokens( placeholder, tokens.length); walkTokens[0] = PLACEHOLDER_START; for (var i = 1; i < walkTokens.length; i++) { walkTokens[i] = PLACEHOLDER_BODY; } } else { walkTokens = this.$getDisplayTokens( lines[row].substring(lastColumn, column), tokens.length); } tokens = tokens.concat(walkTokens); }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1 ); wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); row = foldLine.end.row + 1; } } }; var CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12; this.$computeWrapSplits = function(tokens, wrapLimit) { if (tokens.length == 0) { return []; } var splits = []; var displayLength = tokens.length; var lastSplit = 0, lastDocSplit = 0; var isCode = this.$wrapAsCode; function addSplit(screenPos) { var displayed = tokens.slice(lastSplit, screenPos); var len = displayed.length; displayed.join(""). replace(/12/g, function() { len -= 1; }). replace(/2/g, function() { len -= 1; }); lastDocSplit += len; splits.push(lastDocSplit); lastSplit = screenPos; } while (displayLength - lastSplit > wrapLimit) { var split = lastSplit + wrapLimit; if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) { addSplit(split); continue; } if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) { for (split; split != lastSplit - 1; split--) { if (tokens[split] == PLACEHOLDER_START) { break; } } if (split > lastSplit) { addSplit(split); continue; } split = lastSplit + wrapLimit; for (split; split < tokens.length; split++) { if (tokens[split] != PLACEHOLDER_BODY) { break; } } if (split == tokens.length) { break; // Breaks the while-loop. } addSplit(split); continue; } var minSplit = Math.max(split - (isCode ? 10 : wrapLimit-(wrapLimit>>2)), lastSplit - 1); while (split > minSplit && tokens[split] < PLACEHOLDER_START) { split --; } if (isCode) { while (split > minSplit && tokens[split] < PLACEHOLDER_START) { split --; } while (split > minSplit && tokens[split] == PUNCTUATION) { split --; } } else { while (split > minSplit && tokens[split] < SPACE) { split --; } } if (split > minSplit) { addSplit(++split); continue; } split = lastSplit + wrapLimit; if (tokens[split] == CHAR_EXT) split--; addSplit(split); } return splits; }; this.$getDisplayTokens = function(str, offset) { var arr = []; var tabSize; offset = offset || 0; for (var i = 0; i < str.length; i++) { var c = str.charCodeAt(i); if (c == 9) { tabSize = this.getScreenTabSize(arr.length + offset); arr.push(TAB); for (var n = 1; n < tabSize; n++) { arr.push(TAB_SPACE); } } else if (c == 32) { arr.push(SPACE); } else if((c > 39 && c < 48) || (c > 57 && c < 64)) { arr.push(PUNCTUATION); } else if (c >= 0x1100 && isFullWidth(c)) { arr.push(CHAR, CHAR_EXT); } else { arr.push(CHAR); } } return arr; }; this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) { if (maxScreenColumn == 0) return [0, 0]; if (maxScreenColumn == null) maxScreenColumn = Infinity; screenColumn = screenColumn || 0; var c, column; for (column = 0; column < str.length; column++) { c = str.charCodeAt(column); if (c == 9) { screenColumn += this.getScreenTabSize(screenColumn); } else if (c >= 0x1100 && isFullWidth(c)) { screenColumn += 2; } else { screenColumn += 1; } if (screenColumn > maxScreenColumn) { break; } } return [screenColumn, column]; }; this.lineWidgets = null; this.getRowLength = function(row) { if (this.lineWidgets) var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; else h = 0 if (!this.$useWrapMode || !this.$wrapData[row]) { return 1 + h; } else { return this.$wrapData[row].length + 1 + h; } }; this.getRowLineCount = function(row) { if (!this.$useWrapMode || !this.$wrapData[row]) { return 1; } else { return this.$wrapData[row].length + 1; } }; this.getScreenLastRowColumn = function(screenRow) { var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); return this.documentToScreenColumn(pos.row, pos.column); }; this.getDocumentLastRowColumn = function(docRow, docColumn) { var screenRow = this.documentToScreenRow(docRow, docColumn); return this.getScreenLastRowColumn(screenRow); }; this.getDocumentLastRowColumnPosition = function(docRow, docColumn) { var screenRow = this.documentToScreenRow(docRow, docColumn); return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10); }; this.getRowSplitData = function(row) { if (!this.$useWrapMode) { return undefined; } else { return this.$wrapData[row]; } }; this.getScreenTabSize = function(screenColumn) { return this.$tabSize - screenColumn % this.$tabSize; }; this.screenToDocumentRow = function(screenRow, screenColumn) { return this.screenToDocumentPosition(screenRow, screenColumn).row; }; this.screenToDocumentColumn = function(screenRow, screenColumn) { return this.screenToDocumentPosition(screenRow, screenColumn).column; }; this.screenToDocumentPosition = function(screenRow, screenColumn) { if (screenRow < 0) return {row: 0, column: 0}; var line; var docRow = 0; var docColumn = 0; var column; var row = 0; var rowLength = 0; var rowCache = this.$screenRowCache; var i = this.$getRowCacheIndex(rowCache, screenRow); var l = rowCache.length; if (l && i >= 0) { var row = rowCache[i]; var docRow = this.$docRowCache[i]; var doCache = screenRow > rowCache[l - 1]; } else { var doCache = !l; } var maxRow = this.getLength() - 1; var foldLine = this.getNextFoldLine(docRow); var foldStart = foldLine ? foldLine.start.row : Infinity; while (row <= screenRow) { rowLength = this.getRowLength(docRow); if (row + rowLength > screenRow || docRow >= maxRow) { break; } else { row += rowLength; docRow++; if (docRow > foldStart) { docRow = foldLine.end.row+1; foldLine = this.getNextFoldLine(docRow, foldLine); foldStart = foldLine ? foldLine.start.row : Infinity; } } if (doCache) { this.$docRowCache.push(docRow); this.$screenRowCache.push(row); } } if (foldLine && foldLine.start.row <= docRow) { line = this.getFoldDisplayLine(foldLine); docRow = foldLine.start.row; } else if (row + rowLength <= screenRow || docRow > maxRow) { return { row: maxRow, column: this.getLine(maxRow).length }; } else { line = this.getLine(docRow); foldLine = null; } if (this.$useWrapMode) { var splits = this.$wrapData[docRow]; if (splits) { var splitIndex = Math.floor(screenRow - row); column = splits[splitIndex]; if(splitIndex > 0 && splits.length) { docColumn = splits[splitIndex - 1] || splits[splits.length - 1]; line = line.substring(docColumn); } } } docColumn += this.$getStringScreenWidth(line, screenColumn)[1]; if (this.$useWrapMode && docColumn >= column) docColumn = column - 1; if (foldLine) return foldLine.idxToPosition(docColumn); return {row: docRow, column: docColumn}; }; this.documentToScreenPosition = function(docRow, docColumn) { if (typeof docColumn === "undefined") var pos = this.$clipPositionToDocument(docRow.row, docRow.column); else pos = this.$clipPositionToDocument(docRow, docColumn); docRow = pos.row; docColumn = pos.column; var screenRow = 0; var foldStartRow = null; var fold = null; fold = this.getFoldAt(docRow, docColumn, 1); if (fold) { docRow = fold.start.row; docColumn = fold.start.column; } var rowEnd, row = 0; var rowCache = this.$docRowCache; var i = this.$getRowCacheIndex(rowCache, docRow); var l = rowCache.length; if (l && i >= 0) { var row = rowCache[i]; var screenRow = this.$screenRowCache[i]; var doCache = docRow > rowCache[l - 1]; } else { var doCache = !l; } var foldLine = this.getNextFoldLine(row); var foldStart = foldLine ?foldLine.start.row :Infinity; while (row < docRow) { if (row >= foldStart) { rowEnd = foldLine.end.row + 1; if (rowEnd > docRow) break; foldLine = this.getNextFoldLine(rowEnd, foldLine); foldStart = foldLine ?foldLine.start.row :Infinity; } else { rowEnd = row + 1; } screenRow += this.getRowLength(row); row = rowEnd; if (doCache) { this.$docRowCache.push(row); this.$screenRowCache.push(screenRow); } } var textLine = ""; if (foldLine && row >= foldStart) { textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn); foldStartRow = foldLine.start.row; } else { textLine = this.getLine(docRow).substring(0, docColumn); foldStartRow = docRow; } if (this.$useWrapMode) { var wrapRow = this.$wrapData[foldStartRow]; if (wrapRow) { var screenRowOffset = 0; while (textLine.length >= wrapRow[screenRowOffset]) { screenRow ++; screenRowOffset++; } textLine = textLine.substring( wrapRow[screenRowOffset - 1] || 0, textLine.length ); } } return { row: screenRow, column: this.$getStringScreenWidth(textLine)[0] }; }; this.documentToScreenColumn = function(row, docColumn) { return this.documentToScreenPosition(row, docColumn).column; }; this.documentToScreenRow = function(docRow, docColumn) { return this.documentToScreenPosition(docRow, docColumn).row; }; this.getScreenLength = function() { var screenRows = 0; var fold = null; if (!this.$useWrapMode) { screenRows = this.getLength(); var foldData = this.$foldData; for (var i = 0; i < foldData.length; i++) { fold = foldData[i]; screenRows -= fold.end.row - fold.start.row; } } else { var lastRow = this.$wrapData.length; var row = 0, i = 0; var fold = this.$foldData[i++]; var foldStart = fold ? fold.start.row :Infinity; while (row < lastRow) { var splits = this.$wrapData[row]; screenRows += splits ? splits.length + 1 : 1; row ++; if (row > foldStart) { row = fold.end.row+1; fold = this.$foldData[i++]; foldStart = fold ?fold.start.row :Infinity; } } } if (this.lineWidgets) screenRows += this.$getWidgetScreenLength(); return screenRows; }; this.$setFontMetrics = function(fm) { }; this.destroy = function() { if (this.bgTokenizer) { this.bgTokenizer.setDocument(null); this.bgTokenizer = null; } this.$stopWorker(); }; function isFullWidth(c) { if (c < 0x1100) return false; return c >= 0x1100 && c <= 0x115F || c >= 0x11A3 && c <= 0x11A7 || c >= 0x11FA && c <= 0x11FF || c >= 0x2329 && c <= 0x232A || c >= 0x2E80 && c <= 0x2E99 || c >= 0x2E9B && c <= 0x2EF3 || c >= 0x2F00 && c <= 0x2FD5 || c >= 0x2FF0 && c <= 0x2FFB || c >= 0x3000 && c <= 0x303E || c >= 0x3041 && c <= 0x3096 || c >= 0x3099 && c <= 0x30FF || c >= 0x3105 && c <= 0x312D || c >= 0x3131 && c <= 0x318E || c >= 0x3190 && c <= 0x31BA || c >= 0x31C0 && c <= 0x31E3 || c >= 0x31F0 && c <= 0x321E || c >= 0x3220 && c <= 0x3247 || c >= 0x3250 && c <= 0x32FE || c >= 0x3300 && c <= 0x4DBF || c >= 0x4E00 && c <= 0xA48C || c >= 0xA490 && c <= 0xA4C6 || c >= 0xA960 && c <= 0xA97C || c >= 0xAC00 && c <= 0xD7A3 || c >= 0xD7B0 && c <= 0xD7C6 || c >= 0xD7CB && c <= 0xD7FB || c >= 0xF900 && c <= 0xFAFF || c >= 0xFE10 && c <= 0xFE19 || c >= 0xFE30 && c <= 0xFE52 || c >= 0xFE54 && c <= 0xFE66 || c >= 0xFE68 && c <= 0xFE6B || c >= 0xFF01 && c <= 0xFF60 || c >= 0xFFE0 && c <= 0xFFE6; }; }).call(EditSession.prototype); require("./edit_session/folding").Folding.call(EditSession.prototype); require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype); config.defineOptions(EditSession.prototype, "session", { wrap: { set: function(value) { if (!value || value == "off") value = false; else if (value == "free") value = true; else if (value == "printMargin") value = -1; else if (typeof value == "string") value = parseInt(value, 10) || false; if (this.$wrap == value) return; if (!value) { this.setUseWrapMode(false); } else { var col = typeof value == "number" ? value : null; this.setWrapLimitRange(col, col); this.setUseWrapMode(true); } this.$wrap = value; }, get: function() { if (this.getUseWrapMode()) { if (this.$wrap == -1) return "printMargin"; if (!this.getWrapLimitRange().min) return "free"; return this.$wrap; } return "off"; }, handlesSet: true }, wrapMethod: { set: function(val) { val = val == "auto" ? this.$mode.type != "text" : val != "text"; if (val != this.$wrapAsCode) { this.$wrapAsCode = val; if (this.$useWrapMode) { this.$modified = true; this.$resetRowCache(0); this.$updateWrapData(0, this.getLength() - 1); } } }, initialValue: "auto" }, firstLineNumber: { set: function() {this._signal("changeBreakpoint");}, initialValue: 1 }, useWorker: { set: function(useWorker) { this.$useWorker = useWorker; this.$stopWorker(); if (useWorker) this.$startWorker(); }, initialValue: true }, useSoftTabs: {initialValue: true}, tabSize: { set: function(tabSize) { if (isNaN(tabSize) || this.$tabSize === tabSize) return; this.$modified = true; this.$rowLengthCache = []; this.$tabSize = tabSize; this._signal("changeTabSize"); }, initialValue: 4, handlesSet: true }, overwrite: { set: function(val) {this._signal("changeOverwrite");}, initialValue: false }, newLineMode: { set: function(val) {this.doc.setNewLineMode(val)}, get: function() {return this.doc.getNewLineMode()}, handlesSet: true }, mode: { set: function(val) { this.setMode(val) }, get: function() { return this.$modeId } } }); exports.EditSession = EditSession; }); ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module) { "use strict"; var lang = require("./lib/lang"); var oop = require("./lib/oop"); var Range = require("./range").Range; var Search = function() { this.$options = {}; }; (function() { this.set = function(options) { oop.mixin(this.$options, options); return this; }; this.getOptions = function() { return lang.copyObject(this.$options); }; this.setOptions = function(options) { this.$options = options; }; this.find = function(session) { var options = this.$options; var iterator = this.$matchIterator(session, options); if (!iterator) return false; var firstRange = null; iterator.forEach(function(range, row, offset) { if (!range.start) { var column = range.offset + (offset || 0); firstRange = new Range(row, column, row, column + range.length); if (!range.length && options.start && options.start.start && options.skipCurrent != false && firstRange.isEqual(options.start) ) { firstRange = null; return false; } } else firstRange = range; return true; }); return firstRange; }; this.findAll = function(session) { var options = this.$options; if (!options.needle) return []; this.$assembleRegExp(options); var range = options.range; var lines = range ? session.getLines(range.start.row, range.end.row) : session.doc.getAllLines(); var ranges = []; var re = options.re; if (options.$isMultiLine) { var len = re.length; var maxRow = lines.length - len; var prevRange; outer: for (var row = re.offset || 0; row <= maxRow; row++) { for (var j = 0; j < len; j++) if (lines[row + j].search(re[j]) == -1) continue outer; var startLine = lines[row]; var line = lines[row + len - 1]; var startIndex = startLine.length - startLine.match(re[0])[0].length; var endIndex = line.match(re[len - 1])[0].length; if (prevRange && prevRange.end.row === row && prevRange.end.column > startIndex ) { continue; } ranges.push(prevRange = new Range( row, startIndex, row + len - 1, endIndex )); if (len > 2) row = row + len - 2; } } else { for (var i = 0; i < lines.length; i++) { var matches = lang.getMatchOffsets(lines[i], re); for (var j = 0; j < matches.length; j++) { var match = matches[j]; ranges.push(new Range(i, match.offset, i, match.offset + match.length)); } } } if (range) { var startColumn = range.start.column; var endColumn = range.start.column; var i = 0, j = ranges.length - 1; while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row) i++; while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row) j--; ranges = ranges.slice(i, j + 1); for (i = 0, j = ranges.length; i < j; i++) { ranges[i].start.row += range.start.row; ranges[i].end.row += range.start.row; } } return ranges; }; this.replace = function(input, replacement) { var options = this.$options; var re = this.$assembleRegExp(options); if (options.$isMultiLine) return replacement; if (!re) return; var match = re.exec(input); if (!match || match[0].length != input.length) return null; replacement = input.replace(re, replacement); if (options.preserveCase) { replacement = replacement.split(""); for (var i = Math.min(input.length, input.length); i--; ) { var ch = input[i]; if (ch && ch.toLowerCase() != ch) replacement[i] = replacement[i].toUpperCase(); else replacement[i] = replacement[i].toLowerCase(); } replacement = replacement.join(""); } return replacement; }; this.$matchIterator = function(session, options) { var re = this.$assembleRegExp(options); if (!re) return false; var callback; if (options.$isMultiLine) { var len = re.length; var matchIterator = function(line, row, offset) { var startIndex = line.search(re[0]); if (startIndex == -1) return; for (var i = 1; i < len; i++) { line = session.getLine(row + i); if (line.search(re[i]) == -1) return; } var endIndex = line.match(re[len - 1])[0].length; var range = new Range(row, startIndex, row + len - 1, endIndex); if (re.offset == 1) { range.start.row--; range.start.column = Number.MAX_VALUE; } else if (offset) range.start.column += offset; if (callback(range)) return true; }; } else if (options.backwards) { var matchIterator = function(line, row, startIndex) { var matches = lang.getMatchOffsets(line, re); for (var i = matches.length-1; i >= 0; i--) if (callback(matches[i], row, startIndex)) return true; }; } else { var matchIterator = function(line, row, startIndex) { var matches = lang.getMatchOffsets(line, re); for (var i = 0; i < matches.length; i++) if (callback(matches[i], row, startIndex)) return true; }; } var lineIterator = this.$lineIterator(session, options); return { forEach: function(_callback) { callback = _callback; lineIterator.forEach(matchIterator); } }; }; this.$assembleRegExp = function(options, $disableFakeMultiline) { if (options.needle instanceof RegExp) return options.re = options.needle; var needle = options.needle; if (!options.needle) return options.re = false; if (!options.regExp) needle = lang.escapeRegExp(needle); if (options.wholeWord) needle = "\\b" + needle + "\\b"; var modifier = options.caseSensitive ? "gm" : "gmi"; options.$isMultiLine = !$disableFakeMultiline && /[\n\r]/.test(needle); if (options.$isMultiLine) return options.re = this.$assembleMultilineRegExp(needle, modifier); try { var re = new RegExp(needle, modifier); } catch(e) { re = false; } return options.re = re; }; this.$assembleMultilineRegExp = function(needle, modifier) { var parts = needle.replace(/\r\n|\r|\n/g, "$\n^").split("\n"); var re = []; for (var i = 0; i < parts.length; i++) try { re.push(new RegExp(parts[i], modifier)); } catch(e) { return false; } if (parts[0] == "") { re.shift(); re.offset = 1; } else { re.offset = 0; } return re; }; this.$lineIterator = function(session, options) { var backwards = options.backwards == true; var skipCurrent = options.skipCurrent != false; var range = options.range; var start = options.start; if (!start) start = range ? range[backwards ? "end" : "start"] : session.selection.getRange(); if (start.start) start = start[skipCurrent != backwards ? "end" : "start"]; var firstRow = range ? range.start.row : 0; var lastRow = range ? range.end.row : session.getLength() - 1; var forEach = backwards ? function(callback) { var row = start.row; var line = session.getLine(row).substring(0, start.column); if (callback(line, row)) return; for (row--; row >= firstRow; row--) if (callback(session.getLine(row), row)) return; if (options.wrap == false) return; for (row = lastRow, firstRow = start.row; row >= firstRow; row--) if (callback(session.getLine(row), row)) return; } : function(callback) { var row = start.row; var line = session.getLine(row).substr(start.column); if (callback(line, row, start.column)) return; for (row = row+1; row <= lastRow; row++) if (callback(session.getLine(row), row)) return; if (options.wrap == false) return; for (row = firstRow, lastRow = start.row; row <= lastRow; row++) if (callback(session.getLine(row), row)) return; }; return {forEach: forEach}; }; }).call(Search.prototype); exports.Search = Search; }); ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module) { "use strict"; var keyUtil = require("../lib/keys"); var useragent = require("../lib/useragent"); var KEY_MODS = keyUtil.KEY_MODS; function HashHandler(config, platform) { this.platform = platform || (useragent.isMac ? "mac" : "win"); this.commands = {}; this.commandKeyBinding = {}; this.addCommands(config); this.$singleCommand = true; } function MultiHashHandler(config, platform) { HashHandler.call(this, config, platform); this.$singleCommand = false; } MultiHashHandler.prototype = HashHandler.prototype; (function() { this.addCommand = function(command) { if (this.commands[command.name]) this.removeCommand(command); this.commands[command.name] = command; if (command.bindKey) this._buildKeyHash(command); }; this.removeCommand = function(command, keepCommand) { var name = command && (typeof command === 'string' ? command : command.name); command = this.commands[name]; if (!keepCommand) delete this.commands[name]; var ckb = this.commandKeyBinding; for (var keyId in ckb) { var cmdGroup = ckb[keyId]; if (cmdGroup == command) { delete ckb[keyId]; } else if (Array.isArray(cmdGroup)) { var i = cmdGroup.indexOf(command); if (i != -1) { cmdGroup.splice(i, 1); if (cmdGroup.length == 1) ckb[keyId] = cmdGroup[0]; } } } }; this.bindKey = function(key, command, asDefault) { if (typeof key == "object") key = key[this.platform]; if (!key) return; if (typeof command == "function") return this.addCommand({exec: command, bindKey: key, name: command.name || key}); key.split("|").forEach(function(keyPart) { var chain = ""; if (keyPart.indexOf(" ") != -1) { var parts = keyPart.split(/\s+/); keyPart = parts.pop(); parts.forEach(function(keyPart) { var binding = this.parseKeys(keyPart); var id = KEY_MODS[binding.hashId] + binding.key; chain += (chain ? " " : "") + id; this._addCommandToBinding(chain, "chainKeys"); }, this); chain += " "; } var binding = this.parseKeys(keyPart); var id = KEY_MODS[binding.hashId] + binding.key; this._addCommandToBinding(chain + id, command, asDefault); }, this); }; this._addCommandToBinding = function(keyId, command, asDefault) { var ckb = this.commandKeyBinding, i; if (!command) { delete ckb[keyId]; } else if (!ckb[keyId] || this.$singleCommand) { ckb[keyId] = command; } else { if (!Array.isArray(ckb[keyId])) { ckb[keyId] = [ckb[keyId]]; } else if ((i = ckb[keyId].indexOf(command)) != -1) { ckb[keyId].splice(i, 1); } if (asDefault || command.isDefault) ckb[keyId].unshift(command); else ckb[keyId].push(command); } }; this.addCommands = function(commands) { commands && Object.keys(commands).forEach(function(name) { var command = commands[name]; if (!command) return; if (typeof command === "string") return this.bindKey(command, name); if (typeof command === "function") command = { exec: command }; if (typeof command !== "object") return; if (!command.name) command.name = name; this.addCommand(command); }, this); }; this.removeCommands = function(commands) { Object.keys(commands).forEach(function(name) { this.removeCommand(commands[name]); }, this); }; this.bindKeys = function(keyList) { Object.keys(keyList).forEach(function(key) { this.bindKey(key, keyList[key]); }, this); }; this._buildKeyHash = function(command) { this.bindKey(command.bindKey, command); }; this.parseKeys = function(keys) { var parts = keys.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(x){return x}); var key = parts.pop(); var keyCode = keyUtil[key]; if (keyUtil.FUNCTION_KEYS[keyCode]) key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase(); else if (!parts.length) return {key: key, hashId: -1}; else if (parts.length == 1 && parts[0] == "shift") return {key: key.toUpperCase(), hashId: -1}; var hashId = 0; for (var i = parts.length; i--;) { var modifier = keyUtil.KEY_MODS[parts[i]]; if (modifier == null) { if (typeof console != "undefined") console.error("invalid modifier " + parts[i] + " in " + keys); return false; } hashId |= modifier; } return {key: key, hashId: hashId}; }; this.findKeyCommand = function findKeyCommand(hashId, keyString) { var key = KEY_MODS[hashId] + keyString; return this.commandKeyBinding[key]; }; this.handleKeyboard = function(data, hashId, keyString, keyCode) { var key = KEY_MODS[hashId] + keyString; var command = this.commandKeyBinding[key]; if (data.$keyChain) { data.$keyChain += " " + key; command = this.commandKeyBinding[data.$keyChain] || command; } if (command) { if (command == "chainKeys" || command[command.length - 1] == "chainKeys") { data.$keyChain = data.$keyChain || key; return {command: "null"}; } } if (data.$keyChain && keyCode > 0) data.$keyChain = ""; return {command: command}; }; }).call(HashHandler.prototype); exports.HashHandler = HashHandler; exports.MultiHashHandler = MultiHashHandler; }); ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var MultiHashHandler = require("../keyboard/hash_handler").MultiHashHandler; var EventEmitter = require("../lib/event_emitter").EventEmitter; var CommandManager = function(platform, commands) { MultiHashHandler.call(this, commands, platform); this.byName = this.commands; this.setDefaultHandler("exec", function(e) { return e.command.exec(e.editor, e.args || {}); }); }; oop.inherits(CommandManager, MultiHashHandler); (function() { oop.implement(this, EventEmitter); this.exec = function(command, editor, args) { if (Array.isArray(command)) { for (var i = command.length; i--; ) { if (this.exec(command[i], editor, args)) return true; } return false; } if (typeof command === "string") command = this.commands[command]; if (!command) return false; if (editor && editor.$readOnly && !command.readOnly) return false; var e = {editor: editor, command: command, args: args}; e.returnValue = this._emit("exec", e); this._signal("afterExec", e); return e.returnValue === false ? false : true; }; this.toggleRecording = function(editor) { if (this.$inReplay) return; editor && editor._emit("changeStatus"); if (this.recording) { this.macro.pop(); this.removeEventListener("exec", this.$addCommandToMacro); if (!this.macro.length) this.macro = this.oldMacro; return this.recording = false; } if (!this.$addCommandToMacro) { this.$addCommandToMacro = function(e) { this.macro.push([e.command, e.args]); }.bind(this); } this.oldMacro = this.macro; this.macro = []; this.on("exec", this.$addCommandToMacro); return this.recording = true; }; this.replay = function(editor) { if (this.$inReplay || !this.macro) return; if (this.recording) return this.toggleRecording(editor); try { this.$inReplay = true; this.macro.forEach(function(x) { if (typeof x == "string") this.exec(x, editor); else this.exec(x[0], editor, x[1]); }, this); } finally { this.$inReplay = false; } }; this.trimMacro = function(m) { return m.map(function(x){ if (typeof x[0] != "string") x[0] = x[0].name; if (!x[1]) x = x[0]; return x; }); }; }).call(CommandManager.prototype); exports.CommandManager = CommandManager; }); ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"], function(require, exports, module) { "use strict"; var lang = require("../lib/lang"); var config = require("../config"); var Range = require("../range").Range; function bindKey(win, mac) { return {win: win, mac: mac}; } exports.commands = [{ name: "showSettingsMenu", bindKey: bindKey("Ctrl-,", "Command-,"), exec: function(editor) { config.loadModule("ace/ext/settings_menu", function(module) { module.init(editor); editor.showSettingsMenu(); }); }, readOnly: true }, { name: "goToNextError", bindKey: bindKey("Alt-E", "Ctrl-E"), exec: function(editor) { config.loadModule("ace/ext/error_marker", function(module) { module.showErrorMarker(editor, 1); }); }, scrollIntoView: "animate", readOnly: true }, { name: "goToPreviousError", bindKey: bindKey("Alt-Shift-E", "Ctrl-Shift-E"), exec: function(editor) { config.loadModule("ace/ext/error_marker", function(module) { module.showErrorMarker(editor, -1); }); }, scrollIntoView: "animate", readOnly: true }, { name: "selectall", bindKey: bindKey("Ctrl-A", "Command-A"), exec: function(editor) { editor.selectAll(); }, readOnly: true }, { name: "centerselection", bindKey: bindKey(null, "Ctrl-L"), exec: function(editor) { editor.centerSelection(); }, readOnly: true }, { name: "gotoline", bindKey: bindKey("Ctrl-L", "Command-L"), exec: function(editor) { var line = parseInt(prompt("Enter line number:"), 10); if (!isNaN(line)) { editor.gotoLine(line); } }, readOnly: true }, { name: "fold", bindKey: bindKey("Alt-L|Ctrl-F1", "Command-Alt-L|Command-F1"), exec: function(editor) { editor.session.toggleFold(false); }, scrollIntoView: "center", readOnly: true }, { name: "unfold", bindKey: bindKey("Alt-Shift-L|Ctrl-Shift-F1", "Command-Alt-Shift-L|Command-Shift-F1"), exec: function(editor) { editor.session.toggleFold(true); }, scrollIntoView: "center", readOnly: true }, { name: "toggleFoldWidget", bindKey: bindKey("F2", "F2"), exec: function(editor) { editor.session.toggleFoldWidget(); }, scrollIntoView: "center", readOnly: true }, { name: "toggleParentFoldWidget", bindKey: bindKey("Alt-F2", "Alt-F2"), exec: function(editor) { editor.session.toggleFoldWidget(true); }, scrollIntoView: "center", readOnly: true }, { name: "foldall", bindKey: bindKey("Ctrl-Alt-0", "Ctrl-Command-Option-0"), exec: function(editor) { editor.session.foldAll(); }, scrollIntoView: "center", readOnly: true }, { name: "foldOther", bindKey: bindKey("Alt-0", "Command-Option-0"), exec: function(editor) { editor.session.foldAll(); editor.session.unfold(editor.selection.getAllRanges()); }, scrollIntoView: "center", readOnly: true }, { name: "unfoldall", bindKey: bindKey("Alt-Shift-0", "Command-Option-Shift-0"), exec: function(editor) { editor.session.unfold(); }, scrollIntoView: "center", readOnly: true }, { name: "findnext", bindKey: bindKey("Ctrl-K", "Command-G"), exec: function(editor) { editor.findNext(); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "findprevious", bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"), exec: function(editor) { editor.findPrevious(); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "selectOrFindNext", bindKey: bindKey("Alt-K", "Ctrl-G"), exec: function(editor) { if (editor.selection.isEmpty()) editor.selection.selectWord(); else editor.findNext(); }, readOnly: true }, { name: "selectOrFindPrevious", bindKey: bindKey("Alt-Shift-K", "Ctrl-Shift-G"), exec: function(editor) { if (editor.selection.isEmpty()) editor.selection.selectWord(); else editor.findPrevious(); }, readOnly: true }, { name: "find", bindKey: bindKey("Ctrl-F", "Command-F"), exec: function(editor) { config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor)}); }, readOnly: true }, { name: "overwrite", bindKey: "Insert", exec: function(editor) { editor.toggleOverwrite(); }, readOnly: true }, { name: "selecttostart", bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Up"), exec: function(editor) { editor.getSelection().selectFileStart(); }, multiSelectAction: "forEach", readOnly: true, scrollIntoView: "animate", aceCommandGroup: "fileJump" }, { name: "gotostart", bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"), exec: function(editor) { editor.navigateFileStart(); }, multiSelectAction: "forEach", readOnly: true, scrollIntoView: "animate", aceCommandGroup: "fileJump" }, { name: "selectup", bindKey: bindKey("Shift-Up", "Shift-Up"), exec: function(editor) { editor.getSelection().selectUp(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "golineup", bindKey: bindKey("Up", "Up|Ctrl-P"), exec: function(editor, args) { editor.navigateUp(args.times); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selecttoend", bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-Down"), exec: function(editor) { editor.getSelection().selectFileEnd(); }, multiSelectAction: "forEach", readOnly: true, scrollIntoView: "animate", aceCommandGroup: "fileJump" }, { name: "gotoend", bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"), exec: function(editor) { editor.navigateFileEnd(); }, multiSelectAction: "forEach", readOnly: true, scrollIntoView: "animate", aceCommandGroup: "fileJump" }, { name: "selectdown", bindKey: bindKey("Shift-Down", "Shift-Down"), exec: function(editor) { editor.getSelection().selectDown(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "golinedown", bindKey: bindKey("Down", "Down|Ctrl-N"), exec: function(editor, args) { editor.navigateDown(args.times); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectwordleft", bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"), exec: function(editor) { editor.getSelection().selectWordLeft(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotowordleft", bindKey: bindKey("Ctrl-Left", "Option-Left"), exec: function(editor) { editor.navigateWordLeft(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selecttolinestart", bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left"), exec: function(editor) { editor.getSelection().selectLineStart(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotolinestart", bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"), exec: function(editor) { editor.navigateLineStart(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectleft", bindKey: bindKey("Shift-Left", "Shift-Left"), exec: function(editor) { editor.getSelection().selectLeft(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotoleft", bindKey: bindKey("Left", "Left|Ctrl-B"), exec: function(editor, args) { editor.navigateLeft(args.times); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectwordright", bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"), exec: function(editor) { editor.getSelection().selectWordRight(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotowordright", bindKey: bindKey("Ctrl-Right", "Option-Right"), exec: function(editor) { editor.navigateWordRight(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selecttolineend", bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right"), exec: function(editor) { editor.getSelection().selectLineEnd(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotolineend", bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"), exec: function(editor) { editor.navigateLineEnd(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectright", bindKey: bindKey("Shift-Right", "Shift-Right"), exec: function(editor) { editor.getSelection().selectRight(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotoright", bindKey: bindKey("Right", "Right|Ctrl-F"), exec: function(editor, args) { editor.navigateRight(args.times); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectpagedown", bindKey: "Shift-PageDown", exec: function(editor) { editor.selectPageDown(); }, readOnly: true }, { name: "pagedown", bindKey: bindKey(null, "Option-PageDown"), exec: function(editor) { editor.scrollPageDown(); }, readOnly: true }, { name: "gotopagedown", bindKey: bindKey("PageDown", "PageDown|Ctrl-V"), exec: function(editor) { editor.gotoPageDown(); }, readOnly: true }, { name: "selectpageup", bindKey: "Shift-PageUp", exec: function(editor) { editor.selectPageUp(); }, readOnly: true }, { name: "pageup", bindKey: bindKey(null, "Option-PageUp"), exec: function(editor) { editor.scrollPageUp(); }, readOnly: true }, { name: "gotopageup", bindKey: "PageUp", exec: function(editor) { editor.gotoPageUp(); }, readOnly: true }, { name: "scrollup", bindKey: bindKey("Ctrl-Up", null), exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); }, readOnly: true }, { name: "scrolldown", bindKey: bindKey("Ctrl-Down", null), exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); }, readOnly: true }, { name: "selectlinestart", bindKey: "Shift-Home", exec: function(editor) { editor.getSelection().selectLineStart(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectlineend", bindKey: "Shift-End", exec: function(editor) { editor.getSelection().selectLineEnd(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "togglerecording", bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"), exec: function(editor) { editor.commands.toggleRecording(editor); }, readOnly: true }, { name: "replaymacro", bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"), exec: function(editor) { editor.commands.replay(editor); }, readOnly: true }, { name: "jumptomatching", bindKey: bindKey("Ctrl-P", "Ctrl-P"), exec: function(editor) { editor.jumpToMatching(); }, multiSelectAction: "forEach", scrollIntoView: "animate", readOnly: true }, { name: "selecttomatching", bindKey: bindKey("Ctrl-Shift-P", "Ctrl-Shift-P"), exec: function(editor) { editor.jumpToMatching(true); }, multiSelectAction: "forEach", scrollIntoView: "animate", readOnly: true }, { name: "expandToMatching", bindKey: bindKey("Ctrl-Shift-M", "Ctrl-Shift-M"), exec: function(editor) { editor.jumpToMatching(true, true); }, multiSelectAction: "forEach", scrollIntoView: "animate", readOnly: true }, { name: "passKeysToBrowser", bindKey: bindKey("null", "null"), exec: function() {}, passEvent: true, readOnly: true }, { name: "cut", exec: function(editor) { var range = editor.getSelectionRange(); editor._emit("cut", range); if (!editor.selection.isEmpty()) { editor.session.remove(range); editor.clearSelection(); } }, scrollIntoView: "cursor", multiSelectAction: "forEach" }, { name: "removeline", bindKey: bindKey("Ctrl-D", "Command-D"), exec: function(editor) { editor.removeLines(); }, scrollIntoView: "cursor", multiSelectAction: "forEachLine" }, { name: "duplicateSelection", bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"), exec: function(editor) { editor.duplicateSelection(); }, scrollIntoView: "cursor", multiSelectAction: "forEach" }, { name: "sortlines", bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"), exec: function(editor) { editor.sortLines(); }, scrollIntoView: "selection", multiSelectAction: "forEachLine" }, { name: "togglecomment", bindKey: bindKey("Ctrl-/", "Command-/"), exec: function(editor) { editor.toggleCommentLines(); }, multiSelectAction: "forEachLine", scrollIntoView: "selectionPart" }, { name: "toggleBlockComment", bindKey: bindKey("Ctrl-Shift-/", "Command-Shift-/"), exec: function(editor) { editor.toggleBlockComment(); }, multiSelectAction: "forEach", scrollIntoView: "selectionPart" }, { name: "modifyNumberUp", bindKey: bindKey("Ctrl-Shift-Up", "Alt-Shift-Up"), exec: function(editor) { editor.modifyNumber(1); }, scrollIntoView: "cursor", multiSelectAction: "forEach" }, { name: "modifyNumberDown", bindKey: bindKey("Ctrl-Shift-Down", "Alt-Shift-Down"), exec: function(editor) { editor.modifyNumber(-1); }, scrollIntoView: "cursor", multiSelectAction: "forEach" }, { name: "replace", bindKey: bindKey("Ctrl-H", "Command-Option-F"), exec: function(editor) { config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor, true)}); } }, { name: "undo", bindKey: bindKey("Ctrl-Z", "Command-Z"), exec: function(editor) { editor.undo(); } }, { name: "redo", bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"), exec: function(editor) { editor.redo(); } }, { name: "copylinesup", bindKey: bindKey("Alt-Shift-Up", "Command-Option-Up"), exec: function(editor) { editor.copyLinesUp(); }, scrollIntoView: "cursor" }, { name: "movelinesup", bindKey: bindKey("Alt-Up", "Option-Up"), exec: function(editor) { editor.moveLinesUp(); }, scrollIntoView: "cursor" }, { name: "copylinesdown", bindKey: bindKey("Alt-Shift-Down", "Command-Option-Down"), exec: function(editor) { editor.copyLinesDown(); }, scrollIntoView: "cursor" }, { name: "movelinesdown", bindKey: bindKey("Alt-Down", "Option-Down"), exec: function(editor) { editor.moveLinesDown(); }, scrollIntoView: "cursor" }, { name: "del", bindKey: bindKey("Delete", "Delete|Ctrl-D|Shift-Delete"), exec: function(editor) { editor.remove("right"); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "backspace", bindKey: bindKey( "Shift-Backspace|Backspace", "Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H" ), exec: function(editor) { editor.remove("left"); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "cut_or_delete", bindKey: bindKey("Shift-Delete", null), exec: function(editor) { if (editor.selection.isEmpty()) { editor.remove("left"); } else { return false; } }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "removetolinestart", bindKey: bindKey("Alt-Backspace", "Command-Backspace"), exec: function(editor) { editor.removeToLineStart(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "removetolineend", bindKey: bindKey("Alt-Delete", "Ctrl-K"), exec: function(editor) { editor.removeToLineEnd(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "removewordleft", bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"), exec: function(editor) { editor.removeWordLeft(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "removewordright", bindKey: bindKey("Ctrl-Delete", "Alt-Delete"), exec: function(editor) { editor.removeWordRight(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "outdent", bindKey: bindKey("Shift-Tab", "Shift-Tab"), exec: function(editor) { editor.blockOutdent(); }, multiSelectAction: "forEach", scrollIntoView: "selectionPart" }, { name: "indent", bindKey: bindKey("Tab", "Tab"), exec: function(editor) { editor.indent(); }, multiSelectAction: "forEach", scrollIntoView: "selectionPart" }, { name: "blockoutdent", bindKey: bindKey("Ctrl-[", "Ctrl-["), exec: function(editor) { editor.blockOutdent(); }, multiSelectAction: "forEachLine", scrollIntoView: "selectionPart" }, { name: "blockindent", bindKey: bindKey("Ctrl-]", "Ctrl-]"), exec: function(editor) { editor.blockIndent(); }, multiSelectAction: "forEachLine", scrollIntoView: "selectionPart" }, { name: "insertstring", exec: function(editor, str) { editor.insert(str); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "inserttext", exec: function(editor, args) { editor.insert(lang.stringRepeat(args.text || "", args.times || 1)); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "splitline", bindKey: bindKey(null, "Ctrl-O"), exec: function(editor) { editor.splitLine(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "transposeletters", bindKey: bindKey("Ctrl-T", "Ctrl-T"), exec: function(editor) { editor.transposeLetters(); }, multiSelectAction: function(editor) {editor.transposeSelections(1); }, scrollIntoView: "cursor" }, { name: "touppercase", bindKey: bindKey("Ctrl-U", "Ctrl-U"), exec: function(editor) { editor.toUpperCase(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "tolowercase", bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"), exec: function(editor) { editor.toLowerCase(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "expandtoline", bindKey: bindKey("Ctrl-Shift-L", "Command-Shift-L"), exec: function(editor) { var range = editor.selection.getRange(); range.start.column = range.end.column = 0; range.end.row++; editor.selection.setRange(range, false); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "joinlines", bindKey: bindKey(null, null), exec: function(editor) { var isBackwards = editor.selection.isBackwards(); var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor(); var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead(); var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length; var selectedText = editor.session.doc.getTextRange(editor.selection.getRange()); var selectedCount = selectedText.replace(/\n\s*/, " ").length; var insertLine = editor.session.doc.getLine(selectionStart.row); for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) { var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i))); if (curLine.length !== 0) { curLine = " " + curLine; } insertLine += curLine; } if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) { insertLine += editor.session.doc.getNewLineCharacter(); } editor.clearSelection(); editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine); if (selectedCount > 0) { editor.selection.moveCursorTo(selectionStart.row, selectionStart.column); editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount); } else { firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol; editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol); } }, multiSelectAction: "forEach", readOnly: true }, { name: "invertSelection", bindKey: bindKey(null, null), exec: function(editor) { var endRow = editor.session.doc.getLength() - 1; var endCol = editor.session.doc.getLine(endRow).length; var ranges = editor.selection.rangeList.ranges; var newRanges = []; if (ranges.length < 1) { ranges = [editor.selection.getRange()]; } for (var i = 0; i < ranges.length; i++) { if (i == (ranges.length - 1)) { if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) { newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol)); } } if (i === 0) { if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) { newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column)); } } else { newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column)); } } editor.exitMultiSelectMode(); editor.clearSelection(); for(var i = 0; i < newRanges.length; i++) { editor.selection.addRange(newRanges[i], false); } }, readOnly: true, scrollIntoView: "none" }]; }); ace.define("ace/editor",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands","ace/config","ace/token_iterator"], function(require, exports, module) { "use strict"; require("./lib/fixoldbrowsers"); var oop = require("./lib/oop"); var dom = require("./lib/dom"); var lang = require("./lib/lang"); var useragent = require("./lib/useragent"); var TextInput = require("./keyboard/textinput").TextInput; var MouseHandler = require("./mouse/mouse_handler").MouseHandler; var FoldHandler = require("./mouse/fold_handler").FoldHandler; var KeyBinding = require("./keyboard/keybinding").KeyBinding; var EditSession = require("./edit_session").EditSession; var Search = require("./search").Search; var Range = require("./range").Range; var EventEmitter = require("./lib/event_emitter").EventEmitter; var CommandManager = require("./commands/command_manager").CommandManager; var defaultCommands = require("./commands/default_commands").commands; var config = require("./config"); var TokenIterator = require("./token_iterator").TokenIterator; var Editor = function(renderer, session) { var container = renderer.getContainerElement(); this.container = container; this.renderer = renderer; this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands); this.textInput = new TextInput(renderer.getTextAreaContainer(), this); this.renderer.textarea = this.textInput.getElement(); this.keyBinding = new KeyBinding(this); this.$mouseHandler = new MouseHandler(this); new FoldHandler(this); this.$blockScrolling = 0; this.$search = new Search().set({ wrap: true }); this.$historyTracker = this.$historyTracker.bind(this); this.commands.on("exec", this.$historyTracker); this.$initOperationListeners(); this._$emitInputEvent = lang.delayedCall(function() { this._signal("input", {}); if (this.session && this.session.bgTokenizer) this.session.bgTokenizer.scheduleStart(); }.bind(this)); this.on("change", function(_, _self) { _self._$emitInputEvent.schedule(31); }); this.setSession(session || new EditSession("")); config.resetOptions(this); config._signal("editor", this); }; (function(){ oop.implement(this, EventEmitter); this.$initOperationListeners = function() { function last(a) {return a[a.length - 1]} this.selections = []; this.commands.on("exec", this.startOperation.bind(this), true); this.commands.on("afterExec", this.endOperation.bind(this), true); this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this)); this.on("change", function() { this.curOp || this.startOperation(); this.curOp.docChanged = true; }.bind(this), true); this.on("changeSelection", function() { this.curOp || this.startOperation(); this.curOp.selectionChanged = true; }.bind(this), true); }; this.curOp = null; this.prevOp = {}; this.startOperation = function(commadEvent) { if (this.curOp) { if (!commadEvent || this.curOp.command) return; this.prevOp = this.curOp; } if (!commadEvent) { this.previousCommand = null; commadEvent = {}; } this.$opResetTimer.schedule(); this.curOp = { command: commadEvent.command || {}, args: commadEvent.args, scrollTop: this.renderer.scrollTop }; if (this.curOp.command.name) this.$blockScrolling++; }; this.endOperation = function(e) { if (this.curOp) { if (e && e.returnValue === false) return this.curOp = null; this._signal("beforeEndOperation"); var command = this.curOp.command; if (command.name && this.$blockScrolling) this.$blockScrolling--; if (command && command.scrollIntoView) { switch (command.scrollIntoView) { case "center": this.renderer.scrollCursorIntoView(null, 0.5); break; case "animate": case "cursor": this.renderer.scrollCursorIntoView(); break; case "selectionPart": var range = this.selection.getRange(); var config = this.renderer.layerConfig; if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) { this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead); } break; default: break; } if (command.scrollIntoView == "animate") this.renderer.animateScrolling(this.curOp.scrollTop); } this.prevOp = this.curOp; this.curOp = null; } }; this.$mergeableCommands = ["backspace", "del", "insertstring"]; this.$historyTracker = function(e) { if (!this.$mergeUndoDeltas) return; var prev = this.prevOp; var mergeableCommands = this.$mergeableCommands; var shouldMerge = prev.command && (e.command.name == prev.command.name); if (e.command.name == "insertstring") { var text = e.args; if (this.mergeNextCommand === undefined) this.mergeNextCommand = true; shouldMerge = shouldMerge && this.mergeNextCommand // previous command allows to coalesce with && (!/\s/.test(text) || /\s/.test(prev.args)); // previous insertion was of same type this.mergeNextCommand = true; } else { shouldMerge = shouldMerge && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable } if ( this.$mergeUndoDeltas != "always" && Date.now() - this.sequenceStartTime > 2000 ) { shouldMerge = false; // the sequence is too long } if (shouldMerge) this.session.mergeUndoDeltas = true; else if (mergeableCommands.indexOf(e.command.name) !== -1) this.sequenceStartTime = Date.now(); }; this.setKeyboardHandler = function(keyboardHandler, cb) { if (keyboardHandler && typeof keyboardHandler === "string") { this.$keybindingId = keyboardHandler; var _self = this; config.loadModule(["keybinding", keyboardHandler], function(module) { if (_self.$keybindingId == keyboardHandler) _self.keyBinding.setKeyboardHandler(module && module.handler); cb && cb(); }); } else { this.$keybindingId = null; this.keyBinding.setKeyboardHandler(keyboardHandler); cb && cb(); } }; this.getKeyboardHandler = function() { return this.keyBinding.getKeyboardHandler(); }; this.setSession = function(session) { if (this.session == session) return; var oldSession = this.session; if (oldSession) { this.session.removeEventListener("change", this.$onDocumentChange); this.session.removeEventListener("changeMode", this.$onChangeMode); this.session.removeEventListener("tokenizerUpdate", this.$onTokenizerUpdate); this.session.removeEventListener("changeTabSize", this.$onChangeTabSize); this.session.removeEventListener("changeWrapLimit", this.$onChangeWrapLimit); this.session.removeEventListener("changeWrapMode", this.$onChangeWrapMode); this.session.removeEventListener("onChangeFold", this.$onChangeFold); this.session.removeEventListener("changeFrontMarker", this.$onChangeFrontMarker); this.session.removeEventListener("changeBackMarker", this.$onChangeBackMarker); this.session.removeEventListener("changeBreakpoint", this.$onChangeBreakpoint); this.session.removeEventListener("changeAnnotation", this.$onChangeAnnotation); this.session.removeEventListener("changeOverwrite", this.$onCursorChange); this.session.removeEventListener("changeScrollTop", this.$onScrollTopChange); this.session.removeEventListener("changeScrollLeft", this.$onScrollLeftChange); var selection = this.session.getSelection(); selection.removeEventListener("changeCursor", this.$onCursorChange); selection.removeEventListener("changeSelection", this.$onSelectionChange); } this.session = session; if (session) { this.$onDocumentChange = this.onDocumentChange.bind(this); session.addEventListener("change", this.$onDocumentChange); this.renderer.setSession(session); this.$onChangeMode = this.onChangeMode.bind(this); session.addEventListener("changeMode", this.$onChangeMode); this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this); session.addEventListener("tokenizerUpdate", this.$onTokenizerUpdate); this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer); session.addEventListener("changeTabSize", this.$onChangeTabSize); this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this); session.addEventListener("changeWrapLimit", this.$onChangeWrapLimit); this.$onChangeWrapMode = this.onChangeWrapMode.bind(this); session.addEventListener("changeWrapMode", this.$onChangeWrapMode); this.$onChangeFold = this.onChangeFold.bind(this); session.addEventListener("changeFold", this.$onChangeFold); this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this); this.session.addEventListener("changeFrontMarker", this.$onChangeFrontMarker); this.$onChangeBackMarker = this.onChangeBackMarker.bind(this); this.session.addEventListener("changeBackMarker", this.$onChangeBackMarker); this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this); this.session.addEventListener("changeBreakpoint", this.$onChangeBreakpoint); this.$onChangeAnnotation = this.onChangeAnnotation.bind(this); this.session.addEventListener("changeAnnotation", this.$onChangeAnnotation); this.$onCursorChange = this.onCursorChange.bind(this); this.session.addEventListener("changeOverwrite", this.$onCursorChange); this.$onScrollTopChange = this.onScrollTopChange.bind(this); this.session.addEventListener("changeScrollTop", this.$onScrollTopChange); this.$onScrollLeftChange = this.onScrollLeftChange.bind(this); this.session.addEventListener("changeScrollLeft", this.$onScrollLeftChange); this.selection = session.getSelection(); this.selection.addEventListener("changeCursor", this.$onCursorChange); this.$onSelectionChange = this.onSelectionChange.bind(this); this.selection.addEventListener("changeSelection", this.$onSelectionChange); this.onChangeMode(); this.$blockScrolling += 1; this.onCursorChange(); this.$blockScrolling -= 1; this.onScrollTopChange(); this.onScrollLeftChange(); this.onSelectionChange(); this.onChangeFrontMarker(); this.onChangeBackMarker(); this.onChangeBreakpoint(); this.onChangeAnnotation(); this.session.getUseWrapMode() && this.renderer.adjustWrapLimit(); this.renderer.updateFull(); } else { this.selection = null; this.renderer.setSession(session); } this._signal("changeSession", { session: session, oldSession: oldSession }); oldSession && oldSession._signal("changeEditor", {oldEditor: this}); session && session._signal("changeEditor", {editor: this}); }; this.getSession = function() { return this.session; }; this.setValue = function(val, cursorPos) { this.session.doc.setValue(val); if (!cursorPos) this.selectAll(); else if (cursorPos == 1) this.navigateFileEnd(); else if (cursorPos == -1) this.navigateFileStart(); return val; }; this.getValue = function() { return this.session.getValue(); }; this.getSelection = function() { return this.selection; }; this.resize = function(force) { this.renderer.onResize(force); }; this.setTheme = function(theme, cb) { this.renderer.setTheme(theme, cb); }; this.getTheme = function() { return this.renderer.getTheme(); }; this.setStyle = function(style) { this.renderer.setStyle(style); }; this.unsetStyle = function(style) { this.renderer.unsetStyle(style); }; this.getFontSize = function () { return this.getOption("fontSize") || dom.computedStyle(this.container, "fontSize"); }; this.setFontSize = function(size) { this.setOption("fontSize", size); }; this.$highlightBrackets = function() { if (this.session.$bracketHighlight) { this.session.removeMarker(this.session.$bracketHighlight); this.session.$bracketHighlight = null; } if (this.$highlightPending) { return; } var self = this; this.$highlightPending = true; setTimeout(function() { self.$highlightPending = false; var session = self.session; if (!session || !session.bgTokenizer) return; var pos = session.findMatchingBracket(self.getCursorPosition()); if (pos) { var range = new Range(pos.row, pos.column, pos.row, pos.column + 1); } else if (session.$mode.getMatching) { var range = session.$mode.getMatching(self.session); } if (range) session.$bracketHighlight = session.addMarker(range, "ace_bracket", "text"); }, 50); }; this.$highlightTags = function() { if (this.$highlightTagPending) return; var self = this; this.$highlightTagPending = true; setTimeout(function() { self.$highlightTagPending = false; var session = self.session; if (!session || !session.bgTokenizer) return; var pos = self.getCursorPosition(); var iterator = new TokenIterator(self.session, pos.row, pos.column); var token = iterator.getCurrentToken(); if (!token || !/\b(?:tag-open|tag-name)/.test(token.type)) { session.removeMarker(session.$tagHighlight); session.$tagHighlight = null; return; } if (token.type.indexOf("tag-open") != -1) token = iterator.stepForward(); var tag = token.value; var depth = 0; var prevToken = iterator.stepBackward(); if (prevToken.value == '<'){ do { prevToken = token; token = iterator.stepForward(); if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) { if (prevToken.value === '<'){ depth++; } else if (prevToken.value === '= 0); } else { do { token = prevToken; prevToken = iterator.stepBackward(); if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) { if (prevToken.value === '<') { depth++; } else if (prevToken.value === ' 1)) highlight = false; } if (session.$highlightLineMarker && !highlight) { session.removeMarker(session.$highlightLineMarker.id); session.$highlightLineMarker = null; } else if (!session.$highlightLineMarker && highlight) { var range = new Range(highlight.row, highlight.column, highlight.row, Infinity); range.id = session.addMarker(range, "ace_active-line", "screenLine"); session.$highlightLineMarker = range; } else if (highlight) { session.$highlightLineMarker.start.row = highlight.row; session.$highlightLineMarker.end.row = highlight.row; session.$highlightLineMarker.start.column = highlight.column; session._signal("changeBackMarker"); } }; this.onSelectionChange = function(e) { var session = this.session; if (session.$selectionMarker) { session.removeMarker(session.$selectionMarker); } session.$selectionMarker = null; if (!this.selection.isEmpty()) { var range = this.selection.getRange(); var style = this.getSelectionStyle(); session.$selectionMarker = session.addMarker(range, "ace_selection", style); } else { this.$updateHighlightActiveLine(); } var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp(); this.session.highlight(re); this._signal("changeSelection"); }; this.$getSelectionHighLightRegexp = function() { var session = this.session; var selection = this.getSelectionRange(); if (selection.isEmpty() || selection.isMultiLine()) return; var startOuter = selection.start.column - 1; var endOuter = selection.end.column + 1; var line = session.getLine(selection.start.row); var lineCols = line.length; var needle = line.substring(Math.max(startOuter, 0), Math.min(endOuter, lineCols)); if ((startOuter >= 0 && /^[\w\d]/.test(needle)) || (endOuter <= lineCols && /[\w\d]$/.test(needle))) return; needle = line.substring(selection.start.column, selection.end.column); if (!/^[\w\d]+$/.test(needle)) return; var re = this.$search.$assembleRegExp({ wholeWord: true, caseSensitive: true, needle: needle }); return re; }; this.onChangeFrontMarker = function() { this.renderer.updateFrontMarkers(); }; this.onChangeBackMarker = function() { this.renderer.updateBackMarkers(); }; this.onChangeBreakpoint = function() { this.renderer.updateBreakpoints(); }; this.onChangeAnnotation = function() { this.renderer.setAnnotations(this.session.getAnnotations()); }; this.onChangeMode = function(e) { this.renderer.updateText(); this._emit("changeMode", e); }; this.onChangeWrapLimit = function() { this.renderer.updateFull(); }; this.onChangeWrapMode = function() { this.renderer.onResize(true); }; this.onChangeFold = function() { this.$updateHighlightActiveLine(); this.renderer.updateFull(); }; this.getSelectedText = function() { return this.session.getTextRange(this.getSelectionRange()); }; this.getCopyText = function() { var text = this.getSelectedText(); this._signal("copy", text); return text; }; this.onCopy = function() { this.commands.exec("copy", this); }; this.onCut = function() { this.commands.exec("cut", this); }; this.onPaste = function(text) { if (this.$readOnly) return; var e = {text: text}; this._signal("paste", e); text = e.text; if (!this.inMultiSelectMode || this.inVirtualSelectionMode) { this.insert(text); } else { var lines = text.split(/\r\n|\r|\n/); var ranges = this.selection.rangeList.ranges; if (lines.length > ranges.length || lines.length < 2 || !lines[1]) return this.commands.exec("insertstring", this, text); for (var i = ranges.length; i--;) { var range = ranges[i]; if (!range.isEmpty()) this.session.remove(range); this.session.insert(range.start, lines[i]); } } this.renderer.scrollCursorIntoView(); }; this.execCommand = function(command, args) { return this.commands.exec(command, this, args); }; this.insert = function(text, pasted) { var session = this.session; var mode = session.getMode(); var cursor = this.getCursorPosition(); if (this.getBehavioursEnabled() && !pasted) { var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text); if (transform) { if (text !== transform.text) { this.session.mergeUndoDeltas = false; this.$mergeNextCommand = false; } text = transform.text; } } if (text == "\t") text = this.session.getTabString(); if (!this.selection.isEmpty()) { var range = this.getSelectionRange(); cursor = this.session.remove(range); this.clearSelection(); } else if (this.session.getOverwrite()) { var range = new Range.fromPoints(cursor, cursor); range.end.column += text.length; this.session.remove(range); } if (text == "\n" || text == "\r\n") { var line = session.getLine(cursor.row); if (cursor.column > line.search(/\S|$/)) { var d = line.substr(cursor.column).search(/\S|$/); session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d); } } this.clearSelection(); var start = cursor.column; var lineState = session.getState(cursor.row); var line = session.getLine(cursor.row); var shouldOutdent = mode.checkOutdent(lineState, line, text); var end = session.insert(cursor, text); if (transform && transform.selection) { if (transform.selection.length == 2) { // Transform relative to the current column this.selection.setSelectionRange( new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1])); } else { // Transform relative to the current row. this.selection.setSelectionRange( new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3])); } } if (session.getDocument().isNewLine(text)) { var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString()); session.insert({row: cursor.row+1, column: 0}, lineIndent); } if (shouldOutdent) mode.autoOutdent(lineState, session, cursor.row); }; this.onTextInput = function(text) { this.keyBinding.onTextInput(text); }; this.onCommandKey = function(e, hashId, keyCode) { this.keyBinding.onCommandKey(e, hashId, keyCode); }; this.setOverwrite = function(overwrite) { this.session.setOverwrite(overwrite); }; this.getOverwrite = function() { return this.session.getOverwrite(); }; this.toggleOverwrite = function() { this.session.toggleOverwrite(); }; this.setScrollSpeed = function(speed) { this.setOption("scrollSpeed", speed); }; this.getScrollSpeed = function() { return this.getOption("scrollSpeed"); }; this.setDragDelay = function(dragDelay) { this.setOption("dragDelay", dragDelay); }; this.getDragDelay = function() { return this.getOption("dragDelay"); }; this.setSelectionStyle = function(val) { this.setOption("selectionStyle", val); }; this.getSelectionStyle = function() { return this.getOption("selectionStyle"); }; this.setHighlightActiveLine = function(shouldHighlight) { this.setOption("highlightActiveLine", shouldHighlight); }; this.getHighlightActiveLine = function() { return this.getOption("highlightActiveLine"); }; this.setHighlightGutterLine = function(shouldHighlight) { this.setOption("highlightGutterLine", shouldHighlight); }; this.getHighlightGutterLine = function() { return this.getOption("highlightGutterLine"); }; this.setHighlightSelectedWord = function(shouldHighlight) { this.setOption("highlightSelectedWord", shouldHighlight); }; this.getHighlightSelectedWord = function() { return this.$highlightSelectedWord; }; this.setAnimatedScroll = function(shouldAnimate){ this.renderer.setAnimatedScroll(shouldAnimate); }; this.getAnimatedScroll = function(){ return this.renderer.getAnimatedScroll(); }; this.setShowInvisibles = function(showInvisibles) { this.renderer.setShowInvisibles(showInvisibles); }; this.getShowInvisibles = function() { return this.renderer.getShowInvisibles(); }; this.setDisplayIndentGuides = function(display) { this.renderer.setDisplayIndentGuides(display); }; this.getDisplayIndentGuides = function() { return this.renderer.getDisplayIndentGuides(); }; this.setShowPrintMargin = function(showPrintMargin) { this.renderer.setShowPrintMargin(showPrintMargin); }; this.getShowPrintMargin = function() { return this.renderer.getShowPrintMargin(); }; this.setPrintMarginColumn = function(showPrintMargin) { this.renderer.setPrintMarginColumn(showPrintMargin); }; this.getPrintMarginColumn = function() { return this.renderer.getPrintMarginColumn(); }; this.setReadOnly = function(readOnly) { this.setOption("readOnly", readOnly); }; this.getReadOnly = function() { return this.getOption("readOnly"); }; this.setBehavioursEnabled = function (enabled) { this.setOption("behavioursEnabled", enabled); }; this.getBehavioursEnabled = function () { return this.getOption("behavioursEnabled"); }; this.setWrapBehavioursEnabled = function (enabled) { this.setOption("wrapBehavioursEnabled", enabled); }; this.getWrapBehavioursEnabled = function () { return this.getOption("wrapBehavioursEnabled"); }; this.setShowFoldWidgets = function(show) { this.setOption("showFoldWidgets", show); }; this.getShowFoldWidgets = function() { return this.getOption("showFoldWidgets"); }; this.setFadeFoldWidgets = function(fade) { this.setOption("fadeFoldWidgets", fade); }; this.getFadeFoldWidgets = function() { return this.getOption("fadeFoldWidgets"); }; this.remove = function(dir) { if (this.selection.isEmpty()){ if (dir == "left") this.selection.selectLeft(); else this.selection.selectRight(); } var range = this.getSelectionRange(); if (this.getBehavioursEnabled()) { var session = this.session; var state = session.getState(range.start.row); var new_range = session.getMode().transformAction(state, 'deletion', this, session, range); if (range.end.column === 0) { var text = session.getTextRange(range); if (text[text.length - 1] == "\n") { var line = session.getLine(range.end.row); if (/^\s+$/.test(line)) { range.end.column = line.length; } } } if (new_range) range = new_range; } this.session.remove(range); this.clearSelection(); }; this.removeWordRight = function() { if (this.selection.isEmpty()) this.selection.selectWordRight(); this.session.remove(this.getSelectionRange()); this.clearSelection(); }; this.removeWordLeft = function() { if (this.selection.isEmpty()) this.selection.selectWordLeft(); this.session.remove(this.getSelectionRange()); this.clearSelection(); }; this.removeToLineStart = function() { if (this.selection.isEmpty()) this.selection.selectLineStart(); this.session.remove(this.getSelectionRange()); this.clearSelection(); }; this.removeToLineEnd = function() { if (this.selection.isEmpty()) this.selection.selectLineEnd(); var range = this.getSelectionRange(); if (range.start.column == range.end.column && range.start.row == range.end.row) { range.end.column = 0; range.end.row++; } this.session.remove(range); this.clearSelection(); }; this.splitLine = function() { if (!this.selection.isEmpty()) { this.session.remove(this.getSelectionRange()); this.clearSelection(); } var cursor = this.getCursorPosition(); this.insert("\n"); this.moveCursorToPosition(cursor); }; this.transposeLetters = function() { if (!this.selection.isEmpty()) { return; } var cursor = this.getCursorPosition(); var column = cursor.column; if (column === 0) return; var line = this.session.getLine(cursor.row); var swap, range; if (column < line.length) { swap = line.charAt(column) + line.charAt(column-1); range = new Range(cursor.row, column-1, cursor.row, column+1); } else { swap = line.charAt(column-1) + line.charAt(column-2); range = new Range(cursor.row, column-2, cursor.row, column); } this.session.replace(range, swap); }; this.toLowerCase = function() { var originalRange = this.getSelectionRange(); if (this.selection.isEmpty()) { this.selection.selectWord(); } var range = this.getSelectionRange(); var text = this.session.getTextRange(range); this.session.replace(range, text.toLowerCase()); this.selection.setSelectionRange(originalRange); }; this.toUpperCase = function() { var originalRange = this.getSelectionRange(); if (this.selection.isEmpty()) { this.selection.selectWord(); } var range = this.getSelectionRange(); var text = this.session.getTextRange(range); this.session.replace(range, text.toUpperCase()); this.selection.setSelectionRange(originalRange); }; this.indent = function() { var session = this.session; var range = this.getSelectionRange(); if (range.start.row < range.end.row) { var rows = this.$getSelectedRows(); session.indentRows(rows.first, rows.last, "\t"); return; } else if (range.start.column < range.end.column) { var text = session.getTextRange(range); if (!/^\s+$/.test(text)) { var rows = this.$getSelectedRows(); session.indentRows(rows.first, rows.last, "\t"); return; } } var line = session.getLine(range.start.row); var position = range.start; var size = session.getTabSize(); var column = session.documentToScreenColumn(position.row, position.column); if (this.session.getUseSoftTabs()) { var count = (size - column % size); var indentString = lang.stringRepeat(" ", count); } else { var count = column % size; while (line[range.start.column] == " " && count) { range.start.column--; count--; } this.selection.setSelectionRange(range); indentString = "\t"; } return this.insert(indentString); }; this.blockIndent = function() { var rows = this.$getSelectedRows(); this.session.indentRows(rows.first, rows.last, "\t"); }; this.blockOutdent = function() { var selection = this.session.getSelection(); this.session.outdentRows(selection.getRange()); }; this.sortLines = function() { var rows = this.$getSelectedRows(); var session = this.session; var lines = []; for (i = rows.first; i <= rows.last; i++) lines.push(session.getLine(i)); lines.sort(function(a, b) { if (a.toLowerCase() < b.toLowerCase()) return -1; if (a.toLowerCase() > b.toLowerCase()) return 1; return 0; }); var deleteRange = new Range(0, 0, 0, 0); for (var i = rows.first; i <= rows.last; i++) { var line = session.getLine(i); deleteRange.start.row = i; deleteRange.end.row = i; deleteRange.end.column = line.length; session.replace(deleteRange, lines[i-rows.first]); } }; this.toggleCommentLines = function() { var state = this.session.getState(this.getCursorPosition().row); var rows = this.$getSelectedRows(); this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last); }; this.toggleBlockComment = function() { var cursor = this.getCursorPosition(); var state = this.session.getState(cursor.row); var range = this.getSelectionRange(); this.session.getMode().toggleBlockComment(state, this.session, range, cursor); }; this.getNumberAt = function(row, column) { var _numberRx = /[\-]?[0-9]+(?:\.[0-9]+)?/g; _numberRx.lastIndex = 0; var s = this.session.getLine(row); while (_numberRx.lastIndex < column) { var m = _numberRx.exec(s); if(m.index <= column && m.index+m[0].length >= column){ var number = { value: m[0], start: m.index, end: m.index+m[0].length }; return number; } } return null; }; this.modifyNumber = function(amount) { var row = this.selection.getCursor().row; var column = this.selection.getCursor().column; var charRange = new Range(row, column-1, row, column); var c = this.session.getTextRange(charRange); if (!isNaN(parseFloat(c)) && isFinite(c)) { var nr = this.getNumberAt(row, column); if (nr) { var fp = nr.value.indexOf(".") >= 0 ? nr.start + nr.value.indexOf(".") + 1 : nr.end; var decimals = nr.start + nr.value.length - fp; var t = parseFloat(nr.value); t *= Math.pow(10, decimals); if(fp !== nr.end && column < fp){ amount *= Math.pow(10, nr.end - column - 1); } else { amount *= Math.pow(10, nr.end - column); } t += amount; t /= Math.pow(10, decimals); var nnr = t.toFixed(decimals); var replaceRange = new Range(row, nr.start, row, nr.end); this.session.replace(replaceRange, nnr); this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length)); } } }; this.removeLines = function() { var rows = this.$getSelectedRows(); var range; if (rows.first === 0 || rows.last+1 < this.session.getLength()) range = new Range(rows.first, 0, rows.last+1, 0); else range = new Range( rows.first-1, this.session.getLine(rows.first-1).length, rows.last, this.session.getLine(rows.last).length ); this.session.remove(range); this.clearSelection(); }; this.duplicateSelection = function() { var sel = this.selection; var doc = this.session; var range = sel.getRange(); var reverse = sel.isBackwards(); if (range.isEmpty()) { var row = range.start.row; doc.duplicateLines(row, row); } else { var point = reverse ? range.start : range.end; var endPoint = doc.insert(point, doc.getTextRange(range), false); range.start = point; range.end = endPoint; sel.setSelectionRange(range, reverse); } }; this.moveLinesDown = function() { this.$moveLines(1, false); }; this.moveLinesUp = function() { this.$moveLines(-1, false); }; this.moveText = function(range, toPosition, copy) { return this.session.moveText(range, toPosition, copy); }; this.copyLinesUp = function() { this.$moveLines(-1, true); }; this.copyLinesDown = function() { this.$moveLines(1, true); }; this.$moveLines = function(dir, copy) { var rows, moved; var selection = this.selection; if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) { var range = selection.toOrientedRange(); rows = this.$getSelectedRows(range); moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir); if (copy && dir == -1) moved = 0; range.moveBy(moved, 0); selection.fromOrientedRange(range); } else { var ranges = selection.rangeList.ranges; selection.rangeList.detach(this.session); this.inVirtualSelectionMode = true; var diff = 0; var totalDiff = 0; var l = ranges.length; for (var i = 0; i < l; i++) { var rangeIndex = i; ranges[i].moveBy(diff, 0); rows = this.$getSelectedRows(ranges[i]); var first = rows.first; var last = rows.last; while (++i < l) { if (totalDiff) ranges[i].moveBy(totalDiff, 0); var subRows = this.$getSelectedRows(ranges[i]); if (copy && subRows.first != last) break; else if (!copy && subRows.first > last + 1) break; last = subRows.last; } i--; diff = this.session.$moveLines(first, last, copy ? 0 : dir); if (copy && dir == -1) rangeIndex = i + 1; while (rangeIndex <= i) { ranges[rangeIndex].moveBy(diff, 0); rangeIndex++; } if (!copy) diff = 0; totalDiff += diff; } selection.fromOrientedRange(selection.ranges[0]); selection.rangeList.attach(this.session); this.inVirtualSelectionMode = false; } }; this.$getSelectedRows = function(range) { range = (range || this.getSelectionRange()).collapseRows(); return { first: this.session.getRowFoldStart(range.start.row), last: this.session.getRowFoldEnd(range.end.row) }; }; this.onCompositionStart = function(text) { this.renderer.showComposition(this.getCursorPosition()); }; this.onCompositionUpdate = function(text) { this.renderer.setCompositionText(text); }; this.onCompositionEnd = function() { this.renderer.hideComposition(); }; this.getFirstVisibleRow = function() { return this.renderer.getFirstVisibleRow(); }; this.getLastVisibleRow = function() { return this.renderer.getLastVisibleRow(); }; this.isRowVisible = function(row) { return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow()); }; this.isRowFullyVisible = function(row) { return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow()); }; this.$getVisibleRowCount = function() { return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1; }; this.$moveByPage = function(dir, select) { var renderer = this.renderer; var config = this.renderer.layerConfig; var rows = dir * Math.floor(config.height / config.lineHeight); this.$blockScrolling++; if (select === true) { this.selection.$moveSelection(function(){ this.moveCursorBy(rows, 0); }); } else if (select === false) { this.selection.moveCursorBy(rows, 0); this.selection.clearSelection(); } this.$blockScrolling--; var scrollTop = renderer.scrollTop; renderer.scrollBy(0, rows * config.lineHeight); if (select != null) renderer.scrollCursorIntoView(null, 0.5); renderer.animateScrolling(scrollTop); }; this.selectPageDown = function() { this.$moveByPage(1, true); }; this.selectPageUp = function() { this.$moveByPage(-1, true); }; this.gotoPageDown = function() { this.$moveByPage(1, false); }; this.gotoPageUp = function() { this.$moveByPage(-1, false); }; this.scrollPageDown = function() { this.$moveByPage(1); }; this.scrollPageUp = function() { this.$moveByPage(-1); }; this.scrollToRow = function(row) { this.renderer.scrollToRow(row); }; this.scrollToLine = function(line, center, animate, callback) { this.renderer.scrollToLine(line, center, animate, callback); }; this.centerSelection = function() { var range = this.getSelectionRange(); var pos = { row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2), column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2) }; this.renderer.alignCursor(pos, 0.5); }; this.getCursorPosition = function() { return this.selection.getCursor(); }; this.getCursorPositionScreen = function() { return this.session.documentToScreenPosition(this.getCursorPosition()); }; this.getSelectionRange = function() { return this.selection.getRange(); }; this.selectAll = function() { this.$blockScrolling += 1; this.selection.selectAll(); this.$blockScrolling -= 1; }; this.clearSelection = function() { this.selection.clearSelection(); }; this.moveCursorTo = function(row, column) { this.selection.moveCursorTo(row, column); }; this.moveCursorToPosition = function(pos) { this.selection.moveCursorToPosition(pos); }; this.jumpToMatching = function(select, expand) { var cursor = this.getCursorPosition(); var iterator = new TokenIterator(this.session, cursor.row, cursor.column); var prevToken = iterator.getCurrentToken(); var token = prevToken || iterator.stepForward(); if (!token) return; var matchType; var found = false; var depth = {}; var i = cursor.column - token.start; var bracketType; var brackets = { ")": "(", "(": "(", "]": "[", "[": "[", "{": "{", "}": "{" }; do { if (token.value.match(/[{}()\[\]]/g)) { for (; i < token.value.length && !found; i++) { if (!brackets[token.value[i]]) { continue; } bracketType = brackets[token.value[i]] + '.' + token.type.replace("rparen", "lparen"); if (isNaN(depth[bracketType])) { depth[bracketType] = 0; } switch (token.value[i]) { case '(': case '[': case '{': depth[bracketType]++; break; case ')': case ']': case '}': depth[bracketType]--; if (depth[bracketType] === -1) { matchType = 'bracket'; found = true; } break; } } } else if (token && token.type.indexOf('tag-name') !== -1) { if (isNaN(depth[token.value])) { depth[token.value] = 0; } if (prevToken.value === '<') { depth[token.value]++; } else if (prevToken.value === '= 0; --i) { if(this.$tryReplace(ranges[i], replacement)) { replaced++; } } this.selection.setSelectionRange(selection); this.$blockScrolling -= 1; return replaced; }; this.$tryReplace = function(range, replacement) { var input = this.session.getTextRange(range); replacement = this.$search.replace(input, replacement); if (replacement !== null) { range.end = this.session.replace(range, replacement); return range; } else { return null; } }; this.getLastSearchOptions = function() { return this.$search.getOptions(); }; this.find = function(needle, options, animate) { if (!options) options = {}; if (typeof needle == "string" || needle instanceof RegExp) options.needle = needle; else if (typeof needle == "object") oop.mixin(options, needle); var range = this.selection.getRange(); if (options.needle == null) { needle = this.session.getTextRange(range) || this.$search.$options.needle; if (!needle) { range = this.session.getWordRange(range.start.row, range.start.column); needle = this.session.getTextRange(range); } this.$search.set({needle: needle}); } this.$search.set(options); if (!options.start) this.$search.set({start: range}); var newRange = this.$search.find(this.session); if (options.preventScroll) return newRange; if (newRange) { this.revealRange(newRange, animate); return newRange; } if (options.backwards) range.start = range.end; else range.end = range.start; this.selection.setRange(range); }; this.findNext = function(options, animate) { this.find({skipCurrent: true, backwards: false}, options, animate); }; this.findPrevious = function(options, animate) { this.find(options, {skipCurrent: true, backwards: true}, animate); }; this.revealRange = function(range, animate) { this.$blockScrolling += 1; this.session.unfold(range); this.selection.setSelectionRange(range); this.$blockScrolling -= 1; var scrollTop = this.renderer.scrollTop; this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); if (animate !== false) this.renderer.animateScrolling(scrollTop); }; this.undo = function() { this.$blockScrolling++; this.session.getUndoManager().undo(); this.$blockScrolling--; this.renderer.scrollCursorIntoView(null, 0.5); }; this.redo = function() { this.$blockScrolling++; this.session.getUndoManager().redo(); this.$blockScrolling--; this.renderer.scrollCursorIntoView(null, 0.5); }; this.destroy = function() { this.renderer.destroy(); this._signal("destroy", this); if (this.session) { this.session.destroy(); } }; this.setAutoScrollEditorIntoView = function(enable) { if (!enable) return; var rect; var self = this; var shouldScroll = false; if (!this.$scrollAnchor) this.$scrollAnchor = document.createElement("div"); var scrollAnchor = this.$scrollAnchor; scrollAnchor.style.cssText = "position:absolute"; this.container.insertBefore(scrollAnchor, this.container.firstChild); var onChangeSelection = this.on("changeSelection", function() { shouldScroll = true; }); var onBeforeRender = this.renderer.on("beforeRender", function() { if (shouldScroll) rect = self.renderer.container.getBoundingClientRect(); }); var onAfterRender = this.renderer.on("afterRender", function() { if (shouldScroll && rect && (self.isFocused() || self.searchBox && self.searchBox.isFocused()) ) { var renderer = self.renderer; var pos = renderer.$cursorLayer.$pixelPos; var config = renderer.layerConfig; var top = pos.top - config.offset; if (pos.top >= 0 && top + rect.top < 0) { shouldScroll = true; } else if (pos.top < config.height && pos.top + rect.top + config.lineHeight > window.innerHeight) { shouldScroll = false; } else { shouldScroll = null; } if (shouldScroll != null) { scrollAnchor.style.top = top + "px"; scrollAnchor.style.left = pos.left + "px"; scrollAnchor.style.height = config.lineHeight + "px"; scrollAnchor.scrollIntoView(shouldScroll); } shouldScroll = rect = null; } }); this.setAutoScrollEditorIntoView = function(enable) { if (enable) return; delete this.setAutoScrollEditorIntoView; this.removeEventListener("changeSelection", onChangeSelection); this.renderer.removeEventListener("afterRender", onAfterRender); this.renderer.removeEventListener("beforeRender", onBeforeRender); }; }; this.$resetCursorStyle = function() { var style = this.$cursorStyle || "ace"; var cursorLayer = this.renderer.$cursorLayer; if (!cursorLayer) return; cursorLayer.setSmoothBlinking(/smooth/.test(style)); cursorLayer.isBlinking = !this.$readOnly && style != "wide"; dom.setCssClass(cursorLayer.element, "ace_slim-cursors", /slim/.test(style)); }; }).call(Editor.prototype); config.defineOptions(Editor.prototype, "editor", { selectionStyle: { set: function(style) { this.onSelectionChange(); this._signal("changeSelectionStyle", {data: style}); }, initialValue: "line" }, highlightActiveLine: { set: function() {this.$updateHighlightActiveLine();}, initialValue: true }, highlightSelectedWord: { set: function(shouldHighlight) {this.$onSelectionChange();}, initialValue: true }, readOnly: { set: function(readOnly) { this.$resetCursorStyle(); }, initialValue: false }, cursorStyle: { set: function(val) { this.$resetCursorStyle(); }, values: ["ace", "slim", "smooth", "wide"], initialValue: "ace" }, mergeUndoDeltas: { values: [false, true, "always"], initialValue: true }, behavioursEnabled: {initialValue: true}, wrapBehavioursEnabled: {initialValue: true}, autoScrollEditorIntoView: { set: function(val) {this.setAutoScrollEditorIntoView(val)} }, hScrollBarAlwaysVisible: "renderer", vScrollBarAlwaysVisible: "renderer", highlightGutterLine: "renderer", animatedScroll: "renderer", showInvisibles: "renderer", showPrintMargin: "renderer", printMarginColumn: "renderer", printMargin: "renderer", fadeFoldWidgets: "renderer", showFoldWidgets: "renderer", showLineNumbers: "renderer", showGutter: "renderer", displayIndentGuides: "renderer", fontSize: "renderer", fontFamily: "renderer", maxLines: "renderer", minLines: "renderer", scrollPastEnd: "renderer", fixedWidthGutter: "renderer", theme: "renderer", scrollSpeed: "$mouseHandler", dragDelay: "$mouseHandler", dragEnabled: "$mouseHandler", focusTimout: "$mouseHandler", tooltipFollowsMouse: "$mouseHandler", firstLineNumber: "session", overwrite: "session", newLineMode: "session", useWorker: "session", useSoftTabs: "session", tabSize: "session", wrap: "session", foldStyle: "session", mode: "session" }); exports.Editor = Editor; }); ace.define("ace/undomanager",["require","exports","module"], function(require, exports, module) { "use strict"; var UndoManager = function() { this.reset(); }; (function() { this.execute = function(options) { var deltas = options.args[0]; this.$doc = options.args[1]; if (options.merge && this.hasUndo()){ this.dirtyCounter--; deltas = this.$undoStack.pop().concat(deltas); } this.$undoStack.push(deltas); this.$redoStack = []; if (this.dirtyCounter < 0) { this.dirtyCounter = NaN; } this.dirtyCounter++; }; this.undo = function(dontSelect) { var deltas = this.$undoStack.pop(); var undoSelectionRange = null; if (deltas) { undoSelectionRange = this.$doc.undoChanges(deltas, dontSelect); this.$redoStack.push(deltas); this.dirtyCounter--; } return undoSelectionRange; }; this.redo = function(dontSelect) { var deltas = this.$redoStack.pop(); var redoSelectionRange = null; if (deltas) { redoSelectionRange = this.$doc.redoChanges(deltas, dontSelect); this.$undoStack.push(deltas); this.dirtyCounter++; } return redoSelectionRange; }; this.reset = function() { this.$undoStack = []; this.$redoStack = []; this.dirtyCounter = 0; }; this.hasUndo = function() { return this.$undoStack.length > 0; }; this.hasRedo = function() { return this.$redoStack.length > 0; }; this.markClean = function() { this.dirtyCounter = 0; }; this.isClean = function() { return this.dirtyCounter === 0; }; }).call(UndoManager.prototype); exports.UndoManager = UndoManager; }); ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var oop = require("../lib/oop"); var lang = require("../lib/lang"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var Gutter = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_gutter-layer"; parentEl.appendChild(this.element); this.setShowFoldWidgets(this.$showFoldWidgets); this.gutterWidth = 0; this.$annotations = []; this.$updateAnnotations = this.$updateAnnotations.bind(this); this.$cells = []; }; (function() { oop.implement(this, EventEmitter); this.setSession = function(session) { if (this.session) this.session.removeEventListener("change", this.$updateAnnotations); this.session = session; if (session) session.on("change", this.$updateAnnotations); }; this.addGutterDecoration = function(row, className){ if (window.console) console.warn && console.warn("deprecated use session.addGutterDecoration"); this.session.addGutterDecoration(row, className); }; this.removeGutterDecoration = function(row, className){ if (window.console) console.warn && console.warn("deprecated use session.removeGutterDecoration"); this.session.removeGutterDecoration(row, className); }; this.setAnnotations = function(annotations) { this.$annotations = []; for (var i = 0; i < annotations.length; i++) { var annotation = annotations[i]; var row = annotation.row; var rowInfo = this.$annotations[row]; if (!rowInfo) rowInfo = this.$annotations[row] = {text: []}; var annoText = annotation.text; annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || ""; if (rowInfo.text.indexOf(annoText) === -1) rowInfo.text.push(annoText); var type = annotation.type; if (type == "error") rowInfo.className = " ace_error"; else if (type == "warning" && rowInfo.className != " ace_error") rowInfo.className = " ace_warning"; else if (type == "info" && (!rowInfo.className)) rowInfo.className = " ace_info"; } }; this.$updateAnnotations = function (e) { if (!this.$annotations.length) return; var delta = e.data; var range = delta.range; var firstRow = range.start.row; var len = range.end.row - firstRow; if (len === 0) { } else if (delta.action == "removeText" || delta.action == "removeLines") { this.$annotations.splice(firstRow, len + 1, null); } else { var args = new Array(len + 1); args.unshift(firstRow, 1); this.$annotations.splice.apply(this.$annotations, args); } }; this.update = function(config) { var session = this.session; var firstRow = config.firstRow; var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar session.getLength() - 1); var fold = session.getNextFoldLine(firstRow); var foldStart = fold ? fold.start.row : Infinity; var foldWidgets = this.$showFoldWidgets && session.foldWidgets; var breakpoints = session.$breakpoints; var decorations = session.$decorations; var firstLineNumber = session.$firstLineNumber; var lastLineNumber = 0; var gutterRenderer = session.gutterRenderer || this.$renderer; var cell = null; var index = -1; var row = firstRow; while (true) { if (row > foldStart) { row = fold.end.row + 1; fold = session.getNextFoldLine(row, fold); foldStart = fold ? fold.start.row : Infinity; } if (row > lastRow) { while (this.$cells.length > index + 1) { cell = this.$cells.pop(); this.element.removeChild(cell.element); } break; } cell = this.$cells[++index]; if (!cell) { cell = {element: null, textNode: null, foldWidget: null}; cell.element = dom.createElement("div"); cell.textNode = document.createTextNode(''); cell.element.appendChild(cell.textNode); this.element.appendChild(cell.element); this.$cells[index] = cell; } var className = "ace_gutter-cell "; if (breakpoints[row]) className += breakpoints[row]; if (decorations[row]) className += decorations[row]; if (this.$annotations[row]) className += this.$annotations[row].className; if (cell.element.className != className) cell.element.className = className; var height = session.getRowLength(row) * config.lineHeight + "px"; if (height != cell.element.style.height) cell.element.style.height = height; if (foldWidgets) { var c = foldWidgets[row]; if (c == null) c = foldWidgets[row] = session.getFoldWidget(row); } if (c) { if (!cell.foldWidget) { cell.foldWidget = dom.createElement("span"); cell.element.appendChild(cell.foldWidget); } var className = "ace_fold-widget ace_" + c; if (c == "start" && row == foldStart && row < fold.end.row) className += " ace_closed"; else className += " ace_open"; if (cell.foldWidget.className != className) cell.foldWidget.className = className; var height = config.lineHeight + "px"; if (cell.foldWidget.style.height != height) cell.foldWidget.style.height = height; } else { if (cell.foldWidget) { cell.element.removeChild(cell.foldWidget); cell.foldWidget = null; } } var text = lastLineNumber = gutterRenderer ? gutterRenderer.getText(session, row) : row + firstLineNumber; if (text != cell.textNode.data) cell.textNode.data = text; row++; } this.element.style.height = config.minHeight + "px"; if (this.$fixedWidth || session.$useWrapMode) lastLineNumber = session.getLength() + firstLineNumber; var gutterWidth = gutterRenderer ? gutterRenderer.getWidth(session, lastLineNumber, config) : lastLineNumber.toString().length * config.characterWidth; var padding = this.$padding || this.$computePadding(); gutterWidth += padding.left + padding.right; if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) { this.gutterWidth = gutterWidth; this.element.style.width = Math.ceil(this.gutterWidth) + "px"; this._emit("changeGutterWidth", gutterWidth); } }; this.$fixedWidth = false; this.$showLineNumbers = true; this.$renderer = ""; this.setShowLineNumbers = function(show) { this.$renderer = !show && { getWidth: function() {return ""}, getText: function() {return ""} }; }; this.getShowLineNumbers = function() { return this.$showLineNumbers; }; this.$showFoldWidgets = true; this.setShowFoldWidgets = function(show) { if (show) dom.addCssClass(this.element, "ace_folding-enabled"); else dom.removeCssClass(this.element, "ace_folding-enabled"); this.$showFoldWidgets = show; this.$padding = null; }; this.getShowFoldWidgets = function() { return this.$showFoldWidgets; }; this.$computePadding = function() { if (!this.element.firstChild) return {left: 0, right: 0}; var style = dom.computedStyle(this.element.firstChild); this.$padding = {}; this.$padding.left = parseInt(style.paddingLeft) + 1 || 0; this.$padding.right = parseInt(style.paddingRight) || 0; return this.$padding; }; this.getRegion = function(point) { var padding = this.$padding || this.$computePadding(); var rect = this.element.getBoundingClientRect(); if (point.x < padding.left + rect.left) return "markers"; if (this.$showFoldWidgets && point.x > rect.right - padding.right) return "foldWidgets"; }; }).call(Gutter.prototype); exports.Gutter = Gutter; }); ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var dom = require("../lib/dom"); var Marker = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_marker-layer"; parentEl.appendChild(this.element); }; (function() { this.$padding = 0; this.setPadding = function(padding) { this.$padding = padding; }; this.setSession = function(session) { this.session = session; }; this.setMarkers = function(markers) { this.markers = markers; }; this.update = function(config) { var config = config || this.config; if (!config) return; this.config = config; var html = []; for (var key in this.markers) { var marker = this.markers[key]; if (!marker.range) { marker.update(html, this, this.session, config); continue; } var range = marker.range.clipRows(config.firstRow, config.lastRow); if (range.isEmpty()) continue; range = range.toScreenRange(this.session); if (marker.renderer) { var top = this.$getTop(range.start.row, config); var left = this.$padding + range.start.column * config.characterWidth; marker.renderer(html, range, left, top, config); } else if (marker.type == "fullLine") { this.drawFullLineMarker(html, range, marker.clazz, config); } else if (marker.type == "screenLine") { this.drawScreenLineMarker(html, range, marker.clazz, config); } else if (range.isMultiLine()) { if (marker.type == "text") this.drawTextMarker(html, range, marker.clazz, config); else this.drawMultiLineMarker(html, range, marker.clazz, config); } else { this.drawSingleLineMarker(html, range, marker.clazz + " ace_start", config); } } this.element.innerHTML = html.join(""); }; this.$getTop = function(row, layerConfig) { return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight; }; this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) { var row = range.start.row; var lineRange = new Range( row, range.start.column, row, this.session.getScreenLastRowColumn(row) ); this.drawSingleLineMarker(stringBuilder, lineRange, clazz + " ace_start", layerConfig, 1, extraStyle); row = range.end.row; lineRange = new Range(row, 0, row, range.end.column); this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 0, extraStyle); for (row = range.start.row + 1; row < range.end.row; row++) { lineRange.start.row = row; lineRange.end.row = row; lineRange.end.column = this.session.getScreenLastRowColumn(row); this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1, extraStyle); } }; this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { var padding = this.$padding; var height = config.lineHeight; var top = this.$getTop(range.start.row, config); var left = padding + range.start.column * config.characterWidth; extraStyle = extraStyle || ""; stringBuilder.push( "
" ); top = this.$getTop(range.end.row, config); var width = range.end.column * config.characterWidth; stringBuilder.push( "
" ); height = (range.end.row - range.start.row - 1) * config.lineHeight; if (height < 0) return; top = this.$getTop(range.start.row + 1, config); stringBuilder.push( "
" ); }; this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) { var height = config.lineHeight; var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth; var top = this.$getTop(range.start.row, config); var left = this.$padding + range.start.column * config.characterWidth; stringBuilder.push( "
" ); }; this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { var top = this.$getTop(range.start.row, config); var height = config.lineHeight; if (range.start.row != range.end.row) height += this.$getTop(range.end.row, config) - top; stringBuilder.push( "
" ); }; this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { var top = this.$getTop(range.start.row, config); var height = config.lineHeight; stringBuilder.push( "
" ); }; }).call(Marker.prototype); exports.Marker = Marker; }); ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var dom = require("../lib/dom"); var lang = require("../lib/lang"); var useragent = require("../lib/useragent"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var Text = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_text-layer"; parentEl.appendChild(this.element); this.$updateEolChar = this.$updateEolChar.bind(this); }; (function() { oop.implement(this, EventEmitter); this.EOF_CHAR = "\xB6"; this.EOL_CHAR_LF = "\xAC"; this.EOL_CHAR_CRLF = "\xa4"; this.EOL_CHAR = this.EOL_CHAR_LF; this.TAB_CHAR = "\u2192"; //"\u21E5"; this.SPACE_CHAR = "\xB7"; this.$padding = 0; this.$updateEolChar = function() { var EOL_CHAR = this.session.doc.getNewLineCharacter() == "\n" ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF; if (this.EOL_CHAR != EOL_CHAR) { this.EOL_CHAR = EOL_CHAR; return true; } } this.setPadding = function(padding) { this.$padding = padding; this.element.style.padding = "0 " + padding + "px"; }; this.getLineHeight = function() { return this.$fontMetrics.$characterSize.height || 0; }; this.getCharacterWidth = function() { return this.$fontMetrics.$characterSize.width || 0; }; this.$setFontMetrics = function(measure) { this.$fontMetrics = measure; this.$fontMetrics.on("changeCharacterSize", function(e) { this._signal("changeCharacterSize", e); }.bind(this)); this.$pollSizeChanges(); } this.checkForSizeChanges = function() { this.$fontMetrics.checkForSizeChanges(); }; this.$pollSizeChanges = function() { return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges(); }; this.setSession = function(session) { this.session = session; if (session) this.$computeTabString(); }; this.showInvisibles = false; this.setShowInvisibles = function(showInvisibles) { if (this.showInvisibles == showInvisibles) return false; this.showInvisibles = showInvisibles; this.$computeTabString(); return true; }; this.displayIndentGuides = true; this.setDisplayIndentGuides = function(display) { if (this.displayIndentGuides == display) return false; this.displayIndentGuides = display; this.$computeTabString(); return true; }; this.$tabStrings = []; this.onChangeTabSize = this.$computeTabString = function() { var tabSize = this.session.getTabSize(); this.tabSize = tabSize; var tabStr = this.$tabStrings = [0]; for (var i = 1; i < tabSize + 1; i++) { if (this.showInvisibles) { tabStr.push("" + this.TAB_CHAR + lang.stringRepeat("\xa0", i - 1) + ""); } else { tabStr.push(lang.stringRepeat("\xa0", i)); } } if (this.displayIndentGuides) { this.$indentGuideRe = /\s\S| \t|\t |\s$/; var className = "ace_indent-guide"; var spaceClass = ""; var tabClass = ""; if (this.showInvisibles) { className += " ace_invisible"; spaceClass = " ace_invisible_space"; tabClass = " ace_invisible_tab"; var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize); var tabContent = this.TAB_CHAR + lang.stringRepeat("\xa0", this.tabSize - 1); } else{ var spaceContent = lang.stringRepeat("\xa0", this.tabSize); var tabContent = spaceContent; } this.$tabStrings[" "] = "" + spaceContent + ""; this.$tabStrings["\t"] = "" + tabContent + ""; } }; this.updateLines = function(config, firstRow, lastRow) { if (this.config.lastRow != config.lastRow || this.config.firstRow != config.firstRow) { this.scrollLines(config); } this.config = config; var first = Math.max(firstRow, config.firstRow); var last = Math.min(lastRow, config.lastRow); var lineElements = this.element.childNodes; var lineElementsIdx = 0; for (var row = config.firstRow; row < first; row++) { var foldLine = this.session.getFoldLine(row); if (foldLine) { if (foldLine.containsRow(first)) { first = foldLine.start.row; break; } else { row = foldLine.end.row; } } lineElementsIdx ++; } var row = first; var foldLine = this.session.getNextFoldLine(row); var foldStart = foldLine ? foldLine.start.row : Infinity; while (true) { if (row > foldStart) { row = foldLine.end.row+1; foldLine = this.session.getNextFoldLine(row, foldLine); foldStart = foldLine ? foldLine.start.row :Infinity; } if (row > last) break; var lineElement = lineElements[lineElementsIdx++]; if (lineElement) { var html = []; this.$renderLine( html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false ); lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + "px"; lineElement.innerHTML = html.join(""); } row++; } }; this.scrollLines = function(config) { var oldConfig = this.config; this.config = config; if (!oldConfig || oldConfig.lastRow < config.firstRow) return this.update(config); if (config.lastRow < oldConfig.firstRow) return this.update(config); var el = this.element; if (oldConfig.firstRow < config.firstRow) for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--) el.removeChild(el.firstChild); if (oldConfig.lastRow > config.lastRow) for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--) el.removeChild(el.lastChild); if (config.firstRow < oldConfig.firstRow) { var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1); if (el.firstChild) el.insertBefore(fragment, el.firstChild); else el.appendChild(fragment); } if (config.lastRow > oldConfig.lastRow) { var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow); el.appendChild(fragment); } }; this.$renderLinesFragment = function(config, firstRow, lastRow) { var fragment = this.element.ownerDocument.createDocumentFragment(); var row = firstRow; var foldLine = this.session.getNextFoldLine(row); var foldStart = foldLine ? foldLine.start.row : Infinity; while (true) { if (row > foldStart) { row = foldLine.end.row+1; foldLine = this.session.getNextFoldLine(row, foldLine); foldStart = foldLine ? foldLine.start.row : Infinity; } if (row > lastRow) break; var container = dom.createElement("div"); var html = []; this.$renderLine(html, row, false, row == foldStart ? foldLine : false); container.innerHTML = html.join(""); if (this.$useLineGroups()) { container.className = 'ace_line_group'; fragment.appendChild(container); container.style.height = config.lineHeight * this.session.getRowLength(row) + "px"; } else { while(container.firstChild) fragment.appendChild(container.firstChild); } row++; } return fragment; }; this.update = function(config) { this.config = config; var html = []; var firstRow = config.firstRow, lastRow = config.lastRow; var row = firstRow; var foldLine = this.session.getNextFoldLine(row); var foldStart = foldLine ? foldLine.start.row : Infinity; while (true) { if (row > foldStart) { row = foldLine.end.row+1; foldLine = this.session.getNextFoldLine(row, foldLine); foldStart = foldLine ? foldLine.start.row :Infinity; } if (row > lastRow) break; if (this.$useLineGroups()) html.push("
") this.$renderLine(html, row, false, row == foldStart ? foldLine : false); if (this.$useLineGroups()) html.push("
"); // end the line group row++; } this.element.innerHTML = html.join(""); }; this.$textToken = { "text": true, "rparen": true, "lparen": true }; this.$renderToken = function(stringBuilder, screenColumn, token, value) { var self = this; var replaceReg = /\t|&|<|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g; var replaceFunc = function(c, a, b, tabIdx, idx4) { if (a) { return self.showInvisibles ? "" + lang.stringRepeat(self.SPACE_CHAR, c.length) + "" : lang.stringRepeat("\xa0", c.length); } else if (c == "&") { return "&"; } else if (c == "<") { return "<"; } else if (c == "\t") { var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx); screenColumn += tabSize - 1; return self.$tabStrings[tabSize]; } else if (c == "\u3000") { var classToUse = self.showInvisibles ? "ace_cjk ace_invisible ace_invisible_space" : "ace_cjk"; var space = self.showInvisibles ? self.SPACE_CHAR : ""; screenColumn += 1; return "" + space + ""; } else if (b) { return "" + self.SPACE_CHAR + ""; } else { screenColumn += 1; return "" + c + ""; } }; var output = value.replace(replaceReg, replaceFunc); if (!this.$textToken[token.type]) { var classes = "ace_" + token.type.replace(/\./g, " ace_"); var style = ""; if (token.type == "fold") style = " style='width:" + (token.value.length * this.config.characterWidth) + "px;' "; stringBuilder.push("", output, ""); } else { stringBuilder.push(output); } return screenColumn + value.length; }; this.renderIndentGuide = function(stringBuilder, value, max) { var cols = value.search(this.$indentGuideRe); if (cols <= 0 || cols >= max) return value; if (value[0] == " ") { cols -= cols % this.tabSize; stringBuilder.push(lang.stringRepeat(this.$tabStrings[" "], cols/this.tabSize)); return value.substr(cols); } else if (value[0] == "\t") { stringBuilder.push(lang.stringRepeat(this.$tabStrings["\t"], cols)); return value.substr(cols); } return value; }; this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) { var chars = 0; var split = 0; var splitChars = splits[0]; var screenColumn = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; var value = token.value; if (i == 0 && this.displayIndentGuides) { chars = value.length; value = this.renderIndentGuide(stringBuilder, value, splitChars); if (!value) continue; chars -= value.length; } if (chars + value.length < splitChars) { screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); chars += value.length; } else { while (chars + value.length >= splitChars) { screenColumn = this.$renderToken( stringBuilder, screenColumn, token, value.substring(0, splitChars - chars) ); value = value.substring(splitChars - chars); chars = splitChars; if (!onlyContents) { stringBuilder.push("
", "
" ); } split ++; screenColumn = 0; splitChars = splits[split] || Number.MAX_VALUE; } if (value.length != 0) { chars += value.length; screenColumn = this.$renderToken( stringBuilder, screenColumn, token, value ); } } } }; this.$renderSimpleLine = function(stringBuilder, tokens) { var screenColumn = 0; var token = tokens[0]; var value = token.value; if (this.displayIndentGuides) value = this.renderIndentGuide(stringBuilder, value); if (value) screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); for (var i = 1; i < tokens.length; i++) { token = tokens[i]; value = token.value; screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); } }; this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) { if (!foldLine && foldLine != false) foldLine = this.session.getFoldLine(row); if (foldLine) var tokens = this.$getFoldLineTokens(row, foldLine); else var tokens = this.session.getTokens(row); if (!onlyContents) { stringBuilder.push( "
" ); } if (tokens.length) { var splits = this.session.getRowSplitData(row); if (splits && splits.length) this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents); else this.$renderSimpleLine(stringBuilder, tokens); } if (this.showInvisibles) { if (foldLine) row = foldLine.end.row stringBuilder.push( "", row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR, "" ); } if (!onlyContents) stringBuilder.push("
"); }; this.$getFoldLineTokens = function(row, foldLine) { var session = this.session; var renderTokens = []; function addTokens(tokens, from, to) { var idx = 0, col = 0; while ((col + tokens[idx].value.length) < from) { col += tokens[idx].value.length; idx++; if (idx == tokens.length) return; } if (col != from) { var value = tokens[idx].value.substring(from - col); if (value.length > (to - from)) value = value.substring(0, to - from); renderTokens.push({ type: tokens[idx].type, value: value }); col = from + value.length; idx += 1; } while (col < to && idx < tokens.length) { var value = tokens[idx].value; if (value.length + col > to) { renderTokens.push({ type: tokens[idx].type, value: value.substring(0, to - col) }); } else renderTokens.push(tokens[idx]); col += value.length; idx += 1; } } var tokens = session.getTokens(row); foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) { if (placeholder != null) { renderTokens.push({ type: "fold", value: placeholder }); } else { if (isNewRow) tokens = session.getTokens(row); if (tokens.length) addTokens(tokens, lastColumn, column); } }, foldLine.end.row, this.session.getLine(foldLine.end.row).length); return renderTokens; }; this.$useLineGroups = function() { return this.session.getUseWrapMode(); }; this.destroy = function() { clearInterval(this.$pollSizeChangesTimer); if (this.$measureNode) this.$measureNode.parentNode.removeChild(this.$measureNode); delete this.$measureNode; }; }).call(Text.prototype); exports.Text = Text; }); ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var IE8; var Cursor = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_cursor-layer"; parentEl.appendChild(this.element); if (IE8 === undefined) IE8 = "opacity" in this.element; this.isVisible = false; this.isBlinking = true; this.blinkInterval = 1000; this.smoothBlinking = false; this.cursors = []; this.cursor = this.addCursor(); dom.addCssClass(this.element, "ace_hidden-cursors"); this.$updateCursors = this.$updateVisibility.bind(this); }; (function() { this.$updateVisibility = function(val) { var cursors = this.cursors; for (var i = cursors.length; i--; ) cursors[i].style.visibility = val ? "" : "hidden"; }; this.$updateOpacity = function(val) { var cursors = this.cursors; for (var i = cursors.length; i--; ) cursors[i].style.opacity = val ? "" : "0"; }; this.$padding = 0; this.setPadding = function(padding) { this.$padding = padding; }; this.setSession = function(session) { this.session = session; }; this.setBlinking = function(blinking) { if (blinking != this.isBlinking){ this.isBlinking = blinking; this.restartTimer(); } }; this.setBlinkInterval = function(blinkInterval) { if (blinkInterval != this.blinkInterval){ this.blinkInterval = blinkInterval; this.restartTimer(); } }; this.setSmoothBlinking = function(smoothBlinking) { if (smoothBlinking != this.smoothBlinking && !IE8) { this.smoothBlinking = smoothBlinking; dom.setCssClass(this.element, "ace_smooth-blinking", smoothBlinking); this.$updateCursors(true); this.$updateCursors = (smoothBlinking ? this.$updateOpacity : this.$updateVisibility).bind(this); this.restartTimer(); } }; this.addCursor = function() { var el = dom.createElement("div"); el.className = "ace_cursor"; this.element.appendChild(el); this.cursors.push(el); return el; }; this.removeCursor = function() { if (this.cursors.length > 1) { var el = this.cursors.pop(); el.parentNode.removeChild(el); return el; } }; this.hideCursor = function() { this.isVisible = false; dom.addCssClass(this.element, "ace_hidden-cursors"); this.restartTimer(); }; this.showCursor = function() { this.isVisible = true; dom.removeCssClass(this.element, "ace_hidden-cursors"); this.restartTimer(); }; this.restartTimer = function() { var update = this.$updateCursors; clearInterval(this.intervalId); clearTimeout(this.timeoutId); if (this.smoothBlinking) { dom.removeCssClass(this.element, "ace_smooth-blinking"); } update(true); if (!this.isBlinking || !this.blinkInterval || !this.isVisible) return; if (this.smoothBlinking) { setTimeout(function(){ dom.addCssClass(this.element, "ace_smooth-blinking"); }.bind(this)); } var blink = function(){ this.timeoutId = setTimeout(function() { update(false); }, 0.6 * this.blinkInterval); }.bind(this); this.intervalId = setInterval(function() { update(true); blink(); }, this.blinkInterval); blink(); }; this.getPixelPosition = function(position, onScreen) { if (!this.config || !this.session) return {left : 0, top : 0}; if (!position) position = this.session.selection.getCursor(); var pos = this.session.documentToScreenPosition(position); var cursorLeft = this.$padding + pos.column * this.config.characterWidth; var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * this.config.lineHeight; return {left : cursorLeft, top : cursorTop}; }; this.update = function(config) { this.config = config; var selections = this.session.$selectionMarkers; var i = 0, cursorIndex = 0; if (selections === undefined || selections.length === 0){ selections = [{cursor: null}]; } for (var i = 0, n = selections.length; i < n; i++) { var pixelPos = this.getPixelPosition(selections[i].cursor, true); if ((pixelPos.top > config.height + config.offset || pixelPos.top < 0) && i > 1) { continue; } var style = (this.cursors[cursorIndex++] || this.addCursor()).style; if (!this.drawCursor) { style.left = pixelPos.left + "px"; style.top = pixelPos.top + "px"; style.width = config.characterWidth + "px"; style.height = config.lineHeight + "px"; } else { this.drawCursor(style, pixelPos, config, selections[i], this.session); } } while (this.cursors.length > cursorIndex) this.removeCursor(); var overwrite = this.session.getOverwrite(); this.$setOverwrite(overwrite); this.$pixelPos = pixelPos; this.restartTimer(); }; this.drawCursor = null; this.$setOverwrite = function(overwrite) { if (overwrite != this.overwrite) { this.overwrite = overwrite; if (overwrite) dom.addCssClass(this.element, "ace_overwrite-cursors"); else dom.removeCssClass(this.element, "ace_overwrite-cursors"); } }; this.destroy = function() { clearInterval(this.intervalId); clearTimeout(this.timeoutId); }; }).call(Cursor.prototype); exports.Cursor = Cursor; }); ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var dom = require("./lib/dom"); var event = require("./lib/event"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var ScrollBar = function(parent) { this.element = dom.createElement("div"); this.element.className = "ace_scrollbar ace_scrollbar" + this.classSuffix; this.inner = dom.createElement("div"); this.inner.className = "ace_scrollbar-inner"; this.element.appendChild(this.inner); parent.appendChild(this.element); this.setVisible(false); this.skipEvent = false; event.addListener(this.element, "scroll", this.onScroll.bind(this)); event.addListener(this.element, "mousedown", event.preventDefault); }; (function() { oop.implement(this, EventEmitter); this.setVisible = function(isVisible) { this.element.style.display = isVisible ? "" : "none"; this.isVisible = isVisible; }; }).call(ScrollBar.prototype); var VScrollBar = function(parent, renderer) { ScrollBar.call(this, parent); this.scrollTop = 0; renderer.$scrollbarWidth = this.width = dom.scrollbarWidth(parent.ownerDocument); this.inner.style.width = this.element.style.width = (this.width || 15) + 5 + "px"; }; oop.inherits(VScrollBar, ScrollBar); (function() { this.classSuffix = '-v'; this.onScroll = function() { if (!this.skipEvent) { this.scrollTop = this.element.scrollTop; this._emit("scroll", {data: this.scrollTop}); } this.skipEvent = false; }; this.getWidth = function() { return this.isVisible ? this.width : 0; }; this.setHeight = function(height) { this.element.style.height = height + "px"; }; this.setInnerHeight = function(height) { this.inner.style.height = height + "px"; }; this.setScrollHeight = function(height) { this.inner.style.height = height + "px"; }; this.setScrollTop = function(scrollTop) { if (this.scrollTop != scrollTop) { this.skipEvent = true; this.scrollTop = this.element.scrollTop = scrollTop; } }; }).call(VScrollBar.prototype); var HScrollBar = function(parent, renderer) { ScrollBar.call(this, parent); this.scrollLeft = 0; this.height = renderer.$scrollbarWidth; this.inner.style.height = this.element.style.height = (this.height || 15) + 5 + "px"; }; oop.inherits(HScrollBar, ScrollBar); (function() { this.classSuffix = '-h'; this.onScroll = function() { if (!this.skipEvent) { this.scrollLeft = this.element.scrollLeft; this._emit("scroll", {data: this.scrollLeft}); } this.skipEvent = false; }; this.getHeight = function() { return this.isVisible ? this.height : 0; }; this.setWidth = function(width) { this.element.style.width = width + "px"; }; this.setInnerWidth = function(width) { this.inner.style.width = width + "px"; }; this.setScrollWidth = function(width) { this.inner.style.width = width + "px"; }; this.setScrollLeft = function(scrollLeft) { if (this.scrollLeft != scrollLeft) { this.skipEvent = true; this.scrollLeft = this.element.scrollLeft = scrollLeft; } }; }).call(HScrollBar.prototype); exports.ScrollBar = VScrollBar; // backward compatibility exports.ScrollBarV = VScrollBar; // backward compatibility exports.ScrollBarH = HScrollBar; // backward compatibility exports.VScrollBar = VScrollBar; exports.HScrollBar = HScrollBar; }); ace.define("ace/renderloop",["require","exports","module","ace/lib/event"], function(require, exports, module) { "use strict"; var event = require("./lib/event"); var RenderLoop = function(onRender, win) { this.onRender = onRender; this.pending = false; this.changes = 0; this.window = win || window; }; (function() { this.schedule = function(change) { this.changes = this.changes | change; if (!this.pending && this.changes) { this.pending = true; var _self = this; event.nextFrame(function() { _self.pending = false; var changes; while (changes = _self.changes) { _self.changes = 0; _self.onRender(changes); } }, this.window); } }; }).call(RenderLoop.prototype); exports.RenderLoop = RenderLoop; }); ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module) { var oop = require("../lib/oop"); var dom = require("../lib/dom"); var lang = require("../lib/lang"); var useragent = require("../lib/useragent"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var CHAR_COUNT = 0; var FontMetrics = exports.FontMetrics = function(parentEl, interval) { this.el = dom.createElement("div"); this.$setMeasureNodeStyles(this.el.style, true); this.$main = dom.createElement("div"); this.$setMeasureNodeStyles(this.$main.style); this.$measureNode = dom.createElement("div"); this.$setMeasureNodeStyles(this.$measureNode.style); this.el.appendChild(this.$main); this.el.appendChild(this.$measureNode); parentEl.appendChild(this.el); if (!CHAR_COUNT) this.$testFractionalRect(); this.$measureNode.innerHTML = lang.stringRepeat("X", CHAR_COUNT); this.$characterSize = {width: 0, height: 0}; this.checkForSizeChanges(); }; (function() { oop.implement(this, EventEmitter); this.$characterSize = {width: 0, height: 0}; this.$testFractionalRect = function() { var el = dom.createElement("div"); this.$setMeasureNodeStyles(el.style); el.style.width = "0.2px"; document.documentElement.appendChild(el); var w = el.getBoundingClientRect().width; if (w > 0 && w < 1) CHAR_COUNT = 50; else CHAR_COUNT = 100; el.parentNode.removeChild(el); }; this.$setMeasureNodeStyles = function(style, isRoot) { style.width = style.height = "auto"; style.left = style.top = "0px"; style.visibility = "hidden"; style.position = "absolute"; style.whiteSpace = "pre"; if (useragent.isIE < 8) { style["font-family"] = "inherit"; } else { style.font = "inherit"; } style.overflow = isRoot ? "hidden" : "visible"; }; this.checkForSizeChanges = function() { var size = this.$measureSizes(); if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) { this.$measureNode.style.fontWeight = "bold"; var boldSize = this.$measureSizes(); this.$measureNode.style.fontWeight = ""; this.$characterSize = size; this.charSizes = Object.create(null); this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height; this._emit("changeCharacterSize", {data: size}); } }; this.$pollSizeChanges = function() { if (this.$pollSizeChangesTimer) return this.$pollSizeChangesTimer; var self = this; return this.$pollSizeChangesTimer = setInterval(function() { self.checkForSizeChanges(); }, 500); }; this.setPolling = function(val) { if (val) { this.$pollSizeChanges(); } else { if (this.$pollSizeChangesTimer) this.$pollSizeChangesTimer; } }; this.$measureSizes = function() { if (CHAR_COUNT === 50) { var rect = null; try { rect = this.$measureNode.getBoundingClientRect(); } catch(e) { rect = {width: 0, height:0 }; }; var size = { height: rect.height, width: rect.width / CHAR_COUNT }; } else { var size = { height: this.$measureNode.clientHeight, width: this.$measureNode.clientWidth / CHAR_COUNT }; } if (size.width === 0 || size.height === 0) return null; return size; }; this.$measureCharWidth = function(ch) { this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT); var rect = this.$main.getBoundingClientRect(); return rect.width / CHAR_COUNT; }; this.getCharacterWidth = function(ch) { var w = this.charSizes[ch]; if (w === undefined) { this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width; } return w; }; this.destroy = function() { clearInterval(this.$pollSizeChangesTimer); if (this.el && this.el.parentNode) this.el.parentNode.removeChild(this.el); }; }).call(FontMetrics.prototype); }); ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var dom = require("./lib/dom"); var config = require("./config"); var useragent = require("./lib/useragent"); var GutterLayer = require("./layer/gutter").Gutter; var MarkerLayer = require("./layer/marker").Marker; var TextLayer = require("./layer/text").Text; var CursorLayer = require("./layer/cursor").Cursor; var HScrollBar = require("./scrollbar").HScrollBar; var VScrollBar = require("./scrollbar").VScrollBar; var RenderLoop = require("./renderloop").RenderLoop; var FontMetrics = require("./layer/font_metrics").FontMetrics; var EventEmitter = require("./lib/event_emitter").EventEmitter; var editorCss = ".ace_editor {\ position: relative;\ overflow: hidden;\ font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\ direction: ltr;\ }\ .ace_scroller {\ position: absolute;\ overflow: hidden;\ top: 0;\ bottom: 0;\ background-color: inherit;\ -ms-user-select: none;\ -moz-user-select: none;\ -webkit-user-select: none;\ user-select: none;\ cursor: text;\ }\ .ace_content {\ position: absolute;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ min-width: 100%;\ }\ .ace_dragging .ace_scroller:before{\ position: absolute;\ top: 0;\ left: 0;\ right: 0;\ bottom: 0;\ content: '';\ background: rgba(250, 250, 250, 0.01);\ z-index: 1000;\ }\ .ace_dragging.ace_dark .ace_scroller:before{\ background: rgba(0, 0, 0, 0.01);\ }\ .ace_selecting, .ace_selecting * {\ cursor: text !important;\ }\ .ace_gutter {\ position: absolute;\ overflow : hidden;\ width: auto;\ top: 0;\ bottom: 0;\ left: 0;\ cursor: default;\ z-index: 4;\ -ms-user-select: none;\ -moz-user-select: none;\ -webkit-user-select: none;\ user-select: none;\ }\ .ace_gutter-active-line {\ position: absolute;\ left: 0;\ right: 0;\ }\ .ace_scroller.ace_scroll-left {\ box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\ }\ .ace_gutter-cell {\ padding-left: 19px;\ padding-right: 6px;\ background-repeat: no-repeat;\ }\ .ace_gutter-cell.ace_error {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");\ background-repeat: no-repeat;\ background-position: 2px center;\ }\ .ace_gutter-cell.ace_warning {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");\ background-position: 2px center;\ }\ .ace_gutter-cell.ace_info {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");\ background-position: 2px center;\ }\ .ace_dark .ace_gutter-cell.ace_info {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");\ }\ .ace_scrollbar {\ position: absolute;\ right: 0;\ bottom: 0;\ z-index: 6;\ }\ .ace_scrollbar-inner {\ position: absolute;\ cursor: text;\ left: 0;\ top: 0;\ }\ .ace_scrollbar-v{\ overflow-x: hidden;\ overflow-y: scroll;\ top: 0;\ }\ .ace_scrollbar-h {\ overflow-x: scroll;\ overflow-y: hidden;\ left: 0;\ }\ .ace_print-margin {\ position: absolute;\ height: 100%;\ }\ .ace_text-input {\ position: absolute;\ z-index: 0;\ width: 0.5em;\ height: 1em;\ opacity: 0;\ background: transparent;\ -moz-appearance: none;\ appearance: none;\ border: none;\ resize: none;\ outline: none;\ overflow: hidden;\ font: inherit;\ padding: 0 1px;\ margin: 0 -1px;\ text-indent: -1em;\ -ms-user-select: text;\ -moz-user-select: text;\ -webkit-user-select: text;\ user-select: text;\ }\ .ace_text-input.ace_composition {\ background: inherit;\ color: inherit;\ z-index: 1000;\ opacity: 1;\ text-indent: 0;\ }\ .ace_layer {\ z-index: 1;\ position: absolute;\ overflow: hidden;\ white-space: pre;\ height: 100%;\ width: 100%;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ pointer-events: none;\ }\ .ace_gutter-layer {\ position: relative;\ width: auto;\ text-align: right;\ pointer-events: auto;\ }\ .ace_text-layer {\ font: inherit !important;\ }\ .ace_cjk {\ display: inline-block;\ text-align: center;\ }\ .ace_cursor-layer {\ z-index: 4;\ }\ .ace_cursor {\ z-index: 4;\ position: absolute;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ border-left: 2px solid\ }\ .ace_slim-cursors .ace_cursor {\ border-left-width: 1px;\ }\ .ace_overwrite-cursors .ace_cursor {\ border-left-width: 0;\ border-bottom: 1px solid;\ }\ .ace_hidden-cursors .ace_cursor {\ opacity: 0.2;\ }\ .ace_smooth-blinking .ace_cursor {\ -webkit-transition: opacity 0.18s;\ transition: opacity 0.18s;\ }\ .ace_editor.ace_multiselect .ace_cursor {\ border-left-width: 1px;\ }\ .ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\ position: absolute;\ z-index: 3;\ }\ .ace_marker-layer .ace_selection {\ position: absolute;\ z-index: 5;\ }\ .ace_marker-layer .ace_bracket {\ position: absolute;\ z-index: 6;\ }\ .ace_marker-layer .ace_active-line {\ position: absolute;\ z-index: 2;\ }\ .ace_marker-layer .ace_selected-word {\ position: absolute;\ z-index: 4;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ }\ .ace_line .ace_fold {\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ display: inline-block;\ height: 11px;\ margin-top: -2px;\ vertical-align: middle;\ background-image:\ url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\ url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");\ background-repeat: no-repeat, repeat-x;\ background-position: center center, top left;\ color: transparent;\ border: 1px solid black;\ border-radius: 2px;\ cursor: pointer;\ pointer-events: auto;\ }\ .ace_dark .ace_fold {\ }\ .ace_fold:hover{\ background-image:\ url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\ url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");\ }\ .ace_tooltip {\ background-color: #FFF;\ background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\ background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\ border: 1px solid gray;\ border-radius: 1px;\ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\ color: black;\ max-width: 100%;\ padding: 3px 4px;\ position: fixed;\ z-index: 999999;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ cursor: default;\ white-space: pre;\ word-wrap: break-word;\ line-height: normal;\ font-style: normal;\ font-weight: normal;\ letter-spacing: normal;\ pointer-events: none;\ }\ .ace_folding-enabled > .ace_gutter-cell {\ padding-right: 13px;\ }\ .ace_fold-widget {\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ margin: 0 -12px 0 1px;\ display: none;\ width: 11px;\ vertical-align: top;\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");\ background-repeat: no-repeat;\ background-position: center;\ border-radius: 3px;\ border: 1px solid transparent;\ cursor: pointer;\ }\ .ace_folding-enabled .ace_fold-widget {\ display: inline-block; \ }\ .ace_fold-widget.ace_end {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");\ }\ .ace_fold-widget.ace_closed {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");\ }\ .ace_fold-widget:hover {\ border: 1px solid rgba(0, 0, 0, 0.3);\ background-color: rgba(255, 255, 255, 0.2);\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\ }\ .ace_fold-widget:active {\ border: 1px solid rgba(0, 0, 0, 0.4);\ background-color: rgba(0, 0, 0, 0.05);\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\ }\ .ace_dark .ace_fold-widget {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\ }\ .ace_dark .ace_fold-widget.ace_end {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\ }\ .ace_dark .ace_fold-widget.ace_closed {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\ }\ .ace_dark .ace_fold-widget:hover {\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ background-color: rgba(255, 255, 255, 0.1);\ }\ .ace_dark .ace_fold-widget:active {\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ }\ .ace_fold-widget.ace_invalid {\ background-color: #FFB4B4;\ border-color: #DE5555;\ }\ .ace_fade-fold-widgets .ace_fold-widget {\ -webkit-transition: opacity 0.4s ease 0.05s;\ transition: opacity 0.4s ease 0.05s;\ opacity: 0;\ }\ .ace_fade-fold-widgets:hover .ace_fold-widget {\ -webkit-transition: opacity 0.05s ease 0.05s;\ transition: opacity 0.05s ease 0.05s;\ opacity:1;\ }\ .ace_underline {\ text-decoration: underline;\ }\ .ace_bold {\ font-weight: bold;\ }\ .ace_nobold .ace_bold {\ font-weight: normal;\ }\ .ace_italic {\ font-style: italic;\ }\ .ace_error-marker {\ background-color: rgba(255, 0, 0,0.2);\ position: absolute;\ z-index: 9;\ }\ .ace_highlight-marker {\ background-color: rgba(255, 255, 0,0.2);\ position: absolute;\ z-index: 8;\ }\ "; dom.importCssString(editorCss, "ace_editor"); var VirtualRenderer = function(container, theme) { var _self = this; this.container = container || dom.createElement("div"); this.$keepTextAreaAtCursor = !useragent.isOldIE; dom.addCssClass(this.container, "ace_editor"); this.setTheme(theme); this.$gutter = dom.createElement("div"); this.$gutter.className = "ace_gutter"; this.container.appendChild(this.$gutter); this.scroller = dom.createElement("div"); this.scroller.className = "ace_scroller"; this.container.appendChild(this.scroller); this.content = dom.createElement("div"); this.content.className = "ace_content"; this.scroller.appendChild(this.content); this.$gutterLayer = new GutterLayer(this.$gutter); this.$gutterLayer.on("changeGutterWidth", this.onGutterResize.bind(this)); this.$markerBack = new MarkerLayer(this.content); var textLayer = this.$textLayer = new TextLayer(this.content); this.canvas = textLayer.element; this.$markerFront = new MarkerLayer(this.content); this.$cursorLayer = new CursorLayer(this.content); this.$horizScroll = false; this.$vScroll = false; this.scrollBar = this.scrollBarV = new VScrollBar(this.container, this); this.scrollBarH = new HScrollBar(this.container, this); this.scrollBarV.addEventListener("scroll", function(e) { if (!_self.$scrollAnimation) _self.session.setScrollTop(e.data - _self.scrollMargin.top); }); this.scrollBarH.addEventListener("scroll", function(e) { if (!_self.$scrollAnimation) _self.session.setScrollLeft(e.data - _self.scrollMargin.left); }); this.scrollTop = 0; this.scrollLeft = 0; this.cursorPos = { row : 0, column : 0 }; this.$fontMetrics = new FontMetrics(this.container, 500); this.$textLayer.$setFontMetrics(this.$fontMetrics); this.$textLayer.addEventListener("changeCharacterSize", function(e) { _self.updateCharacterSize(); _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height); _self._signal("changeCharacterSize", e); }); this.$size = { width: 0, height: 0, scrollerHeight: 0, scrollerWidth: 0, $dirty: true }; this.layerConfig = { width : 1, padding : 0, firstRow : 0, firstRowScreen: 0, lastRow : 0, lineHeight : 0, characterWidth : 0, minHeight : 1, maxHeight : 1, offset : 0, height : 1, gutterOffset: 1 }; this.scrollMargin = { left: 0, right: 0, top: 0, bottom: 0, v: 0, h: 0 }; this.$loop = new RenderLoop( this.$renderChanges.bind(this), this.container.ownerDocument.defaultView ); this.$loop.schedule(this.CHANGE_FULL); this.updateCharacterSize(); this.setPadding(4); config.resetOptions(this); config._emit("renderer", this); }; (function() { this.CHANGE_CURSOR = 1; this.CHANGE_MARKER = 2; this.CHANGE_GUTTER = 4; this.CHANGE_SCROLL = 8; this.CHANGE_LINES = 16; this.CHANGE_TEXT = 32; this.CHANGE_SIZE = 64; this.CHANGE_MARKER_BACK = 128; this.CHANGE_MARKER_FRONT = 256; this.CHANGE_FULL = 512; this.CHANGE_H_SCROLL = 1024; oop.implement(this, EventEmitter); this.updateCharacterSize = function() { if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) { this.$allowBoldFonts = this.$textLayer.allowBoldFonts; this.setStyle("ace_nobold", !this.$allowBoldFonts); } this.layerConfig.characterWidth = this.characterWidth = this.$textLayer.getCharacterWidth(); this.layerConfig.lineHeight = this.lineHeight = this.$textLayer.getLineHeight(); this.$updatePrintMargin(); }; this.setSession = function(session) { if (this.session) this.session.doc.off("changeNewLineMode", this.onChangeNewLineMode); this.session = session; if (session && this.scrollMargin.top && session.getScrollTop() <= 0) session.setScrollTop(-this.scrollMargin.top); this.$cursorLayer.setSession(session); this.$markerBack.setSession(session); this.$markerFront.setSession(session); this.$gutterLayer.setSession(session); this.$textLayer.setSession(session); if (!session) return; this.$loop.schedule(this.CHANGE_FULL); this.session.$setFontMetrics(this.$fontMetrics); this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this); this.onChangeNewLineMode() this.session.doc.on("changeNewLineMode", this.onChangeNewLineMode); }; this.updateLines = function(firstRow, lastRow, force) { if (lastRow === undefined) lastRow = Infinity; if (!this.$changedLines) { this.$changedLines = { firstRow: firstRow, lastRow: lastRow }; } else { if (this.$changedLines.firstRow > firstRow) this.$changedLines.firstRow = firstRow; if (this.$changedLines.lastRow < lastRow) this.$changedLines.lastRow = lastRow; } if (this.$changedLines.lastRow < this.layerConfig.firstRow) { if (force) this.$changedLines.lastRow = this.layerConfig.lastRow; else return; } if (this.$changedLines.firstRow > this.layerConfig.lastRow) return; this.$loop.schedule(this.CHANGE_LINES); }; this.onChangeNewLineMode = function() { this.$loop.schedule(this.CHANGE_TEXT); this.$textLayer.$updateEolChar(); }; this.onChangeTabSize = function() { this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER); this.$textLayer.onChangeTabSize(); }; this.updateText = function() { this.$loop.schedule(this.CHANGE_TEXT); }; this.updateFull = function(force) { if (force) this.$renderChanges(this.CHANGE_FULL, true); else this.$loop.schedule(this.CHANGE_FULL); }; this.updateFontSize = function() { this.$textLayer.checkForSizeChanges(); }; this.$changes = 0; this.$updateSizeAsync = function() { if (this.$loop.pending) this.$size.$dirty = true; else this.onResize(); }; this.onResize = function(force, gutterWidth, width, height) { if (this.resizing > 2) return; else if (this.resizing > 0) this.resizing++; else this.resizing = force ? 1 : 0; var el = this.container; if (!height) height = el.clientHeight || el.scrollHeight; if (!width) width = el.clientWidth || el.scrollWidth; var changes = this.$updateCachedSize(force, gutterWidth, width, height); if (!this.$size.scrollerHeight || (!width && !height)) return this.resizing = 0; if (force) this.$gutterLayer.$padding = null; if (force) this.$renderChanges(changes | this.$changes, true); else this.$loop.schedule(changes | this.$changes); if (this.resizing) this.resizing = 0; this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null; }; this.$updateCachedSize = function(force, gutterWidth, width, height) { height -= (this.$extraHeight || 0); var changes = 0; var size = this.$size; var oldSize = { width: size.width, height: size.height, scrollerHeight: size.scrollerHeight, scrollerWidth: size.scrollerWidth }; if (height && (force || size.height != height)) { size.height = height; changes |= this.CHANGE_SIZE; size.scrollerHeight = size.height; if (this.$horizScroll) size.scrollerHeight -= this.scrollBarH.getHeight(); this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + "px"; changes = changes | this.CHANGE_SCROLL; } if (width && (force || size.width != width)) { changes |= this.CHANGE_SIZE; size.width = width; if (gutterWidth == null) gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; this.gutterWidth = gutterWidth; this.scrollBarH.element.style.left = this.scroller.style.left = gutterWidth + "px"; size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); this.scrollBarH.element.style.right = this.scroller.style.right = this.scrollBarV.getWidth() + "px"; this.scroller.style.bottom = this.scrollBarH.getHeight() + "px"; if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) changes |= this.CHANGE_FULL; } size.$dirty = !width || !height; if (changes) this._signal("resize", oldSize); return changes; }; this.onGutterResize = function() { var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; if (gutterWidth != this.gutterWidth) this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height); if (this.session.getUseWrapMode() && this.adjustWrapLimit()) { this.$loop.schedule(this.CHANGE_FULL); } else if (this.$size.$dirty) { this.$loop.schedule(this.CHANGE_FULL); } else { this.$computeLayerConfig(); this.$loop.schedule(this.CHANGE_MARKER); } }; this.adjustWrapLimit = function() { var availableWidth = this.$size.scrollerWidth - this.$padding * 2; var limit = Math.floor(availableWidth / this.characterWidth); return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn); }; this.setAnimatedScroll = function(shouldAnimate){ this.setOption("animatedScroll", shouldAnimate); }; this.getAnimatedScroll = function() { return this.$animatedScroll; }; this.setShowInvisibles = function(showInvisibles) { this.setOption("showInvisibles", showInvisibles); }; this.getShowInvisibles = function() { return this.getOption("showInvisibles"); }; this.getDisplayIndentGuides = function() { return this.getOption("displayIndentGuides"); }; this.setDisplayIndentGuides = function(display) { this.setOption("displayIndentGuides", display); }; this.setShowPrintMargin = function(showPrintMargin) { this.setOption("showPrintMargin", showPrintMargin); }; this.getShowPrintMargin = function() { return this.getOption("showPrintMargin"); }; this.setPrintMarginColumn = function(showPrintMargin) { this.setOption("printMarginColumn", showPrintMargin); }; this.getPrintMarginColumn = function() { return this.getOption("printMarginColumn"); }; this.getShowGutter = function(){ return this.getOption("showGutter"); }; this.setShowGutter = function(show){ return this.setOption("showGutter", show); }; this.getFadeFoldWidgets = function(){ return this.getOption("fadeFoldWidgets") }; this.setFadeFoldWidgets = function(show) { this.setOption("fadeFoldWidgets", show); }; this.setHighlightGutterLine = function(shouldHighlight) { this.setOption("highlightGutterLine", shouldHighlight); }; this.getHighlightGutterLine = function() { return this.getOption("highlightGutterLine"); }; this.$updateGutterLineHighlight = function() { var pos = this.$cursorLayer.$pixelPos; var height = this.layerConfig.lineHeight; if (this.session.getUseWrapMode()) { var cursor = this.session.selection.getCursor(); cursor.column = 0; pos = this.$cursorLayer.getPixelPosition(cursor, true); height *= this.session.getRowLength(cursor.row); } this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + "px"; this.$gutterLineHighlight.style.height = height + "px"; }; this.$updatePrintMargin = function() { if (!this.$showPrintMargin && !this.$printMarginEl) return; if (!this.$printMarginEl) { var containerEl = dom.createElement("div"); containerEl.className = "ace_layer ace_print-margin-layer"; this.$printMarginEl = dom.createElement("div"); this.$printMarginEl.className = "ace_print-margin"; containerEl.appendChild(this.$printMarginEl); this.content.insertBefore(containerEl, this.content.firstChild); } var style = this.$printMarginEl.style; style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px"; style.visibility = this.$showPrintMargin ? "visible" : "hidden"; if (this.session && this.session.$wrap == -1) this.adjustWrapLimit(); }; this.getContainerElement = function() { return this.container; }; this.getMouseEventTarget = function() { return this.content; }; this.getTextAreaContainer = function() { return this.container; }; this.$moveTextAreaToCursor = function() { if (!this.$keepTextAreaAtCursor) return; var config = this.layerConfig; var posTop = this.$cursorLayer.$pixelPos.top; var posLeft = this.$cursorLayer.$pixelPos.left; posTop -= config.offset; var style = this.textarea.style; var h = this.lineHeight; if (posTop < 0 || posTop > config.height - h) { style.top = style.left = "0"; return; } var w = this.characterWidth; if (this.$composition) { var val = this.textarea.value.replace(/^\x01+/, ""); w *= (this.session.$getStringScreenWidth(val)[0]+2); h += 2; } posLeft -= this.scrollLeft; if (posLeft > this.$size.scrollerWidth - w) posLeft = this.$size.scrollerWidth - w; posLeft += this.gutterWidth; style.height = h + "px"; style.width = w + "px"; style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + "px"; style.top = Math.min(posTop, this.$size.height - h) + "px"; }; this.getFirstVisibleRow = function() { return this.layerConfig.firstRow; }; this.getFirstFullyVisibleRow = function() { return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); }; this.getLastFullyVisibleRow = function() { var flint = Math.floor((this.layerConfig.height + this.layerConfig.offset) / this.layerConfig.lineHeight); return this.layerConfig.firstRow - 1 + flint; }; this.getLastVisibleRow = function() { return this.layerConfig.lastRow; }; this.$padding = null; this.setPadding = function(padding) { this.$padding = padding; this.$textLayer.setPadding(padding); this.$cursorLayer.setPadding(padding); this.$markerFront.setPadding(padding); this.$markerBack.setPadding(padding); this.$loop.schedule(this.CHANGE_FULL); this.$updatePrintMargin(); }; this.setScrollMargin = function(top, bottom, left, right) { var sm = this.scrollMargin; sm.top = top|0; sm.bottom = bottom|0; sm.right = right|0; sm.left = left|0; sm.v = sm.top + sm.bottom; sm.h = sm.left + sm.right; if (sm.top && this.scrollTop <= 0 && this.session) this.session.setScrollTop(-sm.top); this.updateFull(); }; this.getHScrollBarAlwaysVisible = function() { return this.$hScrollBarAlwaysVisible; }; this.setHScrollBarAlwaysVisible = function(alwaysVisible) { this.setOption("hScrollBarAlwaysVisible", alwaysVisible); }; this.getVScrollBarAlwaysVisible = function() { return this.$hScrollBarAlwaysVisible; }; this.setVScrollBarAlwaysVisible = function(alwaysVisible) { this.setOption("vScrollBarAlwaysVisible", alwaysVisible); }; this.$updateScrollBarV = function() { var scrollHeight = this.layerConfig.maxHeight; var scrollerHeight = this.$size.scrollerHeight; if (!this.$maxLines && this.$scrollPastEnd) { scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd; if (this.scrollTop > scrollHeight - scrollerHeight) { scrollHeight = this.scrollTop + scrollerHeight; this.scrollBarV.scrollTop = null; } } this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v); this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top); }; this.$updateScrollBarH = function() { this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h); this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left); }; this.$frozen = false; this.freeze = function() { this.$frozen = true; }; this.unfreeze = function() { this.$frozen = false; }; this.$renderChanges = function(changes, force) { if (this.$changes) { changes |= this.$changes; this.$changes = 0; } if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) { this.$changes |= changes; return; } if (this.$size.$dirty) { this.$changes |= changes; return this.onResize(true); } if (!this.lineHeight) { this.$textLayer.checkForSizeChanges(); } this._signal("beforeRender"); var config = this.layerConfig; if (changes & this.CHANGE_FULL || changes & this.CHANGE_SIZE || changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES || changes & this.CHANGE_SCROLL || changes & this.CHANGE_H_SCROLL ) { changes |= this.$computeLayerConfig(); if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) { var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight; if (st > 0) { this.scrollTop = st; changes = changes | this.CHANGE_SCROLL; changes |= this.$computeLayerConfig(); } } config = this.layerConfig; this.$updateScrollBarV(); if (changes & this.CHANGE_H_SCROLL) this.$updateScrollBarH(); this.$gutterLayer.element.style.marginTop = (-config.offset) + "px"; this.content.style.marginTop = (-config.offset) + "px"; this.content.style.width = config.width + 2 * this.$padding + "px"; this.content.style.height = config.minHeight + "px"; } if (changes & this.CHANGE_H_SCROLL) { this.content.style.marginLeft = -this.scrollLeft + "px"; this.scroller.className = this.scrollLeft <= 0 ? "ace_scroller" : "ace_scroller ace_scroll-left"; } if (changes & this.CHANGE_FULL) { this.$textLayer.update(config); if (this.$showGutter) this.$gutterLayer.update(config); this.$markerBack.update(config); this.$markerFront.update(config); this.$cursorLayer.update(config); this.$moveTextAreaToCursor(); this.$highlightGutterLine && this.$updateGutterLineHighlight(); this._signal("afterRender"); return; } if (changes & this.CHANGE_SCROLL) { if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) this.$textLayer.update(config); else this.$textLayer.scrollLines(config); if (this.$showGutter) this.$gutterLayer.update(config); this.$markerBack.update(config); this.$markerFront.update(config); this.$cursorLayer.update(config); this.$highlightGutterLine && this.$updateGutterLineHighlight(); this.$moveTextAreaToCursor(); this._signal("afterRender"); return; } if (changes & this.CHANGE_TEXT) { this.$textLayer.update(config); if (this.$showGutter) this.$gutterLayer.update(config); } else if (changes & this.CHANGE_LINES) { if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter) this.$gutterLayer.update(config); } else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) { if (this.$showGutter) this.$gutterLayer.update(config); } if (changes & this.CHANGE_CURSOR) { this.$cursorLayer.update(config); this.$moveTextAreaToCursor(); this.$highlightGutterLine && this.$updateGutterLineHighlight(); } if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) { this.$markerFront.update(config); } if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) { this.$markerBack.update(config); } this._signal("afterRender"); }; this.$autosize = function() { var height = this.session.getScreenLength() * this.lineHeight; var maxHeight = this.$maxLines * this.lineHeight; var desiredHeight = Math.max( (this.$minLines||1) * this.lineHeight, Math.min(maxHeight, height) ) + this.scrollMargin.v + (this.$extraHeight || 0); var vScroll = height > maxHeight; if (desiredHeight != this.desiredHeight || this.$size.height != this.desiredHeight || vScroll != this.$vScroll) { if (vScroll != this.$vScroll) { this.$vScroll = vScroll; this.scrollBarV.setVisible(vScroll); } var w = this.container.clientWidth; this.container.style.height = desiredHeight + "px"; this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight); this.desiredHeight = desiredHeight; this._signal("autosize"); } }; this.$computeLayerConfig = function() { if (this.$maxLines && this.lineHeight > 1) this.$autosize(); var session = this.session; var size = this.$size; var hideScrollbars = size.height <= 2 * this.lineHeight; var screenLines = this.session.getScreenLength(); var maxHeight = screenLines * this.lineHeight; var offset = this.scrollTop % this.lineHeight; var minHeight = size.scrollerHeight + this.lineHeight; var longestLine = this.$getLongestLine(); var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || size.scrollerWidth - longestLine - 2 * this.$padding < 0); var hScrollChanged = this.$horizScroll !== horizScroll; if (hScrollChanged) { this.$horizScroll = horizScroll; this.scrollBarH.setVisible(horizScroll); } var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd : 0; maxHeight += scrollPastEnd; this.session.setScrollTop(Math.max(-this.scrollMargin.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + this.scrollMargin.bottom))); this.session.setScrollLeft(Math.max(-this.scrollMargin.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + this.scrollMargin.right))); var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop); var vScrollChanged = this.$vScroll !== vScroll; if (vScrollChanged) { this.$vScroll = vScroll; this.scrollBarV.setVisible(vScroll); } var lineCount = Math.ceil(minHeight / this.lineHeight) - 1; var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight)); var lastRow = firstRow + lineCount; var firstRowScreen, firstRowHeight; var lineHeight = this.lineHeight; firstRow = session.screenToDocumentRow(firstRow, 0); var foldLine = session.getFoldLine(firstRow); if (foldLine) { firstRow = foldLine.start.row; } firstRowScreen = session.documentToScreenRow(firstRow, 0); firstRowHeight = session.getRowLength(firstRow) * lineHeight; lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1); minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight + firstRowHeight; offset = this.scrollTop - firstRowScreen * lineHeight; var changes = 0; if (this.layerConfig.width != longestLine) changes = this.CHANGE_H_SCROLL; if (hScrollChanged || vScrollChanged) { changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height); this._signal("scrollbarVisibilityChanged"); if (vScrollChanged) longestLine = this.$getLongestLine(); } this.layerConfig = { width : longestLine, padding : this.$padding, firstRow : firstRow, firstRowScreen: firstRowScreen, lastRow : lastRow, lineHeight : lineHeight, characterWidth : this.characterWidth, minHeight : minHeight, maxHeight : maxHeight, offset : offset, gutterOffset : Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)), height : this.$size.scrollerHeight }; return changes; }; this.$updateLines = function() { var firstRow = this.$changedLines.firstRow; var lastRow = this.$changedLines.lastRow; this.$changedLines = null; var layerConfig = this.layerConfig; if (firstRow > layerConfig.lastRow + 1) { return; } if (lastRow < layerConfig.firstRow) { return; } if (lastRow === Infinity) { if (this.$showGutter) this.$gutterLayer.update(layerConfig); this.$textLayer.update(layerConfig); return; } this.$textLayer.updateLines(layerConfig, firstRow, lastRow); return true; }; this.$getLongestLine = function() { var charCount = this.session.getScreenWidth(); if (this.showInvisibles && !this.session.$useWrapMode) charCount += 1; return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth)); }; this.updateFrontMarkers = function() { this.$markerFront.setMarkers(this.session.getMarkers(true)); this.$loop.schedule(this.CHANGE_MARKER_FRONT); }; this.updateBackMarkers = function() { this.$markerBack.setMarkers(this.session.getMarkers()); this.$loop.schedule(this.CHANGE_MARKER_BACK); }; this.addGutterDecoration = function(row, className){ this.$gutterLayer.addGutterDecoration(row, className); }; this.removeGutterDecoration = function(row, className){ this.$gutterLayer.removeGutterDecoration(row, className); }; this.updateBreakpoints = function(rows) { this.$loop.schedule(this.CHANGE_GUTTER); }; this.setAnnotations = function(annotations) { this.$gutterLayer.setAnnotations(annotations); this.$loop.schedule(this.CHANGE_GUTTER); }; this.updateCursor = function() { this.$loop.schedule(this.CHANGE_CURSOR); }; this.hideCursor = function() { this.$cursorLayer.hideCursor(); }; this.showCursor = function() { this.$cursorLayer.showCursor(); }; this.scrollSelectionIntoView = function(anchor, lead, offset) { this.scrollCursorIntoView(anchor, offset); this.scrollCursorIntoView(lead, offset); }; this.scrollCursorIntoView = function(cursor, offset, $viewMargin) { if (this.$size.scrollerHeight === 0) return; var pos = this.$cursorLayer.getPixelPosition(cursor); var left = pos.left; var top = pos.top; var topMargin = $viewMargin && $viewMargin.top || 0; var bottomMargin = $viewMargin && $viewMargin.bottom || 0; var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop; if (scrollTop + topMargin > top) { if (offset) top -= offset * this.$size.scrollerHeight; if (top === 0) top = -this.scrollMargin.top; this.session.setScrollTop(top); } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) { if (offset) top += offset * this.$size.scrollerHeight; this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight); } var scrollLeft = this.scrollLeft; if (scrollLeft > left) { if (left < this.$padding + 2 * this.layerConfig.characterWidth) left = -this.scrollMargin.left; this.session.setScrollLeft(left); } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) { this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth)); } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) { this.session.setScrollLeft(0); } }; this.getScrollTop = function() { return this.session.getScrollTop(); }; this.getScrollLeft = function() { return this.session.getScrollLeft(); }; this.getScrollTopRow = function() { return this.scrollTop / this.lineHeight; }; this.getScrollBottomRow = function() { return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1); }; this.scrollToRow = function(row) { this.session.setScrollTop(row * this.lineHeight); }; this.alignCursor = function(cursor, alignment) { if (typeof cursor == "number") cursor = {row: cursor, column: 0}; var pos = this.$cursorLayer.getPixelPosition(cursor); var h = this.$size.scrollerHeight - this.lineHeight; var offset = pos.top - h * (alignment || 0); this.session.setScrollTop(offset); return offset; }; this.STEPS = 8; this.$calcSteps = function(fromValue, toValue){ var i = 0; var l = this.STEPS; var steps = []; var func = function(t, x_min, dx) { return dx * (Math.pow(t - 1, 3) + 1) + x_min; }; for (i = 0; i < l; ++i) steps.push(func(i / this.STEPS, fromValue, toValue - fromValue)); return steps; }; this.scrollToLine = function(line, center, animate, callback) { var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0}); var offset = pos.top; if (center) offset -= this.$size.scrollerHeight / 2; var initialScroll = this.scrollTop; this.session.setScrollTop(offset); if (animate !== false) this.animateScrolling(initialScroll, callback); }; this.animateScrolling = function(fromValue, callback) { var toValue = this.scrollTop; if (!this.$animatedScroll) return; var _self = this; if (fromValue == toValue) return; if (this.$scrollAnimation) { var oldSteps = this.$scrollAnimation.steps; if (oldSteps.length) { fromValue = oldSteps[0]; if (fromValue == toValue) return; } } var steps = _self.$calcSteps(fromValue, toValue); this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps}; clearInterval(this.$timer); _self.session.setScrollTop(steps.shift()); _self.session.$scrollTop = toValue; this.$timer = setInterval(function() { if (steps.length) { _self.session.setScrollTop(steps.shift()); _self.session.$scrollTop = toValue; } else if (toValue != null) { _self.session.$scrollTop = -1; _self.session.setScrollTop(toValue); toValue = null; } else { _self.$timer = clearInterval(_self.$timer); _self.$scrollAnimation = null; callback && callback(); } }, 10); }; this.scrollToY = function(scrollTop) { if (this.scrollTop !== scrollTop) { this.$loop.schedule(this.CHANGE_SCROLL); this.scrollTop = scrollTop; } }; this.scrollToX = function(scrollLeft) { if (this.scrollLeft !== scrollLeft) this.scrollLeft = scrollLeft; this.$loop.schedule(this.CHANGE_H_SCROLL); }; this.scrollTo = function(x, y) { this.session.setScrollTop(y); this.session.setScrollLeft(y); }; this.scrollBy = function(deltaX, deltaY) { deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY); deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX); }; this.isScrollableBy = function(deltaX, deltaY) { if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top) return true; if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom) return true; if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left) return true; if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth - this.layerConfig.width < -1 + this.scrollMargin.right) return true; }; this.pixelToScreenCoordinates = function(x, y) { var canvasPos = this.scroller.getBoundingClientRect(); var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth; var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); var col = Math.round(offset); return {row: row, column: col, side: offset - col > 0 ? 1 : -1}; }; this.screenToTextCoordinates = function(x, y) { var canvasPos = this.scroller.getBoundingClientRect(); var col = Math.round( (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth ); var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight; return this.session.screenToDocumentPosition(row, Math.max(col, 0)); }; this.textToScreenCoordinates = function(row, column) { var canvasPos = this.scroller.getBoundingClientRect(); var pos = this.session.documentToScreenPosition(row, column); var x = this.$padding + Math.round(pos.column * this.characterWidth); var y = pos.row * this.lineHeight; return { pageX: canvasPos.left + x - this.scrollLeft, pageY: canvasPos.top + y - this.scrollTop }; }; this.visualizeFocus = function() { dom.addCssClass(this.container, "ace_focus"); }; this.visualizeBlur = function() { dom.removeCssClass(this.container, "ace_focus"); }; this.showComposition = function(position) { if (!this.$composition) this.$composition = { keepTextAreaAtCursor: this.$keepTextAreaAtCursor, cssText: this.textarea.style.cssText }; this.$keepTextAreaAtCursor = true; dom.addCssClass(this.textarea, "ace_composition"); this.textarea.style.cssText = ""; this.$moveTextAreaToCursor(); }; this.setCompositionText = function(text) { this.$moveTextAreaToCursor(); }; this.hideComposition = function() { if (!this.$composition) return; dom.removeCssClass(this.textarea, "ace_composition"); this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor; this.textarea.style.cssText = this.$composition.cssText; this.$composition = null; }; this.setTheme = function(theme, cb) { var _self = this; this.$themeId = theme; _self._dispatchEvent('themeChange',{theme:theme}); if (!theme || typeof theme == "string") { var moduleName = theme || this.$options.theme.initialValue; config.loadModule(["theme", moduleName], afterLoad); } else { afterLoad(theme); } function afterLoad(module) { if (_self.$themeId != theme) return cb && cb(); if (!module.cssClass) return; dom.importCssString( module.cssText, module.cssClass, _self.container.ownerDocument ); if (_self.theme) dom.removeCssClass(_self.container, _self.theme.cssClass); var padding = "padding" in module ? module.padding : "padding" in (_self.theme || {}) ? 4 : _self.$padding; if (_self.$padding && padding != _self.$padding) _self.setPadding(padding); _self.$theme = module.cssClass; _self.theme = module; dom.addCssClass(_self.container, module.cssClass); dom.setCssClass(_self.container, "ace_dark", module.isDark); if (_self.$size) { _self.$size.width = 0; _self.$updateSizeAsync(); } _self._dispatchEvent('themeLoaded', {theme:module}); cb && cb(); } }; this.getTheme = function() { return this.$themeId; }; this.setStyle = function(style, include) { dom.setCssClass(this.container, style, include !== false); }; this.unsetStyle = function(style) { dom.removeCssClass(this.container, style); }; this.setCursorStyle = function(style) { if (this.scroller.style.cursor != style) this.scroller.style.cursor = style; }; this.setMouseCursor = function(cursorStyle) { this.scroller.style.cursor = cursorStyle; }; this.destroy = function() { this.$textLayer.destroy(); this.$cursorLayer.destroy(); }; }).call(VirtualRenderer.prototype); config.defineOptions(VirtualRenderer.prototype, "renderer", { animatedScroll: {initialValue: false}, showInvisibles: { set: function(value) { if (this.$textLayer.setShowInvisibles(value)) this.$loop.schedule(this.CHANGE_TEXT); }, initialValue: false }, showPrintMargin: { set: function() { this.$updatePrintMargin(); }, initialValue: true }, printMarginColumn: { set: function() { this.$updatePrintMargin(); }, initialValue: 80 }, printMargin: { set: function(val) { if (typeof val == "number") this.$printMarginColumn = val; this.$showPrintMargin = !!val; this.$updatePrintMargin(); }, get: function() { return this.$showPrintMargin && this.$printMarginColumn; } }, showGutter: { set: function(show){ this.$gutter.style.display = show ? "block" : "none"; this.$loop.schedule(this.CHANGE_FULL); this.onGutterResize(); }, initialValue: true }, fadeFoldWidgets: { set: function(show) { dom.setCssClass(this.$gutter, "ace_fade-fold-widgets", show); }, initialValue: false }, showFoldWidgets: { set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)}, initialValue: true }, showLineNumbers: { set: function(show) { this.$gutterLayer.setShowLineNumbers(show); this.$loop.schedule(this.CHANGE_GUTTER); }, initialValue: true }, displayIndentGuides: { set: function(show) { if (this.$textLayer.setDisplayIndentGuides(show)) this.$loop.schedule(this.CHANGE_TEXT); }, initialValue: true }, highlightGutterLine: { set: function(shouldHighlight) { if (!this.$gutterLineHighlight) { this.$gutterLineHighlight = dom.createElement("div"); this.$gutterLineHighlight.className = "ace_gutter-active-line"; this.$gutter.appendChild(this.$gutterLineHighlight); return; } this.$gutterLineHighlight.style.display = shouldHighlight ? "" : "none"; if (this.$cursorLayer.$pixelPos) this.$updateGutterLineHighlight(); }, initialValue: false, value: true }, hScrollBarAlwaysVisible: { set: function(val) { if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) this.$loop.schedule(this.CHANGE_SCROLL); }, initialValue: false }, vScrollBarAlwaysVisible: { set: function(val) { if (!this.$vScrollBarAlwaysVisible || !this.$vScroll) this.$loop.schedule(this.CHANGE_SCROLL); }, initialValue: false }, fontSize: { set: function(size) { if (typeof size == "number") size = size + "px"; this.container.style.fontSize = size; this.updateFontSize(); }, initialValue: 12 }, fontFamily: { set: function(name) { this.container.style.fontFamily = name; this.updateFontSize(); } }, maxLines: { set: function(val) { this.updateFull(); } }, minLines: { set: function(val) { this.updateFull(); } }, scrollPastEnd: { set: function(val) { val = +val || 0; if (this.$scrollPastEnd == val) return; this.$scrollPastEnd = val; this.$loop.schedule(this.CHANGE_SCROLL); }, initialValue: 0, handlesSet: true }, fixedWidthGutter: { set: function(val) { this.$gutterLayer.$fixedWidth = !!val; this.$loop.schedule(this.CHANGE_GUTTER); } }, theme: { set: function(val) { this.setTheme(val) }, get: function() { return this.$themeId || this.theme; }, initialValue: "./theme/textmate", handlesSet: true } }); exports.VirtualRenderer = VirtualRenderer; }); ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var net = require("../lib/net"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var config = require("../config"); var WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) { this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); this.changeListener = this.changeListener.bind(this); this.onMessage = this.onMessage.bind(this); if (require.nameToUrl && !require.toUrl) require.toUrl = require.nameToUrl; if (config.get("packaged") || !require.toUrl) { workerUrl = workerUrl || config.moduleUrl(mod, "worker"); } else { var normalizePath = this.$normalizePath; workerUrl = workerUrl || normalizePath(require.toUrl("ace/worker/worker.js", null, "_")); var tlns = {}; topLevelNamespaces.forEach(function(ns) { tlns[ns] = normalizePath(require.toUrl(ns, null, "_").replace(/(\.js)?(\?.*)?$/, "")); }); } try { this.$worker = new Worker(workerUrl); } catch(e) { if (e instanceof window.DOMException) { var blob = this.$workerBlob(workerUrl); var URL = window.URL || window.webkitURL; var blobURL = URL.createObjectURL(blob); this.$worker = new Worker(blobURL); URL.revokeObjectURL(blobURL); } else { throw e; } } this.$worker.postMessage({ init : true, tlns : tlns, module : mod, classname : classname }); this.callbackId = 1; this.callbacks = {}; this.$worker.onmessage = this.onMessage; }; (function(){ oop.implement(this, EventEmitter); this.onMessage = function(e) { var msg = e.data; switch(msg.type) { case "event": this._signal(msg.name, {data: msg.data}); break; case "call": var callback = this.callbacks[msg.id]; if (callback) { callback(msg.data); delete this.callbacks[msg.id]; } break; case "error": this.reportError(msg.data); break; case "log": window.console && console.log && console.log.apply(console, msg.data); break; } }; this.reportError = function(err) { window.console && console.error && console.error(err); }; this.$normalizePath = function(path) { return net.qualifyURL(path); }; this.terminate = function() { this._signal("terminate", {}); this.deltaQueue = null; this.$worker.terminate(); this.$worker = null; if (this.$doc) this.$doc.off("change", this.changeListener); this.$doc = null; }; this.send = function(cmd, args) { this.$worker.postMessage({command: cmd, args: args}); }; this.call = function(cmd, args, callback) { if (callback) { var id = this.callbackId++; this.callbacks[id] = callback; args.push(id); } this.send(cmd, args); }; this.emit = function(event, data) { try { this.$worker.postMessage({event: event, data: {data: data.data}}); } catch(ex) { console.error(ex.stack); } }; this.attachToDocument = function(doc) { if(this.$doc) this.terminate(); this.$doc = doc; this.call("setValue", [doc.getValue()]); doc.on("change", this.changeListener); }; this.changeListener = function(e) { if (!this.deltaQueue) { this.deltaQueue = [e.data]; setTimeout(this.$sendDeltaQueue, 0); } else this.deltaQueue.push(e.data); }; this.$sendDeltaQueue = function() { var q = this.deltaQueue; if (!q) return; this.deltaQueue = null; if (q.length > 20 && q.length > this.$doc.getLength() >> 1) { this.call("setValue", [this.$doc.getValue()]); } else this.emit("change", {data: q}); }; this.$workerBlob = function(workerUrl) { var script = "importScripts('" + net.qualifyURL(workerUrl) + "');"; try { return new Blob([script], {"type": "application/javascript"}); } catch (e) { // Backwards-compatibility var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; var blobBuilder = new BlobBuilder(); blobBuilder.append(script); return blobBuilder.getBlob("application/javascript"); } }; }).call(WorkerClient.prototype); var UIWorkerClient = function(topLevelNamespaces, mod, classname) { this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); this.changeListener = this.changeListener.bind(this); this.callbackId = 1; this.callbacks = {}; this.messageBuffer = []; var main = null; var emitSync = false; var sender = Object.create(EventEmitter); var _self = this; this.$worker = {}; this.$worker.terminate = function() {}; this.$worker.postMessage = function(e) { _self.messageBuffer.push(e); if (main) { if (emitSync) setTimeout(processNext); else processNext(); } }; this.setEmitSync = function(val) { emitSync = val }; var processNext = function() { var msg = _self.messageBuffer.shift(); if (msg.command) main[msg.command].apply(main, msg.args); else if (msg.event) sender._signal(msg.event, msg.data); }; sender.postMessage = function(msg) { _self.onMessage({data: msg}); }; sender.callback = function(data, callbackId) { this.postMessage({type: "call", id: callbackId, data: data}); }; sender.emit = function(name, data) { this.postMessage({type: "event", name: name, data: data}); }; config.loadModule(["worker", mod], function(Main) { main = new Main[classname](sender); while (_self.messageBuffer.length) processNext(); }); }; UIWorkerClient.prototype = WorkerClient.prototype; exports.UIWorkerClient = UIWorkerClient; exports.WorkerClient = WorkerClient; }); ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"], function(require, exports, module) { "use strict"; var Range = require("./range").Range; var EventEmitter = require("./lib/event_emitter").EventEmitter; var oop = require("./lib/oop"); var PlaceHolder = function(session, length, pos, others, mainClass, othersClass) { var _self = this; this.length = length; this.session = session; this.doc = session.getDocument(); this.mainClass = mainClass; this.othersClass = othersClass; this.$onUpdate = this.onUpdate.bind(this); this.doc.on("change", this.$onUpdate); this.$others = others; this.$onCursorChange = function() { setTimeout(function() { _self.onCursorChange(); }); }; this.$pos = pos; var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1}; this.$undoStackDepth = undoStack.length; this.setup(); session.selection.on("changeCursor", this.$onCursorChange); }; (function() { oop.implement(this, EventEmitter); this.setup = function() { var _self = this; var doc = this.doc; var session = this.session; var pos = this.$pos; this.selectionBefore = session.selection.toJSON(); if (session.selection.inMultiSelectMode) session.selection.toSingleRange(); this.pos = doc.createAnchor(pos.row, pos.column); this.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false); this.pos.on("change", function(event) { session.removeMarker(_self.markerId); _self.markerId = session.addMarker(new Range(event.value.row, event.value.column, event.value.row, event.value.column+_self.length), _self.mainClass, null, false); }); this.others = []; this.$others.forEach(function(other) { var anchor = doc.createAnchor(other.row, other.column); _self.others.push(anchor); }); session.setUndoSelect(false); }; this.showOtherMarkers = function() { if(this.othersActive) return; var session = this.session; var _self = this; this.othersActive = true; this.others.forEach(function(anchor) { anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false); anchor.on("change", function(event) { session.removeMarker(anchor.markerId); anchor.markerId = session.addMarker(new Range(event.value.row, event.value.column, event.value.row, event.value.column+_self.length), _self.othersClass, null, false); }); }); }; this.hideOtherMarkers = function() { if(!this.othersActive) return; this.othersActive = false; for (var i = 0; i < this.others.length; i++) { this.session.removeMarker(this.others[i].markerId); } }; this.onUpdate = function(event) { var delta = event.data; var range = delta.range; if(range.start.row !== range.end.row) return; if(range.start.row !== this.pos.row) return; if (this.$updating) return; this.$updating = true; var lengthDiff = delta.action === "insertText" ? range.end.column - range.start.column : range.start.column - range.end.column; if(range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1) { var distanceFromStart = range.start.column - this.pos.column; this.length += lengthDiff; if(!this.session.$fromUndo) { if(delta.action === "insertText") { for (var i = this.others.length - 1; i >= 0; i--) { var otherPos = this.others[i]; var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; if(otherPos.row === range.start.row && range.start.column < otherPos.column) newPos.column += lengthDiff; this.doc.insert(newPos, delta.text); } } else if(delta.action === "removeText") { for (var i = this.others.length - 1; i >= 0; i--) { var otherPos = this.others[i]; var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; if(otherPos.row === range.start.row && range.start.column < otherPos.column) newPos.column += lengthDiff; this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff)); } } if(range.start.column === this.pos.column && delta.action === "insertText") { setTimeout(function() { this.pos.setPosition(this.pos.row, this.pos.column - lengthDiff); for (var i = 0; i < this.others.length; i++) { var other = this.others[i]; var newPos = {row: other.row, column: other.column - lengthDiff}; if(other.row === range.start.row && range.start.column < other.column) newPos.column += lengthDiff; other.setPosition(newPos.row, newPos.column); } }.bind(this), 0); } else if(range.start.column === this.pos.column && delta.action === "removeText") { setTimeout(function() { for (var i = 0; i < this.others.length; i++) { var other = this.others[i]; if(other.row === range.start.row && range.start.column < other.column) { other.setPosition(other.row, other.column - lengthDiff); } } }.bind(this), 0); } } this.pos._emit("change", {value: this.pos}); for (var i = 0; i < this.others.length; i++) { this.others[i]._emit("change", {value: this.others[i]}); } } this.$updating = false; }; this.onCursorChange = function(event) { if (this.$updating || !this.session) return; var pos = this.session.selection.getCursor(); if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) { this.showOtherMarkers(); this._emit("cursorEnter", event); } else { this.hideOtherMarkers(); this._emit("cursorLeave", event); } }; this.detach = function() { this.session.removeMarker(this.markerId); this.hideOtherMarkers(); this.doc.removeEventListener("change", this.$onUpdate); this.session.selection.removeEventListener("changeCursor", this.$onCursorChange); this.pos.detach(); for (var i = 0; i < this.others.length; i++) { this.others[i].detach(); } this.session.setUndoSelect(true); this.session = null; }; this.cancel = function() { if(this.$undoStackDepth === -1) throw Error("Canceling placeholders only supported with undo manager attached to session."); var undoManager = this.session.getUndoManager(); var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth; for (var i = 0; i < undosRequired; i++) { undoManager.undo(true); } if (this.selectionBefore) this.session.selection.fromJSON(this.selectionBefore); }; }).call(PlaceHolder.prototype); exports.PlaceHolder = PlaceHolder; }); ace.define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module) { var event = require("../lib/event"); var useragent = require("../lib/useragent"); function isSamePoint(p1, p2) { return p1.row == p2.row && p1.column == p2.column; } function onMouseDown(e) { var ev = e.domEvent; var alt = ev.altKey; var shift = ev.shiftKey; var ctrl = ev.ctrlKey; var accel = e.getAccelKey(); var button = e.getButton(); if (ctrl && useragent.isMac) button = ev.button; if (e.editor.inMultiSelectMode && button == 2) { e.editor.textInput.onContextMenu(e.domEvent); return; } if (!ctrl && !alt && !accel) { if (button === 0 && e.editor.inMultiSelectMode) e.editor.exitMultiSelectMode(); return; } if (button !== 0) return; var editor = e.editor; var selection = editor.selection; var isMultiSelect = editor.inMultiSelectMode; var pos = e.getDocumentPosition(); var cursor = selection.getCursor(); var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); var mouseX = e.x, mouseY = e.y; var onMouseSelection = function(e) { mouseX = e.clientX; mouseY = e.clientY; }; var session = editor.session; var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); var screenCursor = screenAnchor; var selectionMode; if (editor.$mouseHandler.$enableJumpToDef) { if (ctrl && alt || accel && alt) selectionMode = "add"; else if (alt) selectionMode = "block"; } else { if (accel && !alt) { selectionMode = "add"; if (!isMultiSelect && shift) return; } else if (alt) { selectionMode = "block"; } } if (selectionMode && useragent.isMac && ev.ctrlKey) { editor.$mouseHandler.cancelContextMenu(); } if (selectionMode == "add") { if (!isMultiSelect && inSelection) return; // dragging if (!isMultiSelect) { var range = selection.toOrientedRange(); editor.addSelectionMarker(range); } var oldRange = selection.rangeList.rangeAtPoint(pos); editor.$blockScrolling++; editor.inVirtualSelectionMode = true; if (shift) { oldRange = null; range = selection.ranges[0]; editor.removeSelectionMarker(range); } editor.once("mouseup", function() { var tmpSel = selection.toOrientedRange(); if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) selection.substractPoint(tmpSel.cursor); else { if (shift) { selection.substractPoint(range.cursor); } else if (range) { editor.removeSelectionMarker(range); selection.addRange(range); } selection.addRange(tmpSel); } editor.$blockScrolling--; editor.inVirtualSelectionMode = false; }); } else if (selectionMode == "block") { e.stop(); editor.inVirtualSelectionMode = true; var initialRange; var rectSel = []; var blockSelect = function() { var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column); if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead)) return; screenCursor = newCursor; editor.$blockScrolling++; editor.selection.moveToPosition(cursor); editor.renderer.scrollCursorIntoView(); editor.removeSelectionMarkers(rectSel); rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor); if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty()) rectSel[0] = editor.$mouseHandler.$clickSelection.clone(); rectSel.forEach(editor.addSelectionMarker, editor); editor.updateSelectionMarkers(); editor.$blockScrolling--; }; editor.$blockScrolling++; if (isMultiSelect && !accel) { selection.toSingleRange(); } else if (!isMultiSelect && accel) { initialRange = selection.toOrientedRange(); editor.addSelectionMarker(initialRange); } if (shift) screenAnchor = session.documentToScreenPosition(selection.lead); else selection.moveToPosition(pos); editor.$blockScrolling--; screenCursor = {row: -1, column: -1}; var onMouseSelectionEnd = function(e) { clearInterval(timerId); editor.removeSelectionMarkers(rectSel); if (!rectSel.length) rectSel = [selection.toOrientedRange()]; editor.$blockScrolling++; if (initialRange) { editor.removeSelectionMarker(initialRange); selection.toSingleRange(initialRange); } for (var i = 0; i < rectSel.length; i++) selection.addRange(rectSel[i]); editor.inVirtualSelectionMode = false; editor.$mouseHandler.$clickSelection = null; editor.$blockScrolling--; }; var onSelectionInterval = blockSelect; event.capture(editor.container, onMouseSelection, onMouseSelectionEnd); var timerId = setInterval(function() {onSelectionInterval();}, 20); return e.preventDefault(); } } exports.onMouseDown = onMouseDown; }); ace.define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"], function(require, exports, module) { exports.defaultCommands = [{ name: "addCursorAbove", exec: function(editor) { editor.selectMoreLines(-1); }, bindKey: {win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up"}, scrollIntoView: "cursor", readonly: true }, { name: "addCursorBelow", exec: function(editor) { editor.selectMoreLines(1); }, bindKey: {win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down"}, scrollIntoView: "cursor", readonly: true }, { name: "addCursorAboveSkipCurrent", exec: function(editor) { editor.selectMoreLines(-1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up"}, scrollIntoView: "cursor", readonly: true }, { name: "addCursorBelowSkipCurrent", exec: function(editor) { editor.selectMoreLines(1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down"}, scrollIntoView: "cursor", readonly: true }, { name: "selectMoreBefore", exec: function(editor) { editor.selectMore(-1); }, bindKey: {win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left"}, scrollIntoView: "cursor", readonly: true }, { name: "selectMoreAfter", exec: function(editor) { editor.selectMore(1); }, bindKey: {win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right"}, scrollIntoView: "cursor", readonly: true }, { name: "selectNextBefore", exec: function(editor) { editor.selectMore(-1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left"}, scrollIntoView: "cursor", readonly: true }, { name: "selectNextAfter", exec: function(editor) { editor.selectMore(1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right"}, scrollIntoView: "cursor", readonly: true }, { name: "splitIntoLines", exec: function(editor) { editor.multiSelect.splitIntoLines(); }, bindKey: {win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L"}, readonly: true }, { name: "alignCursors", exec: function(editor) { editor.alignCursors(); }, bindKey: {win: "Ctrl-Alt-A", mac: "Ctrl-Alt-A"}, scrollIntoView: "cursor" }, { name: "findAll", exec: function(editor) { editor.findAll(); }, bindKey: {win: "Ctrl-Alt-K", mac: "Ctrl-Alt-G"}, scrollIntoView: "cursor", readonly: true }]; exports.multiSelectCommands = [{ name: "singleSelection", bindKey: "esc", exec: function(editor) { editor.exitMultiSelectMode(); }, scrollIntoView: "cursor", readonly: true, isAvailable: function(editor) {return editor && editor.inMultiSelectMode} }]; var HashHandler = require("../keyboard/hash_handler").HashHandler; exports.keyboardHandler = new HashHandler(exports.multiSelectCommands); }); ace.define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/lib/lang","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor","ace/config"], function(require, exports, module) { var RangeList = require("./range_list").RangeList; var Range = require("./range").Range; var Selection = require("./selection").Selection; var onMouseDown = require("./mouse/multi_select_handler").onMouseDown; var event = require("./lib/event"); var lang = require("./lib/lang"); var commands = require("./commands/multi_select_commands"); exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands); var Search = require("./search").Search; var search = new Search(); function find(session, needle, dir) { search.$options.wrap = true; search.$options.needle = needle; search.$options.backwards = dir == -1; return search.find(session); } var EditSession = require("./edit_session").EditSession; (function() { this.getSelectionMarkers = function() { return this.$selectionMarkers; }; }).call(EditSession.prototype); (function() { this.ranges = null; this.rangeList = null; this.addRange = function(range, $blockChangeEvents) { if (!range) return; if (!this.inMultiSelectMode && this.rangeCount === 0) { var oldRange = this.toOrientedRange(); this.rangeList.add(oldRange); this.rangeList.add(range); if (this.rangeList.ranges.length != 2) { this.rangeList.removeAll(); return $blockChangeEvents || this.fromOrientedRange(range); } this.rangeList.removeAll(); this.rangeList.add(oldRange); this.$onAddRange(oldRange); } if (!range.cursor) range.cursor = range.end; var removed = this.rangeList.add(range); this.$onAddRange(range); if (removed.length) this.$onRemoveRange(removed); if (this.rangeCount > 1 && !this.inMultiSelectMode) { this._signal("multiSelect"); this.inMultiSelectMode = true; this.session.$undoSelect = false; this.rangeList.attach(this.session); } return $blockChangeEvents || this.fromOrientedRange(range); }; this.toSingleRange = function(range) { range = range || this.ranges[0]; var removed = this.rangeList.removeAll(); if (removed.length) this.$onRemoveRange(removed); range && this.fromOrientedRange(range); }; this.substractPoint = function(pos) { var removed = this.rangeList.substractPoint(pos); if (removed) { this.$onRemoveRange(removed); return removed[0]; } }; this.mergeOverlappingRanges = function() { var removed = this.rangeList.merge(); if (removed.length) this.$onRemoveRange(removed); else if(this.ranges[0]) this.fromOrientedRange(this.ranges[0]); }; this.$onAddRange = function(range) { this.rangeCount = this.rangeList.ranges.length; this.ranges.unshift(range); this._signal("addRange", {range: range}); }; this.$onRemoveRange = function(removed) { this.rangeCount = this.rangeList.ranges.length; if (this.rangeCount == 1 && this.inMultiSelectMode) { var lastRange = this.rangeList.ranges.pop(); removed.push(lastRange); this.rangeCount = 0; } for (var i = removed.length; i--; ) { var index = this.ranges.indexOf(removed[i]); this.ranges.splice(index, 1); } this._signal("removeRange", {ranges: removed}); if (this.rangeCount === 0 && this.inMultiSelectMode) { this.inMultiSelectMode = false; this._signal("singleSelect"); this.session.$undoSelect = true; this.rangeList.detach(this.session); } lastRange = lastRange || this.ranges[0]; if (lastRange && !lastRange.isEqual(this.getRange())) this.fromOrientedRange(lastRange); }; this.$initRangeList = function() { if (this.rangeList) return; this.rangeList = new RangeList(); this.ranges = []; this.rangeCount = 0; }; this.getAllRanges = function() { return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()]; }; this.splitIntoLines = function () { if (this.rangeCount > 1) { var ranges = this.rangeList.ranges; var lastRange = ranges[ranges.length - 1]; var range = Range.fromPoints(ranges[0].start, lastRange.end); this.toSingleRange(); this.setSelectionRange(range, lastRange.cursor == lastRange.start); } else { var range = this.getRange(); var isBackwards = this.isBackwards(); var startRow = range.start.row; var endRow = range.end.row; if (startRow == endRow) { if (isBackwards) var start = range.end, end = range.start; else var start = range.start, end = range.end; this.addRange(Range.fromPoints(end, end)); this.addRange(Range.fromPoints(start, start)); return; } var rectSel = []; var r = this.getLineRange(startRow, true); r.start.column = range.start.column; rectSel.push(r); for (var i = startRow + 1; i < endRow; i++) rectSel.push(this.getLineRange(i, true)); r = this.getLineRange(endRow, true); r.end.column = range.end.column; rectSel.push(r); rectSel.forEach(this.addRange, this); } }; this.toggleBlockSelection = function () { if (this.rangeCount > 1) { var ranges = this.rangeList.ranges; var lastRange = ranges[ranges.length - 1]; var range = Range.fromPoints(ranges[0].start, lastRange.end); this.toSingleRange(); this.setSelectionRange(range, lastRange.cursor == lastRange.start); } else { var cursor = this.session.documentToScreenPosition(this.selectionLead); var anchor = this.session.documentToScreenPosition(this.selectionAnchor); var rectSel = this.rectangularRangeBlock(cursor, anchor); rectSel.forEach(this.addRange, this); } }; this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) { var rectSel = []; var xBackwards = screenCursor.column < screenAnchor.column; if (xBackwards) { var startColumn = screenCursor.column; var endColumn = screenAnchor.column; } else { var startColumn = screenAnchor.column; var endColumn = screenCursor.column; } var yBackwards = screenCursor.row < screenAnchor.row; if (yBackwards) { var startRow = screenCursor.row; var endRow = screenAnchor.row; } else { var startRow = screenAnchor.row; var endRow = screenCursor.row; } if (startColumn < 0) startColumn = 0; if (startRow < 0) startRow = 0; if (startRow == endRow) includeEmptyLines = true; for (var row = startRow; row <= endRow; row++) { var range = Range.fromPoints( this.session.screenToDocumentPosition(row, startColumn), this.session.screenToDocumentPosition(row, endColumn) ); if (range.isEmpty()) { if (docEnd && isSamePoint(range.end, docEnd)) break; var docEnd = range.end; } range.cursor = xBackwards ? range.start : range.end; rectSel.push(range); } if (yBackwards) rectSel.reverse(); if (!includeEmptyLines) { var end = rectSel.length - 1; while (rectSel[end].isEmpty() && end > 0) end--; if (end > 0) { var start = 0; while (rectSel[start].isEmpty()) start++; } for (var i = end; i >= start; i--) { if (rectSel[i].isEmpty()) rectSel.splice(i, 1); } } return rectSel; }; }).call(Selection.prototype); var Editor = require("./editor").Editor; (function() { this.updateSelectionMarkers = function() { this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.addSelectionMarker = function(orientedRange) { if (!orientedRange.cursor) orientedRange.cursor = orientedRange.end; var style = this.getSelectionStyle(); orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style); this.session.$selectionMarkers.push(orientedRange); this.session.selectionMarkerCount = this.session.$selectionMarkers.length; return orientedRange; }; this.removeSelectionMarker = function(range) { if (!range.marker) return; this.session.removeMarker(range.marker); var index = this.session.$selectionMarkers.indexOf(range); if (index != -1) this.session.$selectionMarkers.splice(index, 1); this.session.selectionMarkerCount = this.session.$selectionMarkers.length; }; this.removeSelectionMarkers = function(ranges) { var markerList = this.session.$selectionMarkers; for (var i = ranges.length; i--; ) { var range = ranges[i]; if (!range.marker) continue; this.session.removeMarker(range.marker); var index = markerList.indexOf(range); if (index != -1) markerList.splice(index, 1); } this.session.selectionMarkerCount = markerList.length; }; this.$onAddRange = function(e) { this.addSelectionMarker(e.range); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.$onRemoveRange = function(e) { this.removeSelectionMarkers(e.ranges); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.$onMultiSelect = function(e) { if (this.inMultiSelectMode) return; this.inMultiSelectMode = true; this.setStyle("ace_multiselect"); this.keyBinding.addKeyboardHandler(commands.keyboardHandler); this.commands.setDefaultHandler("exec", this.$onMultiSelectExec); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.$onSingleSelect = function(e) { if (this.session.multiSelect.inVirtualMode) return; this.inMultiSelectMode = false; this.unsetStyle("ace_multiselect"); this.keyBinding.removeKeyboardHandler(commands.keyboardHandler); this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); this._emit("changeSelection"); }; this.$onMultiSelectExec = function(e) { var command = e.command; var editor = e.editor; if (!editor.multiSelect) return; if (!command.multiSelectAction) { var result = command.exec(editor, e.args || {}); editor.multiSelect.addRange(editor.multiSelect.toOrientedRange()); editor.multiSelect.mergeOverlappingRanges(); } else if (command.multiSelectAction == "forEach") { result = editor.forEachSelection(command, e.args); } else if (command.multiSelectAction == "forEachLine") { result = editor.forEachSelection(command, e.args, true); } else if (command.multiSelectAction == "single") { editor.exitMultiSelectMode(); result = command.exec(editor, e.args || {}); } else { result = command.multiSelectAction(editor, e.args || {}); } return result; }; this.forEachSelection = function(cmd, args, options) { if (this.inVirtualSelectionMode) return; var keepOrder = options && options.keepOrder; var $byLines = options == true || options && options.$byLines var session = this.session; var selection = this.selection; var rangeList = selection.rangeList; var ranges = (keepOrder ? selection : rangeList).ranges; var result; if (!ranges.length) return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); var reg = selection._eventRegistry; selection._eventRegistry = {}; var tmpSel = new Selection(session); this.inVirtualSelectionMode = true; for (var i = ranges.length; i--;) { if ($byLines) { while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row) i--; } tmpSel.fromOrientedRange(ranges[i]); tmpSel.index = i; this.selection = session.selection = tmpSel; var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); if (!result && cmdResult !== undefined) result = cmdResult; tmpSel.toOrientedRange(ranges[i]); } tmpSel.detach(); this.selection = session.selection = selection; this.inVirtualSelectionMode = false; selection._eventRegistry = reg; selection.mergeOverlappingRanges(); var anim = this.renderer.$scrollAnimation; this.onCursorChange(); this.onSelectionChange(); if (anim && anim.from == anim.to) this.renderer.animateScrolling(anim.from); return result; }; this.exitMultiSelectMode = function() { if (!this.inMultiSelectMode || this.inVirtualSelectionMode) return; this.multiSelect.toSingleRange(); }; this.getSelectedText = function() { var text = ""; if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { var ranges = this.multiSelect.rangeList.ranges; var buf = []; for (var i = 0; i < ranges.length; i++) { buf.push(this.session.getTextRange(ranges[i])); } var nl = this.session.getDocument().getNewLineCharacter(); text = buf.join(nl); if (text.length == (buf.length - 1) * nl.length) text = ""; } else if (!this.selection.isEmpty()) { text = this.session.getTextRange(this.getSelectionRange()); } return text; }; this.$checkMultiselectChange = function(e, anchor) { if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { var range = this.multiSelect.ranges[0]; if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor) return; var pos = anchor == this.multiSelect.anchor ? range.cursor == range.start ? range.end : range.start : range.cursor; if (pos.row != anchor.row || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column) this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()); } }; this.findAll = function(needle, options, additive) { options = options || {}; options.needle = needle || options.needle; if (options.needle == undefined) { var range = this.selection.isEmpty() ? this.selection.getWordRange() : this.selection.getRange(); options.needle = this.session.getTextRange(range); } this.$search.set(options); var ranges = this.$search.findAll(this.session); if (!ranges.length) return 0; this.$blockScrolling += 1; var selection = this.multiSelect; if (!additive) selection.toSingleRange(ranges[0]); for (var i = ranges.length; i--; ) selection.addRange(ranges[i], true); if (range && selection.rangeList.rangeAtPoint(range.start)) selection.addRange(range, true); this.$blockScrolling -= 1; return ranges.length; }; this.selectMoreLines = function(dir, skip) { var range = this.selection.toOrientedRange(); var isBackwards = range.cursor == range.end; var screenLead = this.session.documentToScreenPosition(range.cursor); if (this.selection.$desiredColumn) screenLead.column = this.selection.$desiredColumn; var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column); if (!range.isEmpty()) { var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start); var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column); } else { var anchor = lead; } if (isBackwards) { var newRange = Range.fromPoints(lead, anchor); newRange.cursor = newRange.start; } else { var newRange = Range.fromPoints(anchor, lead); newRange.cursor = newRange.end; } newRange.desiredColumn = screenLead.column; if (!this.selection.inMultiSelectMode) { this.selection.addRange(range); } else { if (skip) var toRemove = range.cursor; } this.selection.addRange(newRange); if (toRemove) this.selection.substractPoint(toRemove); }; this.transposeSelections = function(dir) { var session = this.session; var sel = session.multiSelect; var all = sel.ranges; for (var i = all.length; i--; ) { var range = all[i]; if (range.isEmpty()) { var tmp = session.getWordRange(range.start.row, range.start.column); range.start.row = tmp.start.row; range.start.column = tmp.start.column; range.end.row = tmp.end.row; range.end.column = tmp.end.column; } } sel.mergeOverlappingRanges(); var words = []; for (var i = all.length; i--; ) { var range = all[i]; words.unshift(session.getTextRange(range)); } if (dir < 0) words.unshift(words.pop()); else words.push(words.shift()); for (var i = all.length; i--; ) { var range = all[i]; var tmp = range.clone(); session.replace(range, words[i]); range.start.row = tmp.start.row; range.start.column = tmp.start.column; } }; this.selectMore = function(dir, skip, stopAtFirst) { var session = this.session; var sel = session.multiSelect; var range = sel.toOrientedRange(); if (range.isEmpty()) { range = session.getWordRange(range.start.row, range.start.column); range.cursor = dir == -1 ? range.start : range.end; this.multiSelect.addRange(range); if (stopAtFirst) return; } var needle = session.getTextRange(range); var newRange = find(session, needle, dir); if (newRange) { newRange.cursor = dir == -1 ? newRange.start : newRange.end; this.$blockScrolling += 1; this.session.unfold(newRange); this.multiSelect.addRange(newRange); this.$blockScrolling -= 1; this.renderer.scrollCursorIntoView(null, 0.5); } if (skip) this.multiSelect.substractPoint(range.cursor); }; this.alignCursors = function() { var session = this.session; var sel = session.multiSelect; var ranges = sel.ranges; var row = -1; var sameRowRanges = ranges.filter(function(r) { if (r.cursor.row == row) return true; row = r.cursor.row; }); if (!ranges.length || sameRowRanges.length == ranges.length - 1) { var range = this.selection.getRange(); var fr = range.start.row, lr = range.end.row; var guessRange = fr == lr; if (guessRange) { var max = this.session.getLength(); var line; do { line = this.session.getLine(lr); } while (/[=:]/.test(line) && ++lr < max); do { line = this.session.getLine(fr); } while (/[=:]/.test(line) && --fr > 0); if (fr < 0) fr = 0; if (lr >= max) lr = max - 1; } var lines = this.session.doc.removeLines(fr, lr); lines = this.$reAlignText(lines, guessRange); this.session.doc.insert({row: fr, column: 0}, lines.join("\n") + "\n"); if (!guessRange) { range.start.column = 0; range.end.column = lines[lines.length - 1].length; } this.selection.setRange(range); } else { sameRowRanges.forEach(function(r) { sel.substractPoint(r.cursor); }); var maxCol = 0; var minSpace = Infinity; var spaceOffsets = ranges.map(function(r) { var p = r.cursor; var line = session.getLine(p.row); var spaceOffset = line.substr(p.column).search(/\S/g); if (spaceOffset == -1) spaceOffset = 0; if (p.column > maxCol) maxCol = p.column; if (spaceOffset < minSpace) minSpace = spaceOffset; return spaceOffset; }); ranges.forEach(function(r, i) { var p = r.cursor; var l = maxCol - p.column; var d = spaceOffsets[i] - minSpace; if (l > d) session.insert(p, lang.stringRepeat(" ", l - d)); else session.remove(new Range(p.row, p.column, p.row, p.column - l + d)); r.start.column = r.end.column = maxCol; r.start.row = r.end.row = p.row; r.cursor = r.end; }); sel.fromOrientedRange(ranges[0]); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); } }; this.$reAlignText = function(lines, forceLeft) { var isLeftAligned = true, isRightAligned = true; var startW, textW, endW; return lines.map(function(line) { var m = line.match(/(\s*)(.*?)(\s*)([=:].*)/); if (!m) return [line]; if (startW == null) { startW = m[1].length; textW = m[2].length; endW = m[3].length; return m; } if (startW + textW + endW != m[1].length + m[2].length + m[3].length) isRightAligned = false; if (startW != m[1].length) isLeftAligned = false; if (startW > m[1].length) startW = m[1].length; if (textW < m[2].length) textW = m[2].length; if (endW > m[3].length) endW = m[3].length; return m; }).map(forceLeft ? alignLeft : isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign); function spaces(n) { return lang.stringRepeat(" ", n); } function alignLeft(m) { return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(textW - m[2].length + endW) + m[4].replace(/^([=:])\s+/, "$1 "); } function alignRight(m) { return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] + spaces(endW, " ") + m[4].replace(/^([=:])\s+/, "$1 "); } function unAlign(m) { return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(endW) + m[4].replace(/^([=:])\s+/, "$1 "); } }; }).call(Editor.prototype); function isSamePoint(p1, p2) { return p1.row == p2.row && p1.column == p2.column; } exports.onSessionChange = function(e) { var session = e.session; if (session && !session.multiSelect) { session.$selectionMarkers = []; session.selection.$initRangeList(); session.multiSelect = session.selection; } this.multiSelect = session && session.multiSelect; var oldSession = e.oldSession; if (oldSession) { oldSession.multiSelect.off("addRange", this.$onAddRange); oldSession.multiSelect.off("removeRange", this.$onRemoveRange); oldSession.multiSelect.off("multiSelect", this.$onMultiSelect); oldSession.multiSelect.off("singleSelect", this.$onSingleSelect); oldSession.multiSelect.lead.off("change", this.$checkMultiselectChange); oldSession.multiSelect.anchor.off("change", this.$checkMultiselectChange); } if (session) { session.multiSelect.on("addRange", this.$onAddRange); session.multiSelect.on("removeRange", this.$onRemoveRange); session.multiSelect.on("multiSelect", this.$onMultiSelect); session.multiSelect.on("singleSelect", this.$onSingleSelect); session.multiSelect.lead.on("change", this.$checkMultiselectChange); session.multiSelect.anchor.on("change", this.$checkMultiselectChange); } if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) { if (session.selection.inMultiSelectMode) this.$onMultiSelect(); else this.$onSingleSelect(); } }; function MultiSelect(editor) { if (editor.$multiselectOnSessionChange) return; editor.$onAddRange = editor.$onAddRange.bind(editor); editor.$onRemoveRange = editor.$onRemoveRange.bind(editor); editor.$onMultiSelect = editor.$onMultiSelect.bind(editor); editor.$onSingleSelect = editor.$onSingleSelect.bind(editor); editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor); editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor); editor.$multiselectOnSessionChange(editor); editor.on("changeSession", editor.$multiselectOnSessionChange); editor.on("mousedown", onMouseDown); editor.commands.addCommands(commands.defaultCommands); addAltCursorListeners(editor); } function addAltCursorListeners(editor){ var el = editor.textInput.getElement(); var altCursor = false; event.addListener(el, "keydown", function(e) { if (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) { if (!altCursor) { editor.renderer.setMouseCursor("crosshair"); altCursor = true; } } else if (altCursor) { reset(); } }); event.addListener(el, "keyup", reset); event.addListener(el, "blur", reset); function reset(e) { if (altCursor) { editor.renderer.setMouseCursor(""); altCursor = false; } } } exports.MultiSelect = MultiSelect; require("./config").defineOptions(Editor.prototype, "editor", { enableMultiselect: { set: function(val) { MultiSelect(this); if (val) { this.on("changeSession", this.$multiselectOnSessionChange); this.on("mousedown", onMouseDown); } else { this.off("changeSession", this.$multiselectOnSessionChange); this.off("mousedown", onMouseDown); } }, value: true } }); }); ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; (function() { this.foldingStartMarker = null; this.foldingStopMarker = null; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.foldingStartMarker.test(line)) return "start"; if (foldStyle == "markbeginend" && this.foldingStopMarker && this.foldingStopMarker.test(line)) return "end"; return ""; }; this.getFoldWidgetRange = function(session, foldStyle, row) { return null; }; this.indentationBlock = function(session, row, column) { var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1) return; var startColumn = column || line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { var level = session.getLine(row).search(re); if (level == -1) continue; if (level <= startLevel) break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.openingBracketBlock = function(session, bracket, row, column, typeRe) { var start = {row: row, column: column + 1}; var end = session.$findClosingBracket(bracket, start, typeRe); if (!end) return; var fw = session.foldWidgets[end.row]; if (fw == null) fw = session.getFoldWidget(end.row); if (fw == "start" && end.row > start.row) { end.row --; end.column = session.getLine(end.row).length; } return Range.fromPoints(start, end); }; this.closingBracketBlock = function(session, bracket, row, column, typeRe) { var end = {row: row, column: column}; var start = session.$findOpeningBracket(bracket, end); if (!start) return; start.column++; end.column--; return Range.fromPoints(start, end); }; }).call(FoldMode.prototype); }); ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; exports.isDark = false; exports.cssClass = "ace-tm"; exports.cssText = ".ace-tm .ace_gutter {\ background: #f0f0f0;\ color: #333;\ }\ .ace-tm .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-tm .ace_fold {\ background-color: #6B72E6;\ }\ .ace-tm {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-tm .ace_cursor {\ color: black;\ }\ .ace-tm .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-tm .ace_storage,\ .ace-tm .ace_keyword {\ color: blue;\ }\ .ace-tm .ace_constant {\ color: rgb(197, 6, 11);\ }\ .ace-tm .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-tm .ace_constant.ace_language {\ color: rgb(88, 92, 246);\ }\ .ace-tm .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_invalid {\ background-color: rgba(255, 0, 0, 0.1);\ color: red;\ }\ .ace-tm .ace_support.ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-tm .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_support.ace_type,\ .ace-tm .ace_support.ace_class {\ color: rgb(109, 121, 222);\ }\ .ace-tm .ace_keyword.ace_operator {\ color: rgb(104, 118, 135);\ }\ .ace-tm .ace_string {\ color: rgb(3, 106, 7);\ }\ .ace-tm .ace_comment {\ color: rgb(76, 136, 107);\ }\ .ace-tm .ace_comment.ace_doc {\ color: rgb(0, 102, 255);\ }\ .ace-tm .ace_comment.ace_doc.ace_tag {\ color: rgb(128, 159, 191);\ }\ .ace-tm .ace_constant.ace_numeric {\ color: rgb(0, 0, 205);\ }\ .ace-tm .ace_variable {\ color: rgb(49, 132, 149);\ }\ .ace-tm .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-tm .ace_entity.ace_name.ace_function {\ color: #0000A2;\ }\ .ace-tm .ace_heading {\ color: rgb(12, 7, 255);\ }\ .ace-tm .ace_list {\ color:rgb(185, 6, 144);\ }\ .ace-tm .ace_meta.ace_tag {\ color:rgb(0, 22, 142);\ }\ .ace-tm .ace_string.ace_regex {\ color: rgb(255, 0, 0)\ }\ .ace-tm .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-tm.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px white;\ border-radius: 2px;\ }\ .ace-tm .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-tm .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-tm .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-tm .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.07);\ }\ .ace-tm .ace_gutter-active-line {\ background-color : #dcdcdc;\ }\ .ace-tm .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-tm .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var dom = require("./lib/dom"); var Range = require("./range").Range; function LineWidgets(session) { this.session = session; this.session.widgetManager = this; this.session.getRowLength = this.getRowLength; this.session.$getWidgetScreenLength = this.$getWidgetScreenLength; this.updateOnChange = this.updateOnChange.bind(this); this.renderWidgets = this.renderWidgets.bind(this); this.measureWidgets = this.measureWidgets.bind(this); this.session._changedWidgets = []; this.$onChangeEditor = this.$onChangeEditor.bind(this); this.session.on("change", this.updateOnChange); this.session.on("changeEditor", this.$onChangeEditor); } (function() { this.getRowLength = function(row) { var h; if (this.lineWidgets) h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; else h = 0; if (!this.$useWrapMode || !this.$wrapData[row]) { return 1 + h; } else { return this.$wrapData[row].length + 1 + h; } }; this.$getWidgetScreenLength = function() { var screenRows = 0; this.lineWidgets.forEach(function(w){ if (w && w.rowCount) screenRows +=w.rowCount; }); return screenRows; }; this.$onChangeEditor = function(e) { this.attach(e.editor); }; this.attach = function(editor) { if (editor && editor.widgetManager && editor.widgetManager != this) editor.widgetManager.detach(); if (this.editor == editor) return; this.detach(); this.editor = editor; if (editor) { editor.widgetManager = this; editor.renderer.on("beforeRender", this.measureWidgets); editor.renderer.on("afterRender", this.renderWidgets); } }; this.detach = function(e) { var editor = this.editor; if (!editor) return; this.editor = null; editor.widgetManager = null; editor.renderer.off("beforeRender", this.measureWidgets); editor.renderer.off("afterRender", this.renderWidgets); var lineWidgets = this.session.lineWidgets; lineWidgets && lineWidgets.forEach(function(w) { if (w && w.el && w.el.parentNode) { w._inDocument = false; w.el.parentNode.removeChild(w.el); } }); }; this.updateOnChange = function(e) { var lineWidgets = this.session.lineWidgets; if (!lineWidgets) return; var delta = e.data; var range = delta.range; var startRow = range.start.row; var len = range.end.row - startRow; if (len === 0) { } else if (delta.action == "removeText" || delta.action == "removeLines") { var removed = lineWidgets.splice(startRow + 1, len); removed.forEach(function(w) { w && this.removeLineWidget(w); }, this); this.$updateRows(); } else { var args = new Array(len); args.unshift(startRow, 0); lineWidgets.splice.apply(lineWidgets, args); this.$updateRows(); } }; this.$updateRows = function() { var lineWidgets = this.session.lineWidgets; if (!lineWidgets) return; var noWidgets = true; lineWidgets.forEach(function(w, i) { if (w) { noWidgets = false; w.row = i; } }); if (noWidgets) this.session.lineWidgets = null; }; this.addLineWidget = function(w) { if (!this.session.lineWidgets) this.session.lineWidgets = new Array(this.session.getLength()); this.session.lineWidgets[w.row] = w; var renderer = this.editor.renderer; if (w.html && !w.el) { w.el = dom.createElement("div"); w.el.innerHTML = w.html; } if (w.el) { dom.addCssClass(w.el, "ace_lineWidgetContainer"); w.el.style.position = "absolute"; w.el.style.zIndex = 5; renderer.container.appendChild(w.el); w._inDocument = true; } if (!w.coverGutter) { w.el.style.zIndex = 3; } if (!w.pixelHeight) { w.pixelHeight = w.el.offsetHeight; } if (w.rowCount == null) w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight; this.session._emit("changeFold", {data:{start:{row: w.row}}}); this.$updateRows(); this.renderWidgets(null, renderer); return w; }; this.removeLineWidget = function(w) { w._inDocument = false; if (w.el && w.el.parentNode) w.el.parentNode.removeChild(w.el); if (w.editor && w.editor.destroy) try { w.editor.destroy(); } catch(e){} if (this.session.lineWidgets) this.session.lineWidgets[w.row] = undefined; this.session._emit("changeFold", {data:{start:{row: w.row}}}); this.$updateRows(); }; this.onWidgetChanged = function(w) { this.session._changedWidgets.push(w); this.editor && this.editor.renderer.updateFull(); }; this.measureWidgets = function(e, renderer) { var changedWidgets = this.session._changedWidgets; var config = renderer.layerConfig; if (!changedWidgets || !changedWidgets.length) return; var min = Infinity; for (var i = 0; i < changedWidgets.length; i++) { var w = changedWidgets[i]; if (!w._inDocument) { w._inDocument = true; renderer.container.appendChild(w.el); } w.h = w.el.offsetHeight; if (!w.fixedWidth) { w.w = w.el.offsetWidth; w.screenWidth = Math.ceil(w.w / config.characterWidth); } var rowCount = w.h / config.lineHeight; if (w.coverLine) { rowCount -= this.session.getRowLineCount(w.row); if (rowCount < 0) rowCount = 0; } if (w.rowCount != rowCount) { w.rowCount = rowCount; if (w.row < min) min = w.row; } } if (min != Infinity) { this.session._emit("changeFold", {data:{start:{row: min}}}); this.session.lineWidgetWidth = null; } this.session._changedWidgets = []; }; this.renderWidgets = function(e, renderer) { var config = renderer.layerConfig; var lineWidgets = this.session.lineWidgets; if (!lineWidgets) return; var first = Math.min(this.firstRow, config.firstRow); var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length); while (first > 0 && !lineWidgets[first]) first--; this.firstRow = config.firstRow; this.lastRow = config.lastRow; renderer.$cursorLayer.config = config; for (var i = first; i <= last; i++) { var w = lineWidgets[i]; if (!w || !w.el) continue; if (!w._inDocument) { w._inDocument = true; renderer.container.appendChild(w.el); } var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top; if (!w.coverLine) top += config.lineHeight * this.session.getRowLineCount(w.row); w.el.style.top = top - config.offset + "px"; var left = w.coverGutter ? 0 : renderer.gutterWidth; if (!w.fixedWidth) left -= renderer.scrollLeft; w.el.style.left = left + "px"; if (w.fixedWidth) { w.el.style.right = renderer.scrollBar.getWidth() + "px"; } else { w.el.style.right = ""; } } }; }).call(LineWidgets.prototype); exports.LineWidgets = LineWidgets; }); ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"], function(require, exports, module) { "use strict"; var LineWidgets = require("../line_widgets").LineWidgets; var dom = require("../lib/dom"); var Range = require("../range").Range; function binarySearch(array, needle, comparator) { var first = 0; var last = array.length - 1; while (first <= last) { var mid = (first + last) >> 1; var c = comparator(needle, array[mid]); if (c > 0) first = mid + 1; else if (c < 0) last = mid - 1; else return mid; } return -(first + 1); } function findAnnotations(session, row, dir) { var annotations = session.getAnnotations().sort(Range.comparePoints); if (!annotations.length) return; var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints); if (i < 0) i = -i - 1; if (i >= annotations.length - 1) i = dir > 0 ? 0 : annotations.length - 1; else if (i === 0 && dir < 0) i = annotations.length - 1; var annotation = annotations[i]; if (!annotation || !dir) return; if (annotation.row === row) { do { annotation = annotations[i += dir]; } while (annotation && annotation.row === row); if (!annotation) return annotations.slice(); } var matched = []; row = annotation.row; do { matched[dir < 0 ? "unshift" : "push"](annotation); annotation = annotations[i += dir]; } while (annotation && annotation.row == row); return matched.length && matched; } exports.showErrorMarker = function(editor, dir) { var session = editor.session; if (!session.widgetManager) { session.widgetManager = new LineWidgets(session); session.widgetManager.attach(editor); } var pos = editor.getCursorPosition(); var row = pos.row; var oldWidget = session.lineWidgets && session.lineWidgets[row]; if (oldWidget) { oldWidget.destroy(); } else { row -= dir; } var annotations = findAnnotations(session, row, dir); var gutterAnno; if (annotations) { var annotation = annotations[0]; pos.column = (annotation.pos && typeof annotation.column != "number" ? annotation.pos.sc : annotation.column) || 0; pos.row = annotation.row; gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row]; } else if (oldWidget) { return; } else { gutterAnno = { text: ["Looks good!"], className: "ace_ok" }; } editor.session.unfold(pos.row); editor.selection.moveToPosition(pos); var w = { row: pos.row, fixedWidth: true, coverGutter: true, el: dom.createElement("div") }; var el = w.el.appendChild(dom.createElement("div")); var arrow = w.el.appendChild(dom.createElement("div")); arrow.className = "error_widget_arrow " + gutterAnno.className; var left = editor.renderer.$cursorLayer .getPixelPosition(pos).left; arrow.style.left = left + editor.renderer.gutterWidth - 5 + "px"; w.el.className = "error_widget_wrapper"; el.className = "error_widget " + gutterAnno.className; el.innerHTML = gutterAnno.text.join("
"); el.appendChild(dom.createElement("div")); var kb = function(_, hashId, keyString) { if (hashId === 0 && (keyString === "esc" || keyString === "return")) { w.destroy(); return {command: "null"}; } }; w.destroy = function() { if (editor.$mouseHandler.isMousePressed) return; editor.keyBinding.removeKeyboardHandler(kb); session.widgetManager.removeLineWidget(w); editor.off("changeSelection", w.destroy); editor.off("changeSession", w.destroy); editor.off("mouseup", w.destroy); editor.off("change", w.destroy); }; editor.keyBinding.addKeyboardHandler(kb); editor.on("changeSelection", w.destroy); editor.on("changeSession", w.destroy); editor.on("mouseup", w.destroy); editor.on("change", w.destroy); editor.session.widgetManager.addLineWidget(w); w.el.onmousedown = editor.focus.bind(editor); editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight}); }; dom.importCssString("\ .error_widget_wrapper {\ background: inherit;\ color: inherit;\ border:none\ }\ .error_widget {\ border-top: solid 2px;\ border-bottom: solid 2px;\ margin: 5px 0;\ padding: 10px 40px;\ white-space: pre-wrap;\ }\ .error_widget.ace_error, .error_widget_arrow.ace_error{\ border-color: #ff5a5a\ }\ .error_widget.ace_warning, .error_widget_arrow.ace_warning{\ border-color: #F1D817\ }\ .error_widget.ace_info, .error_widget_arrow.ace_info{\ border-color: #5a5a5a\ }\ .error_widget.ace_ok, .error_widget_arrow.ace_ok{\ border-color: #5aaa5a\ }\ .error_widget_arrow {\ position: absolute;\ border: solid 5px;\ border-top-color: transparent!important;\ border-right-color: transparent!important;\ border-left-color: transparent!important;\ top: -5px;\ }\ ", ""); }); ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"], function(require, exports, module) { "use strict"; require("./lib/fixoldbrowsers"); var dom = require("./lib/dom"); var event = require("./lib/event"); var Editor = require("./editor").Editor; var EditSession = require("./edit_session").EditSession; var UndoManager = require("./undomanager").UndoManager; var Renderer = require("./virtual_renderer").VirtualRenderer; require("./worker/worker_client"); require("./keyboard/hash_handler"); require("./placeholder"); require("./multi_select"); require("./mode/folding/fold_mode"); require("./theme/textmate"); require("./ext/error_marker"); exports.config = require("./config"); exports.require = require; exports.edit = function(el) { if (typeof(el) == "string") { var _id = el; el = document.getElementById(_id); if (!el) throw new Error("ace.edit can't find div #" + _id); } if (el && el.env && el.env.editor instanceof Editor) return el.env.editor; var value = ""; if (el && /input|textarea/i.test(el.tagName)) { var oldNode = el; value = oldNode.value; el = dom.createElement("pre"); oldNode.parentNode.replaceChild(el, oldNode); } else { value = dom.getInnerText(el); el.innerHTML = ''; } var doc = exports.createEditSession(value); var editor = new Editor(new Renderer(el)); editor.setSession(doc); var env = { document: doc, editor: editor, onResize: editor.resize.bind(editor, null) }; if (oldNode) env.textarea = oldNode; event.addListener(window, "resize", env.onResize); editor.on("destroy", function() { event.removeListener(window, "resize", env.onResize); env.editor.container.env = null; // prevent memory leak on old ie }); editor.container.env = editor.env = env; return editor; }; exports.createEditSession = function(text, mode) { var doc = new EditSession(text, mode); doc.setUndoManager(new UndoManager()); return doc; } exports.EditSession = EditSession; exports.UndoManager = UndoManager; }); (function() { ace.require(["ace/ace"], function(a) { a && a.config.init(true); if (!window.ace) window.ace = a; for (var key in a) if (a.hasOwnProperty(key)) window.ace[key] = a[key]; }); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-beautify.js ================================================ ace.define("ace/ext/beautify/php_rules",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("ace/token_iterator").TokenIterator; exports.newLines = [{ type: 'support.php_tag', value: '' }, { type: 'paren.lparen', value: '{', indent: true }, { type: 'paren.rparen', breakBefore: true, value: '}', indent: false }, { type: 'paren.rparen', breakBefore: true, value: '})', indent: false, dontBreak: true }, { type: 'comment' }, { type: 'text', value: ';' }, { type: 'text', value: ':', context: 'php' }, { type: 'keyword', value: 'case', indent: true, dontBreak: true }, { type: 'keyword', value: 'default', indent: true, dontBreak: true }, { type: 'keyword', value: 'break', indent: false, dontBreak: true }, { type: 'punctuation.doctype.end', value: '>' }, { type: 'meta.tag.punctuation.end', value: '>' }, { type: 'meta.tag.punctuation.begin', value: '<', blockTag: true, indent: true, dontBreak: true }, { type: 'meta.tag.punctuation.begin', value: '' ){ context = 'php'; } else if( token.type == 'support.php_tag' && token.value == '?>' ){ context = 'html'; } else if( token.type == 'meta.tag.name.style' && context != 'css' ){ context = 'css'; } else if( token.type == 'meta.tag.name.style' && context == 'css' ){ context = 'html'; } else if( token.type == 'meta.tag.name.script' && context != 'js' ){ context = 'js'; } else if( token.type == 'meta.tag.name.script' && context == 'js' ){ context = 'html'; } nextToken = iterator.stepForward(); if (nextToken && nextToken.type.indexOf('meta.tag.name') == 0) { nextTag = nextToken.value; } if ( lastToken.type == 'support.php_tag' && lastToken.value == '' ) { dontBreak = false; } lastTag = tag; lastToken = token; token = nextToken; if (token===null) { break; } } return code; }; }); ace.define("ace/ext/beautify",["require","exports","module","ace/token_iterator","ace/ext/beautify/php_rules"], function(require, exports, module) { "use strict"; var TokenIterator = require("ace/token_iterator").TokenIterator; var phpTransform = require("./beautify/php_rules").transform; exports.beautify = function(session) { var iterator = new TokenIterator(session, 0, 0); var token = iterator.getCurrentToken(); var context = session.$modeId.split("/").pop(); var code = phpTransform(iterator, context); session.doc.setValue(code); }; exports.commands = [{ name: "beautify", exec: function(editor) { exports.beautify(editor.session); }, bindKey: "Ctrl-Shift-B" }] }); (function() { ace.require(["ace/ext/beautify"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-chromevox.js ================================================ ace.define("ace/ext/chromevox",["require","exports","module","ace/editor","ace/config"], function(require, exports, module) { var cvoxAce = {}; cvoxAce.SpeechProperty; cvoxAce.Cursor; cvoxAce.Token; cvoxAce.Annotation; var CONSTANT_PROP = { 'rate': 0.8, 'pitch': 0.4, 'volume': 0.9 }; var DEFAULT_PROP = { 'rate': 1, 'pitch': 0.5, 'volume': 0.9 }; var ENTITY_PROP = { 'rate': 0.8, 'pitch': 0.8, 'volume': 0.9 }; var KEYWORD_PROP = { 'rate': 0.8, 'pitch': 0.3, 'volume': 0.9 }; var STORAGE_PROP = { 'rate': 0.8, 'pitch': 0.7, 'volume': 0.9 }; var VARIABLE_PROP = { 'rate': 0.8, 'pitch': 0.8, 'volume': 0.9 }; var DELETED_PROP = { 'punctuationEcho': 'none', 'relativePitch': -0.6 }; var ERROR_EARCON = 'ALERT_NONMODAL'; var MODE_SWITCH_EARCON = 'ALERT_MODAL'; var NO_MATCH_EARCON = 'INVALID_KEYPRESS'; var INSERT_MODE_STATE = 'insertMode'; var COMMAND_MODE_STATE = 'start'; var REPLACE_LIST = [ { substr: ';', newSubstr: ' semicolon ' }, { substr: ':', newSubstr: ' colon ' } ]; var Command = { SPEAK_ANNOT: 'annots', SPEAK_ALL_ANNOTS: 'all_annots', TOGGLE_LOCATION: 'toggle_location', SPEAK_MODE: 'mode', SPEAK_ROW_COL: 'row_col', TOGGLE_DISPLACEMENT: 'toggle_displacement', FOCUS_TEXT: 'focus_text' }; var KEY_PREFIX = 'CONTROL + SHIFT '; cvoxAce.editor = null; var lastCursor = null; var annotTable = {}; var shouldSpeakRowLocation = false; var shouldSpeakDisplacement = false; var changed = false; var vimState = null; var keyCodeToShortcutMap = {}; var cmdToShortcutMap = {}; var getKeyShortcutString = function(keyCode) { return KEY_PREFIX + String.fromCharCode(keyCode); }; var isVimMode = function() { var keyboardHandler = cvoxAce.editor.keyBinding.getKeyboardHandler(); return keyboardHandler.$id === 'ace/keyboard/vim'; }; var getCurrentToken = function(cursor) { return cvoxAce.editor.getSession().getTokenAt(cursor.row, cursor.column + 1); }; var getCurrentLine = function(cursor) { return cvoxAce.editor.getSession().getLine(cursor.row); }; var onRowChange = function(currCursor) { if (annotTable[currCursor.row]) { cvox.Api.playEarcon(ERROR_EARCON); } if (shouldSpeakRowLocation) { cvox.Api.stop(); speakChar(currCursor); speakTokenQueue(getCurrentToken(currCursor)); speakLine(currCursor.row, 1); } else { speakLine(currCursor.row, 0); } }; var isWord = function(cursor) { var line = getCurrentLine(cursor); var lineSuffix = line.substr(cursor.column - 1); if (cursor.column === 0) { lineSuffix = ' ' + line; } var firstWordRegExp = /^\W(\w+)/; var words = firstWordRegExp.exec(lineSuffix); return words !== null; }; var rules = { 'constant': { prop: CONSTANT_PROP }, 'entity': { prop: ENTITY_PROP }, 'keyword': { prop: KEYWORD_PROP }, 'storage': { prop: STORAGE_PROP }, 'variable': { prop: VARIABLE_PROP }, 'meta': { prop: DEFAULT_PROP, replace: [ { substr: '', newSubstr: ' close tag ' }, { substr: '<', newSubstr: ' tag start ' }, { substr: '>', newSubstr: ' tag end ' } ] } }; var DEFAULT_RULE = { prop: DEFAULT_RULE }; var expand = function(value, replaceRules) { var newValue = value; for (var i = 0; i < replaceRules.length; i++) { var replaceRule = replaceRules[i]; var regexp = new RegExp(replaceRule.substr, 'g'); newValue = newValue.replace(regexp, replaceRule.newSubstr); } return newValue; }; var mergeTokens = function(tokens, start, end) { var newToken = {}; newToken.value = ''; newToken.type = tokens[start].type; for (var j = start; j < end; j++) { newToken.value += tokens[j].value; } return newToken; }; var mergeLikeTokens = function(tokens) { if (tokens.length <= 1) { return tokens; } var newTokens = []; var lastLikeIndex = 0; for (var i = 1; i < tokens.length; i++) { var lastLikeToken = tokens[lastLikeIndex]; var currToken = tokens[i]; if (getTokenRule(lastLikeToken) !== getTokenRule(currToken)) { newTokens.push(mergeTokens(tokens, lastLikeIndex, i)); lastLikeIndex = i; } } newTokens.push(mergeTokens(tokens, lastLikeIndex, tokens.length)); return newTokens; }; var isRowWhiteSpace = function(row) { var line = cvoxAce.editor.getSession().getLine(row); var whiteSpaceRegexp = /^\s*$/; return whiteSpaceRegexp.exec(line) !== null; }; var speakLine = function(row, queue) { var tokens = cvoxAce.editor.getSession().getTokens(row); if (tokens.length === 0 || isRowWhiteSpace(row)) { cvox.Api.playEarcon('EDITABLE_TEXT'); return; } tokens = mergeLikeTokens(tokens); var firstToken = tokens[0]; tokens = tokens.filter(function(token) { return token !== firstToken; }); speakToken_(firstToken, queue); tokens.forEach(speakTokenQueue); }; var speakTokenFlush = function(token) { speakToken_(token, 0); }; var speakTokenQueue = function(token) { speakToken_(token, 1); }; var getTokenRule = function(token) { if (!token || !token.type) { return; } var split = token.type.split('.'); if (split.length === 0) { return; } var type = split[0]; var rule = rules[type]; if (!rule) { return DEFAULT_RULE; } return rule; }; var speakToken_ = function(token, queue) { var rule = getTokenRule(token); var value = expand(token.value, REPLACE_LIST); if (rule.replace) { value = expand(value, rule.replace); } cvox.Api.speak(value, queue, rule.prop); }; var speakChar = function(cursor) { var line = getCurrentLine(cursor); cvox.Api.speak(line[cursor.column], 1); }; var speakDisplacement = function(lastCursor, currCursor) { var line = getCurrentLine(currCursor); var displace = line.substring(lastCursor.column, currCursor.column); displace = displace.replace(/ /g, ' space '); cvox.Api.speak(displace); }; var speakCharOrWordOrLine = function(lastCursor, currCursor) { if (Math.abs(lastCursor.column - currCursor.column) !== 1) { var currLineLength = getCurrentLine(currCursor).length; if (currCursor.column === 0 || currCursor.column === currLineLength) { speakLine(currCursor.row, 0); return; } if (isWord(currCursor)) { cvox.Api.stop(); speakTokenQueue(getCurrentToken(currCursor)); return; } } speakChar(currCursor); }; var onColumnChange = function(lastCursor, currCursor) { if (!cvoxAce.editor.selection.isEmpty()) { speakDisplacement(lastCursor, currCursor); cvox.Api.speak('selected', 1); } else if (shouldSpeakDisplacement) { speakDisplacement(lastCursor, currCursor); } else { speakCharOrWordOrLine(lastCursor, currCursor); } }; var onCursorChange = function(evt) { if (changed) { changed = false; return; } var currCursor = cvoxAce.editor.selection.getCursor(); if (currCursor.row !== lastCursor.row) { onRowChange(currCursor); } else { onColumnChange(lastCursor, currCursor); } lastCursor = currCursor; }; var onSelectionChange = function(evt) { if (cvoxAce.editor.selection.isEmpty()) { cvox.Api.speak('unselected'); } }; var onChange = function(evt) { var data = evt.data; switch (data.action) { case 'removeText': cvox.Api.speak(data.text, 0, DELETED_PROP); changed = true; break; case 'insertText': cvox.Api.speak(data.text, 0); changed = true; break; } }; var isNewAnnotation = function(annot) { var row = annot.row; var col = annot.column; return !annotTable[row] || !annotTable[row][col]; }; var populateAnnotations = function(annotations) { annotTable = {}; for (var i = 0; i < annotations.length; i++) { var annotation = annotations[i]; var row = annotation.row; var col = annotation.column; if (!annotTable[row]) { annotTable[row] = {}; } annotTable[row][col] = annotation; } }; var onAnnotationChange = function(evt) { var annotations = cvoxAce.editor.getSession().getAnnotations(); var newAnnotations = annotations.filter(isNewAnnotation); if (newAnnotations.length > 0) { cvox.Api.playEarcon(ERROR_EARCON); } populateAnnotations(annotations); }; var speakAnnot = function(annot) { var annotText = annot.type + ' ' + annot.text + ' on ' + rowColToString(annot.row, annot.column); annotText = annotText.replace(';', 'semicolon'); cvox.Api.speak(annotText, 1); }; var speakAnnotsByRow = function(row) { var annots = annotTable[row]; for (var col in annots) { speakAnnot(annots[col]); } }; var rowColToString = function(row, col) { return 'row ' + (row + 1) + ' column ' + (col + 1); }; var speakCurrRowAndCol = function() { cvox.Api.speak(rowColToString(lastCursor.row, lastCursor.column)); }; var speakAllAnnots = function() { for (var row in annotTable) { speakAnnotsByRow(row); } }; var speakMode = function() { if (!isVimMode()) { return; } switch (cvoxAce.editor.keyBinding.$data.state) { case INSERT_MODE_STATE: cvox.Api.speak('Insert mode'); break; case COMMAND_MODE_STATE: cvox.Api.speak('Command mode'); break; } }; var toggleSpeakRowLocation = function() { shouldSpeakRowLocation = !shouldSpeakRowLocation; if (shouldSpeakRowLocation) { cvox.Api.speak('Speak location on row change enabled.'); } else { cvox.Api.speak('Speak location on row change disabled.'); } }; var toggleSpeakDisplacement = function() { shouldSpeakDisplacement = !shouldSpeakDisplacement; if (shouldSpeakDisplacement) { cvox.Api.speak('Speak displacement on column changes.'); } else { cvox.Api.speak('Speak current character or word on column changes.'); } }; var onKeyDown = function(evt) { if (evt.ctrlKey && evt.shiftKey) { var shortcut = keyCodeToShortcutMap[evt.keyCode]; if (shortcut) { shortcut.func(); } } }; var onChangeStatus = function(evt, editor) { if (!isVimMode()) { return; } var state = editor.keyBinding.$data.state; if (state === vimState) { return; } switch (state) { case INSERT_MODE_STATE: cvox.Api.playEarcon(MODE_SWITCH_EARCON); cvox.Api.setKeyEcho(true); break; case COMMAND_MODE_STATE: cvox.Api.playEarcon(MODE_SWITCH_EARCON); cvox.Api.setKeyEcho(false); break; } vimState = state; }; var contextMenuHandler = function(evt) { var cmd = evt.detail['customCommand']; var shortcut = cmdToShortcutMap[cmd]; if (shortcut) { shortcut.func(); cvoxAce.editor.focus(); } }; var initContextMenu = function() { var ACTIONS = SHORTCUTS.map(function(shortcut) { return { desc: shortcut.desc + getKeyShortcutString(shortcut.keyCode), cmd: shortcut.cmd }; }); var body = document.querySelector('body'); body.setAttribute('contextMenuActions', JSON.stringify(ACTIONS)); body.addEventListener('ATCustomEvent', contextMenuHandler, true); }; var onFindSearchbox = function(evt) { if (evt.match) { speakLine(lastCursor.row, 0); } else { cvox.Api.playEarcon(NO_MATCH_EARCON); } }; var focus = function() { cvoxAce.editor.focus(); }; var SHORTCUTS = [ { keyCode: 49, func: function() { speakAnnotsByRow(lastCursor.row); }, cmd: Command.SPEAK_ANNOT, desc: 'Speak annotations on line' }, { keyCode: 50, func: speakAllAnnots, cmd: Command.SPEAK_ALL_ANNOTS, desc: 'Speak all annotations' }, { keyCode: 51, func: speakMode, cmd: Command.SPEAK_MODE, desc: 'Speak Vim mode' }, { keyCode: 52, func: toggleSpeakRowLocation, cmd: Command.TOGGLE_LOCATION, desc: 'Toggle speak row location' }, { keyCode: 53, func: speakCurrRowAndCol, cmd: Command.SPEAK_ROW_COL, desc: 'Speak row and column' }, { keyCode: 54, func: toggleSpeakDisplacement, cmd: Command.TOGGLE_DISPLACEMENT, desc: 'Toggle speak displacement' }, { keyCode: 55, func: focus, cmd: Command.FOCUS_TEXT, desc: 'Focus text' } ]; var onFocus = function() { cvoxAce.editor = editor; editor.getSession().selection.on('changeCursor', onCursorChange); editor.getSession().selection.on('changeSelection', onSelectionChange); editor.getSession().on('change', onChange); editor.getSession().on('changeAnnotation', onAnnotationChange); editor.on('changeStatus', onChangeStatus); editor.on('findSearchBox', onFindSearchbox); editor.container.addEventListener('keydown', onKeyDown); lastCursor = editor.selection.getCursor(); }; var init = function(editor) { onFocus(); SHORTCUTS.forEach(function(shortcut) { keyCodeToShortcutMap[shortcut.keyCode] = shortcut; cmdToShortcutMap[shortcut.cmd] = shortcut; }); editor.on('focus', onFocus); if (isVimMode()) { cvox.Api.setKeyEcho(false); } initContextMenu(); }; function cvoxApiExists() { return (typeof(cvox) !== 'undefined') && cvox && cvox.Api; } var tries = 0; var MAX_TRIES = 15; function watchForCvoxLoad(editor) { if (cvoxApiExists()) { init(editor); } else { tries++; if (tries >= MAX_TRIES) { return; } window.setTimeout(watchForCvoxLoad, 500, editor); } } var Editor = require('../editor').Editor; require('../config').defineOptions(Editor.prototype, 'editor', { enableChromevoxEnhancements: { set: function(val) { if (val) { watchForCvoxLoad(this); } }, value: true // turn it on by default or check for window.cvox } }); }); (function() { ace.require(["ace/ext/chromevox"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-elastic_tabstops_lite.js ================================================ ace.define("ace/ext/elastic_tabstops_lite",["require","exports","module","ace/editor","ace/config"], function(require, exports, module) { "use strict"; var ElasticTabstopsLite = function(editor) { this.$editor = editor; var self = this; var changedRows = []; var recordChanges = false; this.onAfterExec = function() { recordChanges = false; self.processRows(changedRows); changedRows = []; }; this.onExec = function() { recordChanges = true; }; this.onChange = function(e) { var range = e.data.range if (recordChanges) { if (changedRows.indexOf(range.start.row) == -1) changedRows.push(range.start.row); if (range.end.row != range.start.row) changedRows.push(range.end.row); } }; }; (function() { this.processRows = function(rows) { this.$inChange = true; var checkedRows = []; for (var r = 0, rowCount = rows.length; r < rowCount; r++) { var row = rows[r]; if (checkedRows.indexOf(row) > -1) continue; var cellWidthObj = this.$findCellWidthsForBlock(row); var cellWidths = this.$setBlockCellWidthsToMax(cellWidthObj.cellWidths); var rowIndex = cellWidthObj.firstRow; for (var w = 0, l = cellWidths.length; w < l; w++) { var widths = cellWidths[w]; checkedRows.push(rowIndex); this.$adjustRow(rowIndex, widths); rowIndex++; } } this.$inChange = false; }; this.$findCellWidthsForBlock = function(row) { var cellWidths = [], widths; var rowIter = row; while (rowIter >= 0) { widths = this.$cellWidthsForRow(rowIter); if (widths.length == 0) break; cellWidths.unshift(widths); rowIter--; } var firstRow = rowIter + 1; rowIter = row; var numRows = this.$editor.session.getLength(); while (rowIter < numRows - 1) { rowIter++; widths = this.$cellWidthsForRow(rowIter); if (widths.length == 0) break; cellWidths.push(widths); } return { cellWidths: cellWidths, firstRow: firstRow }; }; this.$cellWidthsForRow = function(row) { var selectionColumns = this.$selectionColumnsForRow(row); var tabs = [-1].concat(this.$tabsForRow(row)); var widths = tabs.map(function(el) { return 0; } ).slice(1); var line = this.$editor.session.getLine(row); for (var i = 0, len = tabs.length - 1; i < len; i++) { var leftEdge = tabs[i]+1; var rightEdge = tabs[i+1]; var rightmostSelection = this.$rightmostSelectionInCell(selectionColumns, rightEdge); var cell = line.substring(leftEdge, rightEdge); widths[i] = Math.max(cell.replace(/\s+$/g,'').length, rightmostSelection - leftEdge); } return widths; }; this.$selectionColumnsForRow = function(row) { var selections = [], cursor = this.$editor.getCursorPosition(); if (this.$editor.session.getSelection().isEmpty()) { if (row == cursor.row) selections.push(cursor.column); } return selections; }; this.$setBlockCellWidthsToMax = function(cellWidths) { var startingNewBlock = true, blockStartRow, blockEndRow, maxWidth; var columnInfo = this.$izip_longest(cellWidths); for (var c = 0, l = columnInfo.length; c < l; c++) { var column = columnInfo[c]; if (!column.push) { console.error(column); continue; } column.push(NaN); for (var r = 0, s = column.length; r < s; r++) { var width = column[r]; if (startingNewBlock) { blockStartRow = r; maxWidth = 0; startingNewBlock = false; } if (isNaN(width)) { blockEndRow = r; for (var j = blockStartRow; j < blockEndRow; j++) { cellWidths[j][c] = maxWidth; } startingNewBlock = true; } maxWidth = Math.max(maxWidth, width); } } return cellWidths; }; this.$rightmostSelectionInCell = function(selectionColumns, cellRightEdge) { var rightmost = 0; if (selectionColumns.length) { var lengths = []; for (var s = 0, length = selectionColumns.length; s < length; s++) { if (selectionColumns[s] <= cellRightEdge) lengths.push(s); else lengths.push(0); } rightmost = Math.max.apply(Math, lengths); } return rightmost; }; this.$tabsForRow = function(row) { var rowTabs = [], line = this.$editor.session.getLine(row), re = /\t/g, match; while ((match = re.exec(line)) != null) { rowTabs.push(match.index); } return rowTabs; }; this.$adjustRow = function(row, widths) { var rowTabs = this.$tabsForRow(row); if (rowTabs.length == 0) return; var bias = 0, location = -1; var expandedSet = this.$izip(widths, rowTabs); for (var i = 0, l = expandedSet.length; i < l; i++) { var w = expandedSet[i][0], it = expandedSet[i][1]; location += 1 + w; it += bias; var difference = location - it; if (difference == 0) continue; var partialLine = this.$editor.session.getLine(row).substr(0, it ); var strippedPartialLine = partialLine.replace(/\s*$/g, ""); var ispaces = partialLine.length - strippedPartialLine.length; if (difference > 0) { this.$editor.session.getDocument().insertInLine({row: row, column: it + 1}, Array(difference + 1).join(" ") + "\t"); this.$editor.session.getDocument().removeInLine(row, it, it + 1); bias += difference; } if (difference < 0 && ispaces >= -difference) { this.$editor.session.getDocument().removeInLine(row, it + difference, it); bias += difference; } } }; this.$izip_longest = function(iterables) { if (!iterables[0]) return []; var longest = iterables[0].length; var iterablesLength = iterables.length; for (var i = 1; i < iterablesLength; i++) { var iLength = iterables[i].length; if (iLength > longest) longest = iLength; } var expandedSet = []; for (var l = 0; l < longest; l++) { var set = []; for (var i = 0; i < iterablesLength; i++) { if (iterables[i][l] === "") set.push(NaN); else set.push(iterables[i][l]); } expandedSet.push(set); } return expandedSet; }; this.$izip = function(widths, tabs) { var size = widths.length >= tabs.length ? tabs.length : widths.length; var expandedSet = []; for (var i = 0; i < size; i++) { var set = [ widths[i], tabs[i] ]; expandedSet.push(set); } return expandedSet; }; }).call(ElasticTabstopsLite.prototype); exports.ElasticTabstopsLite = ElasticTabstopsLite; var Editor = require("../editor").Editor; require("../config").defineOptions(Editor.prototype, "editor", { useElasticTabstops: { set: function(val) { if (val) { if (!this.elasticTabstops) this.elasticTabstops = new ElasticTabstopsLite(this); this.commands.on("afterExec", this.elasticTabstops.onAfterExec); this.commands.on("exec", this.elasticTabstops.onExec); this.on("change", this.elasticTabstops.onChange); } else if (this.elasticTabstops) { this.commands.removeListener("afterExec", this.elasticTabstops.onAfterExec); this.commands.removeListener("exec", this.elasticTabstops.onExec); this.removeListener("change", this.elasticTabstops.onChange); } } } }); }); (function() { ace.require(["ace/ext/elastic_tabstops_lite"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-emmet.js ================================================ ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var lang = require("./lib/lang"); var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var HashHandler = require("./keyboard/hash_handler").HashHandler; var Tokenizer = require("./tokenizer").Tokenizer; var comparePoints = Range.comparePoints; var SnippetManager = function() { this.snippetMap = {}; this.snippetNameMap = {}; }; (function() { oop.implement(this, EventEmitter); this.getTokenizer = function() { function TabstopToken(str, _, stack) { str = str.substr(1); if (/^\d+$/.test(str) && !stack.inFormatString) return [{tabstopId: parseInt(str, 10)}]; return [{text: str}]; } function escape(ch) { return "(?:[^\\\\" + ch + "]|\\\\.)"; } SnippetManager.$tokenizer = new Tokenizer({ start: [ {regex: /:/, onMatch: function(val, state, stack) { if (stack.length && stack[0].expectIf) { stack[0].expectIf = false; stack[0].elseBranch = stack[0]; return [stack[0]]; } return ":"; }}, {regex: /\\./, onMatch: function(val, state, stack) { var ch = val[1]; if (ch == "}" && stack.length) { val = ch; }else if ("`$\\".indexOf(ch) != -1) { val = ch; } else if (stack.inFormatString) { if (ch == "n") val = "\n"; else if (ch == "t") val = "\n"; else if ("ulULE".indexOf(ch) != -1) { val = {changeCase: ch, local: ch > "a"}; } } return [val]; }}, {regex: /}/, onMatch: function(val, state, stack) { return [stack.length ? stack.shift() : val]; }}, {regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken}, {regex: /\$\{[\dA-Z_a-z]+/, onMatch: function(str, state, stack) { var t = TabstopToken(str.substr(1), state, stack); stack.unshift(t[0]); return t; }, next: "snippetVar"}, {regex: /\n/, token: "newline", merge: false} ], snippetVar: [ {regex: "\\|" + escape("\\|") + "*\\|", onMatch: function(val, state, stack) { stack[0].choices = val.slice(1, -1).split(","); }, next: "start"}, {regex: "/(" + escape("/") + "+)/(?:(" + escape("/") + "*)/)(\\w*):?", onMatch: function(val, state, stack) { var ts = stack[0]; ts.fmtString = val; val = this.splitRegex.exec(val); ts.guard = val[1]; ts.fmt = val[2]; ts.flag = val[3]; return ""; }, next: "start"}, {regex: "`" + escape("`") + "*`", onMatch: function(val, state, stack) { stack[0].code = val.splice(1, -1); return ""; }, next: "start"}, {regex: "\\?", onMatch: function(val, state, stack) { if (stack[0]) stack[0].expectIf = true; }, next: "start"}, {regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "start"} ], formatString: [ {regex: "/(" + escape("/") + "+)/", token: "regex"}, {regex: "", onMatch: function(val, state, stack) { stack.inFormatString = true; }, next: "start"} ] }); SnippetManager.prototype.getTokenizer = function() { return SnippetManager.$tokenizer; }; return SnippetManager.$tokenizer; }; this.tokenizeTmSnippet = function(str, startState) { return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) { return x.value || x; }); }; this.$getDefaultValue = function(editor, name) { if (/^[A-Z]\d+$/.test(name)) { var i = name.substr(1); return (this.variables[name[0] + "__"] || {})[i]; } if (/^\d+$/.test(name)) { return (this.variables.__ || {})[name]; } name = name.replace(/^TM_/, ""); if (!editor) return; var s = editor.session; switch(name) { case "CURRENT_WORD": var r = s.getWordRange(); case "SELECTION": case "SELECTED_TEXT": return s.getTextRange(r); case "CURRENT_LINE": return s.getLine(editor.getCursorPosition().row); case "PREV_LINE": // not possible in textmate return s.getLine(editor.getCursorPosition().row - 1); case "LINE_INDEX": return editor.getCursorPosition().column; case "LINE_NUMBER": return editor.getCursorPosition().row + 1; case "SOFT_TABS": return s.getUseSoftTabs() ? "YES" : "NO"; case "TAB_SIZE": return s.getTabSize(); case "FILENAME": case "FILEPATH": return ""; case "FULLNAME": return "Ace"; } }; this.variables = {}; this.getVariableValue = function(editor, varName) { if (this.variables.hasOwnProperty(varName)) return this.variables[varName](editor, varName) || ""; return this.$getDefaultValue(editor, varName) || ""; }; this.tmStrFormat = function(str, ch, editor) { var flag = ch.flag || ""; var re = ch.guard; re = new RegExp(re, flag.replace(/[^gi]/, "")); var fmtTokens = this.tokenizeTmSnippet(ch.fmt, "formatString"); var _self = this; var formatted = str.replace(re, function() { _self.variables.__ = arguments; var fmtParts = _self.resolveVariables(fmtTokens, editor); var gChangeCase = "E"; for (var i = 0; i < fmtParts.length; i++) { var ch = fmtParts[i]; if (typeof ch == "object") { fmtParts[i] = ""; if (ch.changeCase && ch.local) { var next = fmtParts[i + 1]; if (next && typeof next == "string") { if (ch.changeCase == "u") fmtParts[i] = next[0].toUpperCase(); else fmtParts[i] = next[0].toLowerCase(); fmtParts[i + 1] = next.substr(1); } } else if (ch.changeCase) { gChangeCase = ch.changeCase; } } else if (gChangeCase == "U") { fmtParts[i] = ch.toUpperCase(); } else if (gChangeCase == "L") { fmtParts[i] = ch.toLowerCase(); } } return fmtParts.join(""); }); this.variables.__ = null; return formatted; }; this.resolveVariables = function(snippet, editor) { var result = []; for (var i = 0; i < snippet.length; i++) { var ch = snippet[i]; if (typeof ch == "string") { result.push(ch); } else if (typeof ch != "object") { continue; } else if (ch.skip) { gotoNext(ch); } else if (ch.processed < i) { continue; } else if (ch.text) { var value = this.getVariableValue(editor, ch.text); if (value && ch.fmtString) value = this.tmStrFormat(value, ch); ch.processed = i; if (ch.expectIf == null) { if (value) { result.push(value); gotoNext(ch); } } else { if (value) { ch.skip = ch.elseBranch; } else gotoNext(ch); } } else if (ch.tabstopId != null) { result.push(ch); } else if (ch.changeCase != null) { result.push(ch); } } function gotoNext(ch) { var i1 = snippet.indexOf(ch, i + 1); if (i1 != -1) i = i1; } return result; }; this.insertSnippetForSelection = function(editor, snippetText) { var cursor = editor.getCursorPosition(); var line = editor.session.getLine(cursor.row); var tabString = editor.session.getTabString(); var indentString = line.match(/^\s*/)[0]; if (cursor.column < indentString.length) indentString = indentString.slice(0, cursor.column); var tokens = this.tokenizeTmSnippet(snippetText); tokens = this.resolveVariables(tokens, editor); tokens = tokens.map(function(x) { if (x == "\n") return x + indentString; if (typeof x == "string") return x.replace(/\t/g, tabString); return x; }); var tabstops = []; tokens.forEach(function(p, i) { if (typeof p != "object") return; var id = p.tabstopId; var ts = tabstops[id]; if (!ts) { ts = tabstops[id] = []; ts.index = id; ts.value = ""; } if (ts.indexOf(p) !== -1) return; ts.push(p); var i1 = tokens.indexOf(p, i + 1); if (i1 === -1) return; var value = tokens.slice(i + 1, i1); var isNested = value.some(function(t) {return typeof t === "object"}); if (isNested && !ts.value) { ts.value = value; } else if (value.length && (!ts.value || typeof ts.value !== "string")) { ts.value = value.join(""); } }); tabstops.forEach(function(ts) {ts.length = 0}); var expanding = {}; function copyValue(val) { var copy = []; for (var i = 0; i < val.length; i++) { var p = val[i]; if (typeof p == "object") { if (expanding[p.tabstopId]) continue; var j = val.lastIndexOf(p, i - 1); p = copy[j] || {tabstopId: p.tabstopId}; } copy[i] = p; } return copy; } for (var i = 0; i < tokens.length; i++) { var p = tokens[i]; if (typeof p != "object") continue; var id = p.tabstopId; var i1 = tokens.indexOf(p, i + 1); if (expanding[id]) { if (expanding[id] === p) expanding[id] = null; continue; } var ts = tabstops[id]; var arg = typeof ts.value == "string" ? [ts.value] : copyValue(ts.value); arg.unshift(i + 1, Math.max(0, i1 - i)); arg.push(p); expanding[id] = p; tokens.splice.apply(tokens, arg); if (ts.indexOf(p) === -1) ts.push(p); } var row = 0, column = 0; var text = ""; tokens.forEach(function(t) { if (typeof t === "string") { if (t[0] === "\n"){ column = t.length - 1; row ++; } else column += t.length; text += t; } else { if (!t.start) t.start = {row: row, column: column}; else t.end = {row: row, column: column}; } }); var range = editor.getSelectionRange(); var end = editor.session.replace(range, text); var tabstopManager = new TabstopManager(editor); var selectionId = editor.inVirtualSelectionMode && editor.selection.index; tabstopManager.addTabstops(tabstops, range.start, end, selectionId); }; this.insertSnippet = function(editor, snippetText) { var self = this; if (editor.inVirtualSelectionMode) return self.insertSnippetForSelection(editor, snippetText); editor.forEachSelection(function() { self.insertSnippetForSelection(editor, snippetText); }, null, {keepOrder: true}); if (editor.tabstopManager) editor.tabstopManager.tabNext(); }; this.$getScope = function(editor) { var scope = editor.session.$mode.$id || ""; scope = scope.split("/").pop(); if (scope === "html" || scope === "php") { if (scope === "php" && !editor.session.$mode.inlinePhp) scope = "html"; var c = editor.getCursorPosition(); var state = editor.session.getState(c.row); if (typeof state === "object") { state = state[0]; } if (state.substring) { if (state.substring(0, 3) == "js-") scope = "javascript"; else if (state.substring(0, 4) == "css-") scope = "css"; else if (state.substring(0, 4) == "php-") scope = "php"; } } return scope; }; this.getActiveScopes = function(editor) { var scope = this.$getScope(editor); var scopes = [scope]; var snippetMap = this.snippetMap; if (snippetMap[scope] && snippetMap[scope].includeScopes) { scopes.push.apply(scopes, snippetMap[scope].includeScopes); } scopes.push("_"); return scopes; }; this.expandWithTab = function(editor, options) { var self = this; var result = editor.forEachSelection(function() { return self.expandSnippetForSelection(editor, options); }, null, {keepOrder: true}); if (result && editor.tabstopManager) editor.tabstopManager.tabNext(); return result; }; this.expandSnippetForSelection = function(editor, options) { var cursor = editor.getCursorPosition(); var line = editor.session.getLine(cursor.row); var before = line.substring(0, cursor.column); var after = line.substr(cursor.column); var snippetMap = this.snippetMap; var snippet; this.getActiveScopes(editor).some(function(scope) { var snippets = snippetMap[scope]; if (snippets) snippet = this.findMatchingSnippet(snippets, before, after); return !!snippet; }, this); if (!snippet) return false; if (options && options.dryRun) return true; editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length ); this.variables.M__ = snippet.matchBefore; this.variables.T__ = snippet.matchAfter; this.insertSnippetForSelection(editor, snippet.content); this.variables.M__ = this.variables.T__ = null; return true; }; this.findMatchingSnippet = function(snippetList, before, after) { for (var i = snippetList.length; i--;) { var s = snippetList[i]; if (s.startRe && !s.startRe.test(before)) continue; if (s.endRe && !s.endRe.test(after)) continue; if (!s.startRe && !s.endRe) continue; s.matchBefore = s.startRe ? s.startRe.exec(before) : [""]; s.matchAfter = s.endRe ? s.endRe.exec(after) : [""]; s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : ""; s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : ""; return s; } }; this.snippetMap = {}; this.snippetNameMap = {}; this.register = function(snippets, scope) { var snippetMap = this.snippetMap; var snippetNameMap = this.snippetNameMap; var self = this; if (!snippets) snippets = []; function wrapRegexp(src) { if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src)) src = "(?:" + src + ")"; return src || ""; } function guardedRegexp(re, guard, opening) { re = wrapRegexp(re); guard = wrapRegexp(guard); if (opening) { re = guard + re; if (re && re[re.length - 1] != "$") re = re + "$"; } else { re = re + guard; if (re && re[0] != "^") re = "^" + re; } return new RegExp(re); } function addSnippet(s) { if (!s.scope) s.scope = scope || "_"; scope = s.scope; if (!snippetMap[scope]) { snippetMap[scope] = []; snippetNameMap[scope] = {}; } var map = snippetNameMap[scope]; if (s.name) { var old = map[s.name]; if (old) self.unregister(old); map[s.name] = s; } snippetMap[scope].push(s); if (s.tabTrigger && !s.trigger) { if (!s.guard && /^\w/.test(s.tabTrigger)) s.guard = "\\b"; s.trigger = lang.escapeRegExp(s.tabTrigger); } s.startRe = guardedRegexp(s.trigger, s.guard, true); s.triggerRe = new RegExp(s.trigger, "", true); s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true); s.endTriggerRe = new RegExp(s.endTrigger, "", true); } if (snippets && snippets.content) addSnippet(snippets); else if (Array.isArray(snippets)) snippets.forEach(addSnippet); this._signal("registerSnippets", {scope: scope}); }; this.unregister = function(snippets, scope) { var snippetMap = this.snippetMap; var snippetNameMap = this.snippetNameMap; function removeSnippet(s) { var nameMap = snippetNameMap[s.scope||scope]; if (nameMap && nameMap[s.name]) { delete nameMap[s.name]; var map = snippetMap[s.scope||scope]; var i = map && map.indexOf(s); if (i >= 0) map.splice(i, 1); } } if (snippets.content) removeSnippet(snippets); else if (Array.isArray(snippets)) snippets.forEach(removeSnippet); }; this.parseSnippetFile = function(str) { str = str.replace(/\r/g, ""); var list = [], snippet = {}; var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm; var m; while (m = re.exec(str)) { if (m[1]) { try { snippet = JSON.parse(m[1]); list.push(snippet); } catch (e) {} } if (m[4]) { snippet.content = m[4].replace(/^\t/gm, ""); list.push(snippet); snippet = {}; } else { var key = m[2], val = m[3]; if (key == "regex") { var guardRe = /\/((?:[^\/\\]|\\.)*)|$/g; snippet.guard = guardRe.exec(val)[1]; snippet.trigger = guardRe.exec(val)[1]; snippet.endTrigger = guardRe.exec(val)[1]; snippet.endGuard = guardRe.exec(val)[1]; } else if (key == "snippet") { snippet.tabTrigger = val.match(/^\S*/)[0]; if (!snippet.name) snippet.name = val; } else { snippet[key] = val; } } } return list; }; this.getSnippetByName = function(name, editor) { var snippetMap = this.snippetNameMap; var snippet; this.getActiveScopes(editor).some(function(scope) { var snippets = snippetMap[scope]; if (snippets) snippet = snippets[name]; return !!snippet; }, this); return snippet; }; }).call(SnippetManager.prototype); var TabstopManager = function(editor) { if (editor.tabstopManager) return editor.tabstopManager; editor.tabstopManager = this; this.$onChange = this.onChange.bind(this); this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule; this.$onChangeSession = this.onChangeSession.bind(this); this.$onAfterExec = this.onAfterExec.bind(this); this.attach(editor); }; (function() { this.attach = function(editor) { this.index = 0; this.ranges = []; this.tabstops = []; this.$openTabstops = null; this.selectedTabstop = null; this.editor = editor; this.editor.on("change", this.$onChange); this.editor.on("changeSelection", this.$onChangeSelection); this.editor.on("changeSession", this.$onChangeSession); this.editor.commands.on("afterExec", this.$onAfterExec); this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); }; this.detach = function() { this.tabstops.forEach(this.removeTabstopMarkers, this); this.ranges = null; this.tabstops = null; this.selectedTabstop = null; this.editor.removeListener("change", this.$onChange); this.editor.removeListener("changeSelection", this.$onChangeSelection); this.editor.removeListener("changeSession", this.$onChangeSession); this.editor.commands.removeListener("afterExec", this.$onAfterExec); this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); this.editor.tabstopManager = null; this.editor = null; }; this.onChange = function(e) { var changeRange = e.data.range; var isRemove = e.data.action[0] == "r"; var start = changeRange.start; var end = changeRange.end; var startRow = start.row; var endRow = end.row; var lineDif = endRow - startRow; var colDiff = end.column - start.column; if (isRemove) { lineDif = -lineDif; colDiff = -colDiff; } if (!this.$inChange && isRemove) { var ts = this.selectedTabstop; var changedOutside = ts && !ts.some(function(r) { return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0; }); if (changedOutside) return this.detach(); } var ranges = this.ranges; for (var i = 0; i < ranges.length; i++) { var r = ranges[i]; if (r.end.row < start.row) continue; if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) { this.removeRange(r); i--; continue; } if (r.start.row == startRow && r.start.column > start.column) r.start.column += colDiff; if (r.end.row == startRow && r.end.column >= start.column) r.end.column += colDiff; if (r.start.row >= startRow) r.start.row += lineDif; if (r.end.row >= startRow) r.end.row += lineDif; if (comparePoints(r.start, r.end) > 0) this.removeRange(r); } if (!ranges.length) this.detach(); }; this.updateLinkedFields = function() { var ts = this.selectedTabstop; if (!ts || !ts.hasLinkedRanges) return; this.$inChange = true; var session = this.editor.session; var text = session.getTextRange(ts.firstNonLinked); for (var i = ts.length; i--;) { var range = ts[i]; if (!range.linked) continue; var fmt = exports.snippetManager.tmStrFormat(text, range.original); session.replace(range, fmt); } this.$inChange = false; }; this.onAfterExec = function(e) { if (e.command && !e.command.readOnly) this.updateLinkedFields(); }; this.onChangeSelection = function() { if (!this.editor) return; var lead = this.editor.selection.lead; var anchor = this.editor.selection.anchor; var isEmpty = this.editor.selection.isEmpty(); for (var i = this.ranges.length; i--;) { if (this.ranges[i].linked) continue; var containsLead = this.ranges[i].contains(lead.row, lead.column); var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column); if (containsLead && containsAnchor) return; } this.detach(); }; this.onChangeSession = function() { this.detach(); }; this.tabNext = function(dir) { var max = this.tabstops.length; var index = this.index + (dir || 1); index = Math.min(Math.max(index, 1), max); if (index == max) index = 0; this.selectTabstop(index); if (index === 0) this.detach(); }; this.selectTabstop = function(index) { this.$openTabstops = null; var ts = this.tabstops[this.index]; if (ts) this.addTabstopMarkers(ts); this.index = index; ts = this.tabstops[this.index]; if (!ts || !ts.length) return; this.selectedTabstop = ts; if (!this.editor.inVirtualSelectionMode) { var sel = this.editor.multiSelect; sel.toSingleRange(ts.firstNonLinked.clone()); for (var i = ts.length; i--;) { if (ts.hasLinkedRanges && ts[i].linked) continue; sel.addRange(ts[i].clone(), true); } if (sel.ranges[0]) sel.addRange(sel.ranges[0].clone()); } else { this.editor.selection.setRange(ts.firstNonLinked); } this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); }; this.addTabstops = function(tabstops, start, end) { if (!this.$openTabstops) this.$openTabstops = []; if (!tabstops[0]) { var p = Range.fromPoints(end, end); moveRelative(p.start, start); moveRelative(p.end, start); tabstops[0] = [p]; tabstops[0].index = 0; } var i = this.index; var arg = [i + 1, 0]; var ranges = this.ranges; tabstops.forEach(function(ts, index) { var dest = this.$openTabstops[index] || ts; for (var i = ts.length; i--;) { var p = ts[i]; var range = Range.fromPoints(p.start, p.end || p.start); movePoint(range.start, start); movePoint(range.end, start); range.original = p; range.tabstop = dest; ranges.push(range); if (dest != ts) dest.unshift(range); else dest[i] = range; if (p.fmtString) { range.linked = true; dest.hasLinkedRanges = true; } else if (!dest.firstNonLinked) dest.firstNonLinked = range; } if (!dest.firstNonLinked) dest.hasLinkedRanges = false; if (dest === ts) { arg.push(dest); this.$openTabstops[index] = dest; } this.addTabstopMarkers(dest); }, this); if (arg.length > 2) { if (this.tabstops.length) arg.push(arg.splice(2, 1)[0]); this.tabstops.splice.apply(this.tabstops, arg); } }; this.addTabstopMarkers = function(ts) { var session = this.editor.session; ts.forEach(function(range) { if (!range.markerId) range.markerId = session.addMarker(range, "ace_snippet-marker", "text"); }); }; this.removeTabstopMarkers = function(ts) { var session = this.editor.session; ts.forEach(function(range) { session.removeMarker(range.markerId); range.markerId = null; }); }; this.removeRange = function(range) { var i = range.tabstop.indexOf(range); range.tabstop.splice(i, 1); i = this.ranges.indexOf(range); this.ranges.splice(i, 1); this.editor.session.removeMarker(range.markerId); if (!range.tabstop.length) { i = this.tabstops.indexOf(range.tabstop); if (i != -1) this.tabstops.splice(i, 1); if (!this.tabstops.length) this.detach(); } }; this.keyboardHandler = new HashHandler(); this.keyboardHandler.bindKeys({ "Tab": function(ed) { if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) { return; } ed.tabstopManager.tabNext(1); }, "Shift-Tab": function(ed) { ed.tabstopManager.tabNext(-1); }, "Esc": function(ed) { ed.tabstopManager.detach(); }, "Return": function(ed) { return false; } }); }).call(TabstopManager.prototype); var changeTracker = {}; changeTracker.onChange = Anchor.prototype.onChange; changeTracker.setPosition = function(row, column) { this.pos.row = row; this.pos.column = column; }; changeTracker.update = function(pos, delta, $insertRight) { this.$insertRight = $insertRight; this.pos = pos; this.onChange(delta); }; var movePoint = function(point, diff) { if (point.row == 0) point.column += diff.column; point.row += diff.row; }; var moveRelative = function(point, start) { if (point.row == start.row) point.column -= start.column; point.row -= start.row; }; require("./lib/dom").importCssString("\ .ace_snippet-marker {\ -moz-box-sizing: border-box;\ box-sizing: border-box;\ background: rgba(194, 193, 208, 0.09);\ border: 1px dotted rgba(211, 208, 235, 0.62);\ position: absolute;\ }"); exports.snippetManager = new SnippetManager(); var Editor = require("./editor").Editor; (function() { this.insertSnippet = function(content, options) { return exports.snippetManager.insertSnippet(this, content, options); }; this.expandSnippet = function(options) { return exports.snippetManager.expandWithTab(this, options); }; }).call(Editor.prototype); }); ace.define("ace/ext/emmet",["require","exports","module","ace/keyboard/hash_handler","ace/editor","ace/snippets","ace/range","resources","resources","range","tabStops","resources","utils","actions","ace/config","ace/config"], function(require, exports, module) { "use strict"; var HashHandler = require("ace/keyboard/hash_handler").HashHandler; var Editor = require("ace/editor").Editor; var snippetManager = require("ace/snippets").snippetManager; var Range = require("ace/range").Range; var emmet, emmetPath; function AceEmmetEditor() {} AceEmmetEditor.prototype = { setupContext: function(editor) { this.ace = editor; this.indentation = editor.session.getTabString(); if (!emmet) emmet = window.emmet; emmet.require("resources").setVariable("indentation", this.indentation); this.$syntax = null; this.$syntax = this.getSyntax(); }, getSelectionRange: function() { var range = this.ace.getSelectionRange(); var doc = this.ace.session.doc; return { start: doc.positionToIndex(range.start), end: doc.positionToIndex(range.end) }; }, createSelection: function(start, end) { var doc = this.ace.session.doc; this.ace.selection.setRange({ start: doc.indexToPosition(start), end: doc.indexToPosition(end) }); }, getCurrentLineRange: function() { var ace = this.ace; var row = ace.getCursorPosition().row; var lineLength = ace.session.getLine(row).length; var index = ace.session.doc.positionToIndex({row: row, column: 0}); return { start: index, end: index + lineLength }; }, getCaretPos: function(){ var pos = this.ace.getCursorPosition(); return this.ace.session.doc.positionToIndex(pos); }, setCaretPos: function(index){ var pos = this.ace.session.doc.indexToPosition(index); this.ace.selection.moveToPosition(pos); }, getCurrentLine: function() { var row = this.ace.getCursorPosition().row; return this.ace.session.getLine(row); }, replaceContent: function(value, start, end, noIndent) { if (end == null) end = start == null ? this.getContent().length : start; if (start == null) start = 0; var editor = this.ace; var doc = editor.session.doc; var range = Range.fromPoints(doc.indexToPosition(start), doc.indexToPosition(end)); editor.session.remove(range); range.end = range.start; value = this.$updateTabstops(value); snippetManager.insertSnippet(editor, value); }, getContent: function(){ return this.ace.getValue(); }, getSyntax: function() { if (this.$syntax) return this.$syntax; var syntax = this.ace.session.$modeId.split("/").pop(); if (syntax == "html" || syntax == "php") { var cursor = this.ace.getCursorPosition(); var state = this.ace.session.getState(cursor.row); if (typeof state != "string") state = state[0]; if (state) { state = state.split("-"); if (state.length > 1) syntax = state[0]; else if (syntax == "php") syntax = "html"; } } return syntax; }, getProfileName: function() { switch(this.getSyntax()) { case "css": return "css"; case "xml": case "xsl": return "xml"; case "html": var profile = emmet.require("resources").getVariable("profile"); if (!profile) profile = this.ace.session.getLines(0,2).join("").search(/]+XHTML/i) != -1 ? "xhtml": "html"; return profile; } return "xhtml"; }, prompt: function(title) { return prompt(title); }, getSelection: function() { return this.ace.session.getTextRange(); }, getFilePath: function() { return ""; }, $updateTabstops: function(value) { var base = 1000; var zeroBase = 0; var lastZero = null; var range = emmet.require('range'); var ts = emmet.require('tabStops'); var settings = emmet.require('resources').getVocabulary("user"); var tabstopOptions = { tabstop: function(data) { var group = parseInt(data.group, 10); var isZero = group === 0; if (isZero) group = ++zeroBase; else group += base; var placeholder = data.placeholder; if (placeholder) { placeholder = ts.processText(placeholder, tabstopOptions); } var result = '${' + group + (placeholder ? ':' + placeholder : '') + '}'; if (isZero) { lastZero = range.create(data.start, result); } return result; }, escape: function(ch) { if (ch == '$') return '\\$'; if (ch == '\\') return '\\\\'; return ch; } }; value = ts.processText(value, tabstopOptions); if (settings.variables['insert_final_tabstop'] && !/\$\{0\}$/.test(value)) { value += '${0}'; } else if (lastZero) { value = emmet.require('utils').replaceSubstring(value, '${0}', lastZero); } return value; } }; var keymap = { expand_abbreviation: {"mac": "ctrl+alt+e", "win": "alt+e"}, match_pair_outward: {"mac": "ctrl+d", "win": "ctrl+,"}, match_pair_inward: {"mac": "ctrl+j", "win": "ctrl+shift+0"}, matching_pair: {"mac": "ctrl+alt+j", "win": "alt+j"}, next_edit_point: "alt+right", prev_edit_point: "alt+left", toggle_comment: {"mac": "command+/", "win": "ctrl+/"}, split_join_tag: {"mac": "shift+command+'", "win": "shift+ctrl+`"}, remove_tag: {"mac": "command+'", "win": "shift+ctrl+;"}, evaluate_math_expression: {"mac": "shift+command+y", "win": "shift+ctrl+y"}, increment_number_by_1: "ctrl+up", decrement_number_by_1: "ctrl+down", increment_number_by_01: "alt+up", decrement_number_by_01: "alt+down", increment_number_by_10: {"mac": "alt+command+up", "win": "shift+alt+up"}, decrement_number_by_10: {"mac": "alt+command+down", "win": "shift+alt+down"}, select_next_item: {"mac": "shift+command+.", "win": "shift+ctrl+."}, select_previous_item: {"mac": "shift+command+,", "win": "shift+ctrl+,"}, reflect_css_value: {"mac": "shift+command+r", "win": "shift+ctrl+r"}, encode_decode_data_url: {"mac": "shift+ctrl+d", "win": "ctrl+'"}, expand_abbreviation_with_tab: "Tab", wrap_with_abbreviation: {"mac": "shift+ctrl+a", "win": "shift+ctrl+a"} }; var editorProxy = new AceEmmetEditor(); exports.commands = new HashHandler(); exports.runEmmetCommand = function(editor) { try { editorProxy.setupContext(editor); if (editorProxy.getSyntax() == "php") return false; var actions = emmet.require("actions"); if (this.action == "expand_abbreviation_with_tab") { if (!editor.selection.isEmpty()) return false; } if (this.action == "wrap_with_abbreviation") { return setTimeout(function() { actions.run("wrap_with_abbreviation", editorProxy); }, 0); } var pos = editor.selection.lead; var token = editor.session.getTokenAt(pos.row, pos.column); if (token && /\btag\b/.test(token.type)) return false; var result = actions.run(this.action, editorProxy); } catch(e) { editor._signal("changeStatus", typeof e == "string" ? e : e.message); console.log(e); result = false; } return result; }; for (var command in keymap) { exports.commands.addCommand({ name: "emmet:" + command, action: command, bindKey: keymap[command], exec: exports.runEmmetCommand, multiSelectAction: "forEach" }); } exports.updateCommands = function(editor, enabled) { if (enabled) { editor.keyBinding.addKeyboardHandler(exports.commands); } else { editor.keyBinding.removeKeyboardHandler(exports.commands); } }; exports.isSupportedMode = function(modeId) { return modeId && /css|less|scss|sass|stylus|html|php|twig|ejs/.test(modeId); }; var onChangeMode = function(e, target) { var editor = target; if (!editor) return; var enabled = exports.isSupportedMode(editor.session.$modeId); if (e.enableEmmet === false) enabled = false; if (enabled) { if (typeof emmetPath == "string") { require("ace/config").loadModule(emmetPath, function() { emmetPath = null; }); } } exports.updateCommands(editor, enabled); }; exports.AceEmmetEditor = AceEmmetEditor; require("ace/config").defineOptions(Editor.prototype, "editor", { enableEmmet: { set: function(val) { this[val ? "on" : "removeListener"]("changeMode", onChangeMode); onChangeMode({enableEmmet: !!val}, this); }, value: true } }); exports.setCore = function(e) { if (typeof e == "string") emmetPath = e; else emmet = e; }; }); (function() { ace.require(["ace/ext/emmet"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-error_marker.js ================================================ ; (function() { ace.require(["ace/ext/error_marker"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-keybinding_menu.js ================================================ ace.define("ace/ext/menu_tools/overlay_page",["require","exports","module","ace/lib/dom"], function(require, exports, module) { 'use strict'; var dom = require("../../lib/dom"); var cssText = "#ace_settingsmenu, #kbshortcutmenu {\ background-color: #F7F7F7;\ color: black;\ box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\ padding: 1em 0.5em 2em 1em;\ overflow: auto;\ position: absolute;\ margin: 0;\ bottom: 0;\ right: 0;\ top: 0;\ z-index: 9991;\ cursor: default;\ }\ .ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\ box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\ background-color: rgba(255, 255, 255, 0.6);\ color: black;\ }\ .ace_optionsMenuEntry:hover {\ background-color: rgba(100, 100, 100, 0.1);\ -webkit-transition: all 0.5s;\ transition: all 0.3s\ }\ .ace_closeButton {\ background: rgba(245, 146, 146, 0.5);\ border: 1px solid #F48A8A;\ border-radius: 50%;\ padding: 7px;\ position: absolute;\ right: -8px;\ top: -8px;\ z-index: 1000;\ }\ .ace_closeButton{\ background: rgba(245, 146, 146, 0.9);\ }\ .ace_optionsMenuKey {\ color: darkslateblue;\ font-weight: bold;\ }\ .ace_optionsMenuCommand {\ color: darkcyan;\ font-weight: normal;\ }"; dom.importCssString(cssText); module.exports.overlayPage = function overlayPage(editor, contentElement, top, right, bottom, left) { top = top ? 'top: ' + top + ';' : ''; bottom = bottom ? 'bottom: ' + bottom + ';' : ''; right = right ? 'right: ' + right + ';' : ''; left = left ? 'left: ' + left + ';' : ''; var closer = document.createElement('div'); var contentContainer = document.createElement('div'); function documentEscListener(e) { if (e.keyCode === 27) { closer.click(); } } closer.style.cssText = 'margin: 0; padding: 0; ' + 'position: fixed; top:0; bottom:0; left:0; right:0;' + 'z-index: 9990; ' + 'background-color: rgba(0, 0, 0, 0.3);'; closer.addEventListener('click', function() { document.removeEventListener('keydown', documentEscListener); closer.parentNode.removeChild(closer); editor.focus(); closer = null; }); document.addEventListener('keydown', documentEscListener); contentContainer.style.cssText = top + right + bottom + left; contentContainer.addEventListener('click', function(e) { e.stopPropagation(); }); var wrapper = dom.createElement("div"); wrapper.style.position = "relative"; var closeButton = dom.createElement("div"); closeButton.className = "ace_closeButton"; closeButton.addEventListener('click', function() { closer.click(); }); wrapper.appendChild(closeButton); contentContainer.appendChild(wrapper); contentContainer.appendChild(contentElement); closer.appendChild(contentContainer); document.body.appendChild(closer); editor.blur(); }; }); ace.define("ace/ext/menu_tools/get_editor_keyboard_shortcuts",["require","exports","module","ace/lib/keys"], function(require, exports, module) { "use strict"; var keys = require("../../lib/keys"); module.exports.getEditorKeybordShortcuts = function(editor) { var KEY_MODS = keys.KEY_MODS; var keybindings = []; var commandMap = {}; editor.keyBinding.$handlers.forEach(function(handler) { var ckb = handler.commandKeyBinding; for (var i in ckb) { var key = i.replace(/(^|-)\w/g, function(x) { return x.toUpperCase(); }); var commands = ckb[i]; if (!Array.isArray(commands)) commands = [commands]; commands.forEach(function(command) { if (typeof command != "string") command = command.name if (commandMap[command]) { commandMap[command].key += "|" + key; } else { commandMap[command] = {key: key, command: command}; keybindings.push(commandMap[command]); } }); } }); return keybindings; }; }); ace.define("ace/ext/keybinding_menu",["require","exports","module","ace/editor","ace/ext/menu_tools/overlay_page","ace/ext/menu_tools/get_editor_keyboard_shortcuts"], function(require, exports, module) { "use strict"; var Editor = require("ace/editor").Editor; function showKeyboardShortcuts (editor) { if(!document.getElementById('kbshortcutmenu')) { var overlayPage = require('./menu_tools/overlay_page').overlayPage; var getEditorKeybordShortcuts = require('./menu_tools/get_editor_keyboard_shortcuts').getEditorKeybordShortcuts; var kb = getEditorKeybordShortcuts(editor); var el = document.createElement('div'); var commands = kb.reduce(function(previous, current) { return previous + '
' + current.command + ' : ' + '' + current.key + '
'; }, ''); el.id = 'kbshortcutmenu'; el.innerHTML = '

Keyboard Shortcuts

' + commands + '
'; overlayPage(editor, el, '0', '0', '0', null); } }; module.exports.init = function(editor) { Editor.prototype.showKeyboardShortcuts = function() { showKeyboardShortcuts(this); }; editor.commands.addCommands([{ name: "showKeyboardShortcuts", bindKey: {win: "Ctrl-Alt-h", mac: "Command-Alt-h"}, exec: function(editor, line) { editor.showKeyboardShortcuts(); } }]); }; }); (function() { ace.require(["ace/ext/keybinding_menu"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-language_tools.js ================================================ ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var lang = require("./lib/lang"); var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var HashHandler = require("./keyboard/hash_handler").HashHandler; var Tokenizer = require("./tokenizer").Tokenizer; var comparePoints = Range.comparePoints; var SnippetManager = function() { this.snippetMap = {}; this.snippetNameMap = {}; }; (function() { oop.implement(this, EventEmitter); this.getTokenizer = function() { function TabstopToken(str, _, stack) { str = str.substr(1); if (/^\d+$/.test(str) && !stack.inFormatString) return [{tabstopId: parseInt(str, 10)}]; return [{text: str}]; } function escape(ch) { return "(?:[^\\\\" + ch + "]|\\\\.)"; } SnippetManager.$tokenizer = new Tokenizer({ start: [ {regex: /:/, onMatch: function(val, state, stack) { if (stack.length && stack[0].expectIf) { stack[0].expectIf = false; stack[0].elseBranch = stack[0]; return [stack[0]]; } return ":"; }}, {regex: /\\./, onMatch: function(val, state, stack) { var ch = val[1]; if (ch == "}" && stack.length) { val = ch; }else if ("`$\\".indexOf(ch) != -1) { val = ch; } else if (stack.inFormatString) { if (ch == "n") val = "\n"; else if (ch == "t") val = "\n"; else if ("ulULE".indexOf(ch) != -1) { val = {changeCase: ch, local: ch > "a"}; } } return [val]; }}, {regex: /}/, onMatch: function(val, state, stack) { return [stack.length ? stack.shift() : val]; }}, {regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken}, {regex: /\$\{[\dA-Z_a-z]+/, onMatch: function(str, state, stack) { var t = TabstopToken(str.substr(1), state, stack); stack.unshift(t[0]); return t; }, next: "snippetVar"}, {regex: /\n/, token: "newline", merge: false} ], snippetVar: [ {regex: "\\|" + escape("\\|") + "*\\|", onMatch: function(val, state, stack) { stack[0].choices = val.slice(1, -1).split(","); }, next: "start"}, {regex: "/(" + escape("/") + "+)/(?:(" + escape("/") + "*)/)(\\w*):?", onMatch: function(val, state, stack) { var ts = stack[0]; ts.fmtString = val; val = this.splitRegex.exec(val); ts.guard = val[1]; ts.fmt = val[2]; ts.flag = val[3]; return ""; }, next: "start"}, {regex: "`" + escape("`") + "*`", onMatch: function(val, state, stack) { stack[0].code = val.splice(1, -1); return ""; }, next: "start"}, {regex: "\\?", onMatch: function(val, state, stack) { if (stack[0]) stack[0].expectIf = true; }, next: "start"}, {regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "start"} ], formatString: [ {regex: "/(" + escape("/") + "+)/", token: "regex"}, {regex: "", onMatch: function(val, state, stack) { stack.inFormatString = true; }, next: "start"} ] }); SnippetManager.prototype.getTokenizer = function() { return SnippetManager.$tokenizer; }; return SnippetManager.$tokenizer; }; this.tokenizeTmSnippet = function(str, startState) { return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) { return x.value || x; }); }; this.$getDefaultValue = function(editor, name) { if (/^[A-Z]\d+$/.test(name)) { var i = name.substr(1); return (this.variables[name[0] + "__"] || {})[i]; } if (/^\d+$/.test(name)) { return (this.variables.__ || {})[name]; } name = name.replace(/^TM_/, ""); if (!editor) return; var s = editor.session; switch(name) { case "CURRENT_WORD": var r = s.getWordRange(); case "SELECTION": case "SELECTED_TEXT": return s.getTextRange(r); case "CURRENT_LINE": return s.getLine(editor.getCursorPosition().row); case "PREV_LINE": // not possible in textmate return s.getLine(editor.getCursorPosition().row - 1); case "LINE_INDEX": return editor.getCursorPosition().column; case "LINE_NUMBER": return editor.getCursorPosition().row + 1; case "SOFT_TABS": return s.getUseSoftTabs() ? "YES" : "NO"; case "TAB_SIZE": return s.getTabSize(); case "FILENAME": case "FILEPATH": return ""; case "FULLNAME": return "Ace"; } }; this.variables = {}; this.getVariableValue = function(editor, varName) { if (this.variables.hasOwnProperty(varName)) return this.variables[varName](editor, varName) || ""; return this.$getDefaultValue(editor, varName) || ""; }; this.tmStrFormat = function(str, ch, editor) { var flag = ch.flag || ""; var re = ch.guard; re = new RegExp(re, flag.replace(/[^gi]/, "")); var fmtTokens = this.tokenizeTmSnippet(ch.fmt, "formatString"); var _self = this; var formatted = str.replace(re, function() { _self.variables.__ = arguments; var fmtParts = _self.resolveVariables(fmtTokens, editor); var gChangeCase = "E"; for (var i = 0; i < fmtParts.length; i++) { var ch = fmtParts[i]; if (typeof ch == "object") { fmtParts[i] = ""; if (ch.changeCase && ch.local) { var next = fmtParts[i + 1]; if (next && typeof next == "string") { if (ch.changeCase == "u") fmtParts[i] = next[0].toUpperCase(); else fmtParts[i] = next[0].toLowerCase(); fmtParts[i + 1] = next.substr(1); } } else if (ch.changeCase) { gChangeCase = ch.changeCase; } } else if (gChangeCase == "U") { fmtParts[i] = ch.toUpperCase(); } else if (gChangeCase == "L") { fmtParts[i] = ch.toLowerCase(); } } return fmtParts.join(""); }); this.variables.__ = null; return formatted; }; this.resolveVariables = function(snippet, editor) { var result = []; for (var i = 0; i < snippet.length; i++) { var ch = snippet[i]; if (typeof ch == "string") { result.push(ch); } else if (typeof ch != "object") { continue; } else if (ch.skip) { gotoNext(ch); } else if (ch.processed < i) { continue; } else if (ch.text) { var value = this.getVariableValue(editor, ch.text); if (value && ch.fmtString) value = this.tmStrFormat(value, ch); ch.processed = i; if (ch.expectIf == null) { if (value) { result.push(value); gotoNext(ch); } } else { if (value) { ch.skip = ch.elseBranch; } else gotoNext(ch); } } else if (ch.tabstopId != null) { result.push(ch); } else if (ch.changeCase != null) { result.push(ch); } } function gotoNext(ch) { var i1 = snippet.indexOf(ch, i + 1); if (i1 != -1) i = i1; } return result; }; this.insertSnippetForSelection = function(editor, snippetText) { var cursor = editor.getCursorPosition(); var line = editor.session.getLine(cursor.row); var tabString = editor.session.getTabString(); var indentString = line.match(/^\s*/)[0]; if (cursor.column < indentString.length) indentString = indentString.slice(0, cursor.column); var tokens = this.tokenizeTmSnippet(snippetText); tokens = this.resolveVariables(tokens, editor); tokens = tokens.map(function(x) { if (x == "\n") return x + indentString; if (typeof x == "string") return x.replace(/\t/g, tabString); return x; }); var tabstops = []; tokens.forEach(function(p, i) { if (typeof p != "object") return; var id = p.tabstopId; var ts = tabstops[id]; if (!ts) { ts = tabstops[id] = []; ts.index = id; ts.value = ""; } if (ts.indexOf(p) !== -1) return; ts.push(p); var i1 = tokens.indexOf(p, i + 1); if (i1 === -1) return; var value = tokens.slice(i + 1, i1); var isNested = value.some(function(t) {return typeof t === "object"}); if (isNested && !ts.value) { ts.value = value; } else if (value.length && (!ts.value || typeof ts.value !== "string")) { ts.value = value.join(""); } }); tabstops.forEach(function(ts) {ts.length = 0}); var expanding = {}; function copyValue(val) { var copy = []; for (var i = 0; i < val.length; i++) { var p = val[i]; if (typeof p == "object") { if (expanding[p.tabstopId]) continue; var j = val.lastIndexOf(p, i - 1); p = copy[j] || {tabstopId: p.tabstopId}; } copy[i] = p; } return copy; } for (var i = 0; i < tokens.length; i++) { var p = tokens[i]; if (typeof p != "object") continue; var id = p.tabstopId; var i1 = tokens.indexOf(p, i + 1); if (expanding[id]) { if (expanding[id] === p) expanding[id] = null; continue; } var ts = tabstops[id]; var arg = typeof ts.value == "string" ? [ts.value] : copyValue(ts.value); arg.unshift(i + 1, Math.max(0, i1 - i)); arg.push(p); expanding[id] = p; tokens.splice.apply(tokens, arg); if (ts.indexOf(p) === -1) ts.push(p); } var row = 0, column = 0; var text = ""; tokens.forEach(function(t) { if (typeof t === "string") { if (t[0] === "\n"){ column = t.length - 1; row ++; } else column += t.length; text += t; } else { if (!t.start) t.start = {row: row, column: column}; else t.end = {row: row, column: column}; } }); var range = editor.getSelectionRange(); var end = editor.session.replace(range, text); var tabstopManager = new TabstopManager(editor); var selectionId = editor.inVirtualSelectionMode && editor.selection.index; tabstopManager.addTabstops(tabstops, range.start, end, selectionId); }; this.insertSnippet = function(editor, snippetText) { var self = this; if (editor.inVirtualSelectionMode) return self.insertSnippetForSelection(editor, snippetText); editor.forEachSelection(function() { self.insertSnippetForSelection(editor, snippetText); }, null, {keepOrder: true}); if (editor.tabstopManager) editor.tabstopManager.tabNext(); }; this.$getScope = function(editor) { var scope = editor.session.$mode.$id || ""; scope = scope.split("/").pop(); if (scope === "html" || scope === "php") { if (scope === "php" && !editor.session.$mode.inlinePhp) scope = "html"; var c = editor.getCursorPosition(); var state = editor.session.getState(c.row); if (typeof state === "object") { state = state[0]; } if (state.substring) { if (state.substring(0, 3) == "js-") scope = "javascript"; else if (state.substring(0, 4) == "css-") scope = "css"; else if (state.substring(0, 4) == "php-") scope = "php"; } } return scope; }; this.getActiveScopes = function(editor) { var scope = this.$getScope(editor); var scopes = [scope]; var snippetMap = this.snippetMap; if (snippetMap[scope] && snippetMap[scope].includeScopes) { scopes.push.apply(scopes, snippetMap[scope].includeScopes); } scopes.push("_"); return scopes; }; this.expandWithTab = function(editor, options) { var self = this; var result = editor.forEachSelection(function() { return self.expandSnippetForSelection(editor, options); }, null, {keepOrder: true}); if (result && editor.tabstopManager) editor.tabstopManager.tabNext(); return result; }; this.expandSnippetForSelection = function(editor, options) { var cursor = editor.getCursorPosition(); var line = editor.session.getLine(cursor.row); var before = line.substring(0, cursor.column); var after = line.substr(cursor.column); var snippetMap = this.snippetMap; var snippet; this.getActiveScopes(editor).some(function(scope) { var snippets = snippetMap[scope]; if (snippets) snippet = this.findMatchingSnippet(snippets, before, after); return !!snippet; }, this); if (!snippet) return false; if (options && options.dryRun) return true; editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length ); this.variables.M__ = snippet.matchBefore; this.variables.T__ = snippet.matchAfter; this.insertSnippetForSelection(editor, snippet.content); this.variables.M__ = this.variables.T__ = null; return true; }; this.findMatchingSnippet = function(snippetList, before, after) { for (var i = snippetList.length; i--;) { var s = snippetList[i]; if (s.startRe && !s.startRe.test(before)) continue; if (s.endRe && !s.endRe.test(after)) continue; if (!s.startRe && !s.endRe) continue; s.matchBefore = s.startRe ? s.startRe.exec(before) : [""]; s.matchAfter = s.endRe ? s.endRe.exec(after) : [""]; s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : ""; s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : ""; return s; } }; this.snippetMap = {}; this.snippetNameMap = {}; this.register = function(snippets, scope) { var snippetMap = this.snippetMap; var snippetNameMap = this.snippetNameMap; var self = this; if (!snippets) snippets = []; function wrapRegexp(src) { if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src)) src = "(?:" + src + ")"; return src || ""; } function guardedRegexp(re, guard, opening) { re = wrapRegexp(re); guard = wrapRegexp(guard); if (opening) { re = guard + re; if (re && re[re.length - 1] != "$") re = re + "$"; } else { re = re + guard; if (re && re[0] != "^") re = "^" + re; } return new RegExp(re); } function addSnippet(s) { if (!s.scope) s.scope = scope || "_"; scope = s.scope; if (!snippetMap[scope]) { snippetMap[scope] = []; snippetNameMap[scope] = {}; } var map = snippetNameMap[scope]; if (s.name) { var old = map[s.name]; if (old) self.unregister(old); map[s.name] = s; } snippetMap[scope].push(s); if (s.tabTrigger && !s.trigger) { if (!s.guard && /^\w/.test(s.tabTrigger)) s.guard = "\\b"; s.trigger = lang.escapeRegExp(s.tabTrigger); } s.startRe = guardedRegexp(s.trigger, s.guard, true); s.triggerRe = new RegExp(s.trigger, "", true); s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true); s.endTriggerRe = new RegExp(s.endTrigger, "", true); } if (snippets && snippets.content) addSnippet(snippets); else if (Array.isArray(snippets)) snippets.forEach(addSnippet); this._signal("registerSnippets", {scope: scope}); }; this.unregister = function(snippets, scope) { var snippetMap = this.snippetMap; var snippetNameMap = this.snippetNameMap; function removeSnippet(s) { var nameMap = snippetNameMap[s.scope||scope]; if (nameMap && nameMap[s.name]) { delete nameMap[s.name]; var map = snippetMap[s.scope||scope]; var i = map && map.indexOf(s); if (i >= 0) map.splice(i, 1); } } if (snippets.content) removeSnippet(snippets); else if (Array.isArray(snippets)) snippets.forEach(removeSnippet); }; this.parseSnippetFile = function(str) { str = str.replace(/\r/g, ""); var list = [], snippet = {}; var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm; var m; while (m = re.exec(str)) { if (m[1]) { try { snippet = JSON.parse(m[1]); list.push(snippet); } catch (e) {} } if (m[4]) { snippet.content = m[4].replace(/^\t/gm, ""); list.push(snippet); snippet = {}; } else { var key = m[2], val = m[3]; if (key == "regex") { var guardRe = /\/((?:[^\/\\]|\\.)*)|$/g; snippet.guard = guardRe.exec(val)[1]; snippet.trigger = guardRe.exec(val)[1]; snippet.endTrigger = guardRe.exec(val)[1]; snippet.endGuard = guardRe.exec(val)[1]; } else if (key == "snippet") { snippet.tabTrigger = val.match(/^\S*/)[0]; if (!snippet.name) snippet.name = val; } else { snippet[key] = val; } } } return list; }; this.getSnippetByName = function(name, editor) { var snippetMap = this.snippetNameMap; var snippet; this.getActiveScopes(editor).some(function(scope) { var snippets = snippetMap[scope]; if (snippets) snippet = snippets[name]; return !!snippet; }, this); return snippet; }; }).call(SnippetManager.prototype); var TabstopManager = function(editor) { if (editor.tabstopManager) return editor.tabstopManager; editor.tabstopManager = this; this.$onChange = this.onChange.bind(this); this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule; this.$onChangeSession = this.onChangeSession.bind(this); this.$onAfterExec = this.onAfterExec.bind(this); this.attach(editor); }; (function() { this.attach = function(editor) { this.index = 0; this.ranges = []; this.tabstops = []; this.$openTabstops = null; this.selectedTabstop = null; this.editor = editor; this.editor.on("change", this.$onChange); this.editor.on("changeSelection", this.$onChangeSelection); this.editor.on("changeSession", this.$onChangeSession); this.editor.commands.on("afterExec", this.$onAfterExec); this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); }; this.detach = function() { this.tabstops.forEach(this.removeTabstopMarkers, this); this.ranges = null; this.tabstops = null; this.selectedTabstop = null; this.editor.removeListener("change", this.$onChange); this.editor.removeListener("changeSelection", this.$onChangeSelection); this.editor.removeListener("changeSession", this.$onChangeSession); this.editor.commands.removeListener("afterExec", this.$onAfterExec); this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); this.editor.tabstopManager = null; this.editor = null; }; this.onChange = function(e) { var changeRange = e.data.range; var isRemove = e.data.action[0] == "r"; var start = changeRange.start; var end = changeRange.end; var startRow = start.row; var endRow = end.row; var lineDif = endRow - startRow; var colDiff = end.column - start.column; if (isRemove) { lineDif = -lineDif; colDiff = -colDiff; } if (!this.$inChange && isRemove) { var ts = this.selectedTabstop; var changedOutside = ts && !ts.some(function(r) { return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0; }); if (changedOutside) return this.detach(); } var ranges = this.ranges; for (var i = 0; i < ranges.length; i++) { var r = ranges[i]; if (r.end.row < start.row) continue; if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) { this.removeRange(r); i--; continue; } if (r.start.row == startRow && r.start.column > start.column) r.start.column += colDiff; if (r.end.row == startRow && r.end.column >= start.column) r.end.column += colDiff; if (r.start.row >= startRow) r.start.row += lineDif; if (r.end.row >= startRow) r.end.row += lineDif; if (comparePoints(r.start, r.end) > 0) this.removeRange(r); } if (!ranges.length) this.detach(); }; this.updateLinkedFields = function() { var ts = this.selectedTabstop; if (!ts || !ts.hasLinkedRanges) return; this.$inChange = true; var session = this.editor.session; var text = session.getTextRange(ts.firstNonLinked); for (var i = ts.length; i--;) { var range = ts[i]; if (!range.linked) continue; var fmt = exports.snippetManager.tmStrFormat(text, range.original); session.replace(range, fmt); } this.$inChange = false; }; this.onAfterExec = function(e) { if (e.command && !e.command.readOnly) this.updateLinkedFields(); }; this.onChangeSelection = function() { if (!this.editor) return; var lead = this.editor.selection.lead; var anchor = this.editor.selection.anchor; var isEmpty = this.editor.selection.isEmpty(); for (var i = this.ranges.length; i--;) { if (this.ranges[i].linked) continue; var containsLead = this.ranges[i].contains(lead.row, lead.column); var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column); if (containsLead && containsAnchor) return; } this.detach(); }; this.onChangeSession = function() { this.detach(); }; this.tabNext = function(dir) { var max = this.tabstops.length; var index = this.index + (dir || 1); index = Math.min(Math.max(index, 1), max); if (index == max) index = 0; this.selectTabstop(index); if (index === 0) this.detach(); }; this.selectTabstop = function(index) { this.$openTabstops = null; var ts = this.tabstops[this.index]; if (ts) this.addTabstopMarkers(ts); this.index = index; ts = this.tabstops[this.index]; if (!ts || !ts.length) return; this.selectedTabstop = ts; if (!this.editor.inVirtualSelectionMode) { var sel = this.editor.multiSelect; sel.toSingleRange(ts.firstNonLinked.clone()); for (var i = ts.length; i--;) { if (ts.hasLinkedRanges && ts[i].linked) continue; sel.addRange(ts[i].clone(), true); } if (sel.ranges[0]) sel.addRange(sel.ranges[0].clone()); } else { this.editor.selection.setRange(ts.firstNonLinked); } this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); }; this.addTabstops = function(tabstops, start, end) { if (!this.$openTabstops) this.$openTabstops = []; if (!tabstops[0]) { var p = Range.fromPoints(end, end); moveRelative(p.start, start); moveRelative(p.end, start); tabstops[0] = [p]; tabstops[0].index = 0; } var i = this.index; var arg = [i + 1, 0]; var ranges = this.ranges; tabstops.forEach(function(ts, index) { var dest = this.$openTabstops[index] || ts; for (var i = ts.length; i--;) { var p = ts[i]; var range = Range.fromPoints(p.start, p.end || p.start); movePoint(range.start, start); movePoint(range.end, start); range.original = p; range.tabstop = dest; ranges.push(range); if (dest != ts) dest.unshift(range); else dest[i] = range; if (p.fmtString) { range.linked = true; dest.hasLinkedRanges = true; } else if (!dest.firstNonLinked) dest.firstNonLinked = range; } if (!dest.firstNonLinked) dest.hasLinkedRanges = false; if (dest === ts) { arg.push(dest); this.$openTabstops[index] = dest; } this.addTabstopMarkers(dest); }, this); if (arg.length > 2) { if (this.tabstops.length) arg.push(arg.splice(2, 1)[0]); this.tabstops.splice.apply(this.tabstops, arg); } }; this.addTabstopMarkers = function(ts) { var session = this.editor.session; ts.forEach(function(range) { if (!range.markerId) range.markerId = session.addMarker(range, "ace_snippet-marker", "text"); }); }; this.removeTabstopMarkers = function(ts) { var session = this.editor.session; ts.forEach(function(range) { session.removeMarker(range.markerId); range.markerId = null; }); }; this.removeRange = function(range) { var i = range.tabstop.indexOf(range); range.tabstop.splice(i, 1); i = this.ranges.indexOf(range); this.ranges.splice(i, 1); this.editor.session.removeMarker(range.markerId); if (!range.tabstop.length) { i = this.tabstops.indexOf(range.tabstop); if (i != -1) this.tabstops.splice(i, 1); if (!this.tabstops.length) this.detach(); } }; this.keyboardHandler = new HashHandler(); this.keyboardHandler.bindKeys({ "Tab": function(ed) { if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) { return; } ed.tabstopManager.tabNext(1); }, "Shift-Tab": function(ed) { ed.tabstopManager.tabNext(-1); }, "Esc": function(ed) { ed.tabstopManager.detach(); }, "Return": function(ed) { return false; } }); }).call(TabstopManager.prototype); var changeTracker = {}; changeTracker.onChange = Anchor.prototype.onChange; changeTracker.setPosition = function(row, column) { this.pos.row = row; this.pos.column = column; }; changeTracker.update = function(pos, delta, $insertRight) { this.$insertRight = $insertRight; this.pos = pos; this.onChange(delta); }; var movePoint = function(point, diff) { if (point.row == 0) point.column += diff.column; point.row += diff.row; }; var moveRelative = function(point, start) { if (point.row == start.row) point.column -= start.column; point.row -= start.row; }; require("./lib/dom").importCssString("\ .ace_snippet-marker {\ -moz-box-sizing: border-box;\ box-sizing: border-box;\ background: rgba(194, 193, 208, 0.09);\ border: 1px dotted rgba(211, 208, 235, 0.62);\ position: absolute;\ }"); exports.snippetManager = new SnippetManager(); var Editor = require("./editor").Editor; (function() { this.insertSnippet = function(content, options) { return exports.snippetManager.insertSnippet(this, content, options); }; this.expandSnippet = function(options) { return exports.snippetManager.expandWithTab(this, options); }; }).call(Editor.prototype); }); ace.define("ace/autocomplete/popup",["require","exports","module","ace/edit_session","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom"], function(require, exports, module) { "use strict"; var EditSession = require("../edit_session").EditSession; var Renderer = require("../virtual_renderer").VirtualRenderer; var Editor = require("../editor").Editor; var Range = require("../range").Range; var event = require("../lib/event"); var lang = require("../lib/lang"); var dom = require("../lib/dom"); var $singleLineEditor = function(el) { var renderer = new Renderer(el); renderer.$maxLines = 4; var editor = new Editor(renderer); editor.setHighlightActiveLine(false); editor.setShowPrintMargin(false); editor.renderer.setShowGutter(false); editor.renderer.setHighlightGutterLine(false); editor.$mouseHandler.$focusWaitTimout = 0; editor.$highlightTagPending = true; return editor; }; var AcePopup = function(parentNode) { var el = dom.createElement("div"); var popup = new $singleLineEditor(el); if (parentNode) parentNode.appendChild(el); el.style.display = "none"; popup.renderer.content.style.cursor = "default"; popup.renderer.setStyle("ace_autocomplete"); popup.setOption("displayIndentGuides", false); popup.setOption("dragDelay", 150); var noop = function(){}; popup.focus = noop; popup.$isFocused = true; popup.renderer.$cursorLayer.restartTimer = noop; popup.renderer.$cursorLayer.element.style.opacity = 0; popup.renderer.$maxLines = 8; popup.renderer.$keepTextAreaAtCursor = false; popup.setHighlightActiveLine(false); popup.session.highlight(""); popup.session.$searchHighlight.clazz = "ace_highlight-marker"; popup.on("mousedown", function(e) { var pos = e.getDocumentPosition(); popup.selection.moveToPosition(pos); selectionMarker.start.row = selectionMarker.end.row = pos.row; e.stop(); }); var lastMouseEvent; var hoverMarker = new Range(-1,0,-1,Infinity); var selectionMarker = new Range(-1,0,-1,Infinity); selectionMarker.id = popup.session.addMarker(selectionMarker, "ace_active-line", "fullLine"); popup.setSelectOnHover = function(val) { if (!val) { hoverMarker.id = popup.session.addMarker(hoverMarker, "ace_line-hover", "fullLine"); } else if (hoverMarker.id) { popup.session.removeMarker(hoverMarker.id); hoverMarker.id = null; } }; popup.setSelectOnHover(false); popup.on("mousemove", function(e) { if (!lastMouseEvent) { lastMouseEvent = e; return; } if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) { return; } lastMouseEvent = e; lastMouseEvent.scrollTop = popup.renderer.scrollTop; var row = lastMouseEvent.getDocumentPosition().row; if (hoverMarker.start.row != row) { if (!hoverMarker.id) popup.setRow(row); setHoverMarker(row); } }); popup.renderer.on("beforeRender", function() { if (lastMouseEvent && hoverMarker.start.row != -1) { lastMouseEvent.$pos = null; var row = lastMouseEvent.getDocumentPosition().row; if (!hoverMarker.id) popup.setRow(row); setHoverMarker(row, true); } }); popup.renderer.on("afterRender", function() { var row = popup.getRow(); var t = popup.renderer.$textLayer; var selected = t.element.childNodes[row - t.config.firstRow]; if (selected == t.selectedNode) return; if (t.selectedNode) dom.removeCssClass(t.selectedNode, "ace_selected"); t.selectedNode = selected; if (selected) dom.addCssClass(selected, "ace_selected"); }); var hideHoverMarker = function() { setHoverMarker(-1) }; var setHoverMarker = function(row, suppressRedraw) { if (row !== hoverMarker.start.row) { hoverMarker.start.row = hoverMarker.end.row = row; if (!suppressRedraw) popup.session._emit("changeBackMarker"); popup._emit("changeHoverMarker"); } }; popup.getHoveredRow = function() { return hoverMarker.start.row; }; event.addListener(popup.container, "mouseout", hideHoverMarker); popup.on("hide", hideHoverMarker); popup.on("changeSelection", hideHoverMarker); popup.session.doc.getLength = function() { return popup.data.length; }; popup.session.doc.getLine = function(i) { var data = popup.data[i]; if (typeof data == "string") return data; return (data && data.value) || ""; }; var bgTokenizer = popup.session.bgTokenizer; bgTokenizer.$tokenizeRow = function(row) { var data = popup.data[row]; var tokens = []; if (!data) return tokens; if (typeof data == "string") data = {value: data}; if (!data.caption) data.caption = data.value || data.name; var last = -1; var flag, c; for (var i = 0; i < data.caption.length; i++) { c = data.caption[i]; flag = data.matchMask & (1 << i) ? 1 : 0; if (last !== flag) { tokens.push({type: data.className || "" + ( flag ? "completion-highlight" : ""), value: c}); last = flag; } else { tokens[tokens.length - 1].value += c; } } if (data.meta) { var maxW = popup.renderer.$size.scrollerWidth / popup.renderer.layerConfig.characterWidth; if (data.meta.length + data.caption.length < maxW - 2) tokens.push({type: "rightAlignedText", value: data.meta}); } return tokens; }; bgTokenizer.$updateOnChange = noop; bgTokenizer.start = noop; popup.session.$computeWidth = function() { return this.screenWidth = 0; }; popup.$blockScrolling = Infinity; popup.isOpen = false; popup.isTopdown = false; popup.data = []; popup.setData = function(list) { popup.data = list || []; popup.setValue(lang.stringRepeat("\n", list.length), -1); popup.setRow(0); }; popup.getData = function(row) { return popup.data[row]; }; popup.getRow = function() { return selectionMarker.start.row; }; popup.setRow = function(line) { line = Math.max(-1, Math.min(this.data.length, line)); if (selectionMarker.start.row != line) { popup.selection.clearSelection(); selectionMarker.start.row = selectionMarker.end.row = line || 0; popup.session._emit("changeBackMarker"); popup.moveCursorTo(line || 0, 0); if (popup.isOpen) popup._signal("select"); } }; popup.on("changeSelection", function() { if (popup.isOpen) popup.setRow(popup.selection.lead.row); popup.renderer.scrollCursorIntoView(); }); popup.hide = function() { this.container.style.display = "none"; this._signal("hide"); popup.isOpen = false; }; popup.show = function(pos, lineHeight, topdownOnly) { var el = this.container; var screenHeight = window.innerHeight; var screenWidth = window.innerWidth; var renderer = this.renderer; var maxH = renderer.$maxLines * lineHeight * 1.4; var top = pos.top + this.$borderSize; if (top + maxH > screenHeight - lineHeight && !topdownOnly) { el.style.top = ""; el.style.bottom = screenHeight - top + "px"; popup.isTopdown = false; } else { top += lineHeight; el.style.top = top + "px"; el.style.bottom = ""; popup.isTopdown = true; } el.style.display = ""; this.renderer.$textLayer.checkForSizeChanges(); var left = pos.left; if (left + el.offsetWidth > screenWidth) left = screenWidth - el.offsetWidth; el.style.left = left + "px"; this._signal("show"); lastMouseEvent = null; popup.isOpen = true; }; popup.getTextLeftOffset = function() { return this.$borderSize + this.renderer.$padding + this.$imageSize; }; popup.$imageSize = 0; popup.$borderSize = 1; return popup; }; dom.importCssString("\ .ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\ background-color: #CAD6FA;\ z-index: 1;\ }\ .ace_editor.ace_autocomplete .ace_line-hover {\ border: 1px solid #abbffe;\ margin-top: -1px;\ background: rgba(233,233,253,0.4);\ }\ .ace_editor.ace_autocomplete .ace_line-hover {\ position: absolute;\ z-index: 2;\ }\ .ace_editor.ace_autocomplete .ace_scroller {\ background: none;\ border: none;\ box-shadow: none;\ }\ .ace_rightAlignedText {\ color: gray;\ display: inline-block;\ position: absolute;\ right: 4px;\ text-align: right;\ z-index: -1;\ }\ .ace_editor.ace_autocomplete .ace_completion-highlight{\ color: #000;\ text-shadow: 0 0 0.01em;\ }\ .ace_editor.ace_autocomplete {\ width: 280px;\ z-index: 200000;\ background: #fbfbfb;\ color: #444;\ border: 1px lightgray solid;\ position: fixed;\ box-shadow: 2px 3px 5px rgba(0,0,0,.2);\ line-height: 1.4;\ }"); exports.AcePopup = AcePopup; }); ace.define("ace/autocomplete/util",["require","exports","module"], function(require, exports, module) { "use strict"; exports.parForEach = function(array, fn, callback) { var completed = 0; var arLength = array.length; if (arLength === 0) callback(); for (var i = 0; i < arLength; i++) { fn(array[i], function(result, err) { completed++; if (completed === arLength) callback(result, err); }); } }; var ID_REGEX = /[a-zA-Z_0-9\$\-\u00A2-\uFFFF]/; exports.retrievePrecedingIdentifier = function(text, pos, regex) { regex = regex || ID_REGEX; var buf = []; for (var i = pos-1; i >= 0; i--) { if (regex.test(text[i])) buf.push(text[i]); else break; } return buf.reverse().join(""); }; exports.retrieveFollowingIdentifier = function(text, pos, regex) { regex = regex || ID_REGEX; var buf = []; for (var i = pos; i < text.length; i++) { if (regex.test(text[i])) buf.push(text[i]); else break; } return buf; }; }); ace.define("ace/autocomplete",["require","exports","module","ace/keyboard/hash_handler","ace/autocomplete/popup","ace/autocomplete/util","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/snippets"], function(require, exports, module) { "use strict"; var HashHandler = require("./keyboard/hash_handler").HashHandler; var AcePopup = require("./autocomplete/popup").AcePopup; var util = require("./autocomplete/util"); var event = require("./lib/event"); var lang = require("./lib/lang"); var dom = require("./lib/dom"); var snippetManager = require("./snippets").snippetManager; var Autocomplete = function() { this.autoInsert = true; this.autoSelect = true; this.exactMatch = false; this.keyboardHandler = new HashHandler(); this.keyboardHandler.bindKeys(this.commands); this.blurListener = this.blurListener.bind(this); this.changeListener = this.changeListener.bind(this); this.mousedownListener = this.mousedownListener.bind(this); this.mousewheelListener = this.mousewheelListener.bind(this); this.changeTimer = lang.delayedCall(function() { this.updateCompletions(true); }.bind(this)); this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50); }; (function() { this.gatherCompletionsId = 0; this.$init = function() { this.popup = new AcePopup(document.body || document.documentElement); this.popup.on("click", function(e) { this.insertMatch(); e.stop(); }.bind(this)); this.popup.focus = this.editor.focus.bind(this.editor); this.popup.on("show", this.tooltipTimer.bind(null, null)); this.popup.on("select", this.tooltipTimer.bind(null, null)); this.popup.on("changeHoverMarker", this.tooltipTimer.bind(null, null)); return this.popup; }; this.getPopup = function() { return this.popup || this.$init(); }; this.openPopup = function(editor, prefix, keepPopupPosition) { if (!this.popup) this.$init(); this.popup.setData(this.completions.filtered); var renderer = editor.renderer; this.popup.setRow(this.autoSelect ? 0 : -1); if (!keepPopupPosition) { this.popup.setTheme(editor.getTheme()); this.popup.setFontSize(editor.getFontSize()); var lineHeight = renderer.layerConfig.lineHeight; var pos = renderer.$cursorLayer.getPixelPosition(this.base, true); pos.left -= this.popup.getTextLeftOffset(); var rect = editor.container.getBoundingClientRect(); pos.top += rect.top - renderer.layerConfig.offset; pos.left += rect.left - editor.renderer.scrollLeft; pos.left += renderer.$gutterLayer.gutterWidth; this.popup.show(pos, lineHeight); } else if (keepPopupPosition && !prefix) { this.detach(); } }; this.detach = function() { this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); this.editor.off("changeSelection", this.changeListener); this.editor.off("blur", this.blurListener); this.editor.off("mousedown", this.mousedownListener); this.editor.off("mousewheel", this.mousewheelListener); this.changeTimer.cancel(); this.hideDocTooltip(); if (this.popup && this.popup.isOpen) { this.gatherCompletionsId += 1; this.popup.hide(); } if (this.base) this.base.detach(); this.activated = false; this.completions = this.base = null; }; this.changeListener = function(e) { var cursor = this.editor.selection.lead; if (cursor.row != this.base.row || cursor.column < this.base.column) { this.detach(); } if (this.activated) this.changeTimer.schedule(); else this.detach(); }; this.blurListener = function(e) { var el = document.activeElement; var text = this.editor.textInput.getElement() if (el != text && el.parentNode != this.popup.container && el != this.tooltipNode && e.relatedTarget != this.tooltipNode && e.relatedTarget != text ) { this.detach(); } }; this.mousedownListener = function(e) { this.detach(); }; this.mousewheelListener = function(e) { this.detach(); }; this.goTo = function(where) { var row = this.popup.getRow(); var max = this.popup.session.getLength() - 1; switch(where) { case "up": row = row <= 0 ? max : row - 1; break; case "down": row = row >= max ? -1 : row + 1; break; case "start": row = 0; break; case "end": row = max; break; } this.popup.setRow(row); }; this.insertMatch = function(data) { if (!data) data = this.popup.getData(this.popup.getRow()); if (!data) return false; if (data.completer && data.completer.insertMatch) { data.completer.insertMatch(this.editor, data); } else { if (this.completions.filterText) { var ranges = this.editor.selection.getAllRanges(); for (var i = 0, range; range = ranges[i]; i++) { range.start.column -= this.completions.filterText.length; this.editor.session.remove(range); } } if (data.snippet) snippetManager.insertSnippet(this.editor, data.snippet); else this.editor.execCommand("insertstring", data.value || data); } this.detach(); }; this.commands = { "Up": function(editor) { editor.completer.goTo("up"); }, "Down": function(editor) { editor.completer.goTo("down"); }, "Ctrl-Up|Ctrl-Home": function(editor) { editor.completer.goTo("start"); }, "Ctrl-Down|Ctrl-End": function(editor) { editor.completer.goTo("end"); }, "Esc": function(editor) { editor.completer.detach(); }, "Space": function(editor) { editor.completer.detach(); editor.insert(" ");}, "Return": function(editor) { return editor.completer.insertMatch(); }, "Shift-Return": function(editor) { editor.completer.insertMatch(true); }, "Tab": function(editor) { var result = editor.completer.insertMatch(); if (!result && !editor.tabstopManager) editor.completer.goTo("down"); else return result; }, "PageUp": function(editor) { editor.completer.popup.gotoPageUp(); }, "PageDown": function(editor) { editor.completer.popup.gotoPageDown(); } }; this.gatherCompletions = function(editor, callback) { var session = editor.getSession(); var pos = editor.getCursorPosition(); var line = session.getLine(pos.row); var prefix = util.retrievePrecedingIdentifier(line, pos.column); this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length); this.base.$insertRight = true; var matches = []; var total = editor.completers.length; editor.completers.forEach(function(completer, i) { completer.getCompletions(editor, session, pos, prefix, function(err, results) { if (!err) matches = matches.concat(results); var pos = editor.getCursorPosition(); var line = session.getLine(pos.row); callback(null, { prefix: util.retrievePrecedingIdentifier(line, pos.column, results[0] && results[0].identifierRegex), matches: matches, finished: (--total === 0) }); }); }); return true; }; this.showPopup = function(editor) { if (this.editor) this.detach(); this.activated = true; this.editor = editor; if (editor.completer != this) { if (editor.completer) editor.completer.detach(); editor.completer = this; } editor.keyBinding.addKeyboardHandler(this.keyboardHandler); editor.on("changeSelection", this.changeListener); editor.on("blur", this.blurListener); editor.on("mousedown", this.mousedownListener); editor.on("mousewheel", this.mousewheelListener); this.updateCompletions(); }; this.updateCompletions = function(keepPopupPosition) { if (keepPopupPosition && this.base && this.completions) { var pos = this.editor.getCursorPosition(); var prefix = this.editor.session.getTextRange({start: this.base, end: pos}); if (prefix == this.completions.filterText) return; this.completions.setFilter(prefix); if (!this.completions.filtered.length) return this.detach(); if (this.completions.filtered.length == 1 && this.completions.filtered[0].value == prefix && !this.completions.filtered[0].snippet) return this.detach(); this.openPopup(this.editor, prefix, keepPopupPosition); return; } var _id = this.gatherCompletionsId; this.gatherCompletions(this.editor, function(err, results) { var detachIfFinished = function() { if (!results.finished) return; return this.detach(); }.bind(this); var prefix = results.prefix; var matches = results && results.matches; if (!matches || !matches.length) return detachIfFinished(); if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId) return; this.completions = new FilteredList(matches); if (this.exactMatch) this.completions.exactMatch = true; this.completions.setFilter(prefix); var filtered = this.completions.filtered; if (!filtered.length) return detachIfFinished(); if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet) return detachIfFinished(); if (this.autoInsert && filtered.length == 1 && results.finished) return this.insertMatch(filtered[0]); this.openPopup(this.editor, prefix, keepPopupPosition); }.bind(this)); }; this.cancelContextMenu = function() { this.editor.$mouseHandler.cancelContextMenu(); }; this.updateDocTooltip = function() { var popup = this.popup; var all = popup.data; var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]); var doc = null; if (!selected || !this.editor || !this.popup.isOpen) return this.hideDocTooltip(); this.editor.completers.some(function(completer) { if (completer.getDocTooltip) doc = completer.getDocTooltip(selected); return doc; }); if (!doc) doc = selected; if (typeof doc == "string") doc = {docText: doc} if (!doc || !(doc.docHTML || doc.docText)) return this.hideDocTooltip(); this.showDocTooltip(doc); }; this.showDocTooltip = function(item) { if (!this.tooltipNode) { this.tooltipNode = dom.createElement("div"); this.tooltipNode.className = "ace_tooltip ace_doc-tooltip"; this.tooltipNode.style.margin = 0; this.tooltipNode.style.pointerEvents = "auto"; this.tooltipNode.tabIndex = -1; this.tooltipNode.onblur = this.blurListener.bind(this); } var tooltipNode = this.tooltipNode; if (item.docHTML) { tooltipNode.innerHTML = item.docHTML; } else if (item.docText) { tooltipNode.textContent = item.docText; } if (!tooltipNode.parentNode) document.body.appendChild(tooltipNode); var popup = this.popup; var rect = popup.container.getBoundingClientRect(); tooltipNode.style.top = popup.container.style.top; tooltipNode.style.bottom = popup.container.style.bottom; if (window.innerWidth - rect.right < 320) { tooltipNode.style.right = window.innerWidth - rect.left + "px"; tooltipNode.style.left = ""; } else { tooltipNode.style.left = (rect.right + 1) + "px"; tooltipNode.style.right = ""; } tooltipNode.style.display = "block"; }; this.hideDocTooltip = function() { this.tooltipTimer.cancel(); if (!this.tooltipNode) return; var el = this.tooltipNode; if (!this.editor.isFocused() && document.activeElement == el) this.editor.focus(); this.tooltipNode = null; if (el.parentNode) el.parentNode.removeChild(el); }; }).call(Autocomplete.prototype); Autocomplete.startCommand = { name: "startAutocomplete", exec: function(editor) { if (!editor.completer) editor.completer = new Autocomplete(); editor.completer.autoInsert = editor.completer.autoSelect = true; editor.completer.showPopup(editor); editor.completer.cancelContextMenu(); }, bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space" }; var FilteredList = function(array, filterText, mutateData) { this.all = array; this.filtered = array; this.filterText = filterText || ""; this.exactMatch = false; }; (function(){ this.setFilter = function(str) { if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0) var matches = this.filtered; else var matches = this.all; this.filterText = str; matches = this.filterCompletions(matches, this.filterText); matches = matches.sort(function(a, b) { return b.exactMatch - a.exactMatch || b.score - a.score; }); var prev = null; matches = matches.filter(function(item){ var caption = item.snippet || item.caption || item.value; if (caption === prev) return false; prev = caption; return true; }); this.filtered = matches; }; this.filterCompletions = function(items, needle) { var results = []; var upper = needle.toUpperCase(); var lower = needle.toLowerCase(); loop: for (var i = 0, item; item = items[i]; i++) { var caption = item.value || item.caption || item.snippet; if (!caption) continue; var lastIndex = -1; var matchMask = 0; var penalty = 0; var index, distance; if (this.exactMatch) { if (needle !== caption.substr(0, needle.length)) continue loop; }else{ for (var j = 0; j < needle.length; j++) { var i1 = caption.indexOf(lower[j], lastIndex + 1); var i2 = caption.indexOf(upper[j], lastIndex + 1); index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2; if (index < 0) continue loop; distance = index - lastIndex - 1; if (distance > 0) { if (lastIndex === -1) penalty += 10; penalty += distance; } matchMask = matchMask | (1 << index); lastIndex = index; } } item.matchMask = matchMask; item.exactMatch = penalty ? 0 : 1; item.score = (item.score || 0) - penalty; results.push(item); } return results; }; }).call(FilteredList.prototype); exports.Autocomplete = Autocomplete; exports.FilteredList = FilteredList; }); ace.define("ace/autocomplete/text_completer",["require","exports","module","ace/range"], function(require, exports, module) { var Range = require("../range").Range; var splitRegex = /[^a-zA-Z_0-9\$\-\u00C0-\u1FFF\u2C00-\uD7FF\w]+/; function getWordIndex(doc, pos) { var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos)); return textBefore.split(splitRegex).length - 1; } function wordDistance(doc, pos) { var prefixPos = getWordIndex(doc, pos); var words = doc.getValue().split(splitRegex); var wordScores = Object.create(null); var currentWord = words[prefixPos]; words.forEach(function(word, idx) { if (!word || word === currentWord) return; var distance = Math.abs(prefixPos - idx); var score = words.length - distance; if (wordScores[word]) { wordScores[word] = Math.max(score, wordScores[word]); } else { wordScores[word] = score; } }); return wordScores; } exports.getCompletions = function(editor, session, pos, prefix, callback) { var wordScore = wordDistance(session, pos, prefix); var wordList = Object.keys(wordScore); callback(null, wordList.map(function(word) { return { caption: word, value: word, score: wordScore[word], meta: "local" }; })); }; }); ace.define("ace/ext/language_tools",["require","exports","module","ace/snippets","ace/autocomplete","ace/config","ace/lib/lang","ace/autocomplete/util","ace/autocomplete/text_completer","ace/editor","ace/config"], function(require, exports, module) { "use strict"; var snippetManager = require("../snippets").snippetManager; var Autocomplete = require("../autocomplete").Autocomplete; var config = require("../config"); var lang = require("../lib/lang"); var util = require("../autocomplete/util"); var textCompleter = require("../autocomplete/text_completer"); var keyWordCompleter = { getCompletions: function(editor, session, pos, prefix, callback) { if (session.$mode.completer) { return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback); } var state = editor.session.getState(pos.row); var completions = session.$mode.getCompletions(state, session, pos, prefix); callback(null, completions); } }; var snippetCompleter = { getCompletions: function(editor, session, pos, prefix, callback) { var snippetMap = snippetManager.snippetMap; var completions = []; snippetManager.getActiveScopes(editor).forEach(function(scope) { var snippets = snippetMap[scope] || []; for (var i = snippets.length; i--;) { var s = snippets[i]; var caption = s.name || s.tabTrigger; if (!caption) continue; completions.push({ caption: caption, snippet: s.content, meta: s.tabTrigger && !s.name ? s.tabTrigger + "\u21E5 " : "snippet", type: "snippet" }); } }, this); callback(null, completions); }, getDocTooltip: function(item) { if (item.type == "snippet" && !item.docHTML) { item.docHTML = [ "", lang.escapeHTML(item.caption), "", "
", lang.escapeHTML(item.snippet) ].join(""); } } }; var completers = [snippetCompleter, textCompleter, keyWordCompleter]; exports.setCompleters = function(val) { completers = val || []; }; exports.addCompleter = function(completer) { completers.push(completer); }; exports.textCompleter = textCompleter; exports.keyWordCompleter = keyWordCompleter; exports.snippetCompleter = snippetCompleter; var expandSnippet = { name: "expandSnippet", exec: function(editor) { return snippetManager.expandWithTab(editor); }, bindKey: "Tab" }; var onChangeMode = function(e, editor) { loadSnippetsForMode(editor.session.$mode); }; var loadSnippetsForMode = function(mode) { var id = mode.$id; if (!snippetManager.files) snippetManager.files = {}; loadSnippetFile(id); if (mode.modes) mode.modes.forEach(loadSnippetsForMode); }; var loadSnippetFile = function(id) { if (!id || snippetManager.files[id]) return; var snippetFilePath = id.replace("mode", "snippets"); snippetManager.files[id] = {}; config.loadModule(snippetFilePath, function(m) { if (m) { snippetManager.files[id] = m; if (!m.snippets && m.snippetText) m.snippets = snippetManager.parseSnippetFile(m.snippetText); snippetManager.register(m.snippets || [], m.scope); if (m.includeScopes) { snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes; m.includeScopes.forEach(function(x) { loadSnippetFile("ace/mode/" + x); }); } } }); }; function getCompletionPrefix(editor) { var pos = editor.getCursorPosition(); var line = editor.session.getLine(pos.row); var prefix = util.retrievePrecedingIdentifier(line, pos.column); editor.completers.forEach(function(completer) { if (completer.identifierRegexps) { completer.identifierRegexps.forEach(function(identifierRegex) { if (!prefix && identifierRegex) prefix = util.retrievePrecedingIdentifier(line, pos.column, identifierRegex); }); } }); return prefix; } var doLiveAutocomplete = function(e) { var editor = e.editor; var text = e.args || ""; var hasCompleter = editor.completer && editor.completer.activated; if (e.command.name === "backspace") { if (hasCompleter && !getCompletionPrefix(editor)) editor.completer.detach(); } else if (e.command.name === "insertstring") { var prefix = getCompletionPrefix(editor); if (prefix && !hasCompleter) { if (!editor.completer) { editor.completer = new Autocomplete(); } editor.completer.autoSelect = false; editor.completer.autoInsert = false; editor.completer.showPopup(editor); } } }; var Editor = require("../editor").Editor; require("../config").defineOptions(Editor.prototype, "editor", { enableBasicAutocompletion: { set: function(val) { if (val) { if (!this.completers) this.completers = Array.isArray(val)? val: completers; this.commands.addCommand(Autocomplete.startCommand); } else { this.commands.removeCommand(Autocomplete.startCommand); } }, value: false }, enableLiveAutocompletion: { set: function(val) { if (val) { if (!this.completers) this.completers = Array.isArray(val)? val: completers; this.commands.on('afterExec', doLiveAutocomplete); } else { this.commands.removeListener('afterExec', doLiveAutocomplete); } }, value: false }, enableSnippets: { set: function(val) { if (val) { this.commands.addCommand(expandSnippet); this.on("changeMode", onChangeMode); onChangeMode(null, this); } else { this.commands.removeCommand(expandSnippet); this.off("changeMode", onChangeMode); } }, value: false } }); }); (function() { ace.require(["ace/ext/language_tools"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-linking.js ================================================ ace.define("ace/ext/linking",["require","exports","module","ace/editor","ace/config"], function(require, exports, module) { var Editor = require("ace/editor").Editor; require("../config").defineOptions(Editor.prototype, "editor", { enableLinking: { set: function(val) { if (val) { this.on("click", onClick); this.on("mousemove", onMouseMove); } else { this.off("click", onClick); this.off("mousemove", onMouseMove); } }, value: false } }) function onMouseMove(e) { var editor = e.editor; var ctrl = e.getAccelKey(); if (ctrl) { var editor = e.editor; var docPos = e.getDocumentPosition(); var session = editor.session; var token = session.getTokenAt(docPos.row, docPos.column); editor._emit("linkHover", {position: docPos, token: token}); } } function onClick(e) { var ctrl = e.getAccelKey(); var button = e.getButton(); if (button == 0 && ctrl) { var editor = e.editor; var docPos = e.getDocumentPosition(); var session = editor.session; var token = session.getTokenAt(docPos.row, docPos.column); editor._emit("linkClick", {position: docPos, token: token}); } } }); (function() { ace.require(["ace/ext/linking"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-modelist.js ================================================ ace.define("ace/ext/modelist",["require","exports","module"], function(require, exports, module) { "use strict"; var modes = []; function getModeForPath(path) { var mode = modesByName.text; var fileName = path.split(/[\/\\]/).pop(); for (var i = 0; i < modes.length; i++) { if (modes[i].supportsFile(fileName)) { mode = modes[i]; break; } } return mode; } var Mode = function(name, caption, extensions) { this.name = name; this.caption = caption; this.mode = "ace/mode/" + name; this.extensions = extensions; if (/\^/.test(extensions)) { var re = extensions.replace(/\|(\^)?/g, function(a, b){ return "$|" + (b ? "^" : "^.*\\."); }) + "$"; } else { var re = "^.*\\.(" + extensions + ")$"; } this.extRe = new RegExp(re, "gi"); }; Mode.prototype.supportsFile = function(filename) { return filename.match(this.extRe); }; var supportedModes = { ABAP: ["abap"], ActionScript:["as"], ADA: ["ada|adb"], Apache_Conf: ["^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd"], AsciiDoc: ["asciidoc"], Assembly_x86:["asm"], AutoHotKey: ["ahk"], BatchFile: ["bat|cmd"], C9Search: ["c9search_results"], C_Cpp: ["cpp|c|cc|cxx|h|hh|hpp"], Cirru: ["cirru|cr"], Clojure: ["clj|cljs"], Cobol: ["CBL|COB"], coffee: ["coffee|cf|cson|^Cakefile"], ColdFusion: ["cfm"], CSharp: ["cs"], CSS: ["css"], Curly: ["curly"], D: ["d|di"], Dart: ["dart"], Diff: ["diff|patch"], Dockerfile: ["^Dockerfile"], Dot: ["dot"], Dummy: ["dummy"], DummySyntax: ["dummy"], Eiffel: ["e"], EJS: ["ejs"], Elixir: ["ex|exs"], Elm: ["elm"], Erlang: ["erl|hrl"], Forth: ["frt|fs|ldr"], FTL: ["ftl"], Gcode: ["gcode"], Gherkin: ["feature"], Gitignore: ["^.gitignore"], Glsl: ["glsl|frag|vert"], golang: ["go"], Groovy: ["groovy"], HAML: ["haml"], Handlebars: ["hbs|handlebars|tpl|mustache"], Haskell: ["hs"], haXe: ["hx"], HTML: ["html|htm|xhtml"], HTML_Ruby: ["erb|rhtml|html.erb"], INI: ["ini|conf|cfg|prefs"], Io: ["io"], Jack: ["jack"], Jade: ["jade"], Java: ["java"], JavaScript: ["js|jsm"], JSON: ["json"], JSONiq: ["jq"], JSP: ["jsp"], JSX: ["jsx"], Julia: ["jl"], LaTeX: ["tex|latex|ltx|bib"], LESS: ["less"], Liquid: ["liquid"], Lisp: ["lisp"], LiveScript: ["ls"], LogiQL: ["logic|lql"], LSL: ["lsl"], Lua: ["lua"], LuaPage: ["lp"], Lucene: ["lucene"], Makefile: ["^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make"], Markdown: ["md|markdown"], Mask: ["mask"], MATLAB: ["matlab"], MEL: ["mel"], MUSHCode: ["mc|mush"], MySQL: ["mysql"], Nix: ["nix"], ObjectiveC: ["m|mm"], OCaml: ["ml|mli"], Pascal: ["pas|p"], Perl: ["pl|pm"], pgSQL: ["pgsql"], PHP: ["php|phtml"], Powershell: ["ps1"], Praat: ["praat|praatscript|psc|proc"], Prolog: ["plg|prolog"], Properties: ["properties"], Protobuf: ["proto"], Python: ["py"], R: ["r"], RDoc: ["Rd"], RHTML: ["Rhtml"], Ruby: ["rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile"], Rust: ["rs"], SASS: ["sass"], SCAD: ["scad"], Scala: ["scala"], Scheme: ["scm|rkt"], SCSS: ["scss"], SH: ["sh|bash|^.bashrc"], SJS: ["sjs"], Smarty: ["smarty|tpl"], snippets: ["snippets"], Soy_Template:["soy"], Space: ["space"], SQL: ["sql"], Stylus: ["styl|stylus"], SVG: ["svg"], Tcl: ["tcl"], Tex: ["tex"], Text: ["txt"], Textile: ["textile"], Toml: ["toml"], Twig: ["twig"], Typescript: ["ts|typescript|str"], Vala: ["vala"], VBScript: ["vbs|vb"], Velocity: ["vm"], Verilog: ["v|vh|sv|svh"], VHDL: ["vhd|vhdl"], XML: ["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl"], XQuery: ["xq"], YAML: ["yaml|yml"] }; var nameOverrides = { ObjectiveC: "Objective-C", CSharp: "C#", golang: "Go", C_Cpp: "C and C++", coffee: "CoffeeScript", HTML_Ruby: "HTML (Ruby)", FTL: "FreeMarker" }; var modesByName = {}; for (var name in supportedModes) { var data = supportedModes[name]; var displayName = (nameOverrides[name] || name).replace(/_/g, " "); var filename = name.toLowerCase(); var mode = new Mode(filename, displayName, data[0]); modesByName[filename] = mode; modes.push(mode); } module.exports = { getModeForPath: getModeForPath, modes: modes, modesByName: modesByName }; }); (function() { ace.require(["ace/ext/modelist"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-old_ie.js ================================================ ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var lang = require("../lib/lang"); var event = require("../lib/event"); var searchboxCss = "\ .ace_search {\ background-color: #ddd;\ border: 1px solid #cbcbcb;\ border-top: 0 none;\ max-width: 325px;\ overflow: hidden;\ margin: 0;\ padding: 4px;\ padding-right: 6px;\ padding-bottom: 0;\ position: absolute;\ top: 0px;\ z-index: 99;\ white-space: normal;\ }\ .ace_search.left {\ border-left: 0 none;\ border-radius: 0px 0px 5px 0px;\ left: 0;\ }\ .ace_search.right {\ border-radius: 0px 0px 0px 5px;\ border-right: 0 none;\ right: 0;\ }\ .ace_search_form, .ace_replace_form {\ border-radius: 3px;\ border: 1px solid #cbcbcb;\ float: left;\ margin-bottom: 4px;\ overflow: hidden;\ }\ .ace_search_form.ace_nomatch {\ outline: 1px solid red;\ }\ .ace_search_field {\ background-color: white;\ border-right: 1px solid #cbcbcb;\ border: 0 none;\ -webkit-box-sizing: border-box;\ -moz-box-sizing: border-box;\ box-sizing: border-box;\ float: left;\ height: 22px;\ outline: 0;\ padding: 0 7px;\ width: 214px;\ margin: 0;\ }\ .ace_searchbtn,\ .ace_replacebtn {\ background: #fff;\ border: 0 none;\ border-left: 1px solid #dcdcdc;\ cursor: pointer;\ float: left;\ height: 22px;\ margin: 0;\ padding: 0;\ position: relative;\ }\ .ace_searchbtn:last-child,\ .ace_replacebtn:last-child {\ border-top-right-radius: 3px;\ border-bottom-right-radius: 3px;\ }\ .ace_searchbtn:disabled {\ background: none;\ cursor: default;\ }\ .ace_searchbtn {\ background-position: 50% 50%;\ background-repeat: no-repeat;\ width: 27px;\ }\ .ace_searchbtn.prev {\ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \ }\ .ace_searchbtn.next {\ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \ }\ .ace_searchbtn_close {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\ border-radius: 50%;\ border: 0 none;\ color: #656565;\ cursor: pointer;\ float: right;\ font: 16px/16px Arial;\ height: 14px;\ margin: 5px 1px 9px 5px;\ padding: 0;\ text-align: center;\ width: 14px;\ }\ .ace_searchbtn_close:hover {\ background-color: #656565;\ background-position: 50% 100%;\ color: white;\ }\ .ace_replacebtn.prev {\ width: 54px\ }\ .ace_replacebtn.next {\ width: 27px\ }\ .ace_button {\ margin-left: 2px;\ cursor: pointer;\ -webkit-user-select: none;\ -moz-user-select: none;\ -o-user-select: none;\ -ms-user-select: none;\ user-select: none;\ overflow: hidden;\ opacity: 0.7;\ border: 1px solid rgba(100,100,100,0.23);\ padding: 1px;\ -moz-box-sizing: border-box;\ box-sizing: border-box;\ color: black;\ }\ .ace_button:hover {\ background-color: #eee;\ opacity:1;\ }\ .ace_button:active {\ background-color: #ddd;\ }\ .ace_button.checked {\ border-color: #3399ff;\ opacity:1;\ }\ .ace_search_options{\ margin-bottom: 3px;\ text-align: right;\ -webkit-user-select: none;\ -moz-user-select: none;\ -o-user-select: none;\ -ms-user-select: none;\ user-select: none;\ }"; var HashHandler = require("../keyboard/hash_handler").HashHandler; var keyUtil = require("../lib/keys"); dom.importCssString(searchboxCss, "ace_searchbox"); var html = ''.replace(/>\s+/g, ">"); var SearchBox = function(editor, range, showReplaceForm) { var div = dom.createElement("div"); div.innerHTML = html; this.element = div.firstChild; this.$init(); this.setEditor(editor); }; (function() { this.setEditor = function(editor) { editor.searchBox = this; editor.container.appendChild(this.element); this.editor = editor; }; this.$initElements = function(sb) { this.searchBox = sb.querySelector(".ace_search_form"); this.replaceBox = sb.querySelector(".ace_replace_form"); this.searchOptions = sb.querySelector(".ace_search_options"); this.regExpOption = sb.querySelector("[action=toggleRegexpMode]"); this.caseSensitiveOption = sb.querySelector("[action=toggleCaseSensitive]"); this.wholeWordOption = sb.querySelector("[action=toggleWholeWords]"); this.searchInput = this.searchBox.querySelector(".ace_search_field"); this.replaceInput = this.replaceBox.querySelector(".ace_search_field"); }; this.$init = function() { var sb = this.element; this.$initElements(sb); var _this = this; event.addListener(sb, "mousedown", function(e) { setTimeout(function(){ _this.activeInput.focus(); }, 0); event.stopPropagation(e); }); event.addListener(sb, "click", function(e) { var t = e.target || e.srcElement; var action = t.getAttribute("action"); if (action && _this[action]) _this[action](); else if (_this.$searchBarKb.commands[action]) _this.$searchBarKb.commands[action].exec(_this); event.stopPropagation(e); }); event.addCommandKeyListener(sb, function(e, hashId, keyCode) { var keyString = keyUtil.keyCodeToString(keyCode); var command = _this.$searchBarKb.findKeyCommand(hashId, keyString); if (command && command.exec) { command.exec(_this); event.stopEvent(e); } }); this.$onChange = lang.delayedCall(function() { _this.find(false, false); }); event.addListener(this.searchInput, "input", function() { _this.$onChange.schedule(20); }); event.addListener(this.searchInput, "focus", function() { _this.activeInput = _this.searchInput; _this.searchInput.value && _this.highlight(); }); event.addListener(this.replaceInput, "focus", function() { _this.activeInput = _this.replaceInput; _this.searchInput.value && _this.highlight(); }); }; this.$closeSearchBarKb = new HashHandler([{ bindKey: "Esc", name: "closeSearchBar", exec: function(editor) { editor.searchBox.hide(); } }]); this.$searchBarKb = new HashHandler(); this.$searchBarKb.bindKeys({ "Ctrl-f|Command-f|Ctrl-H|Command-Option-F": function(sb) { var isReplace = sb.isReplace = !sb.isReplace; sb.replaceBox.style.display = isReplace ? "" : "none"; sb[isReplace ? "replaceInput" : "searchInput"].focus(); }, "Ctrl-G|Command-G": function(sb) { sb.findNext(); }, "Ctrl-Shift-G|Command-Shift-G": function(sb) { sb.findPrev(); }, "esc": function(sb) { setTimeout(function() { sb.hide();}); }, "Return": function(sb) { if (sb.activeInput == sb.replaceInput) sb.replace(); sb.findNext(); }, "Shift-Return": function(sb) { if (sb.activeInput == sb.replaceInput) sb.replace(); sb.findPrev(); }, "Alt-Return": function(sb) { if (sb.activeInput == sb.replaceInput) sb.replaceAll(); sb.findAll(); }, "Tab": function(sb) { (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus(); } }); this.$searchBarKb.addCommands([{ name: "toggleRegexpMode", bindKey: {win: "Alt-R|Alt-/", mac: "Ctrl-Alt-R|Ctrl-Alt-/"}, exec: function(sb) { sb.regExpOption.checked = !sb.regExpOption.checked; sb.$syncOptions(); } }, { name: "toggleCaseSensitive", bindKey: {win: "Alt-C|Alt-I", mac: "Ctrl-Alt-R|Ctrl-Alt-I"}, exec: function(sb) { sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked; sb.$syncOptions(); } }, { name: "toggleWholeWords", bindKey: {win: "Alt-B|Alt-W", mac: "Ctrl-Alt-B|Ctrl-Alt-W"}, exec: function(sb) { sb.wholeWordOption.checked = !sb.wholeWordOption.checked; sb.$syncOptions(); } }]); this.$syncOptions = function() { dom.setCssClass(this.regExpOption, "checked", this.regExpOption.checked); dom.setCssClass(this.wholeWordOption, "checked", this.wholeWordOption.checked); dom.setCssClass(this.caseSensitiveOption, "checked", this.caseSensitiveOption.checked); this.find(false, false); }; this.highlight = function(re) { this.editor.session.highlight(re || this.editor.$search.$options.re); this.editor.renderer.updateBackMarkers() }; this.find = function(skipCurrent, backwards) { var range = this.editor.find(this.searchInput.value, { skipCurrent: skipCurrent, backwards: backwards, wrap: true, regExp: this.regExpOption.checked, caseSensitive: this.caseSensitiveOption.checked, wholeWord: this.wholeWordOption.checked }); var noMatch = !range && this.searchInput.value; dom.setCssClass(this.searchBox, "ace_nomatch", noMatch); this.editor._emit("findSearchBox", { match: !noMatch }); this.highlight(); }; this.findNext = function() { this.find(true, false); }; this.findPrev = function() { this.find(true, true); }; this.findAll = function(){ var range = this.editor.findAll(this.searchInput.value, { regExp: this.regExpOption.checked, caseSensitive: this.caseSensitiveOption.checked, wholeWord: this.wholeWordOption.checked }); var noMatch = !range && this.searchInput.value; dom.setCssClass(this.searchBox, "ace_nomatch", noMatch); this.editor._emit("findSearchBox", { match: !noMatch }); this.highlight(); this.hide(); }; this.replace = function() { if (!this.editor.getReadOnly()) this.editor.replace(this.replaceInput.value); }; this.replaceAndFindNext = function() { if (!this.editor.getReadOnly()) { this.editor.replace(this.replaceInput.value); this.findNext() } }; this.replaceAll = function() { if (!this.editor.getReadOnly()) this.editor.replaceAll(this.replaceInput.value); }; this.hide = function() { this.element.style.display = "none"; this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb); this.editor.focus(); }; this.show = function(value, isReplace) { this.element.style.display = ""; this.replaceBox.style.display = isReplace ? "" : "none"; this.isReplace = isReplace; if (value) this.searchInput.value = value; this.searchInput.focus(); this.searchInput.select(); this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb); }; this.isFocused = function() { var el = document.activeElement; return el == this.searchInput || el == this.replaceInput; } }).call(SearchBox.prototype); exports.SearchBox = SearchBox; exports.Search = function(editor, isReplace) { var sb = editor.searchBox || new SearchBox(editor); sb.show(editor.session.getTextRange(), isReplace); }; }); ace.define("ace/ext/old_ie",["require","exports","module","ace/lib/useragent","ace/tokenizer","ace/ext/searchbox","ace/mode/text"], function(require, exports, module) { "use strict"; var MAX_TOKEN_COUNT = 1000; var useragent = require("../lib/useragent"); var TokenizerModule = require("../tokenizer"); function patch(obj, name, regexp, replacement) { eval("obj['" + name + "']=" + obj[name].toString().replace( regexp, replacement )); } if (useragent.isIE && useragent.isIE < 10 && window.top.document.compatMode === "BackCompat") useragent.isOldIE = true; if (typeof document != "undefined" && !document.documentElement.querySelector) { useragent.isOldIE = true; var qs = function(el, selector) { if (selector.charAt(0) == ".") { var classNeme = selector.slice(1); } else { var m = selector.match(/(\w+)=(\w+)/); var attr = m && m[1]; var attrVal = m && m[2]; } for (var i = 0; i < el.all.length; i++) { var ch = el.all[i]; if (classNeme) { if (ch.className.indexOf(classNeme) != -1) return ch; } else if (attr) { if (ch.getAttribute(attr) == attrVal) return ch; } } }; var sb = require("./searchbox").SearchBox.prototype; patch( sb, "$initElements", /([^\s=]*).querySelector\((".*?")\)/g, "qs($1, $2)" ); } var compliantExecNpcg = /()??/.exec("")[1] === undefined; if (compliantExecNpcg) return; var proto = TokenizerModule.Tokenizer.prototype; TokenizerModule.Tokenizer_orig = TokenizerModule.Tokenizer; proto.getLineTokens_orig = proto.getLineTokens; patch( TokenizerModule, "Tokenizer", "ruleRegExps.push(adjustedregex);\n", function(m) { return m + '\ if (state[i].next && RegExp(adjustedregex).test(""))\n\ rule._qre = RegExp(adjustedregex, "g");\n\ '; } ); TokenizerModule.Tokenizer.prototype = proto; patch( proto, "getLineTokens", /if \(match\[i \+ 1\] === undefined\)\s*continue;/, "if (!match[i + 1]) {\n\ if (value)continue;\n\ var qre = state[mapping[i]]._qre;\n\ if (!qre) continue;\n\ qre.lastIndex = lastIndex;\n\ if (!qre.exec(line) || qre.lastIndex != lastIndex)\n\ continue;\n\ }" ); patch( require("../mode/text").Mode.prototype, "getTokenizer", /Tokenizer/, "TokenizerModule.Tokenizer" ); useragent.isOldIE = true; }); (function() { ace.require(["ace/ext/old_ie"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-searchbox.js ================================================ ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var lang = require("../lib/lang"); var event = require("../lib/event"); var searchboxCss = "\ .ace_search {\ background-color: #ddd;\ border: 1px solid #cbcbcb;\ border-top: 0 none;\ max-width: 325px;\ overflow: hidden;\ margin: 0;\ padding: 4px;\ padding-right: 6px;\ padding-bottom: 0;\ position: absolute;\ top: 0px;\ z-index: 99;\ white-space: normal;\ }\ .ace_search.left {\ border-left: 0 none;\ border-radius: 0px 0px 5px 0px;\ left: 0;\ }\ .ace_search.right {\ border-radius: 0px 0px 0px 5px;\ border-right: 0 none;\ right: 0;\ }\ .ace_search_form, .ace_replace_form {\ border-radius: 3px;\ border: 1px solid #cbcbcb;\ float: left;\ margin-bottom: 4px;\ overflow: hidden;\ }\ .ace_search_form.ace_nomatch {\ outline: 1px solid red;\ }\ .ace_search_field {\ background-color: white;\ border-right: 1px solid #cbcbcb;\ border: 0 none;\ -webkit-box-sizing: border-box;\ -moz-box-sizing: border-box;\ box-sizing: border-box;\ float: left;\ height: 22px;\ outline: 0;\ padding: 0 7px;\ width: 214px;\ margin: 0;\ }\ .ace_searchbtn,\ .ace_replacebtn {\ background: #fff;\ border: 0 none;\ border-left: 1px solid #dcdcdc;\ cursor: pointer;\ float: left;\ height: 22px;\ margin: 0;\ padding: 0;\ position: relative;\ }\ .ace_searchbtn:last-child,\ .ace_replacebtn:last-child {\ border-top-right-radius: 3px;\ border-bottom-right-radius: 3px;\ }\ .ace_searchbtn:disabled {\ background: none;\ cursor: default;\ }\ .ace_searchbtn {\ background-position: 50% 50%;\ background-repeat: no-repeat;\ width: 27px;\ }\ .ace_searchbtn.prev {\ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \ }\ .ace_searchbtn.next {\ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \ }\ .ace_searchbtn_close {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\ border-radius: 50%;\ border: 0 none;\ color: #656565;\ cursor: pointer;\ float: right;\ font: 16px/16px Arial;\ height: 14px;\ margin: 5px 1px 9px 5px;\ padding: 0;\ text-align: center;\ width: 14px;\ }\ .ace_searchbtn_close:hover {\ background-color: #656565;\ background-position: 50% 100%;\ color: white;\ }\ .ace_replacebtn.prev {\ width: 54px\ }\ .ace_replacebtn.next {\ width: 27px\ }\ .ace_button {\ margin-left: 2px;\ cursor: pointer;\ -webkit-user-select: none;\ -moz-user-select: none;\ -o-user-select: none;\ -ms-user-select: none;\ user-select: none;\ overflow: hidden;\ opacity: 0.7;\ border: 1px solid rgba(100,100,100,0.23);\ padding: 1px;\ -moz-box-sizing: border-box;\ box-sizing: border-box;\ color: black;\ }\ .ace_button:hover {\ background-color: #eee;\ opacity:1;\ }\ .ace_button:active {\ background-color: #ddd;\ }\ .ace_button.checked {\ border-color: #3399ff;\ opacity:1;\ }\ .ace_search_options{\ margin-bottom: 3px;\ text-align: right;\ -webkit-user-select: none;\ -moz-user-select: none;\ -o-user-select: none;\ -ms-user-select: none;\ user-select: none;\ }"; var HashHandler = require("../keyboard/hash_handler").HashHandler; var keyUtil = require("../lib/keys"); dom.importCssString(searchboxCss, "ace_searchbox"); var html = ''.replace(/>\s+/g, ">"); var SearchBox = function(editor, range, showReplaceForm) { var div = dom.createElement("div"); div.innerHTML = html; this.element = div.firstChild; this.$init(); this.setEditor(editor); }; (function() { this.setEditor = function(editor) { editor.searchBox = this; editor.container.appendChild(this.element); this.editor = editor; }; this.$initElements = function(sb) { this.searchBox = sb.querySelector(".ace_search_form"); this.replaceBox = sb.querySelector(".ace_replace_form"); this.searchOptions = sb.querySelector(".ace_search_options"); this.regExpOption = sb.querySelector("[action=toggleRegexpMode]"); this.caseSensitiveOption = sb.querySelector("[action=toggleCaseSensitive]"); this.wholeWordOption = sb.querySelector("[action=toggleWholeWords]"); this.searchInput = this.searchBox.querySelector(".ace_search_field"); this.replaceInput = this.replaceBox.querySelector(".ace_search_field"); }; this.$init = function() { var sb = this.element; this.$initElements(sb); var _this = this; event.addListener(sb, "mousedown", function(e) { setTimeout(function(){ _this.activeInput.focus(); }, 0); event.stopPropagation(e); }); event.addListener(sb, "click", function(e) { var t = e.target || e.srcElement; var action = t.getAttribute("action"); if (action && _this[action]) _this[action](); else if (_this.$searchBarKb.commands[action]) _this.$searchBarKb.commands[action].exec(_this); event.stopPropagation(e); }); event.addCommandKeyListener(sb, function(e, hashId, keyCode) { var keyString = keyUtil.keyCodeToString(keyCode); var command = _this.$searchBarKb.findKeyCommand(hashId, keyString); if (command && command.exec) { command.exec(_this); event.stopEvent(e); } }); this.$onChange = lang.delayedCall(function() { _this.find(false, false); }); event.addListener(this.searchInput, "input", function() { _this.$onChange.schedule(20); }); event.addListener(this.searchInput, "focus", function() { _this.activeInput = _this.searchInput; _this.searchInput.value && _this.highlight(); }); event.addListener(this.replaceInput, "focus", function() { _this.activeInput = _this.replaceInput; _this.searchInput.value && _this.highlight(); }); }; this.$closeSearchBarKb = new HashHandler([{ bindKey: "Esc", name: "closeSearchBar", exec: function(editor) { editor.searchBox.hide(); } }]); this.$searchBarKb = new HashHandler(); this.$searchBarKb.bindKeys({ "Ctrl-f|Command-f|Ctrl-H|Command-Option-F": function(sb) { var isReplace = sb.isReplace = !sb.isReplace; sb.replaceBox.style.display = isReplace ? "" : "none"; sb[isReplace ? "replaceInput" : "searchInput"].focus(); }, "Ctrl-G|Command-G": function(sb) { sb.findNext(); }, "Ctrl-Shift-G|Command-Shift-G": function(sb) { sb.findPrev(); }, "esc": function(sb) { setTimeout(function() { sb.hide();}); }, "Return": function(sb) { if (sb.activeInput == sb.replaceInput) sb.replace(); sb.findNext(); }, "Shift-Return": function(sb) { if (sb.activeInput == sb.replaceInput) sb.replace(); sb.findPrev(); }, "Alt-Return": function(sb) { if (sb.activeInput == sb.replaceInput) sb.replaceAll(); sb.findAll(); }, "Tab": function(sb) { (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus(); } }); this.$searchBarKb.addCommands([{ name: "toggleRegexpMode", bindKey: {win: "Alt-R|Alt-/", mac: "Ctrl-Alt-R|Ctrl-Alt-/"}, exec: function(sb) { sb.regExpOption.checked = !sb.regExpOption.checked; sb.$syncOptions(); } }, { name: "toggleCaseSensitive", bindKey: {win: "Alt-C|Alt-I", mac: "Ctrl-Alt-R|Ctrl-Alt-I"}, exec: function(sb) { sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked; sb.$syncOptions(); } }, { name: "toggleWholeWords", bindKey: {win: "Alt-B|Alt-W", mac: "Ctrl-Alt-B|Ctrl-Alt-W"}, exec: function(sb) { sb.wholeWordOption.checked = !sb.wholeWordOption.checked; sb.$syncOptions(); } }]); this.$syncOptions = function() { dom.setCssClass(this.regExpOption, "checked", this.regExpOption.checked); dom.setCssClass(this.wholeWordOption, "checked", this.wholeWordOption.checked); dom.setCssClass(this.caseSensitiveOption, "checked", this.caseSensitiveOption.checked); this.find(false, false); }; this.highlight = function(re) { this.editor.session.highlight(re || this.editor.$search.$options.re); this.editor.renderer.updateBackMarkers() }; this.find = function(skipCurrent, backwards) { var range = this.editor.find(this.searchInput.value, { skipCurrent: skipCurrent, backwards: backwards, wrap: true, regExp: this.regExpOption.checked, caseSensitive: this.caseSensitiveOption.checked, wholeWord: this.wholeWordOption.checked }); var noMatch = !range && this.searchInput.value; dom.setCssClass(this.searchBox, "ace_nomatch", noMatch); this.editor._emit("findSearchBox", { match: !noMatch }); this.highlight(); }; this.findNext = function() { this.find(true, false); }; this.findPrev = function() { this.find(true, true); }; this.findAll = function(){ var range = this.editor.findAll(this.searchInput.value, { regExp: this.regExpOption.checked, caseSensitive: this.caseSensitiveOption.checked, wholeWord: this.wholeWordOption.checked }); var noMatch = !range && this.searchInput.value; dom.setCssClass(this.searchBox, "ace_nomatch", noMatch); this.editor._emit("findSearchBox", { match: !noMatch }); this.highlight(); this.hide(); }; this.replace = function() { if (!this.editor.getReadOnly()) this.editor.replace(this.replaceInput.value); }; this.replaceAndFindNext = function() { if (!this.editor.getReadOnly()) { this.editor.replace(this.replaceInput.value); this.findNext() } }; this.replaceAll = function() { if (!this.editor.getReadOnly()) this.editor.replaceAll(this.replaceInput.value); }; this.hide = function() { this.element.style.display = "none"; this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb); this.editor.focus(); }; this.show = function(value, isReplace) { this.element.style.display = ""; this.replaceBox.style.display = isReplace ? "" : "none"; this.isReplace = isReplace; if (value) this.searchInput.value = value; this.searchInput.focus(); this.searchInput.select(); this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb); }; this.isFocused = function() { var el = document.activeElement; return el == this.searchInput || el == this.replaceInput; } }).call(SearchBox.prototype); exports.SearchBox = SearchBox; exports.Search = function(editor, isReplace) { var sb = editor.searchBox || new SearchBox(editor); sb.show(editor.session.getTextRange(), isReplace); }; }); (function() { ace.require(["ace/ext/searchbox"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-settings_menu.js ================================================ ace.define("ace/ext/menu_tools/element_generator",["require","exports","module"], function(require, exports, module) { 'use strict'; module.exports.createOption = function createOption (obj) { var attribute; var el = document.createElement('option'); for(attribute in obj) { if(obj.hasOwnProperty(attribute)) { if(attribute === 'selected') { el.setAttribute(attribute, obj[attribute]); } else { el[attribute] = obj[attribute]; } } } return el; }; module.exports.createCheckbox = function createCheckbox (id, checked, clss) { var el = document.createElement('input'); el.setAttribute('type', 'checkbox'); el.setAttribute('id', id); el.setAttribute('name', id); el.setAttribute('value', checked); el.setAttribute('class', clss); if(checked) { el.setAttribute('checked', 'checked'); } return el; }; module.exports.createInput = function createInput (id, value, clss) { var el = document.createElement('input'); el.setAttribute('type', 'text'); el.setAttribute('id', id); el.setAttribute('name', id); el.setAttribute('value', value); el.setAttribute('class', clss); return el; }; module.exports.createLabel = function createLabel (text, labelFor) { var el = document.createElement('label'); el.setAttribute('for', labelFor); el.textContent = text; return el; }; module.exports.createSelection = function createSelection (id, values, clss) { var el = document.createElement('select'); el.setAttribute('id', id); el.setAttribute('name', id); el.setAttribute('class', clss); values.forEach(function(item) { el.appendChild(module.exports.createOption(item)); }); return el; }; }); ace.define("ace/ext/modelist",["require","exports","module"], function(require, exports, module) { "use strict"; var modes = []; function getModeForPath(path) { var mode = modesByName.text; var fileName = path.split(/[\/\\]/).pop(); for (var i = 0; i < modes.length; i++) { if (modes[i].supportsFile(fileName)) { mode = modes[i]; break; } } return mode; } var Mode = function(name, caption, extensions) { this.name = name; this.caption = caption; this.mode = "ace/mode/" + name; this.extensions = extensions; if (/\^/.test(extensions)) { var re = extensions.replace(/\|(\^)?/g, function(a, b){ return "$|" + (b ? "^" : "^.*\\."); }) + "$"; } else { var re = "^.*\\.(" + extensions + ")$"; } this.extRe = new RegExp(re, "gi"); }; Mode.prototype.supportsFile = function(filename) { return filename.match(this.extRe); }; var supportedModes = { ABAP: ["abap"], ActionScript:["as"], ADA: ["ada|adb"], Apache_Conf: ["^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd"], AsciiDoc: ["asciidoc"], Assembly_x86:["asm"], AutoHotKey: ["ahk"], BatchFile: ["bat|cmd"], C9Search: ["c9search_results"], C_Cpp: ["cpp|c|cc|cxx|h|hh|hpp"], Cirru: ["cirru|cr"], Clojure: ["clj|cljs"], Cobol: ["CBL|COB"], coffee: ["coffee|cf|cson|^Cakefile"], ColdFusion: ["cfm"], CSharp: ["cs"], CSS: ["css"], Curly: ["curly"], D: ["d|di"], Dart: ["dart"], Diff: ["diff|patch"], Dockerfile: ["^Dockerfile"], Dot: ["dot"], Dummy: ["dummy"], DummySyntax: ["dummy"], Eiffel: ["e"], EJS: ["ejs"], Elixir: ["ex|exs"], Elm: ["elm"], Erlang: ["erl|hrl"], Forth: ["frt|fs|ldr"], FTL: ["ftl"], Gcode: ["gcode"], Gherkin: ["feature"], Gitignore: ["^.gitignore"], Glsl: ["glsl|frag|vert"], golang: ["go"], Groovy: ["groovy"], HAML: ["haml"], Handlebars: ["hbs|handlebars|tpl|mustache"], Haskell: ["hs"], haXe: ["hx"], HTML: ["html|htm|xhtml"], HTML_Ruby: ["erb|rhtml|html.erb"], INI: ["ini|conf|cfg|prefs"], Io: ["io"], Jack: ["jack"], Jade: ["jade"], Java: ["java"], JavaScript: ["js|jsm"], JSON: ["json"], JSONiq: ["jq"], JSP: ["jsp"], JSX: ["jsx"], Julia: ["jl"], LaTeX: ["tex|latex|ltx|bib"], LESS: ["less"], Liquid: ["liquid"], Lisp: ["lisp"], LiveScript: ["ls"], LogiQL: ["logic|lql"], LSL: ["lsl"], Lua: ["lua"], LuaPage: ["lp"], Lucene: ["lucene"], Makefile: ["^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make"], Markdown: ["md|markdown"], Mask: ["mask"], MATLAB: ["matlab"], MEL: ["mel"], MUSHCode: ["mc|mush"], MySQL: ["mysql"], Nix: ["nix"], ObjectiveC: ["m|mm"], OCaml: ["ml|mli"], Pascal: ["pas|p"], Perl: ["pl|pm"], pgSQL: ["pgsql"], PHP: ["php|phtml"], Powershell: ["ps1"], Praat: ["praat|praatscript|psc|proc"], Prolog: ["plg|prolog"], Properties: ["properties"], Protobuf: ["proto"], Python: ["py"], R: ["r"], RDoc: ["Rd"], RHTML: ["Rhtml"], Ruby: ["rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile"], Rust: ["rs"], SASS: ["sass"], SCAD: ["scad"], Scala: ["scala"], Scheme: ["scm|rkt"], SCSS: ["scss"], SH: ["sh|bash|^.bashrc"], SJS: ["sjs"], Smarty: ["smarty|tpl"], snippets: ["snippets"], Soy_Template:["soy"], Space: ["space"], SQL: ["sql"], Stylus: ["styl|stylus"], SVG: ["svg"], Tcl: ["tcl"], Tex: ["tex"], Text: ["txt"], Textile: ["textile"], Toml: ["toml"], Twig: ["twig"], Typescript: ["ts|typescript|str"], Vala: ["vala"], VBScript: ["vbs|vb"], Velocity: ["vm"], Verilog: ["v|vh|sv|svh"], VHDL: ["vhd|vhdl"], XML: ["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl"], XQuery: ["xq"], YAML: ["yaml|yml"] }; var nameOverrides = { ObjectiveC: "Objective-C", CSharp: "C#", golang: "Go", C_Cpp: "C and C++", coffee: "CoffeeScript", HTML_Ruby: "HTML (Ruby)", FTL: "FreeMarker" }; var modesByName = {}; for (var name in supportedModes) { var data = supportedModes[name]; var displayName = (nameOverrides[name] || name).replace(/_/g, " "); var filename = name.toLowerCase(); var mode = new Mode(filename, displayName, data[0]); modesByName[filename] = mode; modes.push(mode); } module.exports = { getModeForPath: getModeForPath, modes: modes, modesByName: modesByName }; }); ace.define("ace/ext/themelist",["require","exports","module","ace/lib/fixoldbrowsers"], function(require, exports, module) { "use strict"; require("ace/lib/fixoldbrowsers"); var themeData = [ ["Chrome" ], ["Clouds" ], ["Crimson Editor" ], ["Dawn" ], ["Dreamweaver" ], ["Eclipse" ], ["GitHub" ], ["Solarized Light"], ["TextMate" ], ["Tomorrow" ], ["XCode" ], ["Kuroir"], ["KatzenMilch"], ["Ambiance" ,"ambiance" , "dark"], ["Chaos" ,"chaos" , "dark"], ["Clouds Midnight" ,"clouds_midnight" , "dark"], ["Cobalt" ,"cobalt" , "dark"], ["idle Fingers" ,"idle_fingers" , "dark"], ["krTheme" ,"kr_theme" , "dark"], ["Merbivore" ,"merbivore" , "dark"], ["Merbivore Soft" ,"merbivore_soft" , "dark"], ["Mono Industrial" ,"mono_industrial" , "dark"], ["Monokai" ,"monokai" , "dark"], ["Pastel on dark" ,"pastel_on_dark" , "dark"], ["Solarized Dark" ,"solarized_dark" , "dark"], ["Terminal" ,"terminal" , "dark"], ["Tomorrow Night" ,"tomorrow_night" , "dark"], ["Tomorrow Night Blue" ,"tomorrow_night_blue" , "dark"], ["Tomorrow Night Bright","tomorrow_night_bright" , "dark"], ["Tomorrow Night 80s" ,"tomorrow_night_eighties" , "dark"], ["Twilight" ,"twilight" , "dark"], ["Vibrant Ink" ,"vibrant_ink" , "dark"] ]; exports.themesByName = {}; exports.themes = themeData.map(function(data) { var name = data[1] || data[0].replace(/ /g, "_").toLowerCase(); var theme = { caption: data[0], theme: "ace/theme/" + name, isDark: data[2] == "dark", name: name }; exports.themesByName[name] = theme; return theme; }); }); ace.define("ace/ext/menu_tools/add_editor_menu_options",["require","exports","module","ace/ext/modelist","ace/ext/themelist"], function(require, exports, module) { 'use strict'; module.exports.addEditorMenuOptions = function addEditorMenuOptions (editor) { var modelist = require('../modelist'); var themelist = require('../themelist'); editor.menuOptions = { setNewLineMode: [{ textContent: "unix", value: "unix" }, { textContent: "windows", value: "windows" }, { textContent: "auto", value: "auto" }], setTheme: [], setMode: [], setKeyboardHandler: [{ textContent: "ace", value: "" }, { textContent: "vim", value: "ace/keyboard/vim" }, { textContent: "emacs", value: "ace/keyboard/emacs" }, { textContent: "textarea", value: "ace/keyboard/textarea" }, { textContent: "sublime", value: "ace/keyboard/sublime" }] }; editor.menuOptions.setTheme = themelist.themes.map(function(theme) { return { textContent: theme.caption, value: theme.theme }; }); editor.menuOptions.setMode = modelist.modes.map(function(mode) { return { textContent: mode.name, value: mode.mode }; }); }; }); ace.define("ace/ext/menu_tools/get_set_functions",["require","exports","module"], function(require, exports, module) { 'use strict'; module.exports.getSetFunctions = function getSetFunctions (editor) { var out = []; var my = { 'editor' : editor, 'session' : editor.session, 'renderer' : editor.renderer }; var opts = []; var skip = [ 'setOption', 'setUndoManager', 'setDocument', 'setValue', 'setBreakpoints', 'setScrollTop', 'setScrollLeft', 'setSelectionStyle', 'setWrapLimitRange' ]; ['renderer', 'session', 'editor'].forEach(function(esra) { var esr = my[esra]; var clss = esra; for(var fn in esr) { if(skip.indexOf(fn) === -1) { if(/^set/.test(fn) && opts.indexOf(fn) === -1) { opts.push(fn); out.push({ 'functionName' : fn, 'parentObj' : esr, 'parentName' : clss }); } } } }); return out; }; }); ace.define("ace/ext/menu_tools/generate_settings_menu",["require","exports","module","ace/ext/menu_tools/element_generator","ace/ext/menu_tools/add_editor_menu_options","ace/ext/menu_tools/get_set_functions"], function(require, exports, module) { 'use strict'; var egen = require('./element_generator'); var addEditorMenuOptions = require('./add_editor_menu_options').addEditorMenuOptions; var getSetFunctions = require('./get_set_functions').getSetFunctions; module.exports.generateSettingsMenu = function generateSettingsMenu (editor) { var elements = []; function cleanupElementsList() { elements.sort(function(a, b) { var x = a.getAttribute('contains'); var y = b.getAttribute('contains'); return x.localeCompare(y); }); } function wrapElements() { var topmenu = document.createElement('div'); topmenu.setAttribute('id', 'ace_settingsmenu'); elements.forEach(function(element) { topmenu.appendChild(element); }); var el = topmenu.appendChild(document.createElement('div')); var version = "1.1.8"; el.style.padding = "1em"; el.textContent = "Ace version " + version; return topmenu; } function createNewEntry(obj, clss, item, val) { var el; var div = document.createElement('div'); div.setAttribute('contains', item); div.setAttribute('class', 'ace_optionsMenuEntry'); div.setAttribute('style', 'clear: both;'); div.appendChild(egen.createLabel( item.replace(/^set/, '').replace(/([A-Z])/g, ' $1').trim(), item )); if (Array.isArray(val)) { el = egen.createSelection(item, val, clss); el.addEventListener('change', function(e) { try{ editor.menuOptions[e.target.id].forEach(function(x) { if(x.textContent !== e.target.textContent) { delete x.selected; } }); obj[e.target.id](e.target.value); } catch (err) { throw new Error(err); } }); } else if(typeof val === 'boolean') { el = egen.createCheckbox(item, val, clss); el.addEventListener('change', function(e) { try{ obj[e.target.id](!!e.target.checked); } catch (err) { throw new Error(err); } }); } else { el = egen.createInput(item, val, clss); el.addEventListener('change', function(e) { try{ if(e.target.value === 'true') { obj[e.target.id](true); } else if(e.target.value === 'false') { obj[e.target.id](false); } else { obj[e.target.id](e.target.value); } } catch (err) { throw new Error(err); } }); } el.style.cssText = 'float:right;'; div.appendChild(el); return div; } function makeDropdown(item, esr, clss, fn) { var val = editor.menuOptions[item]; var currentVal = esr[fn](); if (typeof currentVal == 'object') currentVal = currentVal.$id; val.forEach(function(valuex) { if (valuex.value === currentVal) valuex.selected = 'selected'; }); return createNewEntry(esr, clss, item, val); } function handleSet(setObj) { var item = setObj.functionName; var esr = setObj.parentObj; var clss = setObj.parentName; var val; var fn = item.replace(/^set/, 'get'); if(editor.menuOptions[item] !== undefined) { elements.push(makeDropdown(item, esr, clss, fn)); } else if(typeof esr[fn] === 'function') { try { val = esr[fn](); if(typeof val === 'object') { val = val.$id; } elements.push( createNewEntry(esr, clss, item, val) ); } catch (e) { } } } addEditorMenuOptions(editor); getSetFunctions(editor).forEach(function(setObj) { handleSet(setObj); }); cleanupElementsList(); return wrapElements(); }; }); ace.define("ace/ext/menu_tools/overlay_page",["require","exports","module","ace/lib/dom"], function(require, exports, module) { 'use strict'; var dom = require("../../lib/dom"); var cssText = "#ace_settingsmenu, #kbshortcutmenu {\ background-color: #F7F7F7;\ color: black;\ box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\ padding: 1em 0.5em 2em 1em;\ overflow: auto;\ position: absolute;\ margin: 0;\ bottom: 0;\ right: 0;\ top: 0;\ z-index: 9991;\ cursor: default;\ }\ .ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\ box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\ background-color: rgba(255, 255, 255, 0.6);\ color: black;\ }\ .ace_optionsMenuEntry:hover {\ background-color: rgba(100, 100, 100, 0.1);\ -webkit-transition: all 0.5s;\ transition: all 0.3s\ }\ .ace_closeButton {\ background: rgba(245, 146, 146, 0.5);\ border: 1px solid #F48A8A;\ border-radius: 50%;\ padding: 7px;\ position: absolute;\ right: -8px;\ top: -8px;\ z-index: 1000;\ }\ .ace_closeButton{\ background: rgba(245, 146, 146, 0.9);\ }\ .ace_optionsMenuKey {\ color: darkslateblue;\ font-weight: bold;\ }\ .ace_optionsMenuCommand {\ color: darkcyan;\ font-weight: normal;\ }"; dom.importCssString(cssText); module.exports.overlayPage = function overlayPage(editor, contentElement, top, right, bottom, left) { top = top ? 'top: ' + top + ';' : ''; bottom = bottom ? 'bottom: ' + bottom + ';' : ''; right = right ? 'right: ' + right + ';' : ''; left = left ? 'left: ' + left + ';' : ''; var closer = document.createElement('div'); var contentContainer = document.createElement('div'); function documentEscListener(e) { if (e.keyCode === 27) { closer.click(); } } closer.style.cssText = 'margin: 0; padding: 0; ' + 'position: fixed; top:0; bottom:0; left:0; right:0;' + 'z-index: 9990; ' + 'background-color: rgba(0, 0, 0, 0.3);'; closer.addEventListener('click', function() { document.removeEventListener('keydown', documentEscListener); closer.parentNode.removeChild(closer); editor.focus(); closer = null; }); document.addEventListener('keydown', documentEscListener); contentContainer.style.cssText = top + right + bottom + left; contentContainer.addEventListener('click', function(e) { e.stopPropagation(); }); var wrapper = dom.createElement("div"); wrapper.style.position = "relative"; var closeButton = dom.createElement("div"); closeButton.className = "ace_closeButton"; closeButton.addEventListener('click', function() { closer.click(); }); wrapper.appendChild(closeButton); contentContainer.appendChild(wrapper); contentContainer.appendChild(contentElement); closer.appendChild(contentContainer); document.body.appendChild(closer); editor.blur(); }; }); ace.define("ace/ext/settings_menu",["require","exports","module","ace/ext/menu_tools/generate_settings_menu","ace/ext/menu_tools/overlay_page","ace/editor"], function(require, exports, module) { "use strict"; var generateSettingsMenu = require('./menu_tools/generate_settings_menu').generateSettingsMenu; var overlayPage = require('./menu_tools/overlay_page').overlayPage; function showSettingsMenu(editor) { var sm = document.getElementById('ace_settingsmenu'); if (!sm) overlayPage(editor, generateSettingsMenu(editor), '0', '0', '0'); } module.exports.init = function(editor) { var Editor = require("ace/editor").Editor; Editor.prototype.showSettingsMenu = function() { showSettingsMenu(this); }; }; }); (function() { ace.require(["ace/ext/settings_menu"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-spellcheck.js ================================================ ace.define("ace/ext/spellcheck",["require","exports","module","ace/lib/event","ace/editor","ace/config"], function(require, exports, module) { "use strict"; var event = require("../lib/event"); exports.contextMenuHandler = function(e){ var host = e.target; var text = host.textInput.getElement(); if (!host.selection.isEmpty()) return; var c = host.getCursorPosition(); var r = host.session.getWordRange(c.row, c.column); var w = host.session.getTextRange(r); host.session.tokenRe.lastIndex = 0; if (!host.session.tokenRe.test(w)) return; var PLACEHOLDER = "\x01\x01"; var value = w + " " + PLACEHOLDER; text.value = value; text.setSelectionRange(w.length, w.length + 1); text.setSelectionRange(0, 0); text.setSelectionRange(0, w.length); var afterKeydown = false; event.addListener(text, "keydown", function onKeydown() { event.removeListener(text, "keydown", onKeydown); afterKeydown = true; }); host.textInput.setInputHandler(function(newVal) { console.log(newVal , value, text.selectionStart, text.selectionEnd) if (newVal == value) return ''; if (newVal.lastIndexOf(value, 0) === 0) return newVal.slice(value.length); if (newVal.substr(text.selectionEnd) == value) return newVal.slice(0, -value.length); if (newVal.slice(-2) == PLACEHOLDER) { var val = newVal.slice(0, -2); if (val.slice(-1) == " ") { if (afterKeydown) return val.substring(0, text.selectionEnd); val = val.slice(0, -1); host.session.replace(r, val); return ""; } } return newVal; }); }; var Editor = require("../editor").Editor; require("../config").defineOptions(Editor.prototype, "editor", { spellcheck: { set: function(val) { var text = this.textInput.getElement(); text.spellcheck = !!val; if (!val) this.removeListener("nativecontextmenu", exports.contextMenuHandler); else this.on("nativecontextmenu", exports.contextMenuHandler); }, value: true } }); }); (function() { ace.require(["ace/ext/spellcheck"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-split.js ================================================ ace.define("ace/split",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/editor","ace/virtual_renderer","ace/edit_session"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var lang = require("./lib/lang"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Editor = require("./editor").Editor; var Renderer = require("./virtual_renderer").VirtualRenderer; var EditSession = require("./edit_session").EditSession; var Split = function(container, theme, splits) { this.BELOW = 1; this.BESIDE = 0; this.$container = container; this.$theme = theme; this.$splits = 0; this.$editorCSS = ""; this.$editors = []; this.$orientation = this.BESIDE; this.setSplits(splits || 1); this.$cEditor = this.$editors[0]; this.on("focus", function(editor) { this.$cEditor = editor; }.bind(this)); }; (function(){ oop.implement(this, EventEmitter); this.$createEditor = function() { var el = document.createElement("div"); el.className = this.$editorCSS; el.style.cssText = "position: absolute; top:0px; bottom:0px"; this.$container.appendChild(el); var editor = new Editor(new Renderer(el, this.$theme)); editor.on("focus", function() { this._emit("focus", editor); }.bind(this)); this.$editors.push(editor); editor.setFontSize(this.$fontSize); return editor; }; this.setSplits = function(splits) { var editor; if (splits < 1) { throw "The number of splits have to be > 0!"; } if (splits == this.$splits) { return; } else if (splits > this.$splits) { while (this.$splits < this.$editors.length && this.$splits < splits) { editor = this.$editors[this.$splits]; this.$container.appendChild(editor.container); editor.setFontSize(this.$fontSize); this.$splits ++; } while (this.$splits < splits) { this.$createEditor(); this.$splits ++; } } else { while (this.$splits > splits) { editor = this.$editors[this.$splits - 1]; this.$container.removeChild(editor.container); this.$splits --; } } this.resize(); }; this.getSplits = function() { return this.$splits; }; this.getEditor = function(idx) { return this.$editors[idx]; }; this.getCurrentEditor = function() { return this.$cEditor; }; this.focus = function() { this.$cEditor.focus(); }; this.blur = function() { this.$cEditor.blur(); }; this.setTheme = function(theme) { this.$editors.forEach(function(editor) { editor.setTheme(theme); }); }; this.setKeyboardHandler = function(keybinding) { this.$editors.forEach(function(editor) { editor.setKeyboardHandler(keybinding); }); }; this.forEach = function(callback, scope) { this.$editors.forEach(callback, scope); }; this.$fontSize = ""; this.setFontSize = function(size) { this.$fontSize = size; this.forEach(function(editor) { editor.setFontSize(size); }); }; this.$cloneSession = function(session) { var s = new EditSession(session.getDocument(), session.getMode()); var undoManager = session.getUndoManager(); if (undoManager) { var undoManagerProxy = new UndoManagerProxy(undoManager, s); s.setUndoManager(undoManagerProxy); } s.$informUndoManager = lang.delayedCall(function() { s.$deltas = []; }); s.setTabSize(session.getTabSize()); s.setUseSoftTabs(session.getUseSoftTabs()); s.setOverwrite(session.getOverwrite()); s.setBreakpoints(session.getBreakpoints()); s.setUseWrapMode(session.getUseWrapMode()); s.setUseWorker(session.getUseWorker()); s.setWrapLimitRange(session.$wrapLimitRange.min, session.$wrapLimitRange.max); s.$foldData = session.$cloneFoldData(); return s; }; this.setSession = function(session, idx) { var editor; if (idx == null) { editor = this.$cEditor; } else { editor = this.$editors[idx]; } var isUsed = this.$editors.some(function(editor) { return editor.session === session; }); if (isUsed) { session = this.$cloneSession(session); } editor.setSession(session); return session; }; this.getOrientation = function() { return this.$orientation; }; this.setOrientation = function(orientation) { if (this.$orientation == orientation) { return; } this.$orientation = orientation; this.resize(); }; this.resize = function() { var width = this.$container.clientWidth; var height = this.$container.clientHeight; var editor; if (this.$orientation == this.BESIDE) { var editorWidth = width / this.$splits; for (var i = 0; i < this.$splits; i++) { editor = this.$editors[i]; editor.container.style.width = editorWidth + "px"; editor.container.style.top = "0px"; editor.container.style.left = i * editorWidth + "px"; editor.container.style.height = height + "px"; editor.resize(); } } else { var editorHeight = height / this.$splits; for (var i = 0; i < this.$splits; i++) { editor = this.$editors[i]; editor.container.style.width = width + "px"; editor.container.style.top = i * editorHeight + "px"; editor.container.style.left = "0px"; editor.container.style.height = editorHeight + "px"; editor.resize(); } } }; }).call(Split.prototype); function UndoManagerProxy(undoManager, session) { this.$u = undoManager; this.$doc = session; } (function() { this.execute = function(options) { this.$u.execute(options); }; this.undo = function() { var selectionRange = this.$u.undo(true); if (selectionRange) { this.$doc.selection.setSelectionRange(selectionRange); } }; this.redo = function() { var selectionRange = this.$u.redo(true); if (selectionRange) { this.$doc.selection.setSelectionRange(selectionRange); } }; this.reset = function() { this.$u.reset(); }; this.hasUndo = function() { return this.$u.hasUndo(); }; this.hasRedo = function() { return this.$u.hasRedo(); }; }).call(UndoManagerProxy.prototype); exports.Split = Split; }); ace.define("ace/ext/split",["require","exports","module","ace/split"], function(require, exports, module) { "use strict"; module.exports = require("../split"); }); (function() { ace.require(["ace/ext/split"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-static_highlight.js ================================================ ace.define("ace/ext/static_highlight",["require","exports","module","ace/edit_session","ace/layer/text","ace/config","ace/lib/dom"], function(require, exports, module) { "use strict"; var EditSession = require("../edit_session").EditSession; var TextLayer = require("../layer/text").Text; var baseStyles = ".ace_static_highlight {\ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', 'Droid Sans Mono', monospace;\ font-size: 12px;\ }\ .ace_static_highlight .ace_gutter {\ width: 25px !important;\ float: left;\ text-align: right;\ padding: 0 3px 0 0;\ margin-right: 3px;\ position: static !important;\ }\ .ace_static_highlight .ace_line { clear: both; }\ .ace_static_highlight .ace_gutter-cell {\ -moz-user-select: -moz-none;\ -khtml-user-select: none;\ -webkit-user-select: none;\ user-select: none;\ }\ .ace_static_highlight .ace_gutter-cell:before {\ content: counter(ace_line, decimal);\ counter-increment: ace_line;\ }\ .ace_static_highlight {\ counter-reset: ace_line;\ }\ "; var config = require("../config"); var dom = require("../lib/dom"); var highlight = function(el, opts, callback) { var m = el.className.match(/lang-(\w+)/); var mode = opts.mode || m && ("ace/mode/" + m[1]); if (!mode) return false; var theme = opts.theme || "ace/theme/textmate"; var data = ""; var nodes = []; if (el.firstElementChild) { var textLen = 0; for (var i = 0; i < el.childNodes.length; i++) { var ch = el.childNodes[i]; if (ch.nodeType == 3) { textLen += ch.data.length; data += ch.data; } else { nodes.push(textLen, ch); } } } else { data = dom.getInnerText(el); if (opts.trim) data = data.trim(); } highlight.render(data, mode, theme, opts.firstLineNumber, !opts.showGutter, function (highlighted) { dom.importCssString(highlighted.css, "ace_highlight"); el.innerHTML = highlighted.html; var container = el.firstChild.firstChild; for (var i = 0; i < nodes.length; i += 2) { var pos = highlighted.session.doc.indexToPosition(nodes[i]); var node = nodes[i + 1]; var lineEl = container.children[pos.row]; lineEl && lineEl.appendChild(node); } callback && callback(); }); }; highlight.render = function(input, mode, theme, lineStart, disableGutter, callback) { var waiting = 1; var modeCache = EditSession.prototype.$modes; if (typeof theme == "string") { waiting++; config.loadModule(['theme', theme], function(m) { theme = m; --waiting || done(); }); } var modeOptions; if (mode && typeof mode === "object" && !mode.getTokenizer) { modeOptions = mode; mode = modeOptions.path; } if (typeof mode == "string") { waiting++; config.loadModule(['mode', mode], function(m) { if (!modeCache[mode] || modeOptions) modeCache[mode] = new m.Mode(modeOptions); mode = modeCache[mode]; --waiting || done(); }); } function done() { var result = highlight.renderSync(input, mode, theme, lineStart, disableGutter); return callback ? callback(result) : result; } return --waiting || done(); }; highlight.renderSync = function(input, mode, theme, lineStart, disableGutter) { lineStart = parseInt(lineStart || 1, 10); var session = new EditSession(""); session.setUseWorker(false); session.setMode(mode); var textLayer = new TextLayer(document.createElement("div")); textLayer.setSession(session); textLayer.config = { characterWidth: 10, lineHeight: 20 }; session.setValue(input); var stringBuilder = []; var length = session.getLength(); for(var ix = 0; ix < length; ix++) { stringBuilder.push("
"); if (!disableGutter) stringBuilder.push("" + /*(ix + lineStart) + */ ""); textLayer.$renderLine(stringBuilder, ix, true, false); stringBuilder.push("\n
"); } var html = "
" + "
" + stringBuilder.join("") + "
" + "
"; textLayer.destroy(); return { css: baseStyles + theme.cssText, html: html, session: session }; }; module.exports = highlight; module.exports.highlight =highlight; }); (function() { ace.require(["ace/ext/static_highlight"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-statusbar.js ================================================ ace.define("ace/ext/statusbar",["require","exports","module","ace/lib/dom","ace/lib/lang"], function(require, exports, module) { "use strict"; var dom = require("ace/lib/dom"); var lang = require("ace/lib/lang"); var StatusBar = function(editor, parentNode) { this.element = dom.createElement("div"); this.element.className = "ace_status-indicator"; this.element.style.cssText = "display: inline-block;"; parentNode.appendChild(this.element); var statusUpdate = lang.delayedCall(function(){ this.updateStatus(editor) }.bind(this)); editor.on("changeStatus", function() { statusUpdate.schedule(100); }); editor.on("changeSelection", function() { statusUpdate.schedule(100); }); }; (function(){ this.updateStatus = function(editor) { var status = []; function add(str, separator) { str && status.push(str, separator || "|"); } add(editor.keyBinding.getStatusText(editor)); if (editor.commands.recording) add("REC"); var c = editor.selection.lead; add(c.row + ":" + c.column, " "); if (!editor.selection.isEmpty()) { var r = editor.getSelectionRange(); add("(" + (r.end.row - r.start.row) + ":" +(r.end.column - r.start.column) + ")"); } status.pop(); this.element.textContent = status.join(""); }; }).call(StatusBar.prototype); exports.StatusBar = StatusBar; }); (function() { ace.require(["ace/ext/statusbar"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-textarea.js ================================================ ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; exports.isDark = false; exports.cssClass = "ace-tm"; exports.cssText = ".ace-tm .ace_gutter {\ background: #f0f0f0;\ color: #333;\ }\ .ace-tm .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-tm .ace_fold {\ background-color: #6B72E6;\ }\ .ace-tm {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-tm .ace_cursor {\ color: black;\ }\ .ace-tm .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-tm .ace_storage,\ .ace-tm .ace_keyword {\ color: blue;\ }\ .ace-tm .ace_constant {\ color: rgb(197, 6, 11);\ }\ .ace-tm .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-tm .ace_constant.ace_language {\ color: rgb(88, 92, 246);\ }\ .ace-tm .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_invalid {\ background-color: rgba(255, 0, 0, 0.1);\ color: red;\ }\ .ace-tm .ace_support.ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-tm .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_support.ace_type,\ .ace-tm .ace_support.ace_class {\ color: rgb(109, 121, 222);\ }\ .ace-tm .ace_keyword.ace_operator {\ color: rgb(104, 118, 135);\ }\ .ace-tm .ace_string {\ color: rgb(3, 106, 7);\ }\ .ace-tm .ace_comment {\ color: rgb(76, 136, 107);\ }\ .ace-tm .ace_comment.ace_doc {\ color: rgb(0, 102, 255);\ }\ .ace-tm .ace_comment.ace_doc.ace_tag {\ color: rgb(128, 159, 191);\ }\ .ace-tm .ace_constant.ace_numeric {\ color: rgb(0, 0, 205);\ }\ .ace-tm .ace_variable {\ color: rgb(49, 132, 149);\ }\ .ace-tm .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-tm .ace_entity.ace_name.ace_function {\ color: #0000A2;\ }\ .ace-tm .ace_heading {\ color: rgb(12, 7, 255);\ }\ .ace-tm .ace_list {\ color:rgb(185, 6, 144);\ }\ .ace-tm .ace_meta.ace_tag {\ color:rgb(0, 22, 142);\ }\ .ace-tm .ace_string.ace_regex {\ color: rgb(255, 0, 0)\ }\ .ace-tm .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-tm.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px white;\ border-radius: 2px;\ }\ .ace-tm .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-tm .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-tm .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-tm .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.07);\ }\ .ace-tm .ace_gutter-active-line {\ background-color : #dcdcdc;\ }\ .ace-tm .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-tm .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"], function(require, exports, module) { "use strict"; require("./lib/fixoldbrowsers"); var dom = require("./lib/dom"); var event = require("./lib/event"); var Editor = require("./editor").Editor; var EditSession = require("./edit_session").EditSession; var UndoManager = require("./undomanager").UndoManager; var Renderer = require("./virtual_renderer").VirtualRenderer; require("./worker/worker_client"); require("./keyboard/hash_handler"); require("./placeholder"); require("./multi_select"); require("./mode/folding/fold_mode"); require("./theme/textmate"); require("./ext/error_marker"); exports.config = require("./config"); exports.require = require; exports.edit = function(el) { if (typeof(el) == "string") { var _id = el; el = document.getElementById(_id); if (!el) throw new Error("ace.edit can't find div #" + _id); } if (el && el.env && el.env.editor instanceof Editor) return el.env.editor; var value = ""; if (el && /input|textarea/i.test(el.tagName)) { var oldNode = el; value = oldNode.value; el = dom.createElement("pre"); oldNode.parentNode.replaceChild(el, oldNode); } else { value = dom.getInnerText(el); el.innerHTML = ''; } var doc = exports.createEditSession(value); var editor = new Editor(new Renderer(el)); editor.setSession(doc); var env = { document: doc, editor: editor, onResize: editor.resize.bind(editor, null) }; if (oldNode) env.textarea = oldNode; event.addListener(window, "resize", env.onResize); editor.on("destroy", function() { event.removeListener(window, "resize", env.onResize); env.editor.container.env = null; // prevent memory leak on old ie }); editor.container.env = editor.env = env; return editor; }; exports.createEditSession = function(text, mode) { var doc = new EditSession(text, mode); doc.setUndoManager(new UndoManager()); return doc; } exports.EditSession = EditSession; exports.UndoManager = UndoManager; }); ace.define("ace/ext/textarea",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/net","ace/ace","ace/theme/textmate"], function(require, exports, module) { "use strict"; var event = require("../lib/event"); var UA = require("../lib/useragent"); var net = require("../lib/net"); var ace = require("../ace"); require("../theme/textmate"); module.exports = exports = ace; var getCSSProperty = function(element, container, property) { var ret = element.style[property]; if (!ret) { if (window.getComputedStyle) { ret = window.getComputedStyle(element, '').getPropertyValue(property); } else { ret = element.currentStyle[property]; } } if (!ret || ret == 'auto' || ret == 'intrinsic') { ret = container.style[property]; } return ret; }; function applyStyles(elm, styles) { for (var style in styles) { elm.style[style] = styles[style]; } } function setupContainer(element, getValue) { if (element.type != 'textarea') { throw new Error("Textarea required!"); } var parentNode = element.parentNode; var container = document.createElement('div'); var resizeEvent = function() { var style = 'position:relative;'; [ 'margin-top', 'margin-left', 'margin-right', 'margin-bottom' ].forEach(function(item) { style += item + ':' + getCSSProperty(element, container, item) + ';'; }); var width = getCSSProperty(element, container, 'width') || (element.clientWidth + "px"); var height = getCSSProperty(element, container, 'height') || (element.clientHeight + "px"); style += 'height:' + height + ';width:' + width + ';'; style += 'display:inline-block;'; container.setAttribute('style', style); }; event.addListener(window, 'resize', resizeEvent); resizeEvent(); parentNode.insertBefore(container, element.nextSibling); while (parentNode !== document) { if (parentNode.tagName.toUpperCase() === 'FORM') { var oldSumit = parentNode.onsubmit; parentNode.onsubmit = function(evt) { element.value = getValue(); if (oldSumit) { oldSumit.call(this, evt); } }; break; } parentNode = parentNode.parentNode; } return container; } exports.transformTextarea = function(element, options) { var session; var container = setupContainer(element, function() { return session.getValue(); }); element.style.display = 'none'; container.style.background = 'white'; var editorDiv = document.createElement("div"); applyStyles(editorDiv, { top: "0px", left: "0px", right: "0px", bottom: "0px", border: "1px solid gray", position: "absolute" }); container.appendChild(editorDiv); var settingOpener = document.createElement("div"); applyStyles(settingOpener, { position: "absolute", right: "0px", bottom: "0px", background: "red", cursor: "nw-resize", borderStyle: "solid", borderWidth: "9px 8px 10px 9px", width: "2px", borderColor: "lightblue gray gray lightblue", zIndex: 101 }); var settingDiv = document.createElement("div"); var settingDivStyles = { top: "0px", left: "20%", right: "0px", bottom: "0px", position: "absolute", padding: "5px", zIndex: 100, color: "white", display: "none", overflow: "auto", fontSize: "14px", boxShadow: "-5px 2px 3px gray" }; if (!UA.isOldIE) { settingDivStyles.backgroundColor = "rgba(0, 0, 0, 0.6)"; } else { settingDivStyles.backgroundColor = "#333"; } applyStyles(settingDiv, settingDivStyles); container.appendChild(settingDiv); options = options || exports.defaultOptions; var editor = ace.edit(editorDiv); session = editor.getSession(); session.setValue(element.value || element.innerHTML); editor.focus(); container.appendChild(settingOpener); setupApi(editor, editorDiv, settingDiv, ace, options, load); setupSettingPanel(settingDiv, settingOpener, editor); var state = ""; event.addListener(settingOpener, "mousemove", function(e) { var rect = this.getBoundingClientRect(); var x = e.clientX - rect.left, y = e.clientY - rect.top; if (x + y < (rect.width + rect.height)/2) { this.style.cursor = "pointer"; state = "toggle"; } else { state = "resize"; this.style.cursor = "nw-resize"; } }); event.addListener(settingOpener, "mousedown", function(e) { if (state == "toggle") { editor.setDisplaySettings(); return; } container.style.zIndex = 100000; var rect = container.getBoundingClientRect(); var startX = rect.width + rect.left - e.clientX; var startY = rect.height + rect.top - e.clientY; event.capture(settingOpener, function(e) { container.style.width = e.clientX - rect.left + startX + "px"; container.style.height = e.clientY - rect.top + startY + "px"; editor.resize(); }, function() {}); }); return editor; }; function load(url, module, callback) { net.loadScript(url, function() { require([module], callback); }); } function setupApi(editor, editorDiv, settingDiv, ace, options, loader) { var session = editor.getSession(); var renderer = editor.renderer; loader = loader || load; function toBool(value) { return value === "true" || value == true; } editor.setDisplaySettings = function(display) { if (display == null) display = settingDiv.style.display == "none"; if (display) { settingDiv.style.display = "block"; settingDiv.hideButton.focus(); editor.on("focus", function onFocus() { editor.removeListener("focus", onFocus); settingDiv.style.display = "none"; }); } else { editor.focus(); } }; editor.$setOption = editor.setOption; editor.$getOption = editor.getOption; editor.setOption = function(key, value) { switch (key) { case "mode": editor.$setOption("mode", "ace/mode/" + value) break; case "theme": editor.$setOption("theme", "ace/theme/" + value) break; case "keybindings": switch (value) { case "vim": editor.setKeyboardHandler("ace/keyboard/vim"); break; case "emacs": editor.setKeyboardHandler("ace/keyboard/emacs"); break; default: editor.setKeyboardHandler(null); } break; case "softWrap": case "fontSize": editor.$setOption(key, value); break; default: editor.$setOption(key, toBool(value)); } }; editor.getOption = function(key) { switch (key) { case "mode": return editor.$getOption("mode").substr("ace/mode/".length) break; case "theme": return editor.$getOption("theme").substr("ace/theme/".length) break; case "keybindings": var value = editor.getKeyboardHandler() switch (value && value.$id) { case "ace/keyboard/vim": return "vim"; case "ace/keyboard/emacs": return "emacs"; default: return "ace"; } break; default: return editor.$getOption(key); } }; editor.setOptions(options); return editor; } function setupSettingPanel(settingDiv, settingOpener, editor) { var BOOL = null; var desc = { mode: "Mode:", wrap: "Soft Wrap:", theme: "Theme:", fontSize: "Font Size:", showGutter: "Display Gutter:", keybindings: "Keyboard", showPrintMargin: "Show Print Margin:", useSoftTabs: "Use Soft Tabs:", showInvisibles: "Show Invisibles" }; var optionValues = { mode: { text: "Plain", javascript: "JavaScript", xml: "XML", html: "HTML", css: "CSS", scss: "SCSS", python: "Python", php: "PHP", java: "Java", ruby: "Ruby", c_cpp: "C/C++", coffee: "CoffeeScript", json: "json", perl: "Perl", clojure: "Clojure", ocaml: "OCaml", csharp: "C#", haxe: "haXe", svg: "SVG", textile: "Textile", groovy: "Groovy", liquid: "Liquid", Scala: "Scala" }, theme: { clouds: "Clouds", clouds_midnight: "Clouds Midnight", cobalt: "Cobalt", crimson_editor: "Crimson Editor", dawn: "Dawn", eclipse: "Eclipse", idle_fingers: "Idle Fingers", kr_theme: "Kr Theme", merbivore: "Merbivore", merbivore_soft: "Merbivore Soft", mono_industrial: "Mono Industrial", monokai: "Monokai", pastel_on_dark: "Pastel On Dark", solarized_dark: "Solarized Dark", solarized_light: "Solarized Light", textmate: "Textmate", twilight: "Twilight", vibrant_ink: "Vibrant Ink" }, showGutter: BOOL, fontSize: { "10px": "10px", "11px": "11px", "12px": "12px", "14px": "14px", "16px": "16px" }, wrap: { off: "Off", 40: "40", 80: "80", free: "Free" }, keybindings: { ace: "ace", vim: "vim", emacs: "emacs" }, showPrintMargin: BOOL, useSoftTabs: BOOL, showInvisibles: BOOL }; var table = []; table.push(""); function renderOption(builder, option, obj, cValue) { if (!obj) { builder.push( "" ); return; } builder.push(""); } for (var option in exports.defaultOptions) { table.push(""); table.push(""); } table.push("
SettingValue
", desc[option], ""); renderOption(table, option, optionValues[option], editor.getOption(option)); table.push("
"); settingDiv.innerHTML = table.join(""); var onChange = function(e) { var select = e.currentTarget; editor.setOption(select.title, select.value); }; var onClick = function(e) { var cb = e.currentTarget; editor.setOption(cb.title, cb.checked); }; var selects = settingDiv.getElementsByTagName("select"); for (var i = 0; i < selects.length; i++) selects[i].onchange = onChange; var cbs = settingDiv.getElementsByTagName("input"); for (var i = 0; i < cbs.length; i++) cbs[i].onclick = onClick; var button = document.createElement("input"); button.type = "button"; button.value = "Hide"; event.addListener(button, "click", function() { editor.setDisplaySettings(false); }); settingDiv.appendChild(button); settingDiv.hideButton = button; } exports.defaultOptions = { mode: "javascript", theme: "textmate", wrap: "off", fontSize: "12px", showGutter: "false", keybindings: "ace", showPrintMargin: "false", useSoftTabs: "true", showInvisibles: "false" }; }); (function() { ace.require(["ace/ext/textarea"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-themelist.js ================================================ ace.define("ace/ext/themelist",["require","exports","module","ace/lib/fixoldbrowsers"], function(require, exports, module) { "use strict"; require("ace/lib/fixoldbrowsers"); var themeData = [ ["Chrome" ], ["Clouds" ], ["Crimson Editor" ], ["Dawn" ], ["Dreamweaver" ], ["Eclipse" ], ["GitHub" ], ["Solarized Light"], ["TextMate" ], ["Tomorrow" ], ["XCode" ], ["Kuroir"], ["KatzenMilch"], ["Ambiance" ,"ambiance" , "dark"], ["Chaos" ,"chaos" , "dark"], ["Clouds Midnight" ,"clouds_midnight" , "dark"], ["Cobalt" ,"cobalt" , "dark"], ["idle Fingers" ,"idle_fingers" , "dark"], ["krTheme" ,"kr_theme" , "dark"], ["Merbivore" ,"merbivore" , "dark"], ["Merbivore Soft" ,"merbivore_soft" , "dark"], ["Mono Industrial" ,"mono_industrial" , "dark"], ["Monokai" ,"monokai" , "dark"], ["Pastel on dark" ,"pastel_on_dark" , "dark"], ["Solarized Dark" ,"solarized_dark" , "dark"], ["Terminal" ,"terminal" , "dark"], ["Tomorrow Night" ,"tomorrow_night" , "dark"], ["Tomorrow Night Blue" ,"tomorrow_night_blue" , "dark"], ["Tomorrow Night Bright","tomorrow_night_bright" , "dark"], ["Tomorrow Night 80s" ,"tomorrow_night_eighties" , "dark"], ["Twilight" ,"twilight" , "dark"], ["Vibrant Ink" ,"vibrant_ink" , "dark"] ]; exports.themesByName = {}; exports.themes = themeData.map(function(data) { var name = data[1] || data[0].replace(/ /g, "_").toLowerCase(); var theme = { caption: data[0], theme: "ace/theme/" + name, isDark: data[2] == "dark", name: name }; exports.themesByName[name] = theme; return theme; }); }); (function() { ace.require(["ace/ext/themelist"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/ext-whitespace.js ================================================ ace.define("ace/ext/whitespace",["require","exports","module","ace/lib/lang"], function(require, exports, module) { "use strict"; var lang = require("../lib/lang"); exports.$detectIndentation = function(lines, fallback) { var stats = []; var changes = []; var tabIndents = 0; var prevSpaces = 0; var max = Math.min(lines.length, 1000); for (var i = 0; i < max; i++) { var line = lines[i]; if (!/^\s*[^*+\-\s]/.test(line)) continue; if (line[0] == "\t") tabIndents++; var spaces = line.match(/^ */)[0].length; if (spaces && line[spaces] != "\t") { var diff = spaces - prevSpaces; if (diff > 0 && !(prevSpaces%diff) && !(spaces%diff)) changes[diff] = (changes[diff] || 0) + 1; stats[spaces] = (stats[spaces] || 0) + 1; } prevSpaces = spaces; while (i < max && line[line.length - 1] == "\\") line = lines[i++]; } function getScore(indent) { var score = 0; for (var i = indent; i < stats.length; i += indent) score += stats[i] || 0; return score; } var changesTotal = changes.reduce(function(a,b){return a+b}, 0); var first = {score: 0, length: 0}; var spaceIndents = 0; for (var i = 1; i < 12; i++) { var score = getScore(i); if (i == 1) { spaceIndents = score; score = stats[1] ? 0.9 : 0.8; if (!stats.length) score = 0 } else score /= spaceIndents; if (changes[i]) score += changes[i] / changesTotal; if (score > first.score) first = {score: score, length: i}; } if (first.score && first.score > 1.4) var tabLength = first.length; if (tabIndents > spaceIndents + 1) return {ch: "\t", length: tabLength}; if (spaceIndents > tabIndents + 1) return {ch: " ", length: tabLength}; }; exports.detectIndentation = function(session) { var lines = session.getLines(0, 1000); var indent = exports.$detectIndentation(lines) || {}; if (indent.ch) session.setUseSoftTabs(indent.ch == " "); if (indent.length) session.setTabSize(indent.length); return indent; }; exports.trimTrailingSpace = function(session, trimEmpty) { var doc = session.getDocument(); var lines = doc.getAllLines(); var min = trimEmpty ? -1 : 0; for (var i = 0, l=lines.length; i < l; i++) { var line = lines[i]; var index = line.search(/\s+$/); if (index > min) doc.removeInLine(i, index, line.length); } }; exports.convertIndentation = function(session, ch, len) { var oldCh = session.getTabString()[0]; var oldLen = session.getTabSize(); if (!len) len = oldLen; if (!ch) ch = oldCh; var tab = ch == "\t" ? ch: lang.stringRepeat(ch, len); var doc = session.doc; var lines = doc.getAllLines(); var cache = {}; var spaceCache = {}; for (var i = 0, l=lines.length; i < l; i++) { var line = lines[i]; var match = line.match(/^\s*/)[0]; if (match) { var w = session.$getStringScreenWidth(match)[0]; var tabCount = Math.floor(w/oldLen); var reminder = w%oldLen; var toInsert = cache[tabCount] || (cache[tabCount] = lang.stringRepeat(tab, tabCount)); toInsert += spaceCache[reminder] || (spaceCache[reminder] = lang.stringRepeat(" ", reminder)); if (toInsert != match) { doc.removeInLine(i, 0, match.length); doc.insertInLine({row: i, column: 0}, toInsert); } } } session.setTabSize(len); session.setUseSoftTabs(ch == " "); }; exports.$parseStringArg = function(text) { var indent = {}; if (/t/.test(text)) indent.ch = "\t"; else if (/s/.test(text)) indent.ch = " "; var m = text.match(/\d+/); if (m) indent.length = parseInt(m[0], 10); return indent; }; exports.$parseArg = function(arg) { if (!arg) return {}; if (typeof arg == "string") return exports.$parseStringArg(arg); if (typeof arg.text == "string") return exports.$parseStringArg(arg.text); return arg; }; exports.commands = [{ name: "detectIndentation", exec: function(editor) { exports.detectIndentation(editor.session); } }, { name: "trimTrailingSpace", exec: function(editor) { exports.trimTrailingSpace(editor.session); } }, { name: "convertIndentation", exec: function(editor, arg) { var indent = exports.$parseArg(arg); exports.convertIndentation(editor.session, indent.ch, indent.length); } }, { name: "setIndentation", exec: function(editor, arg) { var indent = exports.$parseArg(arg); indent.length && editor.session.setTabSize(indent.length); indent.ch && editor.session.setUseSoftTabs(indent.ch == " "); } }]; }); (function() { ace.require(["ace/ext/whitespace"], function() {}); })(); ================================================ FILE: browser/plugins/ace/src-noconflict/keybinding-emacs.js ================================================ ace.define("ace/occur",["require","exports","module","ace/lib/oop","ace/range","ace/search","ace/edit_session","ace/search_highlight","ace/lib/dom"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var Range = require("./range").Range; var Search = require("./search").Search; var EditSession = require("./edit_session").EditSession; var SearchHighlight = require("./search_highlight").SearchHighlight; function Occur() {} oop.inherits(Occur, Search); (function() { this.enter = function(editor, options) { if (!options.needle) return false; var pos = editor.getCursorPosition(); this.displayOccurContent(editor, options); var translatedPos = this.originalToOccurPosition(editor.session, pos); editor.moveCursorToPosition(translatedPos); return true; } this.exit = function(editor, options) { var pos = options.translatePosition && editor.getCursorPosition(); var translatedPos = pos && this.occurToOriginalPosition(editor.session, pos); this.displayOriginalContent(editor); if (translatedPos) editor.moveCursorToPosition(translatedPos); return true; } this.highlight = function(sess, regexp) { var hl = sess.$occurHighlight = sess.$occurHighlight || sess.addDynamicMarker( new SearchHighlight(null, "ace_occur-highlight", "text")); hl.setRegexp(regexp); sess._emit("changeBackMarker"); // force highlight layer redraw } this.displayOccurContent = function(editor, options) { this.$originalSession = editor.session; var found = this.matchingLines(editor.session, options); var lines = found.map(function(foundLine) { return foundLine.content; }); var occurSession = new EditSession(lines.join('\n')); occurSession.$occur = this; occurSession.$occurMatchingLines = found; editor.setSession(occurSession); this.$useEmacsStyleLineStart = this.$originalSession.$useEmacsStyleLineStart; occurSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart; this.highlight(occurSession, options.re); occurSession._emit('changeBackMarker'); } this.displayOriginalContent = function(editor) { editor.setSession(this.$originalSession); this.$originalSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart; } this.originalToOccurPosition = function(session, pos) { var lines = session.$occurMatchingLines; var nullPos = {row: 0, column: 0}; if (!lines) return nullPos; for (var i = 0; i < lines.length; i++) { if (lines[i].row === pos.row) return {row: i, column: pos.column}; } return nullPos; } this.occurToOriginalPosition = function(session, pos) { var lines = session.$occurMatchingLines; if (!lines || !lines[pos.row]) return pos; return {row: lines[pos.row].row, column: pos.column}; } this.matchingLines = function(session, options) { options = oop.mixin({}, options); if (!session || !options.needle) return []; var search = new Search(); search.set(options); return search.findAll(session).reduce(function(lines, range) { var row = range.start.row; var last = lines[lines.length-1]; return last && last.row === row ? lines : lines.concat({row: row, content: session.getLine(row)}); }, []); } }).call(Occur.prototype); var dom = require('./lib/dom'); dom.importCssString(".ace_occur-highlight {\n\ border-radius: 4px;\n\ background-color: rgba(87, 255, 8, 0.25);\n\ position: absolute;\n\ z-index: 4;\n\ -moz-box-sizing: border-box;\n\ -webkit-box-sizing: border-box;\n\ box-sizing: border-box;\n\ box-shadow: 0 0 4px rgb(91, 255, 50);\n\ }\n\ .ace_dark .ace_occur-highlight {\n\ background-color: rgb(80, 140, 85);\n\ box-shadow: 0 0 4px rgb(60, 120, 70);\n\ }\n", "incremental-occur-highlighting"); exports.Occur = Occur; }); ace.define("ace/commands/occur_commands",["require","exports","module","ace/config","ace/occur","ace/keyboard/hash_handler","ace/lib/oop"], function(require, exports, module) { var config = require("../config"), Occur = require("../occur").Occur; var occurStartCommand = { name: "occur", exec: function(editor, options) { var alreadyInOccur = !!editor.session.$occur; var occurSessionActive = new Occur().enter(editor, options); if (occurSessionActive && !alreadyInOccur) OccurKeyboardHandler.installIn(editor); }, readOnly: true }; var occurCommands = [{ name: "occurexit", bindKey: 'esc|Ctrl-G', exec: function(editor) { var occur = editor.session.$occur; if (!occur) return; occur.exit(editor, {}); if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor); }, readOnly: true }, { name: "occuraccept", bindKey: 'enter', exec: function(editor) { var occur = editor.session.$occur; if (!occur) return; occur.exit(editor, {translatePosition: true}); if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor); }, readOnly: true }]; var HashHandler = require("../keyboard/hash_handler").HashHandler; var oop = require("../lib/oop"); function OccurKeyboardHandler() {} oop.inherits(OccurKeyboardHandler, HashHandler); ;(function() { this.isOccurHandler = true; this.attach = function(editor) { HashHandler.call(this, occurCommands, editor.commands.platform); this.$editor = editor; } var handleKeyboard$super = this.handleKeyboard; this.handleKeyboard = function(data, hashId, key, keyCode) { var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode); return (cmd && cmd.command) ? cmd : undefined; } }).call(OccurKeyboardHandler.prototype); OccurKeyboardHandler.installIn = function(editor) { var handler = new this(); editor.keyBinding.addKeyboardHandler(handler); editor.commands.addCommands(occurCommands); } OccurKeyboardHandler.uninstallFrom = function(editor) { editor.commands.removeCommands(occurCommands); var handler = editor.getKeyboardHandler(); if (handler.isOccurHandler) editor.keyBinding.removeKeyboardHandler(handler); } exports.occurStartCommand = occurStartCommand; }); ace.define("ace/commands/incremental_search_commands",["require","exports","module","ace/config","ace/lib/oop","ace/keyboard/hash_handler","ace/commands/occur_commands"], function(require, exports, module) { var config = require("../config"); var oop = require("../lib/oop"); var HashHandler = require("../keyboard/hash_handler").HashHandler; var occurStartCommand = require("./occur_commands").occurStartCommand; exports.iSearchStartCommands = [{ name: "iSearch", bindKey: {win: "Ctrl-F", mac: "Command-F"}, exec: function(editor, options) { config.loadModule(["core", "ace/incremental_search"], function(e) { var iSearch = e.iSearch = e.iSearch || new e.IncrementalSearch(); iSearch.activate(editor, options.backwards); if (options.jumpToFirstMatch) iSearch.next(options); }); }, readOnly: true }, { name: "iSearchBackwards", exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {backwards: true}); }, readOnly: true }, { name: "iSearchAndGo", bindKey: {win: "Ctrl-K", mac: "Command-G"}, exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {jumpToFirstMatch: true, useCurrentOrPrevSearch: true}); }, readOnly: true }, { name: "iSearchBackwardsAndGo", bindKey: {win: "Ctrl-Shift-K", mac: "Command-Shift-G"}, exec: function(editor) { editor.execCommand('iSearch', {jumpToFirstMatch: true, backwards: true, useCurrentOrPrevSearch: true}); }, readOnly: true }]; exports.iSearchCommands = [{ name: "restartSearch", bindKey: {win: "Ctrl-F", mac: "Command-F"}, exec: function(iSearch) { iSearch.cancelSearch(true); }, readOnly: true, isIncrementalSearchCommand: true }, { name: "searchForward", bindKey: {win: "Ctrl-S|Ctrl-K", mac: "Ctrl-S|Command-G"}, exec: function(iSearch, options) { options.useCurrentOrPrevSearch = true; iSearch.next(options); }, readOnly: true, isIncrementalSearchCommand: true }, { name: "searchBackward", bindKey: {win: "Ctrl-R|Ctrl-Shift-K", mac: "Ctrl-R|Command-Shift-G"}, exec: function(iSearch, options) { options.useCurrentOrPrevSearch = true; options.backwards = true; iSearch.next(options); }, readOnly: true, isIncrementalSearchCommand: true }, { name: "extendSearchTerm", exec: function(iSearch, string) { iSearch.addString(string); }, readOnly: true, isIncrementalSearchCommand: true }, { name: "extendSearchTermSpace", bindKey: "space", exec: function(iSearch) { iSearch.addString(' '); }, readOnly: true, isIncrementalSearchCommand: true }, { name: "shrinkSearchTerm", bindKey: "backspace", exec: function(iSearch) { iSearch.removeChar(); }, readOnly: true, isIncrementalSearchCommand: true }, { name: 'confirmSearch', bindKey: 'return', exec: function(iSearch) { iSearch.deactivate(); }, readOnly: true, isIncrementalSearchCommand: true }, { name: 'cancelSearch', bindKey: 'esc|Ctrl-G', exec: function(iSearch) { iSearch.deactivate(true); }, readOnly: true, isIncrementalSearchCommand: true }, { name: 'occurisearch', bindKey: 'Ctrl-O', exec: function(iSearch) { var options = oop.mixin({}, iSearch.$options); iSearch.deactivate(); occurStartCommand.exec(iSearch.$editor, options); }, readOnly: true, isIncrementalSearchCommand: true }, { name: "yankNextWord", bindKey: "Ctrl-w", exec: function(iSearch) { var ed = iSearch.$editor, range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorWordRight(); }), string = ed.session.getTextRange(range); iSearch.addString(string); }, readOnly: true, isIncrementalSearchCommand: true }, { name: "yankNextChar", bindKey: "Ctrl-Alt-y", exec: function(iSearch) { var ed = iSearch.$editor, range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorRight(); }), string = ed.session.getTextRange(range); iSearch.addString(string); }, readOnly: true, isIncrementalSearchCommand: true }, { name: 'recenterTopBottom', bindKey: 'Ctrl-l', exec: function(iSearch) { iSearch.$editor.execCommand('recenterTopBottom'); }, readOnly: true, isIncrementalSearchCommand: true }, { name: 'selectAllMatches', bindKey: 'Ctrl-space', exec: function(iSearch) { var ed = iSearch.$editor, hl = ed.session.$isearchHighlight, ranges = hl && hl.cache ? hl.cache .reduce(function(ranges, ea) { return ranges.concat(ea ? ea : []); }, []) : []; iSearch.deactivate(false); ranges.forEach(ed.selection.addRange.bind(ed.selection)); }, readOnly: true, isIncrementalSearchCommand: true }, { name: 'searchAsRegExp', bindKey: 'Alt-r', exec: function(iSearch) { iSearch.convertNeedleToRegExp(); }, readOnly: true, isIncrementalSearchCommand: true }]; function IncrementalSearchKeyboardHandler(iSearch) { this.$iSearch = iSearch; } oop.inherits(IncrementalSearchKeyboardHandler, HashHandler); ;(function() { this.attach = function(editor) { var iSearch = this.$iSearch; HashHandler.call(this, exports.iSearchCommands, editor.commands.platform); this.$commandExecHandler = editor.commands.addEventListener('exec', function(e) { if (!e.command.isIncrementalSearchCommand) return undefined; e.stopPropagation(); e.preventDefault(); return e.command.exec(iSearch, e.args || {}); }); } this.detach = function(editor) { if (!this.$commandExecHandler) return; editor.commands.removeEventListener('exec', this.$commandExecHandler); delete this.$commandExecHandler; } var handleKeyboard$super = this.handleKeyboard; this.handleKeyboard = function(data, hashId, key, keyCode) { if (((hashId === 1/*ctrl*/ || hashId === 8/*command*/) && key === 'v') || (hashId === 1/*ctrl*/ && key === 'y')) return null; var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode); if (cmd.command) { return cmd; } if (hashId == -1) { var extendCmd = this.commands.extendSearchTerm; if (extendCmd) { return {command: extendCmd, args: key}; } } return {command: "null", passEvent: hashId == 0 || hashId == 4}; } }).call(IncrementalSearchKeyboardHandler.prototype); exports.IncrementalSearchKeyboardHandler = IncrementalSearchKeyboardHandler; }); ace.define("ace/incremental_search",["require","exports","module","ace/lib/oop","ace/range","ace/search","ace/search_highlight","ace/commands/incremental_search_commands","ace/lib/dom","ace/commands/command_manager","ace/editor","ace/config"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var Range = require("./range").Range; var Search = require("./search").Search; var SearchHighlight = require("./search_highlight").SearchHighlight; var iSearchCommandModule = require("./commands/incremental_search_commands"); var ISearchKbd = iSearchCommandModule.IncrementalSearchKeyboardHandler; function IncrementalSearch() { this.$options = {wrap: false, skipCurrent: false}; this.$keyboardHandler = new ISearchKbd(this); } oop.inherits(IncrementalSearch, Search); function isRegExp(obj) { return obj instanceof RegExp; } function regExpToObject(re) { var string = String(re), start = string.indexOf('/'), flagStart = string.lastIndexOf('/'); return { expression: string.slice(start+1, flagStart), flags: string.slice(flagStart+1) } } function stringToRegExp(string, flags) { try { return new RegExp(string, flags); } catch (e) { return string; } } function objectToRegExp(obj) { return stringToRegExp(obj.expression, obj.flags); } ;(function() { this.activate = function(ed, backwards) { this.$editor = ed; this.$startPos = this.$currentPos = ed.getCursorPosition(); this.$options.needle = ''; this.$options.backwards = backwards; ed.keyBinding.addKeyboardHandler(this.$keyboardHandler); this.$originalEditorOnPaste = ed.onPaste; ed.onPaste = this.onPaste.bind(this); this.$mousedownHandler = ed.addEventListener('mousedown', this.onMouseDown.bind(this)); this.selectionFix(ed); this.statusMessage(true); } this.deactivate = function(reset) { this.cancelSearch(reset); var ed = this.$editor; ed.keyBinding.removeKeyboardHandler(this.$keyboardHandler); if (this.$mousedownHandler) { ed.removeEventListener('mousedown', this.$mousedownHandler); delete this.$mousedownHandler; } ed.onPaste = this.$originalEditorOnPaste; this.message(''); } this.selectionFix = function(editor) { if (editor.selection.isEmpty() && !editor.session.$emacsMark) { editor.clearSelection(); } } this.highlight = function(regexp) { var sess = this.$editor.session, hl = sess.$isearchHighlight = sess.$isearchHighlight || sess.addDynamicMarker( new SearchHighlight(null, "ace_isearch-result", "text")); hl.setRegexp(regexp); sess._emit("changeBackMarker"); // force highlight layer redraw } this.cancelSearch = function(reset) { var e = this.$editor; this.$prevNeedle = this.$options.needle; this.$options.needle = ''; if (reset) { e.moveCursorToPosition(this.$startPos); this.$currentPos = this.$startPos; } else { e.pushEmacsMark && e.pushEmacsMark(this.$startPos, false); } this.highlight(null); return Range.fromPoints(this.$currentPos, this.$currentPos); } this.highlightAndFindWithNeedle = function(moveToNext, needleUpdateFunc) { if (!this.$editor) return null; var options = this.$options; if (needleUpdateFunc) { options.needle = needleUpdateFunc.call(this, options.needle || '') || ''; } if (options.needle.length === 0) { this.statusMessage(true); return this.cancelSearch(true); }; options.start = this.$currentPos; var session = this.$editor.session, found = this.find(session), shouldSelect = this.$editor.emacsMark ? !!this.$editor.emacsMark() : !this.$editor.selection.isEmpty(); if (found) { if (options.backwards) found = Range.fromPoints(found.end, found.start); this.$editor.selection.setRange(Range.fromPoints(shouldSelect ? this.$startPos : found.end, found.end)); if (moveToNext) this.$currentPos = found.end; this.highlight(options.re) } this.statusMessage(found); return found; } this.addString = function(s) { return this.highlightAndFindWithNeedle(false, function(needle) { if (!isRegExp(needle)) return needle + s; var reObj = regExpToObject(needle); reObj.expression += s; return objectToRegExp(reObj); }); } this.removeChar = function(c) { return this.highlightAndFindWithNeedle(false, function(needle) { if (!isRegExp(needle)) return needle.substring(0, needle.length-1); var reObj = regExpToObject(needle); reObj.expression = reObj.expression.substring(0, reObj.expression.length-1); return objectToRegExp(reObj); }); } this.next = function(options) { options = options || {}; this.$options.backwards = !!options.backwards; this.$currentPos = this.$editor.getCursorPosition(); return this.highlightAndFindWithNeedle(true, function(needle) { return options.useCurrentOrPrevSearch && needle.length === 0 ? this.$prevNeedle || '' : needle; }); } this.onMouseDown = function(evt) { this.deactivate(); return true; } this.onPaste = function(text) { this.addString(text); } this.convertNeedleToRegExp = function() { return this.highlightAndFindWithNeedle(false, function(needle) { return isRegExp(needle) ? needle : stringToRegExp(needle, 'ig'); }); } this.convertNeedleToString = function() { return this.highlightAndFindWithNeedle(false, function(needle) { return isRegExp(needle) ? regExpToObject(needle).expression : needle; }); } this.statusMessage = function(found) { var options = this.$options, msg = ''; msg += options.backwards ? 'reverse-' : ''; msg += 'isearch: ' + options.needle; msg += found ? '' : ' (not found)'; this.message(msg); } this.message = function(msg) { if (this.$editor.showCommandLine) { this.$editor.showCommandLine(msg); this.$editor.focus(); } else { console.log(msg); } } }).call(IncrementalSearch.prototype); exports.IncrementalSearch = IncrementalSearch; var dom = require('./lib/dom'); dom.importCssString && dom.importCssString("\ .ace_marker-layer .ace_isearch-result {\ position: absolute;\ z-index: 6;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ }\ div.ace_isearch-result {\ border-radius: 4px;\ background-color: rgba(255, 200, 0, 0.5);\ box-shadow: 0 0 4px rgb(255, 200, 0);\ }\ .ace_dark div.ace_isearch-result {\ background-color: rgb(100, 110, 160);\ box-shadow: 0 0 4px rgb(80, 90, 140);\ }", "incremental-search-highlighting"); var commands = require("./commands/command_manager"); (function() { this.setupIncrementalSearch = function(editor, val) { if (this.usesIncrementalSearch == val) return; this.usesIncrementalSearch = val; var iSearchCommands = iSearchCommandModule.iSearchStartCommands; var method = val ? 'addCommands' : 'removeCommands'; this[method](iSearchCommands); }; }).call(commands.CommandManager.prototype); var Editor = require("./editor").Editor; require("./config").defineOptions(Editor.prototype, "editor", { useIncrementalSearch: { set: function(val) { this.keyBinding.$handlers.forEach(function(handler) { if (handler.setupIncrementalSearch) { handler.setupIncrementalSearch(this, val); } }); this._emit('incrementalSearchSettingChanged', {isEnabled: val}); } } }); }); ace.define("ace/keyboard/emacs",["require","exports","module","ace/lib/dom","ace/incremental_search","ace/commands/incremental_search_commands","ace/keyboard/hash_handler","ace/lib/keys"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); require("../incremental_search"); var iSearchCommandModule = require("../commands/incremental_search_commands"); var screenToTextBlockCoordinates = function(x, y) { var canvasPos = this.scroller.getBoundingClientRect(); var col = Math.floor( (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth ); var row = Math.floor( (y + this.scrollTop - canvasPos.top) / this.lineHeight ); return this.session.screenToDocumentPosition(row, col); }; var HashHandler = require("./hash_handler").HashHandler; exports.handler = new HashHandler(); exports.handler.isEmacs = true; exports.handler.$id = "ace/keyboard/emacs"; var initialized = false; var $formerLongWords; var $formerLineStart; exports.handler.attach = function(editor) { if (!initialized) { initialized = true; dom.importCssString('\ .emacs-mode .ace_cursor{\ border: 1px rgba(50,250,50,0.8) solid!important;\ -moz-box-sizing: border-box!important;\ -webkit-box-sizing: border-box!important;\ box-sizing: border-box!important;\ background-color: rgba(0,250,0,0.9);\ opacity: 0.5;\ }\ .emacs-mode .ace_hidden-cursors .ace_cursor{\ opacity: 1;\ background-color: transparent;\ }\ .emacs-mode .ace_overwrite-cursors .ace_cursor {\ opacity: 1;\ background-color: transparent;\ border-width: 0 0 2px 2px !important;\ }\ .emacs-mode .ace_text-layer {\ z-index: 4\ }\ .emacs-mode .ace_cursor-layer {\ z-index: 2\ }', 'emacsMode' ); } $formerLongWords = editor.session.$selectLongWords; editor.session.$selectLongWords = true; $formerLineStart = editor.session.$useEmacsStyleLineStart; editor.session.$useEmacsStyleLineStart = true; editor.session.$emacsMark = null; // the active mark editor.session.$emacsMarkRing = editor.session.$emacsMarkRing || []; editor.emacsMark = function() { return this.session.$emacsMark; }; editor.setEmacsMark = function(p) { this.session.$emacsMark = p; }; editor.pushEmacsMark = function(p, activate) { var prevMark = this.session.$emacsMark; if (prevMark) this.session.$emacsMarkRing.push(prevMark); if (!p || activate) this.setEmacsMark(p); else this.session.$emacsMarkRing.push(p); }; editor.popEmacsMark = function() { var mark = this.emacsMark(); if (mark) { this.setEmacsMark(null); return mark; } return this.session.$emacsMarkRing.pop(); }; editor.getLastEmacsMark = function(p) { return this.session.$emacsMark || this.session.$emacsMarkRing.slice(-1)[0]; }; editor.emacsMarkForSelection = function(replacement) { var sel = this.selection, multiRangeLength = this.multiSelect ? this.multiSelect.getAllRanges().length : 1, selIndex = sel.index || 0, markRing = this.session.$emacsMarkRing, markIndex = markRing.length - (multiRangeLength - selIndex), lastMark = markRing[markIndex] || sel.anchor; if (replacement) { markRing.splice(markIndex, 1, "row" in replacement && "column" in replacement ? replacement : undefined); } return lastMark; } editor.on("click", $resetMarkMode); editor.on("changeSession", $kbSessionChange); editor.renderer.screenToTextCoordinates = screenToTextBlockCoordinates; editor.setStyle("emacs-mode"); editor.commands.addCommands(commands); exports.handler.platform = editor.commands.platform; editor.$emacsModeHandler = this; editor.addEventListener('copy', this.onCopy); editor.addEventListener('paste', this.onPaste); }; exports.handler.detach = function(editor) { delete editor.renderer.screenToTextCoordinates; editor.session.$selectLongWords = $formerLongWords; editor.session.$useEmacsStyleLineStart = $formerLineStart; editor.removeEventListener("click", $resetMarkMode); editor.removeEventListener("changeSession", $kbSessionChange); editor.unsetStyle("emacs-mode"); editor.commands.removeCommands(commands); editor.removeEventListener('copy', this.onCopy); editor.removeEventListener('paste', this.onPaste); editor.$emacsModeHandler = null; }; var $kbSessionChange = function(e) { if (e.oldSession) { e.oldSession.$selectLongWords = $formerLongWords; e.oldSession.$useEmacsStyleLineStart = $formerLineStart; } $formerLongWords = e.session.$selectLongWords; e.session.$selectLongWords = true; $formerLineStart = e.session.$useEmacsStyleLineStart; e.session.$useEmacsStyleLineStart = true; if (!e.session.hasOwnProperty('$emacsMark')) e.session.$emacsMark = null; if (!e.session.hasOwnProperty('$emacsMarkRing')) e.session.$emacsMarkRing = []; }; var $resetMarkMode = function(e) { e.editor.session.$emacsMark = null; }; var keys = require("../lib/keys").KEY_MODS; var eMods = {C: "ctrl", S: "shift", M: "alt", CMD: "command"}; var combinations = ["C-S-M-CMD", "S-M-CMD", "C-M-CMD", "C-S-CMD", "C-S-M", "M-CMD", "S-CMD", "S-M", "C-CMD", "C-M", "C-S", "CMD", "M", "S", "C"]; combinations.forEach(function(c) { var hashId = 0; c.split("-").forEach(function(c) { hashId = hashId | keys[eMods[c]]; }); eMods[hashId] = c.toLowerCase() + "-"; }); exports.handler.onCopy = function(e, editor) { if (editor.$handlesEmacsOnCopy) return; editor.$handlesEmacsOnCopy = true; exports.handler.commands.killRingSave.exec(editor); editor.$handlesEmacsOnCopy = false; }; exports.handler.onPaste = function(e, editor) { editor.pushEmacsMark(editor.getCursorPosition()); }; exports.handler.bindKey = function(key, command) { if (typeof key == "object") key = key[this.platform]; if (!key) return; var ckb = this.commandKeyBinding; key.split("|").forEach(function(keyPart) { keyPart = keyPart.toLowerCase(); ckb[keyPart] = command; var keyParts = keyPart.split(" ").slice(0,-1); keyParts.reduce(function(keyMapKeys, keyPart, i) { var prefix = keyMapKeys[i-1] ? keyMapKeys[i-1] + ' ' : ''; return keyMapKeys.concat([prefix + keyPart]); }, []).forEach(function(keyPart) { if (!ckb[keyPart]) ckb[keyPart] = "null"; }); }, this); }; exports.handler.getStatusText = function(editor, data) { var str = ""; if (data.count) str += data.count; if (data.keyChain) str += " " + data.keyChain return str; }; exports.handler.handleKeyboard = function(data, hashId, key, keyCode) { if (keyCode === -1) return undefined; var editor = data.editor; editor._signal("changeStatus"); if (hashId == -1) { editor.pushEmacsMark(); if (data.count) { var str = new Array(data.count + 1).join(key); data.count = null; return {command: "insertstring", args: str}; } } var modifier = eMods[hashId]; if (modifier == "c-" || data.count) { var count = parseInt(key[key.length - 1]); if (typeof count === 'number' && !isNaN(count)) { data.count = Math.max(data.count, 0) || 0; data.count = 10 * data.count + count; return {command: "null"}; } } if (modifier) key = modifier + key; if (data.keyChain) key = data.keyChain += " " + key; var command = this.commandKeyBinding[key]; data.keyChain = command == "null" ? key : ""; if (!command) return undefined; if (command === "null") return {command: "null"}; if (command === "universalArgument") { data.count = -4; return {command: "null"}; } var args; if (typeof command !== "string") { args = command.args; if (command.command) command = command.command; if (command === "goorselect") { command = editor.emacsMark() ? args[1] : args[0]; args = null; } } if (typeof command === "string") { if (command === "insertstring" || command === "splitline" || command === "togglecomment") { editor.pushEmacsMark(); } command = this.commands[command] || editor.commands.commands[command]; if (!command) return undefined; } if (!command.readOnly && !command.isYank) data.lastCommand = null; if (!command.readOnly && editor.emacsMark()) editor.setEmacsMark(null) if (data.count) { var count = data.count; data.count = 0; if (!command || !command.handlesCount) { return { args: args, command: { exec: function(editor, args) { for (var i = 0; i < count; i++) command.exec(editor, args); }, multiSelectAction: command.multiSelectAction } }; } else { if (!args) args = {}; if (typeof args === 'object') args.count = count; } } return {command: command, args: args}; }; exports.emacsKeys = { "Up|C-p" : {command: "goorselect", args: ["golineup","selectup"]}, "Down|C-n" : {command: "goorselect", args: ["golinedown","selectdown"]}, "Left|C-b" : {command: "goorselect", args: ["gotoleft","selectleft"]}, "Right|C-f" : {command: "goorselect", args: ["gotoright","selectright"]}, "C-Left|M-b" : {command: "goorselect", args: ["gotowordleft","selectwordleft"]}, "C-Right|M-f" : {command: "goorselect", args: ["gotowordright","selectwordright"]}, "Home|C-a" : {command: "goorselect", args: ["gotolinestart","selecttolinestart"]}, "End|C-e" : {command: "goorselect", args: ["gotolineend","selecttolineend"]}, "C-Home|S-M-,": {command: "goorselect", args: ["gotostart","selecttostart"]}, "C-End|S-M-." : {command: "goorselect", args: ["gotoend","selecttoend"]}, "S-Up|S-C-p" : "selectup", "S-Down|S-C-n" : "selectdown", "S-Left|S-C-b" : "selectleft", "S-Right|S-C-f" : "selectright", "S-C-Left|S-M-b" : "selectwordleft", "S-C-Right|S-M-f" : "selectwordright", "S-Home|S-C-a" : "selecttolinestart", "S-End|S-C-e" : "selecttolineend", "S-C-Home" : "selecttostart", "S-C-End" : "selecttoend", "C-l" : "recenterTopBottom", "M-s" : "centerselection", "M-g": "gotoline", "C-x C-p": "selectall", "C-Down": {command: "goorselect", args: ["gotopagedown","selectpagedown"]}, "C-Up": {command: "goorselect", args: ["gotopageup","selectpageup"]}, "PageDown|C-v": {command: "goorselect", args: ["gotopagedown","selectpagedown"]}, "PageUp|M-v": {command: "goorselect", args: ["gotopageup","selectpageup"]}, "S-C-Down": "selectpagedown", "S-C-Up": "selectpageup", "C-s": "iSearch", "C-r": "iSearchBackwards", "M-C-s": "findnext", "M-C-r": "findprevious", "S-M-5": "replace", "Backspace": "backspace", "Delete|C-d": "del", "Return|C-m": {command: "insertstring", args: "\n"}, // "newline" "C-o": "splitline", "M-d|C-Delete": {command: "killWord", args: "right"}, "C-Backspace|M-Backspace|M-Delete": {command: "killWord", args: "left"}, "C-k": "killLine", "C-y|S-Delete": "yank", "M-y": "yankRotate", "C-g": "keyboardQuit", "C-w|C-S-W": "killRegion", "M-w": "killRingSave", "C-Space": "setMark", "C-x C-x": "exchangePointAndMark", "C-t": "transposeletters", "M-u": "touppercase", // Doesn't work "M-l": "tolowercase", "M-/": "autocomplete", // Doesn't work "C-u": "universalArgument", "M-;": "togglecomment", "C-/|C-x u|S-C--|C-z": "undo", "S-C-/|S-C-x u|C--|S-C-z": "redo", //infinite undo? "C-x r": "selectRectangularRegion", "M-x": {command: "focusCommandLine", args: "M-x "} }; exports.handler.bindKeys(exports.emacsKeys); exports.handler.addCommands({ recenterTopBottom: function(editor) { var renderer = editor.renderer; var pos = renderer.$cursorLayer.getPixelPosition(); var h = renderer.$size.scrollerHeight - renderer.lineHeight; var scrollTop = renderer.scrollTop; if (Math.abs(pos.top - scrollTop) < 2) { scrollTop = pos.top - h; } else if (Math.abs(pos.top - scrollTop - h * 0.5) < 2) { scrollTop = pos.top; } else { scrollTop = pos.top - h * 0.5; } editor.session.setScrollTop(scrollTop); }, selectRectangularRegion: function(editor) { editor.multiSelect.toggleBlockSelection(); }, setMark: { exec: function(editor, args) { if (args && args.count) { if (editor.inMultiSelectMode) editor.forEachSelection(moveToMark); else moveToMark(); moveToMark(); return; } var mark = editor.emacsMark(), ranges = editor.selection.getAllRanges(), rangePositions = ranges.map(function(r) { return {row: r.start.row, column: r.start.column}; }), transientMarkModeActive = true, hasNoSelection = ranges.every(function(range) { return range.isEmpty(); }); if (transientMarkModeActive && (mark || !hasNoSelection)) { if (editor.inMultiSelectMode) editor.forEachSelection({exec: editor.clearSelection.bind(editor)}) else editor.clearSelection(); if (mark) editor.pushEmacsMark(null); return; } if (!mark) { rangePositions.forEach(function(pos) { editor.pushEmacsMark(pos); }); editor.setEmacsMark(rangePositions[rangePositions.length-1]); return; } function moveToMark() { var mark = editor.popEmacsMark(); mark && editor.moveCursorToPosition(mark); } }, readOnly: true, handlesCount: true }, exchangePointAndMark: { exec: function exchangePointAndMark$exec(editor, args) { var sel = editor.selection; if (!args.count && !sel.isEmpty()) { // just invert selection sel.setSelectionRange(sel.getRange(), !sel.isBackwards()); return; } if (args.count) { // replace mark and point var pos = {row: sel.lead.row, column: sel.lead.column}; sel.clearSelection(); sel.moveCursorToPosition(editor.emacsMarkForSelection(pos)); } else { // create selection to last mark sel.selectToPosition(editor.emacsMarkForSelection()); } }, readOnly: true, handlesCount: true, multiSelectAction: "forEach" }, killWord: { exec: function(editor, dir) { editor.clearSelection(); if (dir == "left") editor.selection.selectWordLeft(); else editor.selection.selectWordRight(); var range = editor.getSelectionRange(); var text = editor.session.getTextRange(range); exports.killRing.add(text); editor.session.remove(range); editor.clearSelection(); }, multiSelectAction: "forEach" }, killLine: function(editor) { editor.pushEmacsMark(null); var pos = editor.getCursorPosition(); if (pos.column === 0 && editor.session.doc.getLine(pos.row).length === 0) { editor.selection.selectLine(); } else { editor.clearSelection(); editor.selection.selectLineEnd(); } var range = editor.getSelectionRange(); var text = editor.session.getTextRange(range); exports.killRing.add(text); editor.session.remove(range); editor.clearSelection(); }, yank: function(editor) { editor.onPaste(exports.killRing.get() || ''); editor.keyBinding.$data.lastCommand = "yank"; }, yankRotate: function(editor) { if (editor.keyBinding.$data.lastCommand != "yank") return; editor.undo(); editor.session.$emacsMarkRing.pop(); // also undo recording mark editor.onPaste(exports.killRing.rotate()); editor.keyBinding.$data.lastCommand = "yank"; }, killRegion: { exec: function(editor) { exports.killRing.add(editor.getCopyText()); editor.commands.byName.cut.exec(editor); }, readOnly: true, multiSelectAction: "forEach" }, killRingSave: { exec: function(editor) { editor.$handlesEmacsOnCopy = true; var marks = editor.session.$emacsMarkRing.slice(), deselectedMarks = []; exports.killRing.add(editor.getCopyText()); setTimeout(function() { function deselect() { var sel = editor.selection, range = sel.getRange(), pos = sel.isBackwards() ? range.end : range.start; deselectedMarks.push({row: pos.row, column: pos.column}); sel.clearSelection(); } editor.$handlesEmacsOnCopy = false; if (editor.inMultiSelectMode) editor.forEachSelection({exec: deselect}); else deselect(); editor.session.$emacsMarkRing = marks.concat(deselectedMarks.reverse()); }, 0); }, readOnly: true }, keyboardQuit: function(editor) { editor.selection.clearSelection(); editor.setEmacsMark(null); editor.keyBinding.$data.count = null; }, focusCommandLine: function(editor, arg) { if (editor.showCommandLine) editor.showCommandLine(arg); } }); exports.handler.addCommands(iSearchCommandModule.iSearchStartCommands); var commands = exports.handler.commands; commands.yank.isYank = true; commands.yankRotate.isYank = true; exports.killRing = { $data: [], add: function(str) { str && this.$data.push(str); if (this.$data.length > 30) this.$data.shift(); }, get: function(n) { n = n || 1; return this.$data.slice(this.$data.length-n, this.$data.length).reverse().join('\n'); }, pop: function() { if (this.$data.length > 1) this.$data.pop(); return this.get(); }, rotate: function() { this.$data.unshift(this.$data.pop()); return this.get(); } }; }); ================================================ FILE: browser/plugins/ace/src-noconflict/keybinding-vim.js ================================================ ace.define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/dom","ace/lib/oop","ace/lib/keys","ace/lib/event","ace/search","ace/lib/useragent","ace/search_highlight","ace/commands/multi_select_commands","ace/multi_select"], function(require, exports, module) { 'use strict'; function log() { var d = ""; function format(p) { if (typeof p != "object") return p + "" if ("line" in p) { return p.line + ":" + p.ch } if ("anchor" in p) { return format(p.anchor) + "->" + format(p.head) } if (Array.isArray(p)) return "[" + p.map(function(x) {return format(x)})+"]" return JSON.stringify(p) } for (var i = 0; i < arguments.length; i++) { var p = arguments[i] var f = format(p) d+= f+" " } console.log(d) } var Range = require("../range").Range; var EventEmitter = require("../lib/event_emitter").EventEmitter; var dom = require("../lib/dom"); var oop = require("../lib/oop"); var KEYS = require("../lib/keys"); var event = require("../lib/event"); var Search = require("../search").Search; var useragent = require("../lib/useragent"); var SearchHighlight = require("../search_highlight").SearchHighlight; var multiSelectCommands = require("../commands/multi_select_commands"); require("../multi_select"); var CodeMirror = function(ace) { this.ace = ace; this.state = {}; this.marks = {}; this.$uid = 0; this.onChange = this.onChange.bind(this); this.onSelectionChange = this.onSelectionChange.bind(this); this.onBeforeEndOperation = this.onBeforeEndOperation.bind(this); this.ace.on('change', this.onChange); this.ace.on('changeSelection', this.onSelectionChange); this.ace.on('beforeEndOperation', this.onBeforeEndOperation); }; CodeMirror.Pos = function(line, ch) { if (!(this instanceof Pos)) return new Pos(line, ch); this.line = line; this.ch = ch; }; CodeMirror.defineOption = function(name, val, setter) {}; CodeMirror.commands = { redo: function(cm) { cm.ace.redo(); }, undo: function(cm) { cm.ace.undo(); }, newlineAndIndent: function(cm) { cm.ace.insert("\n"); }, }; CodeMirror.keyMap = {}; CodeMirror.addClass = CodeMirror.rmClass = CodeMirror.e_stop = function() {}; CodeMirror.keyName = function(e) { if (e.key) return e.key; var key = (KEYS[e.keyCode] || ""); if (key.length == 1) key = key.toUpperCase(); key = event.getModifierString(e).replace(/(^|-)\w/g, function(m) { return m.toUpperCase(); }) + key; return key; }; CodeMirror.keyMap['default'] = function(key) { return function(cm) { var cmd = cm.ace.commands.commandKeyBinding[key.toLowerCase()]; return cmd && cm.ace.execCommand(cmd) !== false; }; }; CodeMirror.lookupKey = function lookupKey(key, map, handle) { if (typeof map == "string") map = CodeMirror.keyMap[map]; var found = typeof map == "function" ? map(key) : map[key]; if (found === false) return "nothing"; if (found === "...") return "multi"; if (found != null && handle(found)) return "handled"; if (map.fallthrough) { if (!Array.isArray(map.fallthrough)) return lookupKey(key, map.fallthrough, handle); for (var i = 0; i < map.fallthrough.length; i++) { var result = lookupKey(key, map.fallthrough[i], handle); if (result) return result; } } }; CodeMirror.signal = function(o, name, e) { return o._signal(name, e) }; CodeMirror.on = event.addListener; CodeMirror.off = event.removeListener; (function() { oop.implement(CodeMirror.prototype, EventEmitter); this.destroy = function() { this.ace.off('change', this.onChange); this.ace.off('changeSelection', this.onSelectionChange); this.ace.off('beforeEndOperation', this.onBeforeEndOperation); this.removeOverlay(); }; this.virtualSelectionMode = function() { return this.ace.inVirtualSelectionMode && this.ace.selection.index }; this.onChange = function(delta) { var oldDelta = delta.data; delta = { start: oldDelta.range.start, end: oldDelta.range.end, action: oldDelta.action, lines: oldDelta.lines || [oldDelta.text] };// v1.2 api compatibility if (delta.action[0] == 'i') { var change = { text: delta.lines }; var curOp = this.curOp = this.curOp || {}; if (!curOp.changeHandlers) curOp.changeHandlers = this._eventRegistry["change"] && this._eventRegistry["change"].slice(); if (this.virtualSelectionMode()) return; if (!curOp.lastChange) { curOp.lastChange = curOp.change = change; } else { curOp.lastChange.next = curOp.lastChange = change; } } this.$updateMarkers(delta); }; this.onSelectionChange = function() { var curOp = this.curOp = this.curOp || {}; if (!curOp.cursorActivityHandlers) curOp.cursorActivityHandlers = this._eventRegistry["cursorActivity"] && this._eventRegistry["cursorActivity"].slice(); this.curOp.cursorActivity = true; if (this.ace.inMultiSelectMode) { this.ace.keyBinding.removeKeyboardHandler(multiSelectCommands.keyboardHandler); } }; this.operation = function(fn, force) { if (!force && this.curOp || force && this.curOp && this.curOp.force) { return fn(); } if (force || !this.ace.curOp) { if (this.curOp) this.onBeforeEndOperation(); } if (!this.ace.curOp) { var prevOp = this.ace.prevOp; this.ace.startOperation({ command: { name: "vim", scrollIntoView: "cursor" } }); } var curOp = this.curOp = this.curOp || {}; this.curOp.force = force; var result = fn(); if (this.ace.curOp && this.ace.curOp.command.name == "vim") { this.ace.endOperation(); if (!curOp.cursorActivity && !curOp.lastChange && prevOp) this.ace.prevOp = prevOp; } if (force || !this.ace.curOp) { if (this.curOp) this.onBeforeEndOperation(); } return result; }; this.onBeforeEndOperation = function() { var op = this.curOp; if (op) { if (op.change) { this.signal("change", op.change, op); } if (op && op.cursorActivity) { this.signal("cursorActivity", null, op); } this.curOp = null; } }; this.signal = function(eventName, e, handlers) { var listeners = handlers ? handlers[eventName + "Handlers"] : (this._eventRegistry || {})[eventName]; if (!listeners) return; listeners = listeners.slice(); for (var i=0; i 0) { point.row += rowShift; point.column += point.row == end.row ? colShift : 0; continue; } if (!isInsert && cmp2 <= 0) { point.row = start.row; point.column = start.column; if (cmp2 === 0) point.bias = 1 } } }; var Marker = function(cm, id, row, column) { this.cm = cm; this.id = id; this.row = row; this.column = column; cm.marks[this.id] = this; }; Marker.prototype.clear = function() { delete this.cm.marks[this.id] }; Marker.prototype.find = function() { return toCmPos(this) }; this.setBookmark = function(cursor, options) { var bm = new Marker(this, this.$uid++, cursor.line, cursor.ch); if (!options || !options.insertLeft) bm.$insertRight = true; this.marks[bm.id] = bm; return bm; }; this.moveH = function(increment, unit) { if (unit == 'char') { var sel = this.ace.selection; sel.clearSelection(); sel.moveCursorBy(0, increment); } }; this.findPosV = function(start, amaount, unit, goalColumn) { if (unit == 'line') { var screenPos = this.ace.session.documentToScreenPosition(start.line, start.ch); if (goalColumn != null) screenPos.column = goalColumn; screenPos.row += amaount; screenPos.row = Math.min(Math.max(0, screenPos.row), this.ace.session.getScreenLength() - 1); var pos = this.ace.session.screenToDocumentPosition(screenPos.row, screenPos.column); return toCmPos(pos); } else { debugger; } }; this.charCoords = function(pos, mode) { if (mode == 'div' || !mode) { var sc = this.ace.session.documentToScreenPosition(pos.line, pos.ch); return {left: sc.column, top: sc.row}; }if (mode == 'local') { var renderer = this.ace.renderer; var sc = this.ace.session.documentToScreenPosition(pos.line, pos.ch); var lh = renderer.layerConfig.lineHeight; var cw = renderer.layerConfig.characterWidth; var top = lh * sc.row; return {left: sc.column * cw, top: top, bottom: top + lh}; } }; this.coordsChar = function(pos, mode) { var renderer = this.ace.renderer; if (mode == 'local') { var row = Math.max(0, Math.floor(pos.top / renderer.lineHeight)); var col = Math.max(0, Math.floor(pos.left / renderer.characterWidth)); var ch = renderer.session.screenToDocumentPosition(row, col); return toCmPos(ch); } else if (mode == 'div') { throw "not implemented"; } }; this.openDialog = function() { debugger }; this.getSearchCursor = function(query, pos, caseFold) { var caseSensitive = false; var isRegexp = false; if (query instanceof RegExp && !query.global) { caseSensitive = !query.ignoreCase; query = query.source; isRegexp = true; } var search = new Search(); if (pos.ch == undefined) pos.ch = Number.MAX_VALUE; var acePos = {row: pos.line, column: pos.ch}; var cm = this; var last = null; return { findNext: function() { return this.find(false) }, findPrevious: function() {return this.find(true) }, find: function(back) { search.setOptions({ needle: query, caseSensitive: caseSensitive, wrap: false, backwards: back, regExp: isRegexp, start: last || acePos }); var range = search.find(cm.ace.session); if (range && range.isEmpty()) { if (cm.getLine(range.start.row).length == range.start.column) { search.$options.start = range; range = search.find(cm.ace.session); } } last = range; return last; }, from: function() { return last && toCmPos(last.start) }, to: function() { return last && toCmPos(last.end) }, replace: function(text) { if (last) { last.end = cm.ace.session.doc.replace(last, text); } } }; }; this.scrollTo = function(x, y) { var renderer = this.ace.renderer; var config = renderer.layerConfig; var maxHeight = config.maxHeight; maxHeight -= (renderer.$size.scrollerHeight - renderer.lineHeight) * renderer.$scrollPastEnd; if (y != null) this.ace.session.setScrollTop(Math.max(0, Math.min(y, maxHeight))); if (x != null) this.ace.session.setScrollLeft(Math.max(0, Math.min(x, config.width))); }; this.scrollInfo = function() { return 0; }; this.scrollIntoView = function(pos, margin) { if (pos) this.ace.renderer.scrollCursorIntoView(toAcePos(pos), null, margin); }; this.getLine = function(row) { return this.ace.session.getLine(row) }; this.getRange = function(s, e) { return this.ace.session.getTextRange(new Range(s.line, s.ch, e.line, e.ch)); }; this.replaceRange = function(text, s, e) { if (!e) e = s; return this.ace.session.replace(new Range(s.line, s.ch, e.line, e.ch), text); }; this.replaceSelections = function(p) { var sel = this.ace.selection; if (this.ace.inVirtualSelectionMode) { this.ace.session.replace(sel.getRange(), p[0] || ""); return; } sel.inVirtualSelectionMode = true; var ranges = sel.rangeList.ranges; if (!ranges.length) ranges = [this.ace.multiSelect.getRange()]; for (var i = ranges.length; i--;) this.ace.session.replace(ranges[i], p[i] || ""); sel.inVirtualSelectionMode = false; }; this.getSelection = function() { return this.ace.getSelectedText(); }; this.getSelections = function() { return this.listSelections().map(function(x) { return this.getRange(x.anchor, x.head); }, this); }; this.getInputField = function() { return this.ace.textInput.getElement(); }; this.getWrapperElement = function() { return this.ace.containter; }; var optMap = { indentWithTabs: "useSoftTabs", indentUnit: "tabSize", firstLineNumber: "firstLineNumber" }; this.setOption = function(name, val) { this.state[name] = val; switch (name) { case 'indentWithTabs': name = optMap[name]; val = !val; break; default: name = optMap[name]; } if (name) this.ace.setOption(name, val); }; this.getOption = function(name, val) { var aceOpt = optMap[name]; if (aceOpt) val = this.ace.getOption(aceOpt); switch (name) { case 'indentWithTabs': name = optMap[name]; return !val; } return aceOpt ? val : this.state[name]; }; this.toggleOverwrite = function(on) { this.state.overwrite = on; return this.ace.setOverwrite(on); }; this.addOverlay = function(o) { if (!this.$searchHighlight || !this.$searchHighlight.session) { var highlight = new SearchHighlight(null, "ace_highlight-marker", "text"); var marker = this.ace.session.addDynamicMarker(highlight); highlight.id = marker.id; highlight.session = this.ace.session; highlight.destroy = function(o) { highlight.session.off("change", highlight.updateOnChange); highlight.session.off("changeEditor", highlight.destroy); highlight.session.removeMarker(highlight.id); highlight.session = null; }; highlight.updateOnChange = function(delta) { delta = delta.data.range;// v1.2 api compatibility var row = delta.start.row; if (row == delta.end.row) highlight.cache[row] = undefined; else highlight.cache.splice(row, highlight.cache.length); } highlight.session.on("changeEditor", highlight.destroy); highlight.session.on("change", highlight.updateOnChange); } var re = new RegExp(o.query.source, "gmi"); console.log(re) this.$searchHighlight = o.highlight = highlight; this.$searchHighlight.setRegexp(re); this.ace.renderer.updateBackMarkers(); }; this.removeOverlay = function(o) { if (this.$searchHighlight && this.$searchHighlight.session) { this.$searchHighlight.destroy(); } }; this.getScrollInfo = function() { var renderer = this.ace.renderer; var config = renderer.layerConfig; return { left: renderer.scrollLeft, top: renderer.scrollTop, height: config.maxHeight, width: config.width, clientHeight: config.height, clientWidth: config.width }; }; this.getValue = function() { return this.ace.getValue(); }; this.setValue = function(v) { return this.ace.setValue(v); }; this.getTokenTypeAt = function(pos) { var token = this.ace.session.getTokenAt(pos.line, pos.ch); return token && /comment|string/.test(token.type) ? "string" : ""; }; this.findMatchingBracket = function(pos) { var m = this.ace.session.findMatchingBracket(toAcePos(pos)); return {to: m && toCmPos(m)}; }; this.indentLine = function(line, method) { if (method === true) this.ace.session.indentRows(line, line, "\t"); else if (method === false) this.ace.session.outdentRows(new Range(line, 0, line, 0)); }; this.indexFromPos = function(pos) { return this.ace.session.doc.positionToIndex(toAcePos(pos)); }; this.posFromIndex = function(index) { return toCmPos(this.ace.session.doc.indexToPosition(index)); }; this.focus = function(index) { return this.ace.focus(); }; this.blur = function(index) { return this.ace.blur(); }; this.defaultTextHeight = function(index) { return this.ace.renderer.layerConfig.lineHeight; }; this.scanForBracket = function(pos, dir, _, options) { var re = options.bracketRegex.source; if (dir == 1) { var m = this.ace.session.$findClosingBracket(re.slice(1, 2), toAcePos(pos), /paren|text/); } else { var m = this.ace.session.$findOpeningBracket(re.slice(-2, -1), {row: pos.line, column: pos.ch + 1}, /paren|text/); } return m && {pos: toCmPos(m)}; }; this.refresh = function() { return this.ace.resize(true); }; }).call(CodeMirror.prototype); function toAcePos(cmPos) { return {row: cmPos.line, column: cmPos.ch}; } function toCmPos(acePos) { return new Pos(acePos.row, acePos.column); } var StringStream = CodeMirror.StringStream = function(string, tabSize) { this.pos = this.start = 0; this.string = string; this.tabSize = tabSize || 8; this.lastColumnPos = this.lastColumnValue = 0; this.lineStart = 0; }; StringStream.prototype = { eol: function() {return this.pos >= this.string.length;}, sol: function() {return this.pos == this.lineStart;}, peek: function() {return this.string.charAt(this.pos) || undefined;}, next: function() { if (this.pos < this.string.length) return this.string.charAt(this.pos++); }, eat: function(match) { var ch = this.string.charAt(this.pos); if (typeof match == "string") var ok = ch == match; else var ok = ch && (match.test ? match.test(ch) : match(ch)); if (ok) {++this.pos; return ch;} }, eatWhile: function(match) { var start = this.pos; while (this.eat(match)){} return this.pos > start; }, eatSpace: function() { var start = this.pos; while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; return this.pos > start; }, skipToEnd: function() {this.pos = this.string.length;}, skipTo: function(ch) { var found = this.string.indexOf(ch, this.pos); if (found > -1) {this.pos = found; return true;} }, backUp: function(n) {this.pos -= n;}, column: function() { throw "not implemented"; }, indentation: function() { throw "not implemented"; }, match: function(pattern, consume, caseInsensitive) { if (typeof pattern == "string") { var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; var substr = this.string.substr(this.pos, pattern.length); if (cased(substr) == cased(pattern)) { if (consume !== false) this.pos += pattern.length; return true; } } else { var match = this.string.slice(this.pos).match(pattern); if (match && match.index > 0) return null; if (match && consume !== false) this.pos += match[0].length; return match; } }, current: function(){return this.string.slice(this.start, this.pos);}, hideFirstChars: function(n, inner) { this.lineStart += n; try { return inner(); } finally { this.lineStart -= n; } } }; CodeMirror.defineExtension = function(name, fn) { CodeMirror.prototype[name] = fn; }; dom.importCssString(".normal-mode .ace_cursor{\ border: 0!important;\ background-color: red;\ opacity: 0.5;\ }.ace_dialog {\ position: absolute;\ left: 0; right: 0;\ background: white;\ z-index: 15;\ padding: .1em .8em;\ overflow: hidden;\ color: #333;\ }\ .ace_dialog-top {\ border-bottom: 1px solid #eee;\ top: 0;\ }\ .ace_dialog-bottom {\ border-top: 1px solid #eee;\ bottom: 0;\ }\ .ace_dialog input {\ border: none;\ outline: none;\ background: transparent;\ width: 20em;\ color: inherit;\ font-family: monospace;\ }", "vimMode"); (function() { function dialogDiv(cm, template, bottom) { var wrap = cm.ace.container; var dialog; dialog = wrap.appendChild(document.createElement("div")); if (bottom) dialog.className = "ace_dialog ace_dialog-bottom"; else dialog.className = "ace_dialog ace_dialog-top"; if (typeof template == "string") { dialog.innerHTML = template; } else { // Assuming it's a detached DOM element. dialog.appendChild(template); } return dialog; } function closeNotification(cm, newVal) { if (cm.state.currentNotificationClose) cm.state.currentNotificationClose(); cm.state.currentNotificationClose = newVal; } CodeMirror.defineExtension("openDialog", function(template, callback, options) { if (this.virtualSelectionMode()) return; if (!options) options = {}; closeNotification(this, null); var dialog = dialogDiv(this, template, options.bottom); var closed = false, me = this; function close(newVal) { if (typeof newVal == 'string') { inp.value = newVal; } else { if (closed) return; closed = true; dialog.parentNode.removeChild(dialog); me.focus(); if (options.onClose) options.onClose(dialog); } } var inp = dialog.getElementsByTagName("input")[0], button; if (inp) { if (options.value) { inp.value = options.value; inp.select(); } if (options.onInput) CodeMirror.on(inp, "input", function(e) { options.onInput(e, inp.value, close);}); if (options.onKeyUp) CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);}); CodeMirror.on(inp, "keydown", function(e) { if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; } if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) { inp.blur(); CodeMirror.e_stop(e); close(); } if (e.keyCode == 13) callback(inp.value); }); if (options.closeOnBlur !== false) CodeMirror.on(inp, "blur", close); inp.focus(); } else if (button = dialog.getElementsByTagName("button")[0]) { CodeMirror.on(button, "click", function() { close(); me.focus(); }); if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close); button.focus(); } return close; }); CodeMirror.defineExtension("openNotification", function(template, options) { if (this.virtualSelectionMode()) return; closeNotification(this, close); var dialog = dialogDiv(this, template, options && options.bottom); var closed = false, doneTimer; var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000; function close() { if (closed) return; closed = true; clearTimeout(doneTimer); dialog.parentNode.removeChild(dialog); } CodeMirror.on(dialog, 'click', function(e) { CodeMirror.e_preventDefault(e); close(); }); if (duration) doneTimer = setTimeout(close, duration); return close; }); })(); var defaultKeymap = [ { keys: '', type: 'keyToKey', toKeys: 'h' }, { keys: '', type: 'keyToKey', toKeys: 'l' }, { keys: '', type: 'keyToKey', toKeys: 'k' }, { keys: '', type: 'keyToKey', toKeys: 'j' }, { keys: '', type: 'keyToKey', toKeys: 'l' }, { keys: '', type: 'keyToKey', toKeys: 'h' }, { keys: '', type: 'keyToKey', toKeys: 'W' }, { keys: '', type: 'keyToKey', toKeys: 'B' }, { keys: '', type: 'keyToKey', toKeys: 'w' }, { keys: '', type: 'keyToKey', toKeys: 'b' }, { keys: '', type: 'keyToKey', toKeys: 'j' }, { keys: '', type: 'keyToKey', toKeys: 'k' }, { keys: '', type: 'keyToKey', toKeys: '' }, { keys: '', type: 'keyToKey', toKeys: '' }, { keys: '', type: 'keyToKey', toKeys: '', context: 'insert' }, { keys: '', type: 'keyToKey', toKeys: '', context: 'insert' }, { keys: 's', type: 'keyToKey', toKeys: 'cl', context: 'normal' }, { keys: 's', type: 'keyToKey', toKeys: 'xi', context: 'visual'}, { keys: 'S', type: 'keyToKey', toKeys: 'cc', context: 'normal' }, { keys: 'S', type: 'keyToKey', toKeys: 'dcc', context: 'visual' }, { keys: '', type: 'keyToKey', toKeys: '0' }, { keys: '', type: 'keyToKey', toKeys: '$' }, { keys: '', type: 'keyToKey', toKeys: '' }, { keys: '', type: 'keyToKey', toKeys: '' }, { keys: '', type: 'keyToKey', toKeys: 'j^', context: 'normal' }, { keys: 'H', type: 'motion', motion: 'moveToTopLine', motionArgs: { linewise: true, toJumplist: true }}, { keys: 'M', type: 'motion', motion: 'moveToMiddleLine', motionArgs: { linewise: true, toJumplist: true }}, { keys: 'L', type: 'motion', motion: 'moveToBottomLine', motionArgs: { linewise: true, toJumplist: true }}, { keys: 'h', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: false }}, { keys: 'l', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: true }}, { keys: 'j', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, linewise: true }}, { keys: 'k', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, linewise: true }}, { keys: 'gj', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: true }}, { keys: 'gk', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: false }}, { keys: 'w', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false }}, { keys: 'W', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false, bigWord: true }}, { keys: 'e', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, inclusive: true }}, { keys: 'E', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, bigWord: true, inclusive: true }}, { keys: 'b', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }}, { keys: 'B', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false, bigWord: true }}, { keys: 'ge', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, inclusive: true }}, { keys: 'gE', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, bigWord: true, inclusive: true }}, { keys: '{', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: false, toJumplist: true }}, { keys: '}', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: true, toJumplist: true }}, { keys: '', type: 'motion', motion: 'moveByPage', motionArgs: { forward: true }}, { keys: '', type: 'motion', motion: 'moveByPage', motionArgs: { forward: false }}, { keys: '', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: true, explicitRepeat: true }}, { keys: '', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: false, explicitRepeat: true }}, { keys: 'gg', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: false, explicitRepeat: true, linewise: true, toJumplist: true }}, { keys: 'G', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: true, explicitRepeat: true, linewise: true, toJumplist: true }}, { keys: '0', type: 'motion', motion: 'moveToStartOfLine' }, { keys: '^', type: 'motion', motion: 'moveToFirstNonWhiteSpaceCharacter' }, { keys: '+', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true }}, { keys: '-', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, toFirstChar:true }}, { keys: '_', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true, repeatOffset:-1 }}, { keys: '$', type: 'motion', motion: 'moveToEol', motionArgs: { inclusive: true }}, { keys: '%', type: 'motion', motion: 'moveToMatchedSymbol', motionArgs: { inclusive: true, toJumplist: true }}, { keys: 'f', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: true , inclusive: true }}, { keys: 'F', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: false }}, { keys: 't', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: true, inclusive: true }}, { keys: 'T', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: false }}, { keys: ';', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: true }}, { keys: ',', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: false }}, { keys: '\'', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true, linewise: true}}, { keys: '`', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true}}, { keys: ']`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true } }, { keys: '[`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false } }, { keys: ']\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true, linewise: true } }, { keys: '[\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false, linewise: true } }, { keys: ']p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true, matchIndent: true}}, { keys: '[p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true, matchIndent: true}}, { keys: ']', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: true, toJumplist: true}}, { keys: '[', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: false, toJumplist: true}}, { keys: '|', type: 'motion', motion: 'moveToColumn'}, { keys: 'o', type: 'motion', motion: 'moveToOtherHighlightedEnd', context:'visual'}, { keys: 'O', type: 'motion', motion: 'moveToOtherHighlightedEnd', motionArgs: {sameLine: true}, context:'visual'}, { keys: 'd', type: 'operator', operator: 'delete' }, { keys: 'y', type: 'operator', operator: 'yank' }, { keys: 'c', type: 'operator', operator: 'change' }, { keys: '>', type: 'operator', operator: 'indent', operatorArgs: { indentRight: true }}, { keys: '<', type: 'operator', operator: 'indent', operatorArgs: { indentRight: false }}, { keys: 'g~', type: 'operator', operator: 'changeCase' }, { keys: 'gu', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, isEdit: true }, { keys: 'gU', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, isEdit: true }, { keys: 'n', type: 'motion', motion: 'findNext', motionArgs: { forward: true, toJumplist: true }}, { keys: 'N', type: 'motion', motion: 'findNext', motionArgs: { forward: false, toJumplist: true }}, { keys: 'x', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorMotionArgs: { visualLine: false }}, { keys: 'X', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: false }, operatorMotionArgs: { visualLine: true }}, { keys: 'D', type: 'operatorMotion', operator: 'delete', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'}, { keys: 'D', type: 'operator', operator: 'delete', operatorArgs: { linewise: true }, context: 'visual'}, { keys: 'Y', type: 'operatorMotion', operator: 'yank', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'}, { keys: 'Y', type: 'operator', operator: 'yank', operatorArgs: { linewise: true }, context: 'visual'}, { keys: 'C', type: 'operatorMotion', operator: 'change', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'}, { keys: 'C', type: 'operator', operator: 'change', operatorArgs: { linewise: true }, context: 'visual'}, { keys: '~', type: 'operatorMotion', operator: 'changeCase', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorArgs: { shouldMoveCursor: true }, context: 'normal'}, { keys: '~', type: 'operator', operator: 'changeCase', context: 'visual'}, { keys: '', type: 'operatorMotion', operator: 'delete', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }, context: 'insert' }, { keys: '', type: 'action', action: 'jumpListWalk', actionArgs: { forward: true }}, { keys: '', type: 'action', action: 'jumpListWalk', actionArgs: { forward: false }}, { keys: '', type: 'action', action: 'scroll', actionArgs: { forward: true, linewise: true }}, { keys: '', type: 'action', action: 'scroll', actionArgs: { forward: false, linewise: true }}, { keys: 'a', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'charAfter' }, context: 'normal' }, { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'eol' }, context: 'normal' }, { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'endOfSelectedArea' }, context: 'visual' }, { keys: 'i', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'inplace' }, context: 'normal' }, { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'firstNonBlank'}, context: 'normal' }, { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'startOfSelectedArea' }, context: 'visual' }, { keys: 'o', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: true }, context: 'normal' }, { keys: 'O', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: false }, context: 'normal' }, { keys: 'v', type: 'action', action: 'toggleVisualMode' }, { keys: 'V', type: 'action', action: 'toggleVisualMode', actionArgs: { linewise: true }}, { keys: '', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true }}, { keys: 'gv', type: 'action', action: 'reselectLastSelection' }, { keys: 'J', type: 'action', action: 'joinLines', isEdit: true }, { keys: 'p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true }}, { keys: 'P', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true }}, { keys: 'r', type: 'action', action: 'replace', isEdit: true }, { keys: '@', type: 'action', action: 'replayMacro' }, { keys: 'q', type: 'action', action: 'enterMacroRecordMode' }, { keys: 'R', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { replace: true }}, { keys: 'u', type: 'action', action: 'undo', context: 'normal' }, { keys: 'u', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, context: 'visual', isEdit: true }, { keys: 'U', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, context: 'visual', isEdit: true }, { keys: '', type: 'action', action: 'redo' }, { keys: 'm', type: 'action', action: 'setMark' }, { keys: '"', type: 'action', action: 'setRegister' }, { keys: 'zz', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }}, { keys: 'z.', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }, motion: 'moveToFirstNonWhiteSpaceCharacter' }, { keys: 'zt', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }}, { keys: 'z', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }, motion: 'moveToFirstNonWhiteSpaceCharacter' }, { keys: 'z-', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }}, { keys: 'zb', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }, motion: 'moveToFirstNonWhiteSpaceCharacter' }, { keys: '.', type: 'action', action: 'repeatLastEdit' }, { keys: '', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: true, backtrack: false}}, { keys: '', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: false, backtrack: false}}, { keys: 'a', type: 'motion', motion: 'textObjectManipulation' }, { keys: 'i', type: 'motion', motion: 'textObjectManipulation', motionArgs: { textObjectInner: true }}, { keys: '/', type: 'search', searchArgs: { forward: true, querySrc: 'prompt', toJumplist: true }}, { keys: '?', type: 'search', searchArgs: { forward: false, querySrc: 'prompt', toJumplist: true }}, { keys: '*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }}, { keys: '#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }}, { keys: 'g*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', toJumplist: true }}, { keys: 'g#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', toJumplist: true }}, { keys: ':', type: 'ex' } ]; var Pos = CodeMirror.Pos; var modifierCodes = [16, 17, 18, 91]; var specialKey = {Enter:'CR',Backspace:'BS',Delete:'Del'}; var mac = /Mac/.test(navigator.platform); var Vim = function() { return vimApi; } //{ function lookupKey(e) { var keyCode = e.keyCode; if (modifierCodes.indexOf(keyCode) != -1) { return; } var hasModifier = e.ctrlKey || e.metaKey; var key = CodeMirror.keyNames[keyCode]; key = specialKey[key] || key; var name = ''; if (e.ctrlKey) { name += 'C-'; } if (e.altKey) { name += 'A-'; } if (mac && e.metaKey || (!hasModifier && e.shiftKey) && key.length < 2) { return; } else if (e.shiftKey && !/^[A-Za-z]$/.test(key)) { name += 'S-'; } if (key.length == 1) { key = key.toLowerCase(); } name += key; if (name.length > 1) { name = '<' + name + '>'; } return name; } function handleKeyDown(cm, e) { var name = lookupKey(e); if (!name) { return; } CodeMirror.signal(cm, 'vim-keypress', name); if (CodeMirror.Vim.handleKey(cm, name, 'user')) { CodeMirror.e_stop(e); } } function handleKeyPress(cm, e) { var code = e.charCode || e.keyCode; if (e.ctrlKey || e.metaKey || e.altKey || e.shiftKey && code < 32) { return; } var name = String.fromCharCode(code); CodeMirror.signal(cm, 'vim-keypress', name); if (CodeMirror.Vim.handleKey(cm, name, 'user')) { CodeMirror.e_stop(e); } } function enterVimMode(cm) { cm.setOption('disableInput', true); cm.setOption('showCursorWhenSelecting', false); CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"}); cm.on('cursorActivity', onCursorActivity); maybeInitVimState(cm); CodeMirror.on(cm.getInputField(), 'paste', getOnPasteFn(cm)); cm.on('keypress', handleKeyPress); cm.on('keydown', handleKeyDown); } function leaveVimMode(cm) { cm.setOption('disableInput', false); cm.off('cursorActivity', onCursorActivity); CodeMirror.off(cm.getInputField(), 'paste', getOnPasteFn(cm)); cm.state.vim = null; cm.off('keypress', handleKeyPress); cm.off('keydown', handleKeyDown); } function detachVimMap(cm, next) { if (this == CodeMirror.keyMap.vim) CodeMirror.rmClass(cm.getWrapperElement(), "cm-fat-cursor"); if (!next || next.attach != attachVimMap) leaveVimMode(cm, false); } function attachVimMap(cm, prev) { if (this == CodeMirror.keyMap.vim) CodeMirror.addClass(cm.getWrapperElement(), "cm-fat-cursor"); if (!prev || prev.attach != attachVimMap) enterVimMode(cm); } CodeMirror.defineOption('vimMode', false, function(cm, val, prev) { if (val && cm.getOption("keyMap") != "vim") cm.setOption("keyMap", "vim"); else if (!val && prev != CodeMirror.Init && /^vim/.test(cm.getOption("keyMap"))) cm.setOption("keyMap", "default"); }); function getOnPasteFn(cm) { var vim = cm.state.vim; if (!vim.onPasteFn) { vim.onPasteFn = function() { if (!vim.insertMode) { cm.setCursor(offsetCursor(cm.getCursor(), 0, 1)); actions.enterInsertMode(cm, {}, vim); } }; } return vim.onPasteFn; } var numberRegex = /[\d]/; var wordRegexp = [(/\w/), (/[^\w\s]/)], bigWordRegexp = [(/\S/)]; function makeKeyRange(start, size) { var keys = []; for (var i = start; i < start + size; i++) { keys.push(String.fromCharCode(i)); } return keys; } var upperCaseAlphabet = makeKeyRange(65, 26); var lowerCaseAlphabet = makeKeyRange(97, 26); var numbers = makeKeyRange(48, 10); var validMarks = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['<', '>']); var validRegisters = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['-', '"', '.', ':', '/']); function isLine(cm, line) { return line >= cm.firstLine() && line <= cm.lastLine(); } function isLowerCase(k) { return (/^[a-z]$/).test(k); } function isMatchableSymbol(k) { return '()[]{}'.indexOf(k) != -1; } function isNumber(k) { return numberRegex.test(k); } function isUpperCase(k) { return (/^[A-Z]$/).test(k); } function isWhiteSpaceString(k) { return (/^\s*$/).test(k); } function inArray(val, arr) { for (var i = 0; i < arr.length; i++) { if (arr[i] == val) { return true; } } return false; } var options = {}; function defineOption(name, defaultValue, type) { if (defaultValue === undefined) { throw Error('defaultValue is required'); } if (!type) { type = 'string'; } var opt = name; if (typeof name == "string") opt = { type: type, defaultValue: defaultValue }; else name = opt.name; options[name] = opt; setOption(name, defaultValue); } function setOption(name, value, cm) { var option = options[name]; if (!option) { throw Error('Unknown option: ' + name); } if (option.type == 'boolean') { if (value && value !== true) { throw Error('Invalid argument: ' + name + '=' + value); } else if (value !== false) { value = true; } } option.value = value; if (option.set) option.set(value, cm); } function getOption(name) { var option = options[name]; if (!option) { throw Error('Unknown option: ' + name); } return option.value; } var createCircularJumpList = function() { var size = 100; var pointer = -1; var head = 0; var tail = 0; var buffer = new Array(size); function add(cm, oldCur, newCur) { var current = pointer % size; var curMark = buffer[current]; function useNextSlot(cursor) { var next = ++pointer % size; var trashMark = buffer[next]; if (trashMark) { trashMark.clear(); } buffer[next] = cm.setBookmark(cursor); } if (curMark) { var markPos = curMark.find(); if (markPos && !cursorEqual(markPos, oldCur)) { useNextSlot(oldCur); } } else { useNextSlot(oldCur); } useNextSlot(newCur); head = pointer; tail = pointer - size + 1; if (tail < 0) { tail = 0; } } function move(cm, offset) { pointer += offset; if (pointer > head) { pointer = head; } else if (pointer < tail) { pointer = tail; } var mark = buffer[(size + pointer) % size]; if (mark && !mark.find()) { var inc = offset > 0 ? 1 : -1; var newCur; var oldCur = cm.getCursor(); do { pointer += inc; mark = buffer[(size + pointer) % size]; if (mark && (newCur = mark.find()) && !cursorEqual(oldCur, newCur)) { break; } } while (pointer < head && pointer > tail); } return mark; } return { cachedCursor: undefined, //used for # and * jumps add: add, move: move }; }; var createInsertModeChanges = function(c) { if (c) { return { changes: c.changes, expectCursorActivityForChange: c.expectCursorActivityForChange }; } return { changes: [], expectCursorActivityForChange: false }; }; function MacroModeState() { this.latestRegister = undefined; this.isPlaying = false; this.isRecording = false; this.replaySearchQueries = []; this.onRecordingDone = undefined; this.lastInsertModeChanges = createInsertModeChanges(); } MacroModeState.prototype = { exitMacroRecordMode: function() { var macroModeState = vimGlobalState.macroModeState; if (macroModeState.onRecordingDone) { macroModeState.onRecordingDone(); // close dialog } macroModeState.onRecordingDone = undefined; macroModeState.isRecording = false; }, enterMacroRecordMode: function(cm, registerName) { var register = vimGlobalState.registerController.getRegister(registerName); if (register) { register.clear(); this.latestRegister = registerName; if (cm.openDialog) { this.onRecordingDone = cm.openDialog( '(recording)['+registerName+']', null, {bottom:true}); } this.isRecording = true; } } }; function maybeInitVimState(cm) { if (!cm.state.vim) { cm.state.vim = { inputState: new InputState(), lastEditInputState: undefined, lastEditActionCommand: undefined, lastHPos: -1, lastHSPos: -1, lastMotion: null, marks: {}, fakeCursor: null, insertMode: false, insertModeRepeat: undefined, visualMode: false, visualLine: false, visualBlock: false, lastSelection: null, lastPastedText: null, sel: { } }; } return cm.state.vim; } var vimGlobalState; function resetVimGlobalState() { vimGlobalState = { searchQuery: null, searchIsReversed: false, lastSubstituteReplacePart: undefined, jumpList: createCircularJumpList(), macroModeState: new MacroModeState, lastChararacterSearch: {increment:0, forward:true, selectedCharacter:''}, registerController: new RegisterController({}), searchHistoryController: new HistoryController({}), exCommandHistoryController : new HistoryController({}) }; for (var optionName in options) { var option = options[optionName]; option.value = option.defaultValue; } } var lastInsertModeKeyTimer; var vimApi= { buildKeyMap: function() { }, getRegisterController: function() { return vimGlobalState.registerController; }, resetVimGlobalState_: resetVimGlobalState, getVimGlobalState_: function() { return vimGlobalState; }, maybeInitVimState_: maybeInitVimState, InsertModeKey: InsertModeKey, map: function(lhs, rhs, ctx) { exCommandDispatcher.map(lhs, rhs, ctx); }, unmap: function(lhs, ctx) { exCommandDispatcher.unmap(lhs, ctx); }, setOption: setOption, getOption: getOption, defineOption: defineOption, defineEx: function(name, prefix, func){ if (name.indexOf(prefix) !== 0) { throw new Error('(Vim.defineEx) "'+prefix+'" is not a prefix of "'+name+'", command not registered'); } exCommands[name]=func; exCommandDispatcher.commandMap_[prefix]={name:name, shortName:prefix, type:'api'}; }, handleKey: function(cm, key, origin) { var vim = maybeInitVimState(cm); function handleMacroRecording() { var macroModeState = vimGlobalState.macroModeState; if (macroModeState.isRecording) { if (key == 'q') { macroModeState.exitMacroRecordMode(); clearInputState(cm); return true; } if (origin != 'mapping') { logKey(macroModeState, key); } } } function handleEsc() { if (key == '') { clearInputState(cm); if (vim.visualMode) { exitVisualMode(cm); } else if (vim.insertMode) { exitInsertMode(cm); } return true; } } function doKeyToKey(keys) { var match; while (keys) { match = (/<\w+-.+?>|<\w+>|./).exec(keys); key = match[0]; keys = keys.substring(match.index + key.length); CodeMirror.Vim.handleKey(cm, key, 'mapping'); } } function handleKeyInsertMode() { if (handleEsc()) { return true; } var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key; var keysAreChars = key.length == 1; var match = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert'); while (keys.length > 1 && match.type != 'full') { var keys = vim.inputState.keyBuffer = keys.slice(1); var thisMatch = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert'); if (thisMatch.type != 'none') { match = thisMatch; } } if (match.type == 'none') { clearInputState(cm); return false; } else if (match.type == 'partial') { if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); } lastInsertModeKeyTimer = window.setTimeout( function() { if (vim.insertMode && vim.inputState.keyBuffer) { clearInputState(cm); } }, getOption('insertModeEscKeysTimeout')); return !keysAreChars; } if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); } if (keysAreChars) { var here = cm.getCursor(); cm.replaceRange('', offsetCursor(here, 0, -(keys.length - 1)), here, '+input'); } clearInputState(cm); var command = match.command; if (command.type == 'keyToKey') { doKeyToKey(command.toKeys); } else { commandDispatcher.processCommand(cm, vim, command); } return true; } function handleKeyNonInsertMode() { if (handleMacroRecording() || handleEsc()) { return true; }; var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key; if (/^[1-9]\d*$/.test(keys)) { return true; } var keysMatcher = /^(\d*)(.*)$/.exec(keys); if (!keysMatcher) { clearInputState(cm); return false; } var context = vim.visualMode ? 'visual' : 'normal'; var match = commandDispatcher.matchCommand(keysMatcher[2] || keysMatcher[1], defaultKeymap, vim.inputState, context); if (match.type == 'none') { clearInputState(cm); return false; } else if (match.type == 'partial') { return true; } vim.inputState.keyBuffer = ''; var command = match.command; var keysMatcher = /^(\d*)(.*)$/.exec(keys); if (keysMatcher[1] && keysMatcher[1] != '0') { vim.inputState.pushRepeatDigit(keysMatcher[1]); } if (command.type == 'keyToKey') { doKeyToKey(command.toKeys); } else { commandDispatcher.processCommand(cm, vim, command); } return true; } return cm.operation(function() { cm.curOp.isVimOp = true; try { if (vim.insertMode) { return handleKeyInsertMode(); } else { return handleKeyNonInsertMode(); } } catch (e) { cm.state.vim = undefined; maybeInitVimState(cm); throw e; } }); }, handleEx: function(cm, input) { exCommandDispatcher.processCommand(cm, input); } }; function InputState() { this.prefixRepeat = []; this.motionRepeat = []; this.operator = null; this.operatorArgs = null; this.motion = null; this.motionArgs = null; this.keyBuffer = []; // For matching multi-key commands. this.registerName = null; // Defaults to the unnamed register. } InputState.prototype.pushRepeatDigit = function(n) { if (!this.operator) { this.prefixRepeat = this.prefixRepeat.concat(n); } else { this.motionRepeat = this.motionRepeat.concat(n); } }; InputState.prototype.getRepeat = function() { var repeat = 0; if (this.prefixRepeat.length > 0 || this.motionRepeat.length > 0) { repeat = 1; if (this.prefixRepeat.length > 0) { repeat *= parseInt(this.prefixRepeat.join(''), 10); } if (this.motionRepeat.length > 0) { repeat *= parseInt(this.motionRepeat.join(''), 10); } } return repeat; }; function clearInputState(cm, reason) { cm.state.vim.inputState = new InputState(); CodeMirror.signal(cm, 'vim-command-done', reason); } function Register(text, linewise, blockwise) { this.clear(); this.keyBuffer = [text || '']; this.insertModeChanges = []; this.searchQueries = []; this.linewise = !!linewise; this.blockwise = !!blockwise; } Register.prototype = { setText: function(text, linewise, blockwise) { this.keyBuffer = [text || '']; this.linewise = !!linewise; this.blockwise = !!blockwise; }, pushText: function(text, linewise) { if (linewise) { if (!this.linewise) { this.keyBuffer.push('\n'); } this.linewise = true; } this.keyBuffer.push(text); }, pushInsertModeChanges: function(changes) { this.insertModeChanges.push(createInsertModeChanges(changes)); }, pushSearchQuery: function(query) { this.searchQueries.push(query); }, clear: function() { this.keyBuffer = []; this.insertModeChanges = []; this.searchQueries = []; this.linewise = false; }, toString: function() { return this.keyBuffer.join(''); } }; function RegisterController(registers) { this.registers = registers; this.unnamedRegister = registers['"'] = new Register(); registers['.'] = new Register(); registers[':'] = new Register(); registers['/'] = new Register(); } RegisterController.prototype = { pushText: function(registerName, operator, text, linewise, blockwise) { if (linewise && text.charAt(0) == '\n') { text = text.slice(1) + '\n'; } if (linewise && text.charAt(text.length - 1) !== '\n'){ text += '\n'; } var register = this.isValidRegister(registerName) ? this.getRegister(registerName) : null; if (!register) { switch (operator) { case 'yank': this.registers['0'] = new Register(text, linewise, blockwise); break; case 'delete': case 'change': if (text.indexOf('\n') == -1) { this.registers['-'] = new Register(text, linewise); } else { this.shiftNumericRegisters_(); this.registers['1'] = new Register(text, linewise); } break; } this.unnamedRegister.setText(text, linewise, blockwise); return; } var append = isUpperCase(registerName); if (append) { register.pushText(text, linewise); } else { register.setText(text, linewise, blockwise); } this.unnamedRegister.setText(register.toString(), linewise); }, getRegister: function(name) { if (!this.isValidRegister(name)) { return this.unnamedRegister; } name = name.toLowerCase(); if (!this.registers[name]) { this.registers[name] = new Register(); } return this.registers[name]; }, isValidRegister: function(name) { return name && inArray(name, validRegisters); }, shiftNumericRegisters_: function() { for (var i = 9; i >= 2; i--) { this.registers[i] = this.getRegister('' + (i - 1)); } } }; function HistoryController() { this.historyBuffer = []; this.iterator; this.initialPrefix = null; } HistoryController.prototype = { nextMatch: function (input, up) { var historyBuffer = this.historyBuffer; var dir = up ? -1 : 1; if (this.initialPrefix === null) this.initialPrefix = input; for (var i = this.iterator + dir; up ? i >= 0 : i < historyBuffer.length; i+= dir) { var element = historyBuffer[i]; for (var j = 0; j <= element.length; j++) { if (this.initialPrefix == element.substring(0, j)) { this.iterator = i; return element; } } } if (i >= historyBuffer.length) { this.iterator = historyBuffer.length; return this.initialPrefix; } if (i < 0 ) return input; }, pushInput: function(input) { var index = this.historyBuffer.indexOf(input); if (index > -1) this.historyBuffer.splice(index, 1); if (input.length) this.historyBuffer.push(input); }, reset: function() { this.initialPrefix = null; this.iterator = this.historyBuffer.length; } }; var commandDispatcher = { matchCommand: function(keys, keyMap, inputState, context) { var matches = commandMatches(keys, keyMap, context, inputState); if (!matches.full && !matches.partial) { return {type: 'none'}; } else if (!matches.full && matches.partial) { return {type: 'partial'}; } var bestMatch; for (var i = 0; i < matches.full.length; i++) { var match = matches.full[i]; if (!bestMatch) { bestMatch = match; } } if (bestMatch.keys.slice(-11) == '') { inputState.selectedCharacter = lastChar(keys); } return {type: 'full', command: bestMatch}; }, processCommand: function(cm, vim, command) { vim.inputState.repeatOverride = command.repeatOverride; switch (command.type) { case 'motion': this.processMotion(cm, vim, command); break; case 'operator': this.processOperator(cm, vim, command); break; case 'operatorMotion': this.processOperatorMotion(cm, vim, command); break; case 'action': this.processAction(cm, vim, command); break; case 'search': this.processSearch(cm, vim, command); clearInputState(cm); break; case 'ex': case 'keyToEx': this.processEx(cm, vim, command); clearInputState(cm); break; default: break; } }, processMotion: function(cm, vim, command) { vim.inputState.motion = command.motion; vim.inputState.motionArgs = copyArgs(command.motionArgs); this.evalInput(cm, vim); }, processOperator: function(cm, vim, command) { var inputState = vim.inputState; if (inputState.operator) { if (inputState.operator == command.operator) { inputState.motion = 'expandToLine'; inputState.motionArgs = { linewise: true }; this.evalInput(cm, vim); return; } else { clearInputState(cm); } } inputState.operator = command.operator; inputState.operatorArgs = copyArgs(command.operatorArgs); if (vim.visualMode) { this.evalInput(cm, vim); } }, processOperatorMotion: function(cm, vim, command) { var visualMode = vim.visualMode; var operatorMotionArgs = copyArgs(command.operatorMotionArgs); if (operatorMotionArgs) { if (visualMode && operatorMotionArgs.visualLine) { vim.visualLine = true; } } this.processOperator(cm, vim, command); if (!visualMode) { this.processMotion(cm, vim, command); } }, processAction: function(cm, vim, command) { var inputState = vim.inputState; var repeat = inputState.getRepeat(); var repeatIsExplicit = !!repeat; var actionArgs = copyArgs(command.actionArgs) || {}; if (inputState.selectedCharacter) { actionArgs.selectedCharacter = inputState.selectedCharacter; } if (command.operator) { this.processOperator(cm, vim, command); } if (command.motion) { this.processMotion(cm, vim, command); } if (command.motion || command.operator) { this.evalInput(cm, vim); } actionArgs.repeat = repeat || 1; actionArgs.repeatIsExplicit = repeatIsExplicit; actionArgs.registerName = inputState.registerName; clearInputState(cm); vim.lastMotion = null; if (command.isEdit) { this.recordLastEdit(vim, inputState, command); } actions[command.action](cm, actionArgs, vim); }, processSearch: function(cm, vim, command) { if (!cm.getSearchCursor) { return; } var forward = command.searchArgs.forward; var wholeWordOnly = command.searchArgs.wholeWordOnly; getSearchState(cm).setReversed(!forward); var promptPrefix = (forward) ? '/' : '?'; var originalQuery = getSearchState(cm).getQuery(); var originalScrollPos = cm.getScrollInfo(); function handleQuery(query, ignoreCase, smartCase) { vimGlobalState.searchHistoryController.pushInput(query); vimGlobalState.searchHistoryController.reset(); try { updateSearchQuery(cm, query, ignoreCase, smartCase); } catch (e) { showConfirm(cm, 'Invalid regex: ' + query); return; } commandDispatcher.processMotion(cm, vim, { type: 'motion', motion: 'findNext', motionArgs: { forward: true, toJumplist: command.searchArgs.toJumplist } }); } function onPromptClose(query) { cm.scrollTo(originalScrollPos.left, originalScrollPos.top); handleQuery(query, true /** ignoreCase */, true /** smartCase */); var macroModeState = vimGlobalState.macroModeState; if (macroModeState.isRecording) { logSearchQuery(macroModeState, query); } } function onPromptKeyUp(e, query, close) { var keyName = CodeMirror.keyName(e), up; if (keyName == 'Up' || keyName == 'Down') { up = keyName == 'Up' ? true : false; query = vimGlobalState.searchHistoryController.nextMatch(query, up) || ''; close(query); } else { if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift') vimGlobalState.searchHistoryController.reset(); } var parsedQuery; try { parsedQuery = updateSearchQuery(cm, query, true /** ignoreCase */, true /** smartCase */); } catch (e) { } if (parsedQuery) { cm.scrollIntoView(findNext(cm, !forward, parsedQuery), 30); } else { clearSearchHighlight(cm); cm.scrollTo(originalScrollPos.left, originalScrollPos.top); } } function onPromptKeyDown(e, query, close) { var keyName = CodeMirror.keyName(e); if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[') { vimGlobalState.searchHistoryController.pushInput(query); vimGlobalState.searchHistoryController.reset(); updateSearchQuery(cm, originalQuery); clearSearchHighlight(cm); cm.scrollTo(originalScrollPos.left, originalScrollPos.top); CodeMirror.e_stop(e); close(); cm.focus(); } } switch (command.searchArgs.querySrc) { case 'prompt': var macroModeState = vimGlobalState.macroModeState; if (macroModeState.isPlaying) { var query = macroModeState.replaySearchQueries.shift(); handleQuery(query, true /** ignoreCase */, false /** smartCase */); } else { showPrompt(cm, { onClose: onPromptClose, prefix: promptPrefix, desc: searchPromptDesc, onKeyUp: onPromptKeyUp, onKeyDown: onPromptKeyDown }); } break; case 'wordUnderCursor': var word = expandWordUnderCursor(cm, false /** inclusive */, true /** forward */, false /** bigWord */, true /** noSymbol */); var isKeyword = true; if (!word) { word = expandWordUnderCursor(cm, false /** inclusive */, true /** forward */, false /** bigWord */, false /** noSymbol */); isKeyword = false; } if (!word) { return; } var query = cm.getLine(word.start.line).substring(word.start.ch, word.end.ch); if (isKeyword && wholeWordOnly) { query = '\\b' + query + '\\b'; } else { query = escapeRegex(query); } vimGlobalState.jumpList.cachedCursor = cm.getCursor(); cm.setCursor(word.start); handleQuery(query, true /** ignoreCase */, false /** smartCase */); break; } }, processEx: function(cm, vim, command) { function onPromptClose(input) { vimGlobalState.exCommandHistoryController.pushInput(input); vimGlobalState.exCommandHistoryController.reset(); exCommandDispatcher.processCommand(cm, input); } function onPromptKeyDown(e, input, close) { var keyName = CodeMirror.keyName(e), up; if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[') { vimGlobalState.exCommandHistoryController.pushInput(input); vimGlobalState.exCommandHistoryController.reset(); CodeMirror.e_stop(e); close(); cm.focus(); } if (keyName == 'Up' || keyName == 'Down') { up = keyName == 'Up' ? true : false; input = vimGlobalState.exCommandHistoryController.nextMatch(input, up) || ''; close(input); } else { if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift') vimGlobalState.exCommandHistoryController.reset(); } } if (command.type == 'keyToEx') { exCommandDispatcher.processCommand(cm, command.exArgs.input); } else { if (vim.visualMode) { showPrompt(cm, { onClose: onPromptClose, prefix: ':', value: '\'<,\'>', onKeyDown: onPromptKeyDown}); } else { showPrompt(cm, { onClose: onPromptClose, prefix: ':', onKeyDown: onPromptKeyDown}); } } }, evalInput: function(cm, vim) { var inputState = vim.inputState; var motion = inputState.motion; var motionArgs = inputState.motionArgs || {}; var operator = inputState.operator; var operatorArgs = inputState.operatorArgs || {}; var registerName = inputState.registerName; var sel = vim.sel; var origHead = copyCursor(vim.visualMode ? sel.head: cm.getCursor('head')); var origAnchor = copyCursor(vim.visualMode ? sel.anchor : cm.getCursor('anchor')); var oldHead = copyCursor(origHead); var oldAnchor = copyCursor(origAnchor); var newHead, newAnchor; var repeat; if (operator) { this.recordLastEdit(vim, inputState); } if (inputState.repeatOverride !== undefined) { repeat = inputState.repeatOverride; } else { repeat = inputState.getRepeat(); } if (repeat > 0 && motionArgs.explicitRepeat) { motionArgs.repeatIsExplicit = true; } else if (motionArgs.noRepeat || (!motionArgs.explicitRepeat && repeat === 0)) { repeat = 1; motionArgs.repeatIsExplicit = false; } if (inputState.selectedCharacter) { motionArgs.selectedCharacter = operatorArgs.selectedCharacter = inputState.selectedCharacter; } motionArgs.repeat = repeat; clearInputState(cm); if (motion) { var motionResult = motions[motion](cm, origHead, motionArgs, vim); vim.lastMotion = motions[motion]; if (!motionResult) { return; } if (motionArgs.toJumplist) { var jumpList = vimGlobalState.jumpList; var cachedCursor = jumpList.cachedCursor; if (cachedCursor) { recordJumpPosition(cm, cachedCursor, motionResult); delete jumpList.cachedCursor; } else { recordJumpPosition(cm, origHead, motionResult); } } if (motionResult instanceof Array) { newAnchor = motionResult[0]; newHead = motionResult[1]; } else { newHead = motionResult; } if (!newHead) { newHead = copyCursor(origHead); } if (vim.visualMode) { newHead = clipCursorToContent(cm, newHead, true); if (newAnchor) { newAnchor = clipCursorToContent(cm, newAnchor, true); } newAnchor = newAnchor || oldAnchor; sel.anchor = newAnchor; sel.head = newHead; updateCmSelection(cm); updateMark(cm, vim, '<', cursorIsBefore(newAnchor, newHead) ? newAnchor : newHead); updateMark(cm, vim, '>', cursorIsBefore(newAnchor, newHead) ? newHead : newAnchor); } else if (!operator) { newHead = clipCursorToContent(cm, newHead); cm.setCursor(newHead.line, newHead.ch); } } if (operator) { if (operatorArgs.lastSel) { newAnchor = oldAnchor; var lastSel = operatorArgs.lastSel; var lineOffset = Math.abs(lastSel.head.line - lastSel.anchor.line); var chOffset = Math.abs(lastSel.head.ch - lastSel.anchor.ch); if (lastSel.visualLine) { newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch); } else if (lastSel.visualBlock) { newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch + chOffset); } else if (lastSel.head.line == lastSel.anchor.line) { newHead = Pos(oldAnchor.line, oldAnchor.ch + chOffset); } else { newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch); } vim.visualMode = true; vim.visualLine = lastSel.visualLine; vim.visualBlock = lastSel.visualBlock; sel = vim.sel = { anchor: newAnchor, head: newHead }; updateCmSelection(cm); } else if (vim.visualMode) { operatorArgs.lastSel = { anchor: copyCursor(sel.anchor), head: copyCursor(sel.head), visualBlock: vim.visualBlock, visualLine: vim.visualLine }; } var curStart, curEnd, linewise, mode; var cmSel; if (vim.visualMode) { curStart = cursorMin(sel.head, sel.anchor); curEnd = cursorMax(sel.head, sel.anchor); linewise = vim.visualLine || operatorArgs.linewise; mode = vim.visualBlock ? 'block' : linewise ? 'line' : 'char'; cmSel = makeCmSelection(cm, { anchor: curStart, head: curEnd }, mode); if (linewise) { var ranges = cmSel.ranges; if (mode == 'block') { for (var i = 0; i < ranges.length; i++) { ranges[i].head.ch = lineLength(cm, ranges[i].head.line); } } else if (mode == 'line') { ranges[0].head = Pos(ranges[0].head.line + 1, 0); } } } else { curStart = copyCursor(newAnchor || oldAnchor); curEnd = copyCursor(newHead || oldHead); if (cursorIsBefore(curEnd, curStart)) { var tmp = curStart; curStart = curEnd; curEnd = tmp; } linewise = motionArgs.linewise || operatorArgs.linewise; if (linewise) { expandSelectionToLine(cm, curStart, curEnd); } else if (motionArgs.forward) { clipToLine(cm, curStart, curEnd); } mode = 'char'; var exclusive = !motionArgs.inclusive || linewise; cmSel = makeCmSelection(cm, { anchor: curStart, head: curEnd }, mode, exclusive); } cm.setSelections(cmSel.ranges, cmSel.primary); vim.lastMotion = null; operatorArgs.repeat = repeat; // For indent in visual mode. operatorArgs.registerName = registerName; operatorArgs.linewise = linewise; var operatorMoveTo = operators[operator]( cm, operatorArgs, cmSel.ranges, oldAnchor, newHead); if (vim.visualMode) { exitVisualMode(cm); } if (operatorMoveTo) { cm.setCursor(operatorMoveTo); } } }, recordLastEdit: function(vim, inputState, actionCommand) { var macroModeState = vimGlobalState.macroModeState; if (macroModeState.isPlaying) { return; } vim.lastEditInputState = inputState; vim.lastEditActionCommand = actionCommand; macroModeState.lastInsertModeChanges.changes = []; macroModeState.lastInsertModeChanges.expectCursorActivityForChange = false; } }; var motions = { moveToTopLine: function(cm, _head, motionArgs) { var line = getUserVisibleLines(cm).top + motionArgs.repeat -1; return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line))); }, moveToMiddleLine: function(cm) { var range = getUserVisibleLines(cm); var line = Math.floor((range.top + range.bottom) * 0.5); return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line))); }, moveToBottomLine: function(cm, _head, motionArgs) { var line = getUserVisibleLines(cm).bottom - motionArgs.repeat +1; return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line))); }, expandToLine: function(_cm, head, motionArgs) { var cur = head; return Pos(cur.line + motionArgs.repeat - 1, Infinity); }, findNext: function(cm, _head, motionArgs) { var state = getSearchState(cm); var query = state.getQuery(); if (!query) { return; } var prev = !motionArgs.forward; prev = (state.isReversed()) ? !prev : prev; highlightSearchMatches(cm, query); return findNext(cm, prev/** prev */, query, motionArgs.repeat); }, goToMark: function(cm, _head, motionArgs, vim) { var mark = vim.marks[motionArgs.selectedCharacter]; if (mark) { var pos = mark.find(); return motionArgs.linewise ? { line: pos.line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(pos.line)) } : pos; } return null; }, moveToOtherHighlightedEnd: function(cm, _head, motionArgs, vim) { if (vim.visualBlock && motionArgs.sameLine) { var sel = vim.sel; return [ clipCursorToContent(cm, Pos(sel.anchor.line, sel.head.ch)), clipCursorToContent(cm, Pos(sel.head.line, sel.anchor.ch)) ]; } else { return ([vim.sel.head, vim.sel.anchor]); } }, jumpToMark: function(cm, head, motionArgs, vim) { var best = head; for (var i = 0; i < motionArgs.repeat; i++) { var cursor = best; for (var key in vim.marks) { if (!isLowerCase(key)) { continue; } var mark = vim.marks[key].find(); var isWrongDirection = (motionArgs.forward) ? cursorIsBefore(mark, cursor) : cursorIsBefore(cursor, mark); if (isWrongDirection) { continue; } if (motionArgs.linewise && (mark.line == cursor.line)) { continue; } var equal = cursorEqual(cursor, best); var between = (motionArgs.forward) ? cursorIsBetween(cursor, mark, best) : cursorIsBetween(best, mark, cursor); if (equal || between) { best = mark; } } } if (motionArgs.linewise) { best = Pos(best.line, findFirstNonWhiteSpaceCharacter(cm.getLine(best.line))); } return best; }, moveByCharacters: function(_cm, head, motionArgs) { var cur = head; var repeat = motionArgs.repeat; var ch = motionArgs.forward ? cur.ch + repeat : cur.ch - repeat; return Pos(cur.line, ch); }, moveByLines: function(cm, head, motionArgs, vim) { var cur = head; var endCh = cur.ch; switch (vim.lastMotion) { case this.moveByLines: case this.moveByDisplayLines: case this.moveByScroll: case this.moveToColumn: case this.moveToEol: endCh = vim.lastHPos; break; default: vim.lastHPos = endCh; } var repeat = motionArgs.repeat+(motionArgs.repeatOffset||0); var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat; var first = cm.firstLine(); var last = cm.lastLine(); if ((line < first && cur.line == first) || (line > last && cur.line == last)) { return; } if (motionArgs.toFirstChar){ endCh=findFirstNonWhiteSpaceCharacter(cm.getLine(line)); vim.lastHPos = endCh; } vim.lastHSPos = cm.charCoords(Pos(line, endCh),'div').left; return Pos(line, endCh); }, moveByDisplayLines: function(cm, head, motionArgs, vim) { var cur = head; switch (vim.lastMotion) { case this.moveByDisplayLines: case this.moveByScroll: case this.moveByLines: case this.moveToColumn: case this.moveToEol: break; default: vim.lastHSPos = cm.charCoords(cur,'div').left; } var repeat = motionArgs.repeat; var res=cm.findPosV(cur,(motionArgs.forward ? repeat : -repeat),'line',vim.lastHSPos); if (res.hitSide) { if (motionArgs.forward) { var lastCharCoords = cm.charCoords(res, 'div'); var goalCoords = { top: lastCharCoords.top + 8, left: vim.lastHSPos }; var res = cm.coordsChar(goalCoords, 'div'); } else { var resCoords = cm.charCoords(Pos(cm.firstLine(), 0), 'div'); resCoords.left = vim.lastHSPos; res = cm.coordsChar(resCoords, 'div'); } } vim.lastHPos = res.ch; return res; }, moveByPage: function(cm, head, motionArgs) { var curStart = head; var repeat = motionArgs.repeat; return cm.findPosV(curStart, (motionArgs.forward ? repeat : -repeat), 'page'); }, moveByParagraph: function(cm, head, motionArgs) { var line = head.line; var repeat = motionArgs.repeat; var inc = motionArgs.forward ? 1 : -1; for (var i = 0; i < repeat; i++) { if ((!motionArgs.forward && line === cm.firstLine() ) || (motionArgs.forward && line == cm.lastLine())) { break; } line += inc; while (line !== cm.firstLine() && line != cm.lastLine() && cm.getLine(line)) { line += inc; } } return Pos(line, 0); }, moveByScroll: function(cm, head, motionArgs, vim) { var scrollbox = cm.getScrollInfo(); var curEnd = null; var repeat = motionArgs.repeat; if (!repeat) { repeat = scrollbox.clientHeight / (2 * cm.defaultTextHeight()); } var orig = cm.charCoords(head, 'local'); motionArgs.repeat = repeat; var curEnd = motions.moveByDisplayLines(cm, head, motionArgs, vim); if (!curEnd) { return null; } var dest = cm.charCoords(curEnd, 'local'); cm.scrollTo(null, scrollbox.top + dest.top - orig.top); return curEnd; }, moveByWords: function(cm, head, motionArgs) { return moveToWord(cm, head, motionArgs.repeat, !!motionArgs.forward, !!motionArgs.wordEnd, !!motionArgs.bigWord); }, moveTillCharacter: function(cm, _head, motionArgs) { var repeat = motionArgs.repeat; var curEnd = moveToCharacter(cm, repeat, motionArgs.forward, motionArgs.selectedCharacter); var increment = motionArgs.forward ? -1 : 1; recordLastCharacterSearch(increment, motionArgs); if (!curEnd) return null; curEnd.ch += increment; return curEnd; }, moveToCharacter: function(cm, head, motionArgs) { var repeat = motionArgs.repeat; recordLastCharacterSearch(0, motionArgs); return moveToCharacter(cm, repeat, motionArgs.forward, motionArgs.selectedCharacter) || head; }, moveToSymbol: function(cm, head, motionArgs) { var repeat = motionArgs.repeat; return findSymbol(cm, repeat, motionArgs.forward, motionArgs.selectedCharacter) || head; }, moveToColumn: function(cm, head, motionArgs, vim) { var repeat = motionArgs.repeat; vim.lastHPos = repeat - 1; vim.lastHSPos = cm.charCoords(head,'div').left; return moveToColumn(cm, repeat); }, moveToEol: function(cm, head, motionArgs, vim) { var cur = head; vim.lastHPos = Infinity; var retval= Pos(cur.line + motionArgs.repeat - 1, Infinity); var end=cm.clipPos(retval); end.ch--; vim.lastHSPos = cm.charCoords(end,'div').left; return retval; }, moveToFirstNonWhiteSpaceCharacter: function(cm, head) { var cursor = head; return Pos(cursor.line, findFirstNonWhiteSpaceCharacter(cm.getLine(cursor.line))); }, moveToMatchedSymbol: function(cm, head) { var cursor = head; var line = cursor.line; var ch = cursor.ch; var lineText = cm.getLine(line); var symbol; do { symbol = lineText.charAt(ch++); if (symbol && isMatchableSymbol(symbol)) { var style = cm.getTokenTypeAt(Pos(line, ch)); if (style !== "string" && style !== "comment") { break; } } } while (symbol); if (symbol) { var matched = cm.findMatchingBracket(Pos(line, ch)); return matched.to; } else { return cursor; } }, moveToStartOfLine: function(_cm, head) { return Pos(head.line, 0); }, moveToLineOrEdgeOfDocument: function(cm, _head, motionArgs) { var lineNum = motionArgs.forward ? cm.lastLine() : cm.firstLine(); if (motionArgs.repeatIsExplicit) { lineNum = motionArgs.repeat - cm.getOption('firstLineNumber'); } return Pos(lineNum, findFirstNonWhiteSpaceCharacter(cm.getLine(lineNum))); }, textObjectManipulation: function(cm, head, motionArgs) { var mirroredPairs = {'(': ')', ')': '(', '{': '}', '}': '{', '[': ']', ']': '['}; var selfPaired = {'\'': true, '"': true}; var character = motionArgs.selectedCharacter; if (character == 'b') { character = '('; } else if (character == 'B') { character = '{'; } var inclusive = !motionArgs.textObjectInner; var tmp; if (mirroredPairs[character]) { tmp = selectCompanionObject(cm, head, character, inclusive); } else if (selfPaired[character]) { tmp = findBeginningAndEnd(cm, head, character, inclusive); } else if (character === 'W') { tmp = expandWordUnderCursor(cm, inclusive, true /** forward */, true /** bigWord */); } else if (character === 'w') { tmp = expandWordUnderCursor(cm, inclusive, true /** forward */, false /** bigWord */); } else if (character === 'p') { tmp = expandParagraphUnderCursor(cm, inclusive, true /** forward */, false /** bigWord */); } else { return null; } if (!cm.state.vim.visualMode) { return [tmp.start, tmp.end]; } else { return expandSelection(cm, tmp.start, tmp.end); } }, repeatLastCharacterSearch: function(cm, head, motionArgs) { var lastSearch = vimGlobalState.lastChararacterSearch; var repeat = motionArgs.repeat; var forward = motionArgs.forward === lastSearch.forward; var increment = (lastSearch.increment ? 1 : 0) * (forward ? -1 : 1); cm.moveH(-increment, 'char'); motionArgs.inclusive = forward ? true : false; var curEnd = moveToCharacter(cm, repeat, forward, lastSearch.selectedCharacter); if (!curEnd) { cm.moveH(increment, 'char'); return head; } curEnd.ch += increment; return curEnd; } }; function fillArray(val, times) { var arr = []; for (var i = 0; i < times; i++) { arr.push(val); } return arr; } var operators = { change: function(cm, args, ranges) { var finalHead, text; var vim = cm.state.vim; vimGlobalState.macroModeState.lastInsertModeChanges.inVisualBlock = vim.visualBlock; if (!vim.visualMode) { var anchor = ranges[0].anchor, head = ranges[0].head; text = cm.getRange(anchor, head); if (!isWhiteSpaceString(text)) { var match = (/\s+$/).exec(text); if (match) { head = offsetCursor(head, 0, - match[0].length); text = text.slice(0, - match[0].length); } } var wasLastLine = head.line - 1 == cm.lastLine(); cm.replaceRange('', anchor, head); if (args.linewise && !wasLastLine) { CodeMirror.commands.newlineAndIndent(cm); anchor.ch = null; } finalHead = anchor; } else { text = cm.getSelection(); var replacement = fillArray('', ranges.length); cm.replaceSelections(replacement); finalHead = cursorMin(ranges[0].head, ranges[0].anchor); } vimGlobalState.registerController.pushText( args.registerName, 'change', text, args.linewise, ranges.length > 1); actions.enterInsertMode(cm, {head: finalHead}, cm.state.vim); }, 'delete': function(cm, args, ranges) { var finalHead, text; var vim = cm.state.vim; if (!vim.visualBlock) { var anchor = ranges[0].anchor, head = ranges[0].head; if (args.linewise && head.line != cm.firstLine() && anchor.line == cm.lastLine() && anchor.line == head.line - 1) { if (anchor.line == cm.firstLine()) { anchor.ch = 0; } else { anchor = Pos(anchor.line - 1, lineLength(cm, anchor.line - 1)); } } text = cm.getRange(anchor, head); cm.replaceRange('', anchor, head); finalHead = anchor; if (args.linewise) { finalHead = motions.moveToFirstNonWhiteSpaceCharacter(cm, anchor); } } else { text = cm.getSelection(); var replacement = fillArray('', ranges.length); cm.replaceSelections(replacement); finalHead = ranges[0].anchor; } vimGlobalState.registerController.pushText( args.registerName, 'delete', text, args.linewise, vim.visualBlock); return finalHead; }, indent: function(cm, args, ranges) { var vim = cm.state.vim; var startLine = ranges[0].anchor.line; var endLine = vim.visualBlock ? ranges[ranges.length - 1].anchor.line : ranges[0].head.line; var repeat = (vim.visualMode) ? args.repeat : 1; if (args.linewise) { endLine--; } for (var i = startLine; i <= endLine; i++) { for (var j = 0; j < repeat; j++) { cm.indentLine(i, args.indentRight); } } return motions.moveToFirstNonWhiteSpaceCharacter(cm, ranges[0].anchor); }, changeCase: function(cm, args, ranges, oldAnchor, newHead) { var selections = cm.getSelections(); var swapped = []; var toLower = args.toLower; for (var j = 0; j < selections.length; j++) { var toSwap = selections[j]; var text = ''; if (toLower === true) { text = toSwap.toLowerCase(); } else if (toLower === false) { text = toSwap.toUpperCase(); } else { for (var i = 0; i < toSwap.length; i++) { var character = toSwap.charAt(i); text += isUpperCase(character) ? character.toLowerCase() : character.toUpperCase(); } } swapped.push(text); } cm.replaceSelections(swapped); if (args.shouldMoveCursor){ return newHead; } else if (!cm.state.vim.visualMode && args.linewise && ranges[0].anchor.line + 1 == ranges[0].head.line) { return motions.moveToFirstNonWhiteSpaceCharacter(cm, oldAnchor); } else if (args.linewise){ return oldAnchor; } else { return cursorMin(ranges[0].anchor, ranges[0].head); } }, yank: function(cm, args, ranges, oldAnchor) { var vim = cm.state.vim; var text = cm.getSelection(); var endPos = vim.visualMode ? cursorMin(vim.sel.anchor, vim.sel.head, ranges[0].head, ranges[0].anchor) : oldAnchor; vimGlobalState.registerController.pushText( args.registerName, 'yank', text, args.linewise, vim.visualBlock); return endPos; } }; var actions = { jumpListWalk: function(cm, actionArgs, vim) { if (vim.visualMode) { return; } var repeat = actionArgs.repeat; var forward = actionArgs.forward; var jumpList = vimGlobalState.jumpList; var mark = jumpList.move(cm, forward ? repeat : -repeat); var markPos = mark ? mark.find() : undefined; markPos = markPos ? markPos : cm.getCursor(); cm.setCursor(markPos); }, scroll: function(cm, actionArgs, vim) { if (vim.visualMode) { return; } var repeat = actionArgs.repeat || 1; var lineHeight = cm.defaultTextHeight(); var top = cm.getScrollInfo().top; var delta = lineHeight * repeat; var newPos = actionArgs.forward ? top + delta : top - delta; var cursor = copyCursor(cm.getCursor()); var cursorCoords = cm.charCoords(cursor, 'local'); if (actionArgs.forward) { if (newPos > cursorCoords.top) { cursor.line += (newPos - cursorCoords.top) / lineHeight; cursor.line = Math.ceil(cursor.line); cm.setCursor(cursor); cursorCoords = cm.charCoords(cursor, 'local'); cm.scrollTo(null, cursorCoords.top); } else { cm.scrollTo(null, newPos); } } else { var newBottom = newPos + cm.getScrollInfo().clientHeight; if (newBottom < cursorCoords.bottom) { cursor.line -= (cursorCoords.bottom - newBottom) / lineHeight; cursor.line = Math.floor(cursor.line); cm.setCursor(cursor); cursorCoords = cm.charCoords(cursor, 'local'); cm.scrollTo( null, cursorCoords.bottom - cm.getScrollInfo().clientHeight); } else { cm.scrollTo(null, newPos); } } }, scrollToCursor: function(cm, actionArgs) { var lineNum = cm.getCursor().line; var charCoords = cm.charCoords(Pos(lineNum, 0), 'local'); var height = cm.getScrollInfo().clientHeight; var y = charCoords.top; var lineHeight = charCoords.bottom - y; switch (actionArgs.position) { case 'center': y = y - (height / 2) + lineHeight; break; case 'bottom': y = y - height + lineHeight*1.4; break; case 'top': y = y + lineHeight*0.4; break; } cm.scrollTo(null, y); }, replayMacro: function(cm, actionArgs, vim) { var registerName = actionArgs.selectedCharacter; var repeat = actionArgs.repeat; var macroModeState = vimGlobalState.macroModeState; if (registerName == '@') { registerName = macroModeState.latestRegister; } while(repeat--){ executeMacroRegister(cm, vim, macroModeState, registerName); } }, enterMacroRecordMode: function(cm, actionArgs) { var macroModeState = vimGlobalState.macroModeState; var registerName = actionArgs.selectedCharacter; macroModeState.enterMacroRecordMode(cm, registerName); }, enterInsertMode: function(cm, actionArgs, vim) { if (cm.getOption('readOnly')) { return; } vim.insertMode = true; vim.insertModeRepeat = actionArgs && actionArgs.repeat || 1; var insertAt = (actionArgs) ? actionArgs.insertAt : null; var sel = vim.sel; var head = actionArgs.head || cm.getCursor('head'); var height = cm.listSelections().length; if (insertAt == 'eol') { head = Pos(head.line, lineLength(cm, head.line)); } else if (insertAt == 'charAfter') { head = offsetCursor(head, 0, 1); } else if (insertAt == 'firstNonBlank') { head = motions.moveToFirstNonWhiteSpaceCharacter(cm, head); } else if (insertAt == 'startOfSelectedArea') { if (!vim.visualBlock) { if (sel.head.line < sel.anchor.line) { head = sel.head; } else { head = Pos(sel.anchor.line, 0); } } else { head = Pos( Math.min(sel.head.line, sel.anchor.line), Math.min(sel.head.ch, sel.anchor.ch)); height = Math.abs(sel.head.line - sel.anchor.line) + 1; } } else if (insertAt == 'endOfSelectedArea') { if (!vim.visualBlock) { if (sel.head.line >= sel.anchor.line) { head = offsetCursor(sel.head, 0, 1); } else { head = Pos(sel.anchor.line, 0); } } else { head = Pos( Math.min(sel.head.line, sel.anchor.line), Math.max(sel.head.ch + 1, sel.anchor.ch)); height = Math.abs(sel.head.line - sel.anchor.line) + 1; } } else if (insertAt == 'inplace') { if (vim.visualMode){ return; } } cm.setOption('keyMap', 'vim-insert'); cm.setOption('disableInput', false); if (actionArgs && actionArgs.replace) { cm.toggleOverwrite(true); cm.setOption('keyMap', 'vim-replace'); CodeMirror.signal(cm, "vim-mode-change", {mode: "replace"}); } else { cm.setOption('keyMap', 'vim-insert'); CodeMirror.signal(cm, "vim-mode-change", {mode: "insert"}); } if (!vimGlobalState.macroModeState.isPlaying) { cm.on('change', onChange); CodeMirror.on(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown); } if (vim.visualMode) { exitVisualMode(cm); } selectForInsert(cm, head, height); }, toggleVisualMode: function(cm, actionArgs, vim) { var repeat = actionArgs.repeat; var anchor = cm.getCursor(); var head; if (!vim.visualMode) { vim.visualMode = true; vim.visualLine = !!actionArgs.linewise; vim.visualBlock = !!actionArgs.blockwise; head = clipCursorToContent( cm, Pos(anchor.line, anchor.ch + repeat - 1), true /** includeLineBreak */); vim.sel = { anchor: anchor, head: head }; CodeMirror.signal(cm, "vim-mode-change", {mode: "visual", subMode: vim.visualLine ? "linewise" : vim.visualBlock ? "blockwise" : ""}); updateCmSelection(cm); updateMark(cm, vim, '<', cursorMin(anchor, head)); updateMark(cm, vim, '>', cursorMax(anchor, head)); } else if (vim.visualLine ^ actionArgs.linewise || vim.visualBlock ^ actionArgs.blockwise) { vim.visualLine = !!actionArgs.linewise; vim.visualBlock = !!actionArgs.blockwise; CodeMirror.signal(cm, "vim-mode-change", {mode: "visual", subMode: vim.visualLine ? "linewise" : vim.visualBlock ? "blockwise" : ""}); updateCmSelection(cm); } else { exitVisualMode(cm); } }, reselectLastSelection: function(cm, _actionArgs, vim) { var lastSelection = vim.lastSelection; if (vim.visualMode) { updateLastSelection(cm, vim); } if (lastSelection) { var anchor = lastSelection.anchorMark.find(); var head = lastSelection.headMark.find(); if (!anchor || !head) { return; } vim.sel = { anchor: anchor, head: head }; vim.visualMode = true; vim.visualLine = lastSelection.visualLine; vim.visualBlock = lastSelection.visualBlock; updateCmSelection(cm); updateMark(cm, vim, '<', cursorMin(anchor, head)); updateMark(cm, vim, '>', cursorMax(anchor, head)); CodeMirror.signal(cm, 'vim-mode-change', { mode: 'visual', subMode: vim.visualLine ? 'linewise' : vim.visualBlock ? 'blockwise' : ''}); } }, joinLines: function(cm, actionArgs, vim) { var curStart, curEnd; if (vim.visualMode) { curStart = cm.getCursor('anchor'); curEnd = cm.getCursor('head'); curEnd.ch = lineLength(cm, curEnd.line) - 1; } else { var repeat = Math.max(actionArgs.repeat, 2); curStart = cm.getCursor(); curEnd = clipCursorToContent(cm, Pos(curStart.line + repeat - 1, Infinity)); } var finalCh = 0; for (var i = curStart.line; i < curEnd.line; i++) { finalCh = lineLength(cm, curStart.line); var tmp = Pos(curStart.line + 1, lineLength(cm, curStart.line + 1)); var text = cm.getRange(curStart, tmp); text = text.replace(/\n\s*/g, ' '); cm.replaceRange(text, curStart, tmp); } var curFinalPos = Pos(curStart.line, finalCh); cm.setCursor(curFinalPos); if (vim.visualMode) { exitVisualMode(cm); } }, newLineAndEnterInsertMode: function(cm, actionArgs, vim) { vim.insertMode = true; var insertAt = copyCursor(cm.getCursor()); if (insertAt.line === cm.firstLine() && !actionArgs.after) { cm.replaceRange('\n', Pos(cm.firstLine(), 0)); cm.setCursor(cm.firstLine(), 0); } else { insertAt.line = (actionArgs.after) ? insertAt.line : insertAt.line - 1; insertAt.ch = lineLength(cm, insertAt.line); cm.setCursor(insertAt); var newlineFn = CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent; newlineFn(cm); } this.enterInsertMode(cm, { repeat: actionArgs.repeat }, vim); }, paste: function(cm, actionArgs, vim) { var cur = copyCursor(cm.getCursor()); var register = vimGlobalState.registerController.getRegister( actionArgs.registerName); var text = register.toString(); if (!text) { return; } if (actionArgs.matchIndent) { var tabSize = cm.getOption("tabSize"); var whitespaceLength = function(str) { var tabs = (str.split("\t").length - 1); var spaces = (str.split(" ").length - 1); return tabs * tabSize + spaces * 1; }; var currentLine = cm.getLine(cm.getCursor().line); var indent = whitespaceLength(currentLine.match(/^\s*/)[0]); var chompedText = text.replace(/\n$/, ''); var wasChomped = text !== chompedText; var firstIndent = whitespaceLength(text.match(/^\s*/)[0]); var text = chompedText.replace(/^\s*/gm, function(wspace) { var newIndent = indent + (whitespaceLength(wspace) - firstIndent); if (newIndent < 0) { return ""; } else if (cm.getOption("indentWithTabs")) { var quotient = Math.floor(newIndent / tabSize); return Array(quotient + 1).join('\t'); } else { return Array(newIndent + 1).join(' '); } }); text += wasChomped ? "\n" : ""; } if (actionArgs.repeat > 1) { var text = Array(actionArgs.repeat + 1).join(text); } var linewise = register.linewise; var blockwise = register.blockwise; if (linewise) { if(vim.visualMode) { text = vim.visualLine ? text.slice(0, -1) : '\n' + text.slice(0, text.length - 1) + '\n'; } else if (actionArgs.after) { text = '\n' + text.slice(0, text.length - 1); cur.ch = lineLength(cm, cur.line); } else { cur.ch = 0; } } else { if (blockwise) { text = text.split('\n'); for (var i = 0; i < text.length; i++) { text[i] = (text[i] == '') ? ' ' : text[i]; } } cur.ch += actionArgs.after ? 1 : 0; } var curPosFinal; var idx; if (vim.visualMode) { vim.lastPastedText = text; var lastSelectionCurEnd; var selectedArea = getSelectedAreaRange(cm, vim); var selectionStart = selectedArea[0]; var selectionEnd = selectedArea[1]; var selectedText = cm.getSelection(); var selections = cm.listSelections(); var emptyStrings = new Array(selections.length).join('1').split('1'); if (vim.lastSelection) { lastSelectionCurEnd = vim.lastSelection.headMark.find(); } vimGlobalState.registerController.unnamedRegister.setText(selectedText); if (blockwise) { cm.replaceSelections(emptyStrings); selectionEnd = Pos(selectionStart.line + text.length-1, selectionStart.ch); cm.setCursor(selectionStart); selectBlock(cm, selectionEnd); cm.replaceSelections(text); curPosFinal = selectionStart; } else if (vim.visualBlock) { cm.replaceSelections(emptyStrings); cm.setCursor(selectionStart); cm.replaceRange(text, selectionStart, selectionStart); curPosFinal = selectionStart; } else { cm.replaceRange(text, selectionStart, selectionEnd); curPosFinal = cm.posFromIndex(cm.indexFromPos(selectionStart) + text.length - 1); } if(lastSelectionCurEnd) { vim.lastSelection.headMark = cm.setBookmark(lastSelectionCurEnd); } if (linewise) { curPosFinal.ch=0; } } else { if (blockwise) { cm.setCursor(cur); for (var i = 0; i < text.length; i++) { var line = cur.line+i; if (line > cm.lastLine()) { cm.replaceRange('\n', Pos(line, 0)); } var lastCh = lineLength(cm, line); if (lastCh < cur.ch) { extendLineToColumn(cm, line, cur.ch); } } cm.setCursor(cur); selectBlock(cm, Pos(cur.line + text.length-1, cur.ch)); cm.replaceSelections(text); curPosFinal = cur; } else { cm.replaceRange(text, cur); if (linewise && actionArgs.after) { curPosFinal = Pos( cur.line + 1, findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line + 1))); } else if (linewise && !actionArgs.after) { curPosFinal = Pos( cur.line, findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line))); } else if (!linewise && actionArgs.after) { idx = cm.indexFromPos(cur); curPosFinal = cm.posFromIndex(idx + text.length - 1); } else { idx = cm.indexFromPos(cur); curPosFinal = cm.posFromIndex(idx + text.length); } } } if (vim.visualMode) { exitVisualMode(cm); } cm.setCursor(curPosFinal); }, undo: function(cm, actionArgs) { cm.operation(function() { repeatFn(cm, CodeMirror.commands.undo, actionArgs.repeat)(); cm.setCursor(cm.getCursor('anchor')); }); }, redo: function(cm, actionArgs) { repeatFn(cm, CodeMirror.commands.redo, actionArgs.repeat)(); }, setRegister: function(_cm, actionArgs, vim) { vim.inputState.registerName = actionArgs.selectedCharacter; }, setMark: function(cm, actionArgs, vim) { var markName = actionArgs.selectedCharacter; updateMark(cm, vim, markName, cm.getCursor()); }, replace: function(cm, actionArgs, vim) { var replaceWith = actionArgs.selectedCharacter; var curStart = cm.getCursor(); var replaceTo; var curEnd; var selections = cm.listSelections(); if (vim.visualMode) { curStart = cm.getCursor('start'); curEnd = cm.getCursor('end'); } else { var line = cm.getLine(curStart.line); replaceTo = curStart.ch + actionArgs.repeat; if (replaceTo > line.length) { replaceTo=line.length; } curEnd = Pos(curStart.line, replaceTo); } if (replaceWith=='\n') { if (!vim.visualMode) cm.replaceRange('', curStart, curEnd); (CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent)(cm); } else { var replaceWithStr = cm.getRange(curStart, curEnd); replaceWithStr = replaceWithStr.replace(/[^\n]/g, replaceWith); if (vim.visualBlock) { var spaces = new Array(cm.getOption("tabSize")+1).join(' '); replaceWithStr = cm.getSelection(); replaceWithStr = replaceWithStr.replace(/\t/g, spaces).replace(/[^\n]/g, replaceWith).split('\n'); cm.replaceSelections(replaceWithStr); } else { cm.replaceRange(replaceWithStr, curStart, curEnd); } if (vim.visualMode) { curStart = cursorIsBefore(selections[0].anchor, selections[0].head) ? selections[0].anchor : selections[0].head; cm.setCursor(curStart); exitVisualMode(cm); } else { cm.setCursor(offsetCursor(curEnd, 0, -1)); } } }, incrementNumberToken: function(cm, actionArgs) { var cur = cm.getCursor(); var lineStr = cm.getLine(cur.line); var re = /-?\d+/g; var match; var start; var end; var numberStr; var token; while ((match = re.exec(lineStr)) !== null) { token = match[0]; start = match.index; end = start + token.length; if (cur.ch < end)break; } if (!actionArgs.backtrack && (end <= cur.ch))return; if (token) { var increment = actionArgs.increase ? 1 : -1; var number = parseInt(token) + (increment * actionArgs.repeat); var from = Pos(cur.line, start); var to = Pos(cur.line, end); numberStr = number.toString(); cm.replaceRange(numberStr, from, to); } else { return; } cm.setCursor(Pos(cur.line, start + numberStr.length - 1)); }, repeatLastEdit: function(cm, actionArgs, vim) { var lastEditInputState = vim.lastEditInputState; if (!lastEditInputState) { return; } var repeat = actionArgs.repeat; if (repeat && actionArgs.repeatIsExplicit) { vim.lastEditInputState.repeatOverride = repeat; } else { repeat = vim.lastEditInputState.repeatOverride || repeat; } repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */); }, exitInsertMode: exitInsertMode }; function clipCursorToContent(cm, cur, includeLineBreak) { var line = Math.min(Math.max(cm.firstLine(), cur.line), cm.lastLine() ); var maxCh = lineLength(cm, line) - 1; maxCh = (includeLineBreak) ? maxCh + 1 : maxCh; var ch = Math.min(Math.max(0, cur.ch), maxCh); return Pos(line, ch); } function copyArgs(args) { var ret = {}; for (var prop in args) { if (args.hasOwnProperty(prop)) { ret[prop] = args[prop]; } } return ret; } function offsetCursor(cur, offsetLine, offsetCh) { if (typeof offsetLine === 'object') { offsetCh = offsetLine.ch; offsetLine = offsetLine.line; } return Pos(cur.line + offsetLine, cur.ch + offsetCh); } function getOffset(anchor, head) { return { line: head.line - anchor.line, ch: head.line - anchor.line }; } function commandMatches(keys, keyMap, context, inputState) { var match, partial = [], full = []; for (var i = 0; i < keyMap.length; i++) { var command = keyMap[i]; if (context == 'insert' && command.context != 'insert' || command.context && command.context != context || inputState.operator && command.type == 'action' || !(match = commandMatch(keys, command.keys))) { continue; } if (match == 'partial') { partial.push(command); } if (match == 'full') { full.push(command); } } return { partial: partial.length && partial, full: full.length && full }; } function commandMatch(pressed, mapped) { if (mapped.slice(-11) == '') { var prefixLen = mapped.length - 11; var pressedPrefix = pressed.slice(0, prefixLen); var mappedPrefix = mapped.slice(0, prefixLen); return pressedPrefix == mappedPrefix && pressed.length > prefixLen ? 'full' : mappedPrefix.indexOf(pressedPrefix) == 0 ? 'partial' : false; } else { return pressed == mapped ? 'full' : mapped.indexOf(pressed) == 0 ? 'partial' : false; } } function lastChar(keys) { var match = /^.*(<[\w\-]+>)$/.exec(keys); var selectedCharacter = match ? match[1] : keys.slice(-1); if (selectedCharacter.length > 1){ switch(selectedCharacter){ case '': selectedCharacter='\n'; break; case '': selectedCharacter=' '; break; default: break; } } return selectedCharacter; } function repeatFn(cm, fn, repeat) { return function() { for (var i = 0; i < repeat; i++) { fn(cm); } }; } function copyCursor(cur) { return Pos(cur.line, cur.ch); } function cursorEqual(cur1, cur2) { return cur1.ch == cur2.ch && cur1.line == cur2.line; } function cursorIsBefore(cur1, cur2) { if (cur1.line < cur2.line) { return true; } if (cur1.line == cur2.line && cur1.ch < cur2.ch) { return true; } return false; } function cursorMin(cur1, cur2) { if (arguments.length > 2) { cur2 = cursorMin.apply(undefined, Array.prototype.slice.call(arguments, 1)); } return cursorIsBefore(cur1, cur2) ? cur1 : cur2; } function cursorMax(cur1, cur2) { if (arguments.length > 2) { cur2 = cursorMax.apply(undefined, Array.prototype.slice.call(arguments, 1)); } return cursorIsBefore(cur1, cur2) ? cur2 : cur1; } function cursorIsBetween(cur1, cur2, cur3) { var cur1before2 = cursorIsBefore(cur1, cur2); var cur2before3 = cursorIsBefore(cur2, cur3); return cur1before2 && cur2before3; } function lineLength(cm, lineNum) { return cm.getLine(lineNum).length; } function reverse(s){ return s.split('').reverse().join(''); } function trim(s) { if (s.trim) { return s.trim(); } return s.replace(/^\s+|\s+$/g, ''); } function escapeRegex(s) { return s.replace(/([.?*+$\[\]\/\\(){}|\-])/g, '\\$1'); } function extendLineToColumn(cm, lineNum, column) { var endCh = lineLength(cm, lineNum); var spaces = new Array(column-endCh+1).join(' '); cm.setCursor(Pos(lineNum, endCh)); cm.replaceRange(spaces, cm.getCursor()); } function selectBlock(cm, selectionEnd) { var selections = [], ranges = cm.listSelections(); var head = copyCursor(cm.clipPos(selectionEnd)); var isClipped = !cursorEqual(selectionEnd, head); var curHead = cm.getCursor('head'); var primIndex = getIndex(ranges, curHead); var wasClipped = cursorEqual(ranges[primIndex].head, ranges[primIndex].anchor); var max = ranges.length - 1; var index = max - primIndex > primIndex ? max : 0; var base = ranges[index].anchor; var firstLine = Math.min(base.line, head.line); var lastLine = Math.max(base.line, head.line); var baseCh = base.ch, headCh = head.ch; var dir = ranges[index].head.ch - baseCh; var newDir = headCh - baseCh; if (dir > 0 && newDir <= 0) { baseCh++; if (!isClipped) { headCh--; } } else if (dir < 0 && newDir >= 0) { baseCh--; if (!wasClipped) { headCh++; } } else if (dir < 0 && newDir == -1) { baseCh--; headCh++; } for (var line = firstLine; line <= lastLine; line++) { var range = {anchor: new Pos(line, baseCh), head: new Pos(line, headCh)}; selections.push(range); } primIndex = head.line == lastLine ? selections.length - 1 : 0; cm.setSelections(selections); selectionEnd.ch = headCh; base.ch = baseCh; return base; } function selectForInsert(cm, head, height) { var sel = []; for (var i = 0; i < height; i++) { var lineHead = offsetCursor(head, i, 0); sel.push({anchor: lineHead, head: lineHead}); } cm.setSelections(sel, 0); } function getIndex(ranges, cursor, end) { for (var i = 0; i < ranges.length; i++) { var atAnchor = end != 'head' && cursorEqual(ranges[i].anchor, cursor); var atHead = end != 'anchor' && cursorEqual(ranges[i].head, cursor); if (atAnchor || atHead) { return i; } } return -1; } function getSelectedAreaRange(cm, vim) { var lastSelection = vim.lastSelection; var getCurrentSelectedAreaRange = function() { var selections = cm.listSelections(); var start = selections[0]; var end = selections[selections.length-1]; var selectionStart = cursorIsBefore(start.anchor, start.head) ? start.anchor : start.head; var selectionEnd = cursorIsBefore(end.anchor, end.head) ? end.head : end.anchor; return [selectionStart, selectionEnd]; }; var getLastSelectedAreaRange = function() { var selectionStart = cm.getCursor(); var selectionEnd = cm.getCursor(); var block = lastSelection.visualBlock; if (block) { var width = block.width; var height = block.height; selectionEnd = Pos(selectionStart.line + height, selectionStart.ch + width); var selections = []; for (var i = selectionStart.line; i < selectionEnd.line; i++) { var anchor = Pos(i, selectionStart.ch); var head = Pos(i, selectionEnd.ch); var range = {anchor: anchor, head: head}; selections.push(range); } cm.setSelections(selections); } else { var start = lastSelection.anchorMark.find(); var end = lastSelection.headMark.find(); var line = end.line - start.line; var ch = end.ch - start.ch; selectionEnd = {line: selectionEnd.line + line, ch: line ? selectionEnd.ch : ch + selectionEnd.ch}; if (lastSelection.visualLine) { selectionStart = Pos(selectionStart.line, 0); selectionEnd = Pos(selectionEnd.line, lineLength(cm, selectionEnd.line)); } cm.setSelection(selectionStart, selectionEnd); } return [selectionStart, selectionEnd]; }; if (!vim.visualMode) { return getLastSelectedAreaRange(); } else { return getCurrentSelectedAreaRange(); } } function updateLastSelection(cm, vim) { var anchor = vim.sel.anchor; var head = vim.sel.head; if (vim.lastPastedText) { head = cm.posFromIndex(cm.indexFromPos(anchor) + vim.lastPastedText.length); vim.lastPastedText = null; } vim.lastSelection = {'anchorMark': cm.setBookmark(anchor), 'headMark': cm.setBookmark(head), 'anchor': copyCursor(anchor), 'head': copyCursor(head), 'visualMode': vim.visualMode, 'visualLine': vim.visualLine, 'visualBlock': vim.visualBlock}; } function expandSelection(cm, start, end) { var sel = cm.state.vim.sel; var head = sel.head; var anchor = sel.anchor; var tmp; if (cursorIsBefore(end, start)) { tmp = end; end = start; start = tmp; } if (cursorIsBefore(head, anchor)) { head = cursorMin(start, head); anchor = cursorMax(anchor, end); } else { anchor = cursorMin(start, anchor); head = cursorMax(head, end); head = offsetCursor(head, 0, -1); if (head.ch == -1 && head.line != cm.firstLine()) { head = Pos(head.line - 1, lineLength(cm, head.line - 1)); } } return [anchor, head]; } function updateCmSelection(cm, sel, mode) { var vim = cm.state.vim; sel = sel || vim.sel; var mode = mode || vim.visualLine ? 'line' : vim.visualBlock ? 'block' : 'char'; var cmSel = makeCmSelection(cm, sel, mode); cm.setSelections(cmSel.ranges, cmSel.primary); updateFakeCursor(cm); } function makeCmSelection(cm, sel, mode, exclusive) { var head = copyCursor(sel.head); var anchor = copyCursor(sel.anchor); if (mode == 'char') { var headOffset = !exclusive && !cursorIsBefore(sel.head, sel.anchor) ? 1 : 0; var anchorOffset = cursorIsBefore(sel.head, sel.anchor) ? 1 : 0; head = offsetCursor(sel.head, 0, headOffset); anchor = offsetCursor(sel.anchor, 0, anchorOffset); return { ranges: [{anchor: anchor, head: head}], primary: 0 }; } else if (mode == 'line') { if (!cursorIsBefore(sel.head, sel.anchor)) { anchor.ch = 0; var lastLine = cm.lastLine(); if (head.line > lastLine) { head.line = lastLine; } head.ch = lineLength(cm, head.line); } else { head.ch = 0; anchor.ch = lineLength(cm, anchor.line); } return { ranges: [{anchor: anchor, head: head}], primary: 0 }; } else if (mode == 'block') { var top = Math.min(anchor.line, head.line), left = Math.min(anchor.ch, head.ch), bottom = Math.max(anchor.line, head.line), right = Math.max(anchor.ch, head.ch) + 1; var height = bottom - top + 1; var primary = head.line == top ? 0 : height - 1; var ranges = []; for (var i = 0; i < height; i++) { ranges.push({ anchor: Pos(top + i, left), head: Pos(top + i, right) }); } return { ranges: ranges, primary: primary }; } } function getHead(cm) { var cur = cm.getCursor('head'); if (cm.getSelection().length == 1) { cur = cursorMin(cur, cm.getCursor('anchor')); } return cur; } function exitVisualMode(cm, moveHead) { var vim = cm.state.vim; if (moveHead !== false) { cm.setCursor(clipCursorToContent(cm, vim.sel.head)); } updateLastSelection(cm, vim); vim.visualMode = false; vim.visualLine = false; vim.visualBlock = false; CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"}); if (vim.fakeCursor) { vim.fakeCursor.clear(); } } function clipToLine(cm, curStart, curEnd) { var selection = cm.getRange(curStart, curEnd); if (/\n\s*$/.test(selection)) { var lines = selection.split('\n'); lines.pop(); var line; for (var line = lines.pop(); lines.length > 0 && line && isWhiteSpaceString(line); line = lines.pop()) { curEnd.line--; curEnd.ch = 0; } if (line) { curEnd.line--; curEnd.ch = lineLength(cm, curEnd.line); } else { curEnd.ch = 0; } } } function expandSelectionToLine(_cm, curStart, curEnd) { curStart.ch = 0; curEnd.ch = 0; curEnd.line++; } function findFirstNonWhiteSpaceCharacter(text) { if (!text) { return 0; } var firstNonWS = text.search(/\S/); return firstNonWS == -1 ? text.length : firstNonWS; } function expandWordUnderCursor(cm, inclusive, _forward, bigWord, noSymbol) { var cur = getHead(cm); var line = cm.getLine(cur.line); var idx = cur.ch; var textAfterIdx = line.substring(idx); var firstMatchedChar; if (noSymbol) { firstMatchedChar = textAfterIdx.search(/\w/); } else { firstMatchedChar = textAfterIdx.search(/\S/); } if (firstMatchedChar == -1) { return null; } idx += firstMatchedChar; textAfterIdx = line.substring(idx); var textBeforeIdx = line.substring(0, idx); var matchRegex; if (bigWord) { matchRegex = /^\S+/; } else { if ((/\w/).test(line.charAt(idx))) { matchRegex = /^\w+/; } else { matchRegex = /^[^\w\s]+/; } } var wordAfterRegex = matchRegex.exec(textAfterIdx); var wordStart = idx; var wordEnd = idx + wordAfterRegex[0].length; var revTextBeforeIdx = reverse(textBeforeIdx); var wordBeforeRegex = matchRegex.exec(revTextBeforeIdx); if (wordBeforeRegex) { wordStart -= wordBeforeRegex[0].length; } if (inclusive) { var textAfterWordEnd = line.substring(wordEnd); var whitespacesAfterWord = textAfterWordEnd.match(/^\s*/)[0].length; if (whitespacesAfterWord > 0) { wordEnd += whitespacesAfterWord; } else { var revTrim = revTextBeforeIdx.length - wordStart; var textBeforeWordStart = revTextBeforeIdx.substring(revTrim); var whitespacesBeforeWord = textBeforeWordStart.match(/^\s*/)[0].length; wordStart -= whitespacesBeforeWord; } } return { start: Pos(cur.line, wordStart), end: Pos(cur.line, wordEnd) }; } function recordJumpPosition(cm, oldCur, newCur) { if (!cursorEqual(oldCur, newCur)) { vimGlobalState.jumpList.add(cm, oldCur, newCur); } } function recordLastCharacterSearch(increment, args) { vimGlobalState.lastChararacterSearch.increment = increment; vimGlobalState.lastChararacterSearch.forward = args.forward; vimGlobalState.lastChararacterSearch.selectedCharacter = args.selectedCharacter; } var symbolToMode = { '(': 'bracket', ')': 'bracket', '{': 'bracket', '}': 'bracket', '[': 'section', ']': 'section', '*': 'comment', '/': 'comment', 'm': 'method', 'M': 'method', '#': 'preprocess' }; var findSymbolModes = { bracket: { isComplete: function(state) { if (state.nextCh === state.symb) { state.depth++; if (state.depth >= 1)return true; } else if (state.nextCh === state.reverseSymb) { state.depth--; } return false; } }, section: { init: function(state) { state.curMoveThrough = true; state.symb = (state.forward ? ']' : '[') === state.symb ? '{' : '}'; }, isComplete: function(state) { return state.index === 0 && state.nextCh === state.symb; } }, comment: { isComplete: function(state) { var found = state.lastCh === '*' && state.nextCh === '/'; state.lastCh = state.nextCh; return found; } }, method: { init: function(state) { state.symb = (state.symb === 'm' ? '{' : '}'); state.reverseSymb = state.symb === '{' ? '}' : '{'; }, isComplete: function(state) { if (state.nextCh === state.symb)return true; return false; } }, preprocess: { init: function(state) { state.index = 0; }, isComplete: function(state) { if (state.nextCh === '#') { var token = state.lineText.match(/#(\w+)/)[1]; if (token === 'endif') { if (state.forward && state.depth === 0) { return true; } state.depth++; } else if (token === 'if') { if (!state.forward && state.depth === 0) { return true; } state.depth--; } if (token === 'else' && state.depth === 0)return true; } return false; } } }; function findSymbol(cm, repeat, forward, symb) { var cur = copyCursor(cm.getCursor()); var increment = forward ? 1 : -1; var endLine = forward ? cm.lineCount() : -1; var curCh = cur.ch; var line = cur.line; var lineText = cm.getLine(line); var state = { lineText: lineText, nextCh: lineText.charAt(curCh), lastCh: null, index: curCh, symb: symb, reverseSymb: (forward ? { ')': '(', '}': '{' } : { '(': ')', '{': '}' })[symb], forward: forward, depth: 0, curMoveThrough: false }; var mode = symbolToMode[symb]; if (!mode)return cur; var init = findSymbolModes[mode].init; var isComplete = findSymbolModes[mode].isComplete; if (init) { init(state); } while (line !== endLine && repeat) { state.index += increment; state.nextCh = state.lineText.charAt(state.index); if (!state.nextCh) { line += increment; state.lineText = cm.getLine(line) || ''; if (increment > 0) { state.index = 0; } else { var lineLen = state.lineText.length; state.index = (lineLen > 0) ? (lineLen-1) : 0; } state.nextCh = state.lineText.charAt(state.index); } if (isComplete(state)) { cur.line = line; cur.ch = state.index; repeat--; } } if (state.nextCh || state.curMoveThrough) { return Pos(line, state.index); } return cur; } function findWord(cm, cur, forward, bigWord, emptyLineIsWord) { var lineNum = cur.line; var pos = cur.ch; var line = cm.getLine(lineNum); var dir = forward ? 1 : -1; var regexps = bigWord ? bigWordRegexp : wordRegexp; if (emptyLineIsWord && line == '') { lineNum += dir; line = cm.getLine(lineNum); if (!isLine(cm, lineNum)) { return null; } pos = (forward) ? 0 : line.length; } while (true) { if (emptyLineIsWord && line == '') { return { from: 0, to: 0, line: lineNum }; } var stop = (dir > 0) ? line.length : -1; var wordStart = stop, wordEnd = stop; while (pos != stop) { var foundWord = false; for (var i = 0; i < regexps.length && !foundWord; ++i) { if (regexps[i].test(line.charAt(pos))) { wordStart = pos; while (pos != stop && regexps[i].test(line.charAt(pos))) { pos += dir; } wordEnd = pos; foundWord = wordStart != wordEnd; if (wordStart == cur.ch && lineNum == cur.line && wordEnd == wordStart + dir) { continue; } else { return { from: Math.min(wordStart, wordEnd + 1), to: Math.max(wordStart, wordEnd), line: lineNum }; } } } if (!foundWord) { pos += dir; } } lineNum += dir; if (!isLine(cm, lineNum)) { return null; } line = cm.getLine(lineNum); pos = (dir > 0) ? 0 : line.length; } throw new Error('The impossible happened.'); } function moveToWord(cm, cur, repeat, forward, wordEnd, bigWord) { var curStart = copyCursor(cur); var words = []; if (forward && !wordEnd || !forward && wordEnd) { repeat++; } var emptyLineIsWord = !(forward && wordEnd); for (var i = 0; i < repeat; i++) { var word = findWord(cm, cur, forward, bigWord, emptyLineIsWord); if (!word) { var eodCh = lineLength(cm, cm.lastLine()); words.push(forward ? {line: cm.lastLine(), from: eodCh, to: eodCh} : {line: 0, from: 0, to: 0}); break; } words.push(word); cur = Pos(word.line, forward ? (word.to - 1) : word.from); } var shortCircuit = words.length != repeat; var firstWord = words[0]; var lastWord = words.pop(); if (forward && !wordEnd) { if (!shortCircuit && (firstWord.from != curStart.ch || firstWord.line != curStart.line)) { lastWord = words.pop(); } return Pos(lastWord.line, lastWord.from); } else if (forward && wordEnd) { return Pos(lastWord.line, lastWord.to - 1); } else if (!forward && wordEnd) { if (!shortCircuit && (firstWord.to != curStart.ch || firstWord.line != curStart.line)) { lastWord = words.pop(); } return Pos(lastWord.line, lastWord.to); } else { return Pos(lastWord.line, lastWord.from); } } function moveToCharacter(cm, repeat, forward, character) { var cur = cm.getCursor(); var start = cur.ch; var idx; for (var i = 0; i < repeat; i ++) { var line = cm.getLine(cur.line); idx = charIdxInLine(start, line, character, forward, true); if (idx == -1) { return null; } start = idx; } return Pos(cm.getCursor().line, idx); } function moveToColumn(cm, repeat) { var line = cm.getCursor().line; return clipCursorToContent(cm, Pos(line, repeat - 1)); } function updateMark(cm, vim, markName, pos) { if (!inArray(markName, validMarks)) { return; } if (vim.marks[markName]) { vim.marks[markName].clear(); } vim.marks[markName] = cm.setBookmark(pos); } function charIdxInLine(start, line, character, forward, includeChar) { var idx; if (forward) { idx = line.indexOf(character, start + 1); if (idx != -1 && !includeChar) { idx -= 1; } } else { idx = line.lastIndexOf(character, start - 1); if (idx != -1 && !includeChar) { idx += 1; } } return idx; } function selectCompanionObject(cm, head, symb, inclusive) { var cur = head, start, end; var bracketRegexp = ({ '(': /[()]/, ')': /[()]/, '[': /[[\]]/, ']': /[[\]]/, '{': /[{}]/, '}': /[{}]/})[symb]; var openSym = ({ '(': '(', ')': '(', '[': '[', ']': '[', '{': '{', '}': '{'})[symb]; var curChar = cm.getLine(cur.line).charAt(cur.ch); var offset = curChar === openSym ? 1 : 0; start = cm.scanForBracket(Pos(cur.line, cur.ch + offset), -1, null, {'bracketRegex': bracketRegexp}); end = cm.scanForBracket(Pos(cur.line, cur.ch + offset), 1, null, {'bracketRegex': bracketRegexp}); if (!start || !end) { return { start: cur, end: cur }; } start = start.pos; end = end.pos; if ((start.line == end.line && start.ch > end.ch) || (start.line > end.line)) { var tmp = start; start = end; end = tmp; } if (inclusive) { end.ch += 1; } else { start.ch += 1; } return { start: start, end: end }; } function findBeginningAndEnd(cm, head, symb, inclusive) { var cur = copyCursor(head); var line = cm.getLine(cur.line); var chars = line.split(''); var start, end, i, len; var firstIndex = chars.indexOf(symb); if (cur.ch < firstIndex) { cur.ch = firstIndex; } else if (firstIndex < cur.ch && chars[cur.ch] == symb) { end = cur.ch; // assign end to the current cursor --cur.ch; // make sure to look backwards } if (chars[cur.ch] == symb && !end) { start = cur.ch + 1; // assign start to ahead of the cursor } else { for (i = cur.ch; i > -1 && !start; i--) { if (chars[i] == symb) { start = i + 1; } } } if (start && !end) { for (i = start, len = chars.length; i < len && !end; i++) { if (chars[i] == symb) { end = i; } } } if (!start || !end) { return { start: cur, end: cur }; } if (inclusive) { --start; ++end; } return { start: Pos(cur.line, start), end: Pos(cur.line, end) }; } defineOption('pcre', true, 'boolean'); function SearchState() {} SearchState.prototype = { getQuery: function() { return vimGlobalState.query; }, setQuery: function(query) { vimGlobalState.query = query; }, getOverlay: function() { return this.searchOverlay; }, setOverlay: function(overlay) { this.searchOverlay = overlay; }, isReversed: function() { return vimGlobalState.isReversed; }, setReversed: function(reversed) { vimGlobalState.isReversed = reversed; } }; function getSearchState(cm) { var vim = cm.state.vim; return vim.searchState_ || (vim.searchState_ = new SearchState()); } function dialog(cm, template, shortText, onClose, options) { if (cm.openDialog) { cm.openDialog(template, onClose, { bottom: true, value: options.value, onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp }); } else { onClose(prompt(shortText, '')); } } function splitBySlash(argString) { var slashes = findUnescapedSlashes(argString) || []; if (!slashes.length) return []; var tokens = []; if (slashes[0] !== 0) return; for (var i = 0; i < slashes.length; i++) { if (typeof slashes[i] == 'number') tokens.push(argString.substring(slashes[i] + 1, slashes[i+1])); } return tokens; } function findUnescapedSlashes(str) { var escapeNextChar = false; var slashes = []; for (var i = 0; i < str.length; i++) { var c = str.charAt(i); if (!escapeNextChar && c == '/') { slashes.push(i); } escapeNextChar = !escapeNextChar && (c == '\\'); } return slashes; } function translateRegex(str) { var specials = '|(){'; var unescape = '}'; var escapeNextChar = false; var out = []; for (var i = -1; i < str.length; i++) { var c = str.charAt(i) || ''; var n = str.charAt(i+1) || ''; var specialComesNext = (n && specials.indexOf(n) != -1); if (escapeNextChar) { if (c !== '\\' || !specialComesNext) { out.push(c); } escapeNextChar = false; } else { if (c === '\\') { escapeNextChar = true; if (n && unescape.indexOf(n) != -1) { specialComesNext = true; } if (!specialComesNext || n === '\\') { out.push(c); } } else { out.push(c); if (specialComesNext && n !== '\\') { out.push('\\'); } } } } return out.join(''); } function translateRegexReplace(str) { var escapeNextChar = false; var out = []; for (var i = -1; i < str.length; i++) { var c = str.charAt(i) || ''; var n = str.charAt(i+1) || ''; if (escapeNextChar) { out.push(c); escapeNextChar = false; } else { if (c === '\\') { escapeNextChar = true; if ((isNumber(n) || n === '$')) { out.push('$'); } else if (n !== '/' && n !== '\\') { out.push('\\'); } } else { if (c === '$') { out.push('$'); } out.push(c); if (n === '/') { out.push('\\'); } } } } return out.join(''); } function unescapeRegexReplace(str) { var stream = new CodeMirror.StringStream(str); var output = []; while (!stream.eol()) { while (stream.peek() && stream.peek() != '\\') { output.push(stream.next()); } if (stream.match('\\/', true)) { output.push('/'); } else if (stream.match('\\\\', true)) { output.push('\\'); } else { output.push(stream.next()); } } return output.join(''); } function parseQuery(query, ignoreCase, smartCase) { var lastSearchRegister = vimGlobalState.registerController.getRegister('/'); lastSearchRegister.setText(query); if (query instanceof RegExp) { return query; } var slashes = findUnescapedSlashes(query); var regexPart; var forceIgnoreCase; if (!slashes.length) { regexPart = query; } else { regexPart = query.substring(0, slashes[0]); var flagsPart = query.substring(slashes[0]); forceIgnoreCase = (flagsPart.indexOf('i') != -1); } if (!regexPart) { return null; } if (!getOption('pcre')) { regexPart = translateRegex(regexPart); } if (smartCase) { ignoreCase = (/^[^A-Z]*$/).test(regexPart); } var regexp = new RegExp(regexPart, (ignoreCase || forceIgnoreCase) ? 'i' : undefined); return regexp; } function showConfirm(cm, text) { if (cm.openNotification) { cm.openNotification('' + text + '', {bottom: true, duration: 5000}); } else { alert(text); } } function makePrompt(prefix, desc) { var raw = ''; if (prefix) { raw += '' + prefix + ''; } raw += ' ' + ''; if (desc) { raw += ''; raw += desc; raw += ''; } return raw; } var searchPromptDesc = '(Javascript regexp)'; function showPrompt(cm, options) { var shortText = (options.prefix || '') + ' ' + (options.desc || ''); var prompt = makePrompt(options.prefix, options.desc); dialog(cm, prompt, shortText, options.onClose, options); } function regexEqual(r1, r2) { if (r1 instanceof RegExp && r2 instanceof RegExp) { var props = ['global', 'multiline', 'ignoreCase', 'source']; for (var i = 0; i < props.length; i++) { var prop = props[i]; if (r1[prop] !== r2[prop]) { return false; } } return true; } return false; } function updateSearchQuery(cm, rawQuery, ignoreCase, smartCase) { if (!rawQuery) { return; } var state = getSearchState(cm); var query = parseQuery(rawQuery, !!ignoreCase, !!smartCase); if (!query) { return; } highlightSearchMatches(cm, query); if (regexEqual(query, state.getQuery())) { return query; } state.setQuery(query); return query; } function searchOverlay(query) { if (query.source.charAt(0) == '^') { var matchSol = true; } return { token: function(stream) { if (matchSol && !stream.sol()) { stream.skipToEnd(); return; } var match = stream.match(query, false); if (match) { if (match[0].length == 0) { stream.next(); return 'searching'; } if (!stream.sol()) { stream.backUp(1); if (!query.exec(stream.next() + match[0])) { stream.next(); return null; } } stream.match(query); return 'searching'; } while (!stream.eol()) { stream.next(); if (stream.match(query, false)) break; } }, query: query }; } function highlightSearchMatches(cm, query) { var overlay = getSearchState(cm).getOverlay(); if (!overlay || query != overlay.query) { if (overlay) { cm.removeOverlay(overlay); } overlay = searchOverlay(query); cm.addOverlay(overlay); getSearchState(cm).setOverlay(overlay); } } function findNext(cm, prev, query, repeat) { if (repeat === undefined) { repeat = 1; } return cm.operation(function() { var pos = cm.getCursor(); var cursor = cm.getSearchCursor(query, pos); for (var i = 0; i < repeat; i++) { var found = cursor.find(prev); if (i == 0 && found && cursorEqual(cursor.from(), pos)) { found = cursor.find(prev); } if (!found) { cursor = cm.getSearchCursor(query, (prev) ? Pos(cm.lastLine()) : Pos(cm.firstLine(), 0) ); if (!cursor.find(prev)) { return; } } } return cursor.from(); }); } function clearSearchHighlight(cm) { cm.removeOverlay(getSearchState(cm).getOverlay()); getSearchState(cm).setOverlay(null); } function isInRange(pos, start, end) { if (typeof pos != 'number') { pos = pos.line; } if (start instanceof Array) { return inArray(pos, start); } else { if (end) { return (pos >= start && pos <= end); } else { return pos == start; } } } function getUserVisibleLines(cm) { var renderer = cm.ace.renderer; return { top: renderer.getFirstFullyVisibleRow(), bottom: renderer.getLastFullyVisibleRow() } } var defaultExCommandMap = [ { name: 'map' }, { name: 'imap', shortName: 'im' }, { name: 'nmap', shortName: 'nm' }, { name: 'vmap', shortName: 'vm' }, { name: 'unmap' }, { name: 'write', shortName: 'w' }, { name: 'undo', shortName: 'u' }, { name: 'redo', shortName: 'red' }, { name: 'set', shortName: 'set' }, { name: 'sort', shortName: 'sor' }, { name: 'substitute', shortName: 's', possiblyAsync: true }, { name: 'nohlsearch', shortName: 'noh' }, { name: 'delmarks', shortName: 'delm' }, { name: 'registers', shortName: 'reg', excludeFromCommandHistory: true }, { name: 'global', shortName: 'g' } ]; var ExCommandDispatcher = function() { this.buildCommandMap_(); }; ExCommandDispatcher.prototype = { processCommand: function(cm, input, opt_params) { var vim = cm.state.vim; var commandHistoryRegister = vimGlobalState.registerController.getRegister(':'); var previousCommand = commandHistoryRegister.toString(); if (vim.visualMode) { exitVisualMode(cm); } var inputStream = new CodeMirror.StringStream(input); commandHistoryRegister.setText(input); var params = opt_params || {}; params.input = input; try { this.parseInput_(cm, inputStream, params); } catch(e) { showConfirm(cm, e); throw e; } var command; var commandName; if (!params.commandName) { if (params.line !== undefined) { commandName = 'move'; } } else { command = this.matchCommand_(params.commandName); if (command) { commandName = command.name; if (command.excludeFromCommandHistory) { commandHistoryRegister.setText(previousCommand); } this.parseCommandArgs_(inputStream, params, command); if (command.type == 'exToKey') { for (var i = 0; i < command.toKeys.length; i++) { CodeMirror.Vim.handleKey(cm, command.toKeys[i], 'mapping'); } return; } else if (command.type == 'exToEx') { this.processCommand(cm, command.toInput); return; } } } if (!commandName) { showConfirm(cm, 'Not an editor command ":' + input + '"'); return; } try { exCommands[commandName](cm, params); if ((!command || !command.possiblyAsync) && params.callback) { params.callback(); } } catch(e) { showConfirm(cm, e); throw e; } }, parseInput_: function(cm, inputStream, result) { inputStream.eatWhile(':'); if (inputStream.eat('%')) { result.line = cm.firstLine(); result.lineEnd = cm.lastLine(); } else { result.line = this.parseLineSpec_(cm, inputStream); if (result.line !== undefined && inputStream.eat(',')) { result.lineEnd = this.parseLineSpec_(cm, inputStream); } } var commandMatch = inputStream.match(/^(\w+)/); if (commandMatch) { result.commandName = commandMatch[1]; } else { result.commandName = inputStream.match(/.*/)[0]; } return result; }, parseLineSpec_: function(cm, inputStream) { var numberMatch = inputStream.match(/^(\d+)/); if (numberMatch) { return parseInt(numberMatch[1], 10) - 1; } switch (inputStream.next()) { case '.': return cm.getCursor().line; case '$': return cm.lastLine(); case '\'': var mark = cm.state.vim.marks[inputStream.next()]; if (mark && mark.find()) { return mark.find().line; } throw new Error('Mark not set'); default: inputStream.backUp(1); return undefined; } }, parseCommandArgs_: function(inputStream, params, command) { if (inputStream.eol()) { return; } params.argString = inputStream.match(/.*/)[0]; var delim = command.argDelimiter || /\s+/; var args = trim(params.argString).split(delim); if (args.length && args[0]) { params.args = args; } }, matchCommand_: function(commandName) { for (var i = commandName.length; i > 0; i--) { var prefix = commandName.substring(0, i); if (this.commandMap_[prefix]) { var command = this.commandMap_[prefix]; if (command.name.indexOf(commandName) === 0) { return command; } } } return null; }, buildCommandMap_: function() { this.commandMap_ = {}; for (var i = 0; i < defaultExCommandMap.length; i++) { var command = defaultExCommandMap[i]; var key = command.shortName || command.name; this.commandMap_[key] = command; } }, map: function(lhs, rhs, ctx) { if (lhs != ':' && lhs.charAt(0) == ':') { if (ctx) { throw Error('Mode not supported for ex mappings'); } var commandName = lhs.substring(1); if (rhs != ':' && rhs.charAt(0) == ':') { this.commandMap_[commandName] = { name: commandName, type: 'exToEx', toInput: rhs.substring(1), user: true }; } else { this.commandMap_[commandName] = { name: commandName, type: 'exToKey', toKeys: rhs, user: true }; } } else { if (rhs != ':' && rhs.charAt(0) == ':') { var mapping = { keys: lhs, type: 'keyToEx', exArgs: { input: rhs.substring(1) }, user: true}; if (ctx) { mapping.context = ctx; } defaultKeymap.unshift(mapping); } else { var mapping = { keys: lhs, type: 'keyToKey', toKeys: rhs, user: true }; if (ctx) { mapping.context = ctx; } defaultKeymap.unshift(mapping); } } }, unmap: function(lhs, ctx) { if (lhs != ':' && lhs.charAt(0) == ':') { if (ctx) { throw Error('Mode not supported for ex mappings'); } var commandName = lhs.substring(1); if (this.commandMap_[commandName] && this.commandMap_[commandName].user) { delete this.commandMap_[commandName]; return; } } else { var keys = lhs; for (var i = 0; i < defaultKeymap.length; i++) { if (keys == defaultKeymap[i].keys && defaultKeymap[i].context === ctx && defaultKeymap[i].user) { defaultKeymap.splice(i, 1); return; } } } throw Error('No such mapping.'); } }; var exCommands = { map: function(cm, params, ctx) { var mapArgs = params.args; if (!mapArgs || mapArgs.length < 2) { if (cm) { showConfirm(cm, 'Invalid mapping: ' + params.input); } return; } exCommandDispatcher.map(mapArgs[0], mapArgs[1], ctx); }, imap: function(cm, params) { this.map(cm, params, 'insert'); }, nmap: function(cm, params) { this.map(cm, params, 'normal'); }, vmap: function(cm, params) { this.map(cm, params, 'visual'); }, unmap: function(cm, params, ctx) { var mapArgs = params.args; if (!mapArgs || mapArgs.length < 1) { if (cm) { showConfirm(cm, 'No such mapping: ' + params.input); } return; } exCommandDispatcher.unmap(mapArgs[0], ctx); }, move: function(cm, params) { commandDispatcher.processCommand(cm, cm.state.vim, { type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: false, explicitRepeat: true, linewise: true }, repeatOverride: params.line+1}); }, set: function(cm, params) { var setArgs = params.args; if (!setArgs || setArgs.length < 1) { if (cm) { showConfirm(cm, 'Invalid mapping: ' + params.input); } return; } var expr = setArgs[0].split('='); var optionName = expr[0]; var value = expr[1]; var forceGet = false; if (optionName.charAt(optionName.length - 1) == '?') { if (value) { throw Error('Trailing characters: ' + params.argString); } optionName = optionName.substring(0, optionName.length - 1); forceGet = true; } if (value === undefined && optionName.substring(0, 2) == 'no') { optionName = optionName.substring(2); value = false; } var optionIsBoolean = options[optionName] && options[optionName].type == 'boolean'; if (optionIsBoolean && value == undefined) { value = true; } if (!optionIsBoolean && !value || forceGet) { var oldValue = getOption(optionName); if (oldValue === true || oldValue === false) { showConfirm(cm, ' ' + (oldValue ? '' : 'no') + optionName); } else { showConfirm(cm, ' ' + optionName + '=' + oldValue); } } else { setOption(optionName, value, cm); } }, registers: function(cm,params) { var regArgs = params.args; var registers = vimGlobalState.registerController.registers; var regInfo = '----------Registers----------

'; if (!regArgs) { for (var registerName in registers) { var text = registers[registerName].toString(); if (text.length) { regInfo += '"' + registerName + ' ' + text + '
'; } } } else { var registerName; regArgs = regArgs.join(''); for (var i = 0; i < regArgs.length; i++) { registerName = regArgs.charAt(i); if (!vimGlobalState.registerController.isValidRegister(registerName)) { continue; } var register = registers[registerName] || new Register(); regInfo += '"' + registerName + ' ' + register.toString() + '
'; } } showConfirm(cm, regInfo); }, sort: function(cm, params) { var reverse, ignoreCase, unique, number; function parseArgs() { if (params.argString) { var args = new CodeMirror.StringStream(params.argString); if (args.eat('!')) { reverse = true; } if (args.eol()) { return; } if (!args.eatSpace()) { return 'Invalid arguments'; } var opts = args.match(/[a-z]+/); if (opts) { opts = opts[0]; ignoreCase = opts.indexOf('i') != -1; unique = opts.indexOf('u') != -1; var decimal = opts.indexOf('d') != -1 && 1; var hex = opts.indexOf('x') != -1 && 1; var octal = opts.indexOf('o') != -1 && 1; if (decimal + hex + octal > 1) { return 'Invalid arguments'; } number = decimal && 'decimal' || hex && 'hex' || octal && 'octal'; } if (args.eatSpace() && args.match(/\/.*\//)) { 'patterns not supported'; } } } var err = parseArgs(); if (err) { showConfirm(cm, err + ': ' + params.argString); return; } var lineStart = params.line || cm.firstLine(); var lineEnd = params.lineEnd || params.line || cm.lastLine(); if (lineStart == lineEnd) { return; } var curStart = Pos(lineStart, 0); var curEnd = Pos(lineEnd, lineLength(cm, lineEnd)); var text = cm.getRange(curStart, curEnd).split('\n'); var numberRegex = (number == 'decimal') ? /(-?)([\d]+)/ : (number == 'hex') ? /(-?)(?:0x)?([0-9a-f]+)/i : (number == 'octal') ? /([0-7]+)/ : null; var radix = (number == 'decimal') ? 10 : (number == 'hex') ? 16 : (number == 'octal') ? 8 : null; var numPart = [], textPart = []; if (number) { for (var i = 0; i < text.length; i++) { if (numberRegex.exec(text[i])) { numPart.push(text[i]); } else { textPart.push(text[i]); } } } else { textPart = text; } function compareFn(a, b) { if (reverse) { var tmp; tmp = a; a = b; b = tmp; } if (ignoreCase) { a = a.toLowerCase(); b = b.toLowerCase(); } var anum = number && numberRegex.exec(a); var bnum = number && numberRegex.exec(b); if (!anum) { return a < b ? -1 : 1; } anum = parseInt((anum[1] + anum[2]).toLowerCase(), radix); bnum = parseInt((bnum[1] + bnum[2]).toLowerCase(), radix); return anum - bnum; } numPart.sort(compareFn); textPart.sort(compareFn); text = (!reverse) ? textPart.concat(numPart) : numPart.concat(textPart); if (unique) { // Remove duplicate lines var textOld = text; var lastLine; text = []; for (var i = 0; i < textOld.length; i++) { if (textOld[i] != lastLine) { text.push(textOld[i]); } lastLine = textOld[i]; } } cm.replaceRange(text.join('\n'), curStart, curEnd); }, global: function(cm, params) { var argString = params.argString; if (!argString) { showConfirm(cm, 'Regular Expression missing from global'); return; } var lineStart = (params.line !== undefined) ? params.line : cm.firstLine(); var lineEnd = params.lineEnd || params.line || cm.lastLine(); var tokens = splitBySlash(argString); var regexPart = argString, cmd; if (tokens.length) { regexPart = tokens[0]; cmd = tokens.slice(1, tokens.length).join('/'); } if (regexPart) { try { updateSearchQuery(cm, regexPart, true /** ignoreCase */, true /** smartCase */); } catch (e) { showConfirm(cm, 'Invalid regex: ' + regexPart); return; } } var query = getSearchState(cm).getQuery(); var matchedLines = [], content = ''; for (var i = lineStart; i <= lineEnd; i++) { var matched = query.test(cm.getLine(i)); if (matched) { matchedLines.push(i+1); content+= cm.getLine(i) + '
'; } } if (!cmd) { showConfirm(cm, content); return; } var index = 0; var nextCommand = function() { if (index < matchedLines.length) { var command = matchedLines[index] + cmd; exCommandDispatcher.processCommand(cm, command, { callback: nextCommand }); } index++; }; nextCommand(); }, substitute: function(cm, params) { if (!cm.getSearchCursor) { throw new Error('Search feature not available. Requires searchcursor.js or ' + 'any other getSearchCursor implementation.'); } var argString = params.argString; var tokens = argString ? splitBySlash(argString) : []; var regexPart, replacePart = '', trailing, flagsPart, count; var confirm = false; // Whether to confirm each replace. var global = false; // True to replace all instances on a line, false to replace only 1. if (tokens.length) { regexPart = tokens[0]; replacePart = tokens[1]; if (replacePart !== undefined) { if (getOption('pcre')) { replacePart = unescapeRegexReplace(replacePart); } else { replacePart = translateRegexReplace(replacePart); } vimGlobalState.lastSubstituteReplacePart = replacePart; } trailing = tokens[2] ? tokens[2].split(' ') : []; } else { if (argString && argString.length) { showConfirm(cm, 'Substitutions should be of the form ' + ':s/pattern/replace/'); return; } } if (trailing) { flagsPart = trailing[0]; count = parseInt(trailing[1]); if (flagsPart) { if (flagsPart.indexOf('c') != -1) { confirm = true; flagsPart.replace('c', ''); } if (flagsPart.indexOf('g') != -1) { global = true; flagsPart.replace('g', ''); } regexPart = regexPart + '/' + flagsPart; } } if (regexPart) { try { updateSearchQuery(cm, regexPart, true /** ignoreCase */, true /** smartCase */); } catch (e) { showConfirm(cm, 'Invalid regex: ' + regexPart); return; } } replacePart = replacePart || vimGlobalState.lastSubstituteReplacePart; if (replacePart === undefined) { showConfirm(cm, 'No previous substitute regular expression'); return; } var state = getSearchState(cm); var query = state.getQuery(); var lineStart = (params.line !== undefined) ? params.line : cm.getCursor().line; var lineEnd = params.lineEnd || lineStart; if (count) { lineStart = lineEnd; lineEnd = lineStart + count - 1; } var startPos = clipCursorToContent(cm, Pos(lineStart, 0)); var cursor = cm.getSearchCursor(query, startPos); doReplace(cm, confirm, global, lineStart, lineEnd, cursor, query, replacePart, params.callback); }, redo: CodeMirror.commands.redo, undo: CodeMirror.commands.undo, write: function(cm) { if (CodeMirror.commands.save) { CodeMirror.commands.save(cm); } else { cm.save(); } }, nohlsearch: function(cm) { clearSearchHighlight(cm); }, delmarks: function(cm, params) { if (!params.argString || !trim(params.argString)) { showConfirm(cm, 'Argument required'); return; } var state = cm.state.vim; var stream = new CodeMirror.StringStream(trim(params.argString)); while (!stream.eol()) { stream.eatSpace(); var count = stream.pos; if (!stream.match(/[a-zA-Z]/, false)) { showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count)); return; } var sym = stream.next(); if (stream.match('-', true)) { if (!stream.match(/[a-zA-Z]/, false)) { showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count)); return; } var startMark = sym; var finishMark = stream.next(); if (isLowerCase(startMark) && isLowerCase(finishMark) || isUpperCase(startMark) && isUpperCase(finishMark)) { var start = startMark.charCodeAt(0); var finish = finishMark.charCodeAt(0); if (start >= finish) { showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count)); return; } for (var j = 0; j <= finish - start; j++) { var mark = String.fromCharCode(start + j); delete state.marks[mark]; } } else { showConfirm(cm, 'Invalid argument: ' + startMark + '-'); return; } } else { delete state.marks[sym]; } } } }; var exCommandDispatcher = new ExCommandDispatcher(); function doReplace(cm, confirm, global, lineStart, lineEnd, searchCursor, query, replaceWith, callback) { cm.state.vim.exMode = true; var done = false; var lastPos = searchCursor.from(); function replaceAll() { cm.operation(function() { while (!done) { replace(); next(); } stop(); }); } function replace() { var text = cm.getRange(searchCursor.from(), searchCursor.to()); var newText = text.replace(query, replaceWith); searchCursor.replace(newText); } function next() { var found; while(found = searchCursor.findNext() && isInRange(searchCursor.from(), lineStart, lineEnd)) { if (!global && lastPos && searchCursor.from().line == lastPos.line) { continue; } cm.scrollIntoView(searchCursor.from(), 30); cm.setSelection(searchCursor.from(), searchCursor.to()); lastPos = searchCursor.from(); done = false; return; } done = true; } function stop(close) { if (close) { close(); } cm.focus(); if (lastPos) { cm.setCursor(lastPos); var vim = cm.state.vim; vim.exMode = false; vim.lastHPos = vim.lastHSPos = lastPos.ch; } if (callback) { callback(); } } function onPromptKeyDown(e, _value, close) { CodeMirror.e_stop(e); var keyName = CodeMirror.keyName(e); switch (keyName) { case 'Y': replace(); next(); break; case 'N': next(); break; case 'A': var savedCallback = callback; callback = undefined; cm.operation(replaceAll); callback = savedCallback; break; case 'L': replace(); case 'Q': case 'Esc': case 'Ctrl-C': case 'Ctrl-[': stop(close); break; } if (done) { stop(close); } return true; } next(); if (done) { showConfirm(cm, 'No matches for ' + query.source); return; } if (!confirm) { replaceAll(); if (callback) { callback(); }; return; } showPrompt(cm, { prefix: 'replace with ' + replaceWith + ' (y/n/a/q/l)', onKeyDown: onPromptKeyDown }); } CodeMirror.keyMap.vim = { attach: attachVimMap, detach: detachVimMap }; function exitInsertMode(cm) { var vim = cm.state.vim; var macroModeState = vimGlobalState.macroModeState; var insertModeChangeRegister = vimGlobalState.registerController.getRegister('.'); var isPlaying = macroModeState.isPlaying; var lastChange = macroModeState.lastInsertModeChanges; var text = []; if (!isPlaying) { var selLength = lastChange.inVisualBlock ? vim.lastSelection.visualBlock.height : 1; var changes = lastChange.changes; var text = []; var i = 0; while (i < changes.length) { text.push(changes[i]); if (changes[i] instanceof InsertModeKey) { i++; } else { i+= selLength; } } lastChange.changes = text; cm.off('change', onChange); CodeMirror.off(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown); } if (!isPlaying && vim.insertModeRepeat > 1) { repeatLastEdit(cm, vim, vim.insertModeRepeat - 1, true /** repeatForInsert */); vim.lastEditInputState.repeatOverride = vim.insertModeRepeat; } delete vim.insertModeRepeat; vim.insertMode = false; cm.setCursor(cm.getCursor().line, cm.getCursor().ch-1); cm.setOption('keyMap', 'vim'); cm.setOption('disableInput', true); cm.toggleOverwrite(false); // exit replace mode if we were in it. insertModeChangeRegister.setText(lastChange.changes.join('')); CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"}); if (macroModeState.isRecording) { logInsertModeChange(macroModeState); } } defineOption('insertModeEscKeysTimeout', 200, 'number'); CodeMirror.keyMap['vim-insert'] = { 'Ctrl-N': 'autocomplete', 'Ctrl-P': 'autocomplete', 'Enter': function(cm) { var fn = CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent; fn(cm); }, fallthrough: ['default'], attach: attachVimMap, detach: detachVimMap }; CodeMirror.keyMap['await-second'] = { fallthrough: ['vim-insert'], attach: attachVimMap, detach: detachVimMap }; CodeMirror.keyMap['vim-replace'] = { 'Backspace': 'goCharLeft', fallthrough: ['vim-insert'], attach: attachVimMap, detach: detachVimMap }; function executeMacroRegister(cm, vim, macroModeState, registerName) { var register = vimGlobalState.registerController.getRegister(registerName); var keyBuffer = register.keyBuffer; var imc = 0; macroModeState.isPlaying = true; macroModeState.replaySearchQueries = register.searchQueries.slice(0); for (var i = 0; i < keyBuffer.length; i++) { var text = keyBuffer[i]; var match, key; while (text) { match = (/<\w+-.+?>|<\w+>|./).exec(text); key = match[0]; text = text.substring(match.index + key.length); CodeMirror.Vim.handleKey(cm, key, 'macro'); if (vim.insertMode) { var changes = register.insertModeChanges[imc++].changes; vimGlobalState.macroModeState.lastInsertModeChanges.changes = changes; repeatInsertModeChanges(cm, changes, 1); exitInsertMode(cm); } } }; macroModeState.isPlaying = false; } function logKey(macroModeState, key) { if (macroModeState.isPlaying) { return; } var registerName = macroModeState.latestRegister; var register = vimGlobalState.registerController.getRegister(registerName); if (register) { register.pushText(key); } } function logInsertModeChange(macroModeState) { if (macroModeState.isPlaying) { return; } var registerName = macroModeState.latestRegister; var register = vimGlobalState.registerController.getRegister(registerName); if (register) { register.pushInsertModeChanges(macroModeState.lastInsertModeChanges); } } function logSearchQuery(macroModeState, query) { if (macroModeState.isPlaying) { return; } var registerName = macroModeState.latestRegister; var register = vimGlobalState.registerController.getRegister(registerName); if (register) { register.pushSearchQuery(query); } } function onChange(_cm, changeObj) { var macroModeState = vimGlobalState.macroModeState; var lastChange = macroModeState.lastInsertModeChanges; if (!macroModeState.isPlaying) { while(changeObj) { lastChange.expectCursorActivityForChange = true; if (changeObj.origin == '+input' || changeObj.origin == 'paste' || changeObj.origin === undefined /* only in testing */) { var text = changeObj.text.join('\n'); lastChange.changes.push(text); } changeObj = changeObj.next; } } } function onCursorActivity(cm) { var vim = cm.state.vim; if (vim.insertMode) { var macroModeState = vimGlobalState.macroModeState; if (macroModeState.isPlaying) { return; } var lastChange = macroModeState.lastInsertModeChanges; if (lastChange.expectCursorActivityForChange) { lastChange.expectCursorActivityForChange = false; } else { lastChange.changes = []; } } else if (!cm.curOp.isVimOp) { handleExternalSelection(cm, vim); } if (vim.visualMode) { updateFakeCursor(cm); } } function updateFakeCursor(cm) { var vim = cm.state.vim; var from = copyCursor(vim.sel.head); var to = offsetCursor(from, 0, 1); if (vim.fakeCursor) { vim.fakeCursor.clear(); } vim.fakeCursor = cm.markText(from, to, {className: 'cm-animate-fat-cursor'}); } function handleExternalSelection(cm, vim) { var anchor = cm.getCursor('anchor'); var head = cm.getCursor('head'); if (vim.visualMode && cursorEqual(head, anchor) && lineLength(cm, head.line) > head.ch) { exitVisualMode(cm, false); } else if (!vim.visualMode && !vim.insertMode && cm.somethingSelected()) { vim.visualMode = true; vim.visualLine = false; CodeMirror.signal(cm, "vim-mode-change", {mode: "visual"}); } if (vim.visualMode) { var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0; var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0; head = offsetCursor(head, 0, headOffset); anchor = offsetCursor(anchor, 0, anchorOffset); vim.sel = { anchor: anchor, head: head }; updateMark(cm, vim, '<', cursorMin(head, anchor)); updateMark(cm, vim, '>', cursorMax(head, anchor)); } else if (!vim.insertMode) { vim.lastHPos = cm.getCursor().ch; } } function InsertModeKey(keyName) { this.keyName = keyName; } function onKeyEventTargetKeyDown(e) { var macroModeState = vimGlobalState.macroModeState; var lastChange = macroModeState.lastInsertModeChanges; var keyName = CodeMirror.keyName(e); function onKeyFound() { lastChange.changes.push(new InsertModeKey(keyName)); return true; } if (keyName.indexOf('Delete') != -1 || keyName.indexOf('Backspace') != -1) { CodeMirror.lookupKey(keyName, 'vim-insert', onKeyFound); } } function repeatLastEdit(cm, vim, repeat, repeatForInsert) { var macroModeState = vimGlobalState.macroModeState; macroModeState.isPlaying = true; var isAction = !!vim.lastEditActionCommand; var cachedInputState = vim.inputState; function repeatCommand() { if (isAction) { commandDispatcher.processAction(cm, vim, vim.lastEditActionCommand); } else { commandDispatcher.evalInput(cm, vim); } } function repeatInsert(repeat) { if (macroModeState.lastInsertModeChanges.changes.length > 0) { repeat = !vim.lastEditActionCommand ? 1 : repeat; var changeObject = macroModeState.lastInsertModeChanges; repeatInsertModeChanges(cm, changeObject.changes, repeat); } } vim.inputState = vim.lastEditInputState; if (isAction && vim.lastEditActionCommand.interlaceInsertRepeat) { for (var i = 0; i < repeat; i++) { repeatCommand(); repeatInsert(1); } } else { if (!repeatForInsert) { repeatCommand(); } repeatInsert(repeat); } vim.inputState = cachedInputState; if (vim.insertMode && !repeatForInsert) { exitInsertMode(cm); } macroModeState.isPlaying = false; }; function repeatInsertModeChanges(cm, changes, repeat) { function keyHandler(binding) { if (typeof binding == 'string') { CodeMirror.commands[binding](cm); } else { binding(cm); } return true; } var head = cm.getCursor('head'); var inVisualBlock = vimGlobalState.macroModeState.lastInsertModeChanges.inVisualBlock; if (inVisualBlock) { var vim = cm.state.vim; var lastSel = vim.lastSelection; var offset = getOffset(lastSel.anchor, lastSel.head); selectForInsert(cm, head, offset.line + 1); repeat = cm.listSelections().length; cm.setCursor(head); } for (var i = 0; i < repeat; i++) { if (inVisualBlock) { cm.setCursor(offsetCursor(head, i, 0)); } for (var j = 0; j < changes.length; j++) { var change = changes[j]; if (change instanceof InsertModeKey) { CodeMirror.lookupKey(change.keyName, 'vim-insert', keyHandler); } else { var cur = cm.getCursor(); cm.replaceRange(change, cur, cur); } } } if (inVisualBlock) { cm.setCursor(offsetCursor(head, 0, 1)); } } resetVimGlobalState(); CodeMirror.Vim = Vim(); Vim = CodeMirror.Vim; specialKey = {'return':'CR',backspace:'BS','delete':'Del',esc:'Esc', left:'Left',right:'Right',up:'Up',down:'Down',space: 'Space', home:'Home',end:'End',pageup:'PageUp',pagedown:'PageDown', enter: 'CR' }; function lookupKey(hashId, key, e) { if (key.length > 1 && key[0] == "n") { key = key.replace("numpad", ""); } key = specialKey[key] || key; var name = ''; if (e.ctrlKey) { name += 'C-'; } if (e.altKey) { name += 'A-'; } if (e.shiftKey) { name += 'S-'; } name += key; if (name.length > 1) { name = '<' + name + '>'; } return name; } var handleKey = Vim.handleKey Vim.handleKey = function(cm, key, origin) { return cm.operation(function() { return handleKey(cm, key, origin); }, true); } function cloneVimState(state) { var n = new state.constructor(); Object.keys(state).forEach(function(key) { var o = state[key]; if (Array.isArray(o)) o = o.slice(); else if (o && typeof o == "object" && o.constructor != Object) o = cloneVimState(o); n[key] = o; }); if (state.sel) { n.sel = { head: state.sel.head && copyCursor(state.sel.head), anchor: state.sel.anchor && copyCursor(state.sel.anchor) }; } return n; } function multiSelectHandleKey(cm, key, origin) { var isHandled = false; var vim = Vim.maybeInitVimState_(cm); var visualBlock = vim.visualBlock || vim.wasInVisualBlock; if (vim.wasInVisualBlock && !cm.ace.inMultiSelectMode) { vim.wasInVisualBlock = false; } else if (cm.ace.inMultiSelectMode && vim.visualBlock) { vim.wasInVisualBlock = true; } if (key == '' && !vim.insertMode && !vim.visualMode && cm.ace.inMultiSelectMode) { cm.ace.exitMultiSelectMode(); } else if (visualBlock || !cm.ace.inMultiSelectMode || cm.ace.inVirtualSelectionMode) { isHandled = Vim.handleKey(cm, key, origin); } else { var old = cloneVimState(vim); cm.operation(function() { cm.ace.forEachSelection(function() { var sel = cm.ace.selection; cm.state.vim.lastHPos = sel.$desiredColumn == null ? sel.lead.column : sel.$desiredColumn; var head = cm.getCursor("head"); var anchor = cm.getCursor("anchor"); var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0; var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0; head = offsetCursor(head, 0, headOffset); anchor = offsetCursor(anchor, 0, anchorOffset); cm.state.vim.sel.head = head; cm.state.vim.sel.anchor = anchor; isHandled = handleKey(cm, key, origin); sel.$desiredColumn = cm.state.vim.lastHPos == -1 ? null : cm.state.vim.lastHPos; if (cm.virtualSelectionMode()) { cm.state.vim = cloneVimState(old); } }); if (cm.curOp.cursorActivity && !isHandled) cm.curOp.cursorActivity = false; }, true); } return isHandled; }; exports.CodeMirror = CodeMirror; var getVim = Vim.maybeInitVimState_; exports.handler = { $id: "ace/keyboard/vim", drawCursor: function(style, pixelPos, config, sel, session) { var vim = this.state.vim || {}; var w = config.characterWidth; var h = config.lineHeight; var top = pixelPos.top; var left = pixelPos.left; if (!vim.insertMode) { var isbackwards = !sel.cursor ? session.selection.isBackwards() || session.selection.isEmpty() : Range.comparePoints(sel.cursor, sel.start) <= 0 if (!isbackwards && left > w) left -= w } if (!vim.insertMode && vim.status) { h = h / 2; top += h; } style.left = left + "px"; style.top = top + "px"; style.width = w + "px"; style.height = h + "px"; }, handleKeyboard: function(data, hashId, key, keyCode, e) { var editor = data.editor; var cm = editor.state.cm; var vim = getVim(cm); if (keyCode == -1) return; if (key == "c" && hashId == 1) { // key == "ctrl-c" if (!useragent.isMac && editor.getCopyText()) { editor.once("copy", function() { editor.selection.clearSelection(); }); return {command: "null", passEvent: true}; } return {command: coreCommands.stop}; } else if (!vim.insertMode) { if (useragent.isMac && this.handleMacRepeat(data, hashId, key)) { hashId = -1; key = data.inputChar; } } if (hashId == -1 || hashId & 1 || hashId === 0 && key.length > 1) { var insertMode = vim.insertMode; var name = lookupKey(hashId, key, e || {}); if (vim.status == null) vim.status = ""; var isHandled = multiSelectHandleKey(cm, name, 'user'); vim = getVim(cm); // may be changed by multiSelectHandleKey if (isHandled && vim.status != null) vim.status += name; else if (vim.status == null) vim.status = ""; cm._signal("changeStatus"); if (!isHandled && (hashId != -1 || insertMode)) return; return {command: "null", passEvent: !isHandled}; } }, attach: function(editor) { if (!editor.state) editor.state = {}; var cm = new CodeMirror(editor); editor.state.cm = cm; editor.$vimModeHandler = this; CodeMirror.keyMap.vim.attach(cm); getVim(cm).status = null; cm.on('vim-command-done', function() { if (cm.virtualSelectionMode()) return; getVim(cm).status = null; cm.ace._signal("changeStatus"); cm.ace.session.markUndoGroup(); }); cm.on("changeStatus", function() { cm.ace.renderer.updateCursor(); cm.ace._signal("changeStatus"); }); cm.on("vim-mode-change", function() { if (cm.virtualSelectionMode()) return; cm.ace.renderer.setStyle("normal-mode", !getVim(cm).insertMode); cm._signal("changeStatus"); }); cm.ace.renderer.setStyle("normal-mode", !getVim(cm).insertMode); editor.renderer.$cursorLayer.drawCursor = this.drawCursor.bind(cm); this.updateMacCompositionHandlers(editor, true); }, detach: function(editor) { var cm = editor.state.cm; CodeMirror.keyMap.vim.detach(cm); cm.destroy(); editor.state.cm = null; editor.$vimModeHandler = null; editor.renderer.$cursorLayer.drawCursor = null; editor.renderer.setStyle("normal-mode", false); this.updateMacCompositionHandlers(editor, false); }, getStatusText: function(editor) { var cm = editor.state.cm; var vim = getVim(cm); if (vim.insertMode) return "INSERT"; var status = ""; if (vim.visualMode) { status += "VISUAL"; if (vim.visualLine) status += " LINE"; if (vim.visualBlock) status += " BLOCK"; } if (vim.status) status += (status ? " " : "") + vim.status; return status; }, handleMacRepeat: function(data, hashId, key) { if (hashId == -1) { data.inputChar = key; data.lastEvent = "input"; } else if (data.inputChar && data.$lastHash == hashId && data.$lastKey == key) { if (data.lastEvent == "input") { data.lastEvent = "input1"; } else if (data.lastEvent == "input1") { return true; } } else { data.$lastHash = hashId; data.$lastKey = key; data.lastEvent = "keypress"; } }, updateMacCompositionHandlers: function(editor, enable) { var onCompositionUpdateOverride = function(text) { var cm = editor.state.cm; var vim = getVim(cm); if (!vim.insertMode) { var el = this.textInput.getElement(); el.blur(); el.focus(); el.value = text; } else { this.onCompositionUpdateOrig(text); } }; var onCompositionStartOverride = function(text) { var cm = editor.state.cm; var vim = getVim(cm); if (!vim.insertMode) { this.onCompositionStartOrig(text); } }; if (enable) { if (!editor.onCompositionUpdateOrig) { editor.onCompositionUpdateOrig = editor.onCompositionUpdate; editor.onCompositionUpdate = onCompositionUpdateOverride; editor.onCompositionStartOrig = editor.onCompositionStart; editor.onCompositionStart = onCompositionStartOverride; } } else { if (editor.onCompositionUpdateOrig) { editor.onCompositionUpdate = editor.onCompositionUpdateOrig; editor.onCompositionUpdateOrig = null; editor.onCompositionStart = editor.onCompositionStartOrig; editor.onCompositionStartOrig = null; } } } } var renderVirtualNumbers = { getText: function(session, row) { return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9? "\xb7" : "" ))) + "" }, getWidth: function(session, lastLineNumber, config) { return session.getLength().toString().length * config.characterWidth; }, update: function(e, editor) { editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER) }, attach: function(editor) { editor.renderer.$gutterLayer.$renderer = this; editor.on("changeSelection", this.update); }, detach: function(editor) { editor.renderer.$gutterLayer.$renderer = null; editor.off("changeSelection", this.update); } }; Vim.defineOption({ name: "wrap", set: function(value, cm) { if (cm) {cm.ace.setOption("wrap", value)} }, type: "boolean" }, false); defaultKeymap.push( { keys: 'zc', type: 'action', action: 'fold', actionArgs: { open: false } }, { keys: 'zC', type: 'action', action: 'fold', actionArgs: { open: false, all: true } }, { keys: 'zo', type: 'action', action: 'fold', actionArgs: { open: true, } }, { keys: 'zO', type: 'action', action: 'fold', actionArgs: { open: true, all: true } }, { keys: 'za', type: 'action', action: 'fold', actionArgs: { toggle: true } }, { keys: 'zA', type: 'action', action: 'fold', actionArgs: { toggle: true, all: true } }, { keys: 'zf', type: 'action', action: 'fold', actionArgs: { open: true, all: true } }, { keys: 'zd', type: 'action', action: 'fold', actionArgs: { open: true, all: true } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: "addCursorAbove" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: "addCursorBelow" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: "addCursorAboveSkipCurrent" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: "addCursorBelowSkipCurrent" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: "selectMoreBefore" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: "selectMoreAfter" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: "selectNextBefore" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: "selectNextAfter" } } ); actions.aceCommand = function(cm, actionArgs, vim) { cm.vimCmd = actionArgs; if (cm.ace.inVirtualSelectionMode) cm.ace.on("beforeEndOperation", delayedExecAceCommand); else delayedExecAceCommand(null, cm.ace) }; function delayedExecAceCommand(op, ace) { ace.off("beforeEndOperation", delayedExecAceCommand); var cmd = ace.state.cm.vimCmd; if (cmd) { ace.execCommand(cmd.exec ? cmd : cmd.name, cmd.args); } ace.curOp = ace.prevOp; } actions.fold = function(cm, actionArgs, vim) { cm.ace.execCommand(['toggleFoldWidget', 'toggleFoldWidget', 'foldOther', 'unfoldall' ][(actionArgs.all ? 2 : 0) + (actionArgs.open ? 1 : 0)]); }, exports.handler.defaultKeymap = defaultKeymap; Vim.map("Y", "yy"); }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-abap.js ================================================ ace.define("ace/mode/abap_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var AbapHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "variable.language": "this", "keyword": "ADD ALIAS ALIASES ASSERT ASSIGN ASSIGNING AT BACK" + " CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY" + " DATA DEFINE DEFINITION DEFERRED DELETE DESCRIBE DETAIL DIVIDE DO" + " ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT" + " FETCH FIELDS FORM FORMAT FREE FROM FUNCTION" + " GENERATE GET" + " HIDE" + " IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION" + " LEAVE LIKE LINE LOAD LOCAL LOOP" + " MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY" + " ON OVERLAY OPTIONAL OTHERS" + " PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT" + " RAISE RANGES READ RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURNING ROLLBACK" + " SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS" + " TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES" + " UNASSIGN ULINE UNPACK UPDATE" + " WHEN WHILE WINDOW WRITE" + " OCCURS STRUCTURE OBJECT PROPERTY" + " CASTING APPEND RAISING VALUE COLOR" + " CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT" + " ID NUMBER FOR TITLE OUTPUT" + " WITH EXIT USING" + " INTO WHERE GROUP BY HAVING ORDER BY SINGLE" + " APPENDING CORRESPONDING FIELDS OF TABLE" + " LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING" + " EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN", "constant.language": "TRUE FALSE NULL SPACE", "support.type": "c n i p f d t x string xstring decfloat16 decfloat34", "keyword.operator": "abs sign ceil floor trunc frac acos asin atan cos sin tan" + " abapOperator cosh sinh tanh exp log log10 sqrt" + " strlen xstrlen charlen numofchar dbmaxlen lines" }, "text", true, " "); var compoundKeywords = "WITH\\W+(?:HEADER\\W+LINE|FRAME|KEY)|NO\\W+STANDARD\\W+PAGE\\W+HEADING|"+ "EXIT\\W+FROM\\W+STEP\\W+LOOP|BEGIN\\W+OF\\W+(?:BLOCK|LINE)|BEGIN\\W+OF|"+ "END\\W+OF\\W+(?:BLOCK|LINE)|END\\W+OF|NO\\W+INTERVALS|"+ "RESPECTING\\W+BLANKS|SEPARATED\\W+BY|USING\\W+(?:EDIT\\W+MASK)|"+ "WHERE\\W+(?:LINE)|RADIOBUTTON\\W+GROUP|REF\\W+TO|"+ "(?:PUBLIC|PRIVATE|PROTECTED)(?:\\W+SECTION)?|DELETING\\W+(?:TRAILING|LEADING)"+ "(?:ALL\\W+OCCURRENCES)|(?:FIRST|LAST)\\W+OCCURRENCE|INHERITING\\W+FROM|"+ "LINE-COUNT|ADD-CORRESPONDING|AUTHORITY-CHECK|BREAK-POINT|CLASS-DATA|CLASS-METHODS|"+ "CLASS-METHOD|DIVIDE-CORRESPONDING|EDITOR-CALL|END-OF-DEFINITION|END-OF-PAGE|END-OF-SELECTION|"+ "FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|"+ "NEW-PAGE|NEW-SECTION|PRINT-CONTROL|RP-PROVIDE-FROM-LAST|SELECT-OPTIONS|SELECTION-SCREEN|"+ "START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYNTAX-TRACE|TOP-OF-PAGE|TYPE-POOL|"+ "TYPE-POOLS|LINE-SIZE|LINE-COUNT|MESSAGE-ID|DISPLAY-MODE|READ(?:-ONLY)?|"+ "IS\\W+(?:NOT\\W+)?(?:ASSIGNED|BOUND|INITIAL|SUPPLIED)"; this.$rules = { "start" : [ {token : "string", regex : "`", next : "string"}, {token : "string", regex : "'", next : "qstring"}, {token : "doc.comment", regex : /^\*.+/}, {token : "comment", regex : /".+$/}, {token : "invalid", regex: "\\.{2,}"}, {token : "keyword.operator", regex: /\W[\-+\%=<>*]\W|\*\*|[~:,\.&$]|->*?|=>/}, {token : "paren.lparen", regex : "[\\[({]"}, {token : "paren.rparen", regex : "[\\])}]"}, {token : "constant.numeric", regex: "[+-]?\\d+\\b"}, {token : "variable.parameter", regex : /sy|pa?\d\d\d\d\|t\d\d\d\.|innnn/}, {token : "keyword", regex : compoundKeywords}, {token : "variable.parameter", regex : /\w+-\w+(?:-\w+)*/}, {token : keywordMapper, regex : "\\b\\w+\\b"}, {caseInsensitive: true} ], "qstring" : [ {token : "constant.language.escape", regex : "''"}, {token : "string", regex : "'", next : "start"}, {defaultToken : "string"} ], "string" : [ {token : "constant.language.escape", regex : "``"}, {token : "string", regex : "`", next : "start"}, {defaultToken : "string"} ] } }; oop.inherits(AbapHighlightRules, TextHighlightRules); exports.AbapHighlightRules = AbapHighlightRules; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/abap",["require","exports","module","ace/mode/abap_highlight_rules","ace/mode/folding/coffee","ace/range","ace/mode/text","ace/lib/oop"], function(require, exports, module) { "use strict"; var Rules = require("./abap_highlight_rules").AbapHighlightRules; var FoldMode = require("./folding/coffee").FoldMode; var Range = require("../range").Range; var TextMode = require("./text").Mode; var oop = require("../lib/oop"); function Mode() { this.HighlightRules = Rules; this.foldingRules = new FoldMode(); } oop.inherits(Mode, TextMode); (function() { this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); return indent; }; this.toggleCommentLines = function(state, doc, startRow, endRow){ var range = new Range(0, 0, 0, 0); for (var i = startRow; i <= endRow; ++i) { var line = doc.getLine(i); if (hereComment.test(line)) continue; if (commentLine.test(line)) line = line.replace(commentLine, '$1'); else line = line.replace(indentation, '$&#'); range.end.row = range.start.row = i; range.end.column = line.length + 1; doc.replace(range, line); } }; this.$id = "ace/mode/abap"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-actionscript.js ================================================ ace.define("ace/mode/actionscript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ActionScriptHighlightRules = function() { this.$rules = { start: [ { token: 'support.class.actionscript.2', regex: '\\b(?:R(?:ecordset|DBMSResolver|adioButton(?:Group)?)|X(?:ML(?:Socket|Node|Connector)?|UpdateResolverDataHolder)|M(?:M(?:Save|Execute)|icrophoneMicrophone|o(?:use|vieClip(?:Loader)?)|e(?:nu(?:Bar)?|dia(?:Controller|Display|Playback))|ath)|B(?:yName|inding|utton)|S(?:haredObject|ystem|crollPane|t(?:yleSheet|age|ream)|ound|e(?:ndEvent|rviceObject)|OAPCall|lide)|N(?:umericStepper|et(?:stream|S(?:tream|ervices)|Connection|Debug(?:Config)?))|C(?:heckBox|o(?:ntextMenu(?:Item)?|okie|lor|m(?:ponentMixins|boBox))|ustomActions|lient|amera)|T(?:ypedValue|ext(?:Snapshot|Input|F(?:ield|ormat)|Area)|ree|AB)|Object|D(?:ownload|elta(?:Item|Packet)?|at(?:e(?:Chooser|Field)?|a(?:G(?:lue|rid)|Set|Type)))|U(?:RL|TC|IScrollBar)|P(?:opUpManager|endingCall|r(?:intJob|o(?:duct|gressBar)))|E(?:ndPoint|rror)|Video|Key|F(?:RadioButton|GridColumn|MessageBox|BarChart|S(?:croll(?:Bar|Pane)|tyleFormat|plitView)|orm|C(?:heckbox|omboBox|alendar)|unction|T(?:icker|ooltip(?:Lite)?|ree(?:Node)?)|IconButton|D(?:ataGrid|raggablePane)|P(?:ieChart|ushButton|ro(?:gressBar|mptBox))|L(?:i(?:stBox|neChart)|oadingBox)|AdvancedMessageBox)|W(?:indow|SDLURL|ebService(?:Connector)?)|L(?:ist|o(?:calConnection|ad(?:er|Vars)|g)|a(?:unch|bel))|A(?:sBroadcaster|cc(?:ordion|essibility)|S(?:Set(?:Native|PropFlags)|N(?:ew|ative)|C(?:onstructor|lamp(?:2)?)|InstanceOf)|pplication|lert|rray))\\b' }, { token: 'support.function.actionscript.2', regex: '\\b(?:s(?:h(?:ift|ow(?:GridLines|Menu|Border|Settings|Headers|ColumnHeaders|Today|Preferences)?|ad(?:ow|ePane))|c(?:hema|ale(?:X|Mode|Y|Content)|r(?:oll(?:Track|Drag)?|een(?:Resolution|Color|DPI)))|t(?:yleSheet|op(?:Drag|A(?:nimation|llSounds|gent))?|epSize|a(?:tus|rt(?:Drag|A(?:nimation|gent))?))|i(?:n|ze|lence(?:TimeOut|Level))|o(?:ngname|urce|rt(?:Items(?:By)?|On(?:HeaderRelease)?|able(?:Columns)?)?)|u(?:ppressInvalidCalls|bstr(?:ing)?)|p(?:li(?:ce|t)|aceCol(?:umnsEqually|lumnsEqually))|e(?:nd(?:DefaultPushButtonEvent|AndLoad)?|curity|t(?:R(?:GB|o(?:otNode|w(?:Height|Count))|esizable(?:Columns)?|a(?:nge|te))|G(?:ain|roupName)|X(?:AxisTitle)?|M(?:i(?:n(?:imum|utes)|lliseconds)|o(?:nth(?:Names)?|tionLevel|de)|ultilineMode|e(?:ssage|nu(?:ItemEnabled(?:At)?|EnabledAt)|dia)|a(?:sk|ximum))|B(?:u(?:tton(?:s|Width)|fferTime)|a(?:seTabIndex|ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Target|P(?:osition|roperties)|barState|Location)|t(?:yle(?:Property)?|opOnFocus|at(?:us|e))|i(?:ze|lenceLevel)|ort(?:able(?:Columns)?|Function)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)?|Style|Color|ed(?:Node(?:s)?|Cell|I(?:nd(?:ices|ex)|tem(?:s)?))?|able))|kin|m(?:oothness|allScroll))|H(?:ighlight(?:s|Color)|Scroll|o(?:urs|rizontal)|eader(?:Symbol|Height|Text|Property|Format|Width|Location)?|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:ode(?:Properties|ExpansionHandler)|ewTextFormat)|C(?:h(?:ildNodes|a(?:ngeHandler|rt(?:Title|EventHandler)))|o(?:ntent(?:Size)?|okie|lumns)|ell(?:Symbol|Data)|l(?:i(?:ckHandler|pboard)|oseHandler)|redentials)|T(?:ype(?:dVaule)?|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:out(?:Handler)?)?)|oggle|extFormat|ransform)|I(?:s(?:Branch|Open)|n(?:terval|putProperty)|con(?:SymbolName)?|te(?:rator|m(?:ByKey|Symbol)))|Orientation|D(?:i(?:splay(?:Range|Graphics|Mode|Clip|Text|edMonth)|rection)|uration|e(?:pth(?:Below|To|Above)|fault(?:GatewayURL|Mappings|NodeIconSymbolName)|l(?:iveryMode|ay)|bug(?:ID)?)|a(?:yOfWeekNames|t(?:e(?:Filter)?|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Provider|All(?:Height|Property|Format|Width))?))|ra(?:wConnectors|gContent))|U(?:se(?:Shadow|HandCursor|EchoSuppression|rInput|Fade)|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear))|P(?:osition|ercentComplete|an(?:e(?:M(?:inimumSize|aximumSize)|Size|Title))?|ro(?:pert(?:y(?:Data)?|iesAt)|gress))|E(?:nabled|dit(?:Handler|able)|xpand(?:NodeTrigger|erSymbolName))|V(?:Scroll|olume|alue(?:Source)?)|KeyFrameInterval|Quality|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|ocus|ullYear|ps|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:opback|adTarget)|a(?:rgeScroll|bel(?:Source|Placement)?))|A(?:s(?:Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:e(?:State(?:Handler)?|Handler)|ateHandler)|utoH(?:ideScrollBar|eight)))?|paratorBefore|ek|lect(?:ion(?:Disabled|Unfocused)?|ed(?:Node(?:s)?|Child|I(?:nd(?:ices|ex)|tem(?:s)?)|Dat(?:e|a))?|able(?:Ranges)?)|rver(?:String)?)|kip|qrt|wapDepths|lice|aveToSharedObj|moothing)|h(?:scroll(?:Policy)?|tml(?:Text)?|i(?:t(?:Test(?:TextNearPos)?|Area)|de(?:BuiltInItems|Child)?|ghlight(?:2D|3D)?)|orizontal|e(?:ight|ader(?:Re(?:nderer|lease)|Height|Text))|P(?:osition|ageScrollSize)|a(?:s(?:childNodes|MP3|S(?:creen(?:Broadcast|Playback)|treaming(?:Video|Audio)|ort)|Next|OwnProperty|Pr(?:inting|evious)|EmbeddedVideo|VideoEncoder|A(?:ccesibility|udio(?:Encoder)?))|ndlerName)|LineScrollSize)|ye(?:sLabel|ar)|n(?:o(?:t|de(?:Name|Close|Type|Open|Value)|Label)|u(?:llValue|mChild(?:S(?:creens|lides)|ren|Forms))|e(?:w(?:Item|line|Value|LocationDialog)|xt(?:S(?:cene|ibling|lide)|TabIndex|Value|Frame)?)?|ame(?:s)?)|c(?:h(?:ildNodes|eck|a(?:nge(?:sPending)?|r(?:CodeAt|At))|r)|o(?:s|n(?:st(?:ant|ructor)|nect|c(?:urrency|at)|t(?:ent(?:Type|Path)?|ains|rol(?:Placement|lerPolicy))|denseWhite|version)|py|l(?:or|umn(?:Stretch|Name(?:s)?|Count))|m(?:p(?:onent|lete)|ment))|u(?:stomItems|ePoint(?:s)?|r(?:veTo|Value|rent(?:Slide|ChildSlide|Item|F(?:ocused(?:S(?:creen|lide)|Form)|ps))))|e(?:il|ll(?:Renderer|Press|Edit|Focus(?:In|Out)))|l(?:i(?:ck|ents)|o(?:se(?:Button|Pane)?|ne(?:Node)?)|ear(?:S(?:haredObjects|treams)|Timeout|Interval)?)|a(?:ncelLabel|tch|p(?:tion|abilities)|l(?:cFields|l(?:e(?:e|r))?))|reate(?:GatewayConnection|Menu|Se(?:rver|gment)|C(?:hild(?:AtDepth)?|l(?:ient|ass(?:ChildAtDepth|Object(?:AtDepth)?))|all)|Text(?:Node|Field)|Item|Object(?:AtDepth)?|PopUp|E(?:lement|mptyMovieClip)))|t(?:h(?:is|row)|ype(?:of|Name)?|i(?:tle(?:StyleDeclaration)?|me(?:out)?)|o(?:talTime|String|olTipText|p|UpperCase|ggle(?:HighQuality)?|Lo(?:caleString|werCase))|e(?:st|llTarget|xt(?:RightMargin|Bold|S(?:ize|elected)|Height|Color|I(?:ndent|talic)|Disabled|Underline|F(?:ield|ont)|Width|LeftMargin|Align)?)|a(?:n|rget(?:Path)?|b(?:Stops|Children|Index|Enabled|leName))|r(?:y|igger|ac(?:e|k(?:AsMenu)?)))|i(?:s(?:Running|Branch|NaN|Con(?:soleOpen|nected)|Toggled|Installed|Open|D(?:own|ebugger)|P(?:urchased|ro(?:totypeOf|pertyEnumerable))|Empty|F(?:inite|ullyPopulated)|Local|Active)|n(?:s(?:tall|ertBefore)|cludeDeltaPacketInfo|t|it(?:ialize|Component|Pod|A(?:pplication|gent))?|de(?:nt|terminate|x(?:InParent(?:Slide|Form)?|Of)?)|put|validate|finity|LocalInternetCache)?|con(?:F(?:ield|unction))?|t(?:e(?:ratorScrolled|m(?:s|RollO(?:ut|ver)|ClassName))|alic)|d3|p|fFrameLoaded|gnore(?:Case|White))|o(?:s|n(?:R(?:ollO(?:ut|ver)|e(?:s(?:ize|ult)|l(?:ease(?:Outside)?|aseOutside)))|XML|Mouse(?:Move|Down|Up|Wheel)|S(?:ync|croller|tatus|oundComplete|e(?:tFocus|lect(?:edItem)?))|N(?:oticeEvent|etworkChange)|C(?:hanged|onnect|l(?:ipEvent|ose))|ID3|D(?:isconnect|eactivate|ata|ragO(?:ut|ver))|Un(?:install|load)|P(?:aymentResult|ress)|EnterFrame|K(?:illFocus|ey(?:Down|Up))|Fault|Lo(?:ad|g)|A(?:ctiv(?:ity|ate)|ppSt(?:op|art)))?|pe(?:n|ration)|verLayChildren|kLabel|ldValue|r(?:d)?)|d(?:i(?:s(?:connect|play(?:Normal|ed(?:Month|Year)|Full)|able(?:Shader|d(?:Ranges|Days)|CloseBox|Events))|rection)|o(?:cTypeDecl|tall|Decoding|main|LazyDecoding)|u(?:plicateMovieClip|ration)|e(?:stroy(?:ChildAt|Object)|code|fault(?:PushButton(?:Enabled)?|KeydownHandler)?|l(?:ta(?:Packet(?:Changed)?)?|ete(?:PopUp|All)?)|blocking)|a(?:shBoardSave|yNames|ta(?:Provider)?|rkshadow)|r(?:opdown(?:Width)?|a(?:w|gO(?:ut|ver))))|u(?:se(?:Sort|HandCursor|Codepage|EchoSuppression)|n(?:shift|install|derline|escape|format|watch|lo(?:ck|ad(?:Movie(?:Num)?)?))|pdate(?:Results|Mode|I(?:nputProperties|tem(?:ByIndex)?)|P(?:acket|roperties)|View|AfterEvent)|rl)|join|p(?:ixelAspectRatio|o(?:sition|p|w)|u(?:sh|rge|blish)|ercen(?:tComplete|Loaded)|lay(?:head(?:Change|Time)|ing|Hidden|erType)?|a(?:ssword|use|r(?:se(?:XML|CSS|Int|Float)|ent(?:Node|Is(?:S(?:creen|lide)|Form))|ams))|r(?:int(?:Num|AsBitmap(?:Num)?)?|o(?:to(?:type)?|pert(?:y|ies)|gress)|e(?:ss|v(?:ious(?:S(?:ibling|lide)|Value)?|Scene|Frame)|ferred(?:Height|Width))))|e(?:scape|n(?:code(?:r)?|ter(?:Frame)?|dFill|able(?:Shader|d|CloseBox|Events))|dit(?:able|Field|LocationDialog)|v(?:ent|al(?:uate)?)|q|x(?:tended|p|ec(?:ute)?|actSettings)|m(?:phasized(?:StyleDeclaration)?|bedFonts))|v(?:i(?:sible|ewPod)|ScrollPolicy|o(?:id|lume)|ersion|P(?:osition|ageScrollSize)|a(?:l(?:idat(?:ionError|e(?:Property|ActivationKey)?)|ue(?:Of)?)|riable)|LineScrollSize)|k(?:ind|ey(?:Down|Up|Press|FrameInterval))|q(?:sort|uality)|f(?:scommand|i(?:n(?:d(?:Text|First|Last)?|ally)|eldInfo|lter(?:ed|Func)?|rst(?:Slide|Child|DayOfWeek|VisibleNode)?)|o(?:nt|cus(?:In|edCell|Out|Enabled)|r(?:egroundDisabled|mat(?:ter)?))|unctionName|ps|l(?:oor|ush)|ace|romCharCode)|w(?:i(?:th|dth)|ordWrap|atch|riteAccess)|l(?:t|i(?:st(?:Owner)?|ne(?:Style|To))|o(?:c(?:k|a(?:t(?:ion|eByld)|l(?:ToGlobal|FileReadDisable)))|opback|ad(?:Movie(?:Num)?|S(?:crollContent|ound)|ed|Variables(?:Num)?|Application)?|g(?:Changes)?)|e(?:ngth|ft(?:Margin)?|ading)?|a(?:st(?:Slide|Child|Index(?:Of)?)?|nguage|b(?:el(?:Placement|F(?:ield|unction))?|leField)))|a(?:s(?:scociate(?:Controller|Display)|in|pectRatio|function)|nd|c(?:ceptConnection|tiv(?:ityLevel|ePlayControl)|os)|t(?:t(?:ach(?:Movie|Sound|Video|Audio)|ributes)|an(?:2)?)|dd(?:header|RequestHeader|Menu(?:Item(?:At)?|At)?|Sort|Header|No(?:tice|de(?:At)?)|C(?:olumn(?:At)?|uePoint)|T(?:oLocalInternetCache|reeNode(?:At)?)|I(?:con|tem(?:s(?:At)?|At)?)|DeltaItem|P(?:od|age|roperty)|EventListener|View|FieldInfo|Listener|Animation)?|uto(?:Size|Play|KeyNav|Load)|pp(?:endChild|ly(?:Changes|Updates)?)|vHardwareDisable|fterLoaded|l(?:ternateRowColors|ign|l(?:ow(?:InsecureDomain|Domain)|Transitions(?:InDone|OutDone))|bum)|r(?:tist|row|g(?:uments|List))|gent|bs)|r(?:ight(?:Margin)?|o(?:ot(?:S(?:creen|lide)|Form)|und|w(?:Height|Count)|llO(?:ut|ver))|e(?:s(?:yncDepth|t(?:orePane|artAnimation|rict)|iz(?:e|able(?:Columns)?)|olveDelta|ult(?:s)?|ponse)|c(?:o(?:ncile(?:Results|Updates)|rd)|eive(?:Video|Audio))|draw|jectConnection|place(?:Sel|ItemAt|AllItems)?|ve(?:al(?:Child)?|rse)|quest(?:SizeChange|Payment)?|f(?:errer|resh(?:ScrollContent|Destinations|Pane|FromSources)?)|lease(?:Outside)?|ad(?:Only|Access)|gister(?:SkinElement|C(?:olor(?:Style|Name)|lass)|InheritingStyle|Proxy)|move(?:Range|M(?:ovieClip|enu(?:Item(?:At)?|At))|Background|Sort|No(?:tice|de(?:sAt|At)?)|C(?:olum(?:nAt|At)|uePoints)|T(?:extField|reeNode(?:At)?)|Item(?:At)?|Pod|EventListener|FromLocalInternetCache|Listener|All(?:C(?:olumns|uePoints)|Items)?))|a(?:ndom|te|dioDot))|g(?:t|oto(?:Slide|NextSlide|PreviousSlide|FirstSlide|LastSlide|And(?:Stop|Play))|e(?:nre|t(?:R(?:GB|o(?:otNode|wCount)|e(?:sizable|mote))|X(?:AxisTitle)?|M(?:i(?:n(?:imum(?:Size)?|utes)|lliseconds)|onth(?:Names)?|ultilineMode|e(?:ssage|nu(?:ItemAt|EnabledAt|At))|aximum(?:Size)?)|B(?:ytes(?:Total|Loaded)|ounds|utton(?:s|Width)|eginIndex|a(?:ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Position|barState|Location)|t(?:yle(?:Names)?|opOnFocus|ate)|ize|o(?:urce|rtState)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)|Style|ed(?:Node(?:s)?|Cell|Text|I(?:nd(?:ices|ex)|tem(?:s)?))?)|rvice)|moothness|WFVersion)|H(?:ighlight(?:s|Color)|ours|e(?:ight|ader(?:Height|Text|Property|Format|Width|Location)?)|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:o(?:tices|de(?:DisplayedAt|At))|um(?:Children|berAvailable)|e(?:wTextFormat|xtHighestDepth))|C(?:h(?:ild(?:S(?:creen|lide)|Nodes|Form|At)|artTitle)|o(?:n(?:tent|figInfo)|okie|de|unt|lumn(?:Names|Count|Index|At))|uePoint|ellIndex|loseHandler|a(?:ll|retIndex))|T(?:ypedValue|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:stamp|zoneOffset|out(?:State|Handler)|r)?)|oggle|ext(?:Extent|Format)?|r(?:ee(?:NodeAt|Length)|ans(?:form|actionId)))|I(?:s(?:Branch|Open)|n(?:stanceAtDepth|d(?:icesByKey|exByKey))|con(?:SymbolName)?|te(?:rator|m(?:sByKey|By(?:Name|Key)|id|ID|At))|d)|O(?:utput(?:Parameter(?:s|ByName)?|Value(?:s)?)|peration|ri(?:entation|ginalCellData))|D(?:i(?:s(?:play(?:Range|Mode|Clip|Index|edMonth)|kUsage)|rection)|uration|e(?:pth|faultNodeIconSymbolName|l(?:taPacket|ay)|bug(?:Config|ID)?)|a(?:y(?:OfWeekNames)?|t(?:e|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Label|All(?:Height|Property|Format|Width))?))|rawConnectors)|U(?:se(?:Shadow|HandCursor|rInput|Fade)|RL|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear))|P(?:o(?:sition|ds)|ercentComplete|a(?:n(?:e(?:M(?:inimums|aximums)|Height|Title|Width))?|rentNode)|r(?:operty(?:Name|Data)?|efer(?:ences|red(?:Height|Width))))|E(?:n(?:dIndex|abled)|ditingData|x(?:panderSymbolName|andNodeTrigger))|V(?:iewed(?:Pods|Applications)|olume|ersion|alue(?:Source)?)|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|o(?:ntList|cus)|ullYear|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:cal|adTarget)|ength|a(?:stTabIndex|bel(?:Source)?))|A(?:s(?:cii|Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:eState(?:Handler)?|ateHandler)|utoH(?:ideScrollBar|eight)|llItems|gent))?)?|lobal(?:StyleFormat|ToLocal)?|ain|roupName)|x(?:updatePackety|mlDecl)?|m(?:y(?:MethodName|Call)|in(?:imum)?|o(?:nthNames|tion(?:TimeOut|Level)|de(?:lChanged)?|use(?:Move|O(?:ut|ver)|Down(?:Somewhere|Outside)?|Up(?:Somewhere)?|WheelEnabled)|ve(?:To)?)|u(?:ted|lti(?:pleS(?:imultaneousAllowed|elections)|line))|e(?:ssage|nu(?:Show|Hide)?|th(?:od)?|diaType)|a(?:nufacturer|tch|x(?:scroll|hscroll|imum|HPosition|Chars|VPosition)?)|b(?:substring|chr|ord|length))|b(?:ytes(?:Total|Loaded)|indFormat(?:Strings|Function)|o(?:ttom(?:Scroll)?|ld|rder(?:Color)?)|u(?:tton(?:Height|Width)|iltInItems|ffer(?:Time|Length)|llet)|e(?:foreApplyUpdates|gin(?:GradientFill|Fill))|lockIndent|a(?:ndwidth|ckground(?:Style|Color|Disabled)?)|roadcastMessage)|onHTTPStatus)\\b' }, { token: 'support.constant.actionscript.2', regex: '\\b(?:__proto__|__resolve|_accProps|_alpha|_changed|_currentframe|_droptarget|_flash|_focusrect|_framesloaded|_global|_height|_highquality|_level|_listeners|_lockroot|_name|_parent|_quality|_root|_rotation|_soundbuftime|_target|_totalframes|_url|_visible|_width|_x|_xmouse|_xscale|_y|_ymouse|_yscale)\\b' }, { token: 'keyword.control.actionscript.2', regex: '\\b(?:dynamic|extends|import|implements|interface|public|private|new|static|super|var|for|in|break|continue|while|do|return|if|else|case|switch)\\b' }, { token: 'storage.type.actionscript.2', regex: '\\b(?:Boolean|Number|String|Void)\\b' }, { token: 'constant.language.actionscript.2', regex: '\\b(?:null|undefined|true|false)\\b' }, { token: 'constant.numeric.actionscript.2', regex: '\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\b' }, { token: 'punctuation.definition.string.begin.actionscript.2', regex: '"', push: [ { token: 'punctuation.definition.string.end.actionscript.2', regex: '"', next: 'pop' }, { token: 'constant.character.escape.actionscript.2', regex: '\\\\.' }, { defaultToken: 'string.quoted.double.actionscript.2' } ] }, { token: 'punctuation.definition.string.begin.actionscript.2', regex: '\'', push: [ { token: 'punctuation.definition.string.end.actionscript.2', regex: '\'', next: 'pop' }, { token: 'constant.character.escape.actionscript.2', regex: '\\\\.' }, { defaultToken: 'string.quoted.single.actionscript.2' } ] }, { token: 'support.constant.actionscript.2', regex: '\\b(?:BACKSPACE|CAPSLOCK|CONTROL|DELETEKEY|DOWN|END|ENTER|HOME|INSERT|LEFT|LN10|LN2|LOG10E|LOG2E|MAX_VALUE|MIN_VALUE|NEGATIVE_INFINITY|NaN|PGDN|PGUP|PI|POSITIVE_INFINITY|RIGHT|SPACE|SQRT1_2|SQRT2|UP)\\b' }, { token: 'punctuation.definition.comment.actionscript.2', regex: '/\\*', push: [ { token: 'punctuation.definition.comment.actionscript.2', regex: '\\*/', next: 'pop' }, { defaultToken: 'comment.block.actionscript.2' } ] }, { token: 'punctuation.definition.comment.actionscript.2', regex: '//.*$', push_: [ { token: 'comment.line.double-slash.actionscript.2', regex: '$', next: 'pop' }, { defaultToken: 'comment.line.double-slash.actionscript.2' } ] }, { token: 'keyword.operator.actionscript.2', regex: '\\binstanceof\\b' }, { token: 'keyword.operator.symbolic.actionscript.2', regex: '[-!%&*+=/?:]' }, { token: [ 'meta.preprocessor.actionscript.2', 'punctuation.definition.preprocessor.actionscript.2', 'meta.preprocessor.actionscript.2' ], regex: '^([ \\t]*)(#)([a-zA-Z]+)' }, { token: [ 'storage.type.function.actionscript.2', 'meta.function.actionscript.2', 'entity.name.function.actionscript.2', 'meta.function.actionscript.2', 'punctuation.definition.parameters.begin.actionscript.2' ], regex: '\\b(function)(\\s+)([a-zA-Z_]\\w*)(\\s*)(\\()', push: [ { token: 'punctuation.definition.parameters.end.actionscript.2', regex: '\\)', next: 'pop' }, { token: 'variable.parameter.function.actionscript.2', regex: '[^,)$]+' }, { defaultToken: 'meta.function.actionscript.2' } ] }, { token: [ 'storage.type.class.actionscript.2', 'meta.class.actionscript.2', 'entity.name.type.class.actionscript.2', 'meta.class.actionscript.2', 'storage.modifier.extends.actionscript.2', 'meta.class.actionscript.2', 'entity.other.inherited-class.actionscript.2' ], regex: '\\b(class)(\\s+)([a-zA-Z_](?:\\w|\\.)*)(?:(\\s+)(extends)(\\s+)([a-zA-Z_](?:\\w|\\.)*))?' } ] } this.normalizeRules(); }; ActionScriptHighlightRules.metaData = { fileTypes: [ 'as' ], keyEquivalent: '^~A', name: 'ActionScript', scopeName: 'source.actionscript.2' } oop.inherits(ActionScriptHighlightRules, TextHighlightRules); exports.ActionScriptHighlightRules = ActionScriptHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/actionscript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/actionscript_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var ActionScriptHighlightRules = require("./actionscript_highlight_rules").ActionScriptHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = ActionScriptHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/actionscript"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-ada.js ================================================ ace.define("ace/mode/ada_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var AdaHighlightRules = function() { var keywords = "abort|else|new|return|abs|elsif|not|reverse|abstract|end|null|accept|entry|select|" + "access|exception|of|separate|aliased|exit|or|some|all|others|subtype|and|for|out|synchronized|" + "array|function|overriding|at|tagged|generic|package|task|begin|goto|pragma|terminate|" + "body|private|then|if|procedure|type|case|in|protected|constant|interface|until|" + "|is|raise|use|declare|range|delay|limited|record|when|delta|loop|rem|while|digits|renames|with|do|mod|requeue|xor"; var builtinConstants = ( "true|false|null" ); var builtinFunctions = ( "count|min|max|avg|sum|rank|now|coalesce|main" ); var keywordMapper = this.createKeywordMapper({ "support.function": builtinFunctions, "keyword": keywords, "constant.language": builtinConstants }, "identifier", true); this.$rules = { "start" : [ { token : "comment", regex : "--.*$" }, { token : "string", // " string regex : '".*?"' }, { token : "string", // ' string regex : "'.*?'" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=" }, { token : "paren.lparen", regex : "[\\(]" }, { token : "paren.rparen", regex : "[\\)]" }, { token : "text", regex : "\\s+" } ] }; }; oop.inherits(AdaHighlightRules, TextHighlightRules); exports.AdaHighlightRules = AdaHighlightRules; }); ace.define("ace/mode/ada",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/ada_highlight_rules","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var AdaHighlightRules = require("./ada_highlight_rules").AdaHighlightRules; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = AdaHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "--"; this.$id = "ace/mode/ada"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-apache_conf.js ================================================ ace.define("ace/mode/apache_conf_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ApacheConfHighlightRules = function() { this.$rules = { start: [ { token: [ 'punctuation.definition.comment.apacheconf', 'comment.line.hash.ini', 'comment.line.hash.ini' ], regex: '^((?:\\s)*)(#)(.*$)' }, { token: [ 'punctuation.definition.tag.apacheconf', 'entity.tag.apacheconf', 'text', 'string.value.apacheconf', 'punctuation.definition.tag.apacheconf' ], regex: '(<)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(?:(\\s)(.+?))?(>)' }, { token: [ 'punctuation.definition.tag.apacheconf', 'entity.tag.apacheconf', 'punctuation.definition.tag.apacheconf' ], regex: '()' }, { token: [ 'keyword.alias.apacheconf', 'text', 'string.regexp.apacheconf', 'text', 'string.replacement.apacheconf', 'text' ], regex: '(Rewrite(?:Rule|Cond))(\\s+)(.+?)(\\s+)(.+?)($|\\s)' }, { token: [ 'keyword.alias.apacheconf', 'text', 'entity.status.apacheconf', 'text', 'string.regexp.apacheconf', 'text', 'string.path.apacheconf', 'text' ], regex: '(RedirectMatch)(?:(\\s+)(\\d\\d\\d|permanent|temp|seeother|gone))?(\\s+)(.+?)(\\s+)(?:(.+?)($|\\s))?' }, { token: [ 'keyword.alias.apacheconf', 'text', 'entity.status.apacheconf', 'text', 'string.path.apacheconf', 'text', 'string.path.apacheconf', 'text' ], regex: '(Redirect)(?:(\\s+)(\\d\\d\\d|permanent|temp|seeother|gone))?(\\s+)(.+?)(\\s+)(?:(.+?)($|\\s))?' }, { token: [ 'keyword.alias.apacheconf', 'text', 'string.regexp.apacheconf', 'text', 'string.path.apacheconf', 'text' ], regex: '(ScriptAliasMatch|AliasMatch)(\\s+)(.+?)(\\s+)(?:(.+?)(\\s))?' }, { token: [ 'keyword.alias.apacheconf', 'text', 'string.path.apacheconf', 'text', 'string.path.apacheconf', 'text' ], regex: '(RedirectPermanent|RedirectTemp|ScriptAlias|Alias)(\\s+)(.+?)(\\s+)(?:(.+?)($|\\s))?' }, { token: 'keyword.core.apacheconf', regex: '\\b(?:AcceptPathInfo|AccessFileName|AddDefaultCharset|AddOutputFilterByType|AllowEncodedSlashes|AllowOverride|AuthName|AuthType|CGIMapExtension|ContentDigest|DefaultType|DocumentRoot|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|FileETag|ForceType|HostnameLookups|IdentityCheck|Include|KeepAlive|KeepAliveTimeout|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|LogLevel|MaxKeepAliveRequests|NameVirtualHost|Options|Require|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScriptInterpreterSource|ServerAdmin|ServerAlias|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetHandler|SetInputFilter|SetOutputFilter|TimeOut|TraceEnable|UseCanonicalName)\\b' }, { token: 'keyword.mpm.apacheconf', regex: '\\b(?:AcceptMutex|AssignUserID|BS2000Account|ChildPerUserID|CoreDumpDirectory|EnableExceptionHook|Group|Listen|ListenBacklog|LockFile|MaxClients|MaxMemFree|MaxRequestsPerChild|MaxRequestsPerThread|MaxSpareServers|MaxSpareThreads|MaxThreads|MaxThreadsPerChild|MinSpareServers|MinSpareThreads|NumServers|PidFile|ReceiveBufferSize|ScoreBoardFile|SendBufferSize|ServerLimit|StartServers|StartThreads|ThreadLimit|ThreadsPerChild|ThreadStackSize|User|Win32DisableAcceptEx)\\b' }, { token: 'keyword.access.apacheconf', regex: '\\b(?:Allow|Deny|Order)\\b' }, { token: 'keyword.actions.apacheconf', regex: '\\b(?:Action|Script)\\b' }, { token: 'keyword.alias.apacheconf', regex: '\\b(?:Alias|AliasMatch|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ScriptAlias|ScriptAliasMatch)\\b' }, { token: 'keyword.auth.apacheconf', regex: '\\b(?:AuthAuthoritative|AuthGroupFile|AuthUserFile)\\b' }, { token: 'keyword.auth_anon.apacheconf', regex: '\\b(?:Anonymous|Anonymous_Authoritative|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail)\\b' }, { token: 'keyword.auth_dbm.apacheconf', regex: '\\b(?:AuthDBMAuthoritative|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile)\\b' }, { token: 'keyword.auth_digest.apacheconf', regex: '\\b(?:AuthDigestAlgorithm|AuthDigestDomain|AuthDigestFile|AuthDigestGroupFile|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestQop|AuthDigestShmemSize)\\b' }, { token: 'keyword.auth_ldap.apacheconf', regex: '\\b(?:AuthLDAPAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPEnabled|AuthLDAPFrontPageHack|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserIsDN|AuthLDAPUrl)\\b' }, { token: 'keyword.autoindex.apacheconf', regex: '\\b(?:AddAlt|AddAltByEncoding|AddAltByType|AddDescription|AddIcon|AddIconByEncoding|AddIconByType|DefaultIcon|HeaderName|IndexIgnore|IndexOptions|IndexOrderDefault|ReadmeName)\\b' }, { token: 'keyword.cache.apacheconf', regex: '\\b(?:CacheDefaultExpire|CacheDisable|CacheEnable|CacheForceCompletion|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheLastModifiedFactor|CacheMaxExpire)\\b' }, { token: 'keyword.cern_meta.apacheconf', regex: '\\b(?:MetaDir|MetaFiles|MetaSuffix)\\b' }, { token: 'keyword.cgi.apacheconf', regex: '\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength)\\b' }, { token: 'keyword.cgid.apacheconf', regex: '\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock)\\b' }, { token: 'keyword.charset_lite.apacheconf', regex: '\\b(?:CharsetDefault|CharsetOptions|CharsetSourceEnc)\\b' }, { token: 'keyword.dav.apacheconf', regex: '\\b(?:Dav|DavDepthInfinity|DavMinTimeout|DavLockDB)\\b' }, { token: 'keyword.deflate.apacheconf', regex: '\\b(?:DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize)\\b' }, { token: 'keyword.dir.apacheconf', regex: '\\b(?:DirectoryIndex|DirectorySlash)\\b' }, { token: 'keyword.disk_cache.apacheconf', regex: '\\b(?:CacheDirLength|CacheDirLevels|CacheExpiryCheck|CacheGcClean|CacheGcDaily|CacheGcInterval|CacheGcMemUsage|CacheGcUnused|CacheMaxFileSize|CacheMinFileSize|CacheRoot|CacheSize|CacheTimeMargin)\\b' }, { token: 'keyword.dumpio.apacheconf', regex: '\\b(?:DumpIOInput|DumpIOOutput)\\b' }, { token: 'keyword.env.apacheconf', regex: '\\b(?:PassEnv|SetEnv|UnsetEnv)\\b' }, { token: 'keyword.expires.apacheconf', regex: '\\b(?:ExpiresActive|ExpiresByType|ExpiresDefault)\\b' }, { token: 'keyword.ext_filter.apacheconf', regex: '\\b(?:ExtFilterDefine|ExtFilterOptions)\\b' }, { token: 'keyword.file_cache.apacheconf', regex: '\\b(?:CacheFile|MMapFile)\\b' }, { token: 'keyword.headers.apacheconf', regex: '\\b(?:Header|RequestHeader)\\b' }, { token: 'keyword.imap.apacheconf', regex: '\\b(?:ImapBase|ImapDefault|ImapMenu)\\b' }, { token: 'keyword.include.apacheconf', regex: '\\b(?:SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|XBitHack)\\b' }, { token: 'keyword.isapi.apacheconf', regex: '\\b(?:ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer)\\b' }, { token: 'keyword.ldap.apacheconf', regex: '\\b(?:LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTrustedCA|LDAPTrustedCAType)\\b' }, { token: 'keyword.log.apacheconf', regex: '\\b(?:BufferedLogs|CookieLog|CustomLog|LogFormat|TransferLog|ForensicLog)\\b' }, { token: 'keyword.mem_cache.apacheconf', regex: '\\b(?:MCacheMaxObjectCount|MCacheMaxObjectSize|MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize)\\b' }, { token: 'keyword.mime.apacheconf', regex: '\\b(?:AddCharset|AddEncoding|AddHandler|AddInputFilter|AddLanguage|AddOutputFilter|AddType|DefaultLanguage|ModMimeUsePathInfo|MultiviewsMatch|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|TypesConfig)\\b' }, { token: 'keyword.misc.apacheconf', regex: '\\b(?:ProtocolEcho|Example|AddModuleInfo|MimeMagicFile|CheckSpelling|ExtendedStatus|SuexecUserGroup|UserDir)\\b' }, { token: 'keyword.negotiation.apacheconf', regex: '\\b(?:CacheNegotiatedDocs|ForceLanguagePriority|LanguagePriority)\\b' }, { token: 'keyword.nw_ssl.apacheconf', regex: '\\b(?:NWSSLTrustedCerts|NWSSLUpgradeable|SecureListen)\\b' }, { token: 'keyword.proxy.apacheconf', regex: '\\b(?:AllowCONNECT|NoProxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyFtpDirCharset|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassReverse|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxyTimeout|ProxyVia)\\b' }, { token: 'keyword.rewrite.apacheconf', regex: '\\b(?:RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule)\\b' }, { token: 'keyword.setenvif.apacheconf', regex: '\\b(?:BrowserMatch|BrowserMatchNoCase|SetEnvIf|SetEnvIfNoCase)\\b' }, { token: 'keyword.so.apacheconf', regex: '\\b(?:LoadFile|LoadModule)\\b' }, { token: 'keyword.ssl.apacheconf', regex: '\\b(?:SSLCACertificateFile|SSLCACertificatePath|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLEngine|SSLMutex|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth)\\b' }, { token: 'keyword.usertrack.apacheconf', regex: '\\b(?:CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking)\\b' }, { token: 'keyword.vhost_alias.apacheconf', regex: '\\b(?:VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP)\\b' }, { token: [ 'keyword.php.apacheconf', 'text', 'entity.property.apacheconf', 'text', 'string.value.apacheconf', 'text' ], regex: '\\b(php_value|php_flag)\\b(?:(\\s+)(.+?)(?:(\\s+)(.+?))?)?(\\s)' }, { token: [ 'punctuation.variable.apacheconf', 'variable.env.apacheconf', 'variable.misc.apacheconf', 'punctuation.variable.apacheconf' ], regex: '(%\\{)(?:(HTTP_USER_AGENT|HTTP_REFERER|HTTP_COOKIE|HTTP_FORWARDED|HTTP_HOST|HTTP_PROXY_CONNECTION|HTTP_ACCEPT|REMOTE_ADDR|REMOTE_HOST|REMOTE_PORT|REMOTE_USER|REMOTE_IDENT|REQUEST_METHOD|SCRIPT_FILENAME|PATH_INFO|QUERY_STRING|AUTH_TYPE|DOCUMENT_ROOT|SERVER_ADMIN|SERVER_NAME|SERVER_ADDR|SERVER_PORT|SERVER_PROTOCOL|SERVER_SOFTWARE|TIME_YEAR|TIME_MON|TIME_DAY|TIME_HOUR|TIME_MIN|TIME_SEC|TIME_WDAY|TIME|API_VERSION|THE_REQUEST|REQUEST_URI|REQUEST_FILENAME|IS_SUBREQ|HTTPS)|(.*?))(\\})' }, { token: [ 'entity.mime-type.apacheconf', 'text' ], regex: '\\b((?:text|image|application|video|audio)/.+?)(\\s)' }, { token: 'entity.helper.apacheconf', regex: '\\b(?:from|unset|set|on|off)\\b', caseInsensitive: true }, { token: 'constant.integer.apacheconf', regex: '\\b\\d+\\b' }, { token: [ 'text', 'punctuation.definition.flag.apacheconf', 'string.flag.apacheconf', 'punctuation.definition.flag.apacheconf', 'text' ], regex: '(\\s)(\\[)(.*?)(\\])(\\s)' } ] } this.normalizeRules(); }; ApacheConfHighlightRules.metaData = { fileTypes: [ 'conf', 'CONF', 'htaccess', 'HTACCESS', 'htgroups', 'HTGROUPS', 'htpasswd', 'HTPASSWD', '.htaccess', '.HTACCESS', '.htgroups', '.HTGROUPS', '.htpasswd', '.HTPASSWD' ], name: 'Apache Conf', scopeName: 'source.apacheconf' } oop.inherits(ApacheConfHighlightRules, TextHighlightRules); exports.ApacheConfHighlightRules = ApacheConfHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/apache_conf",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/apache_conf_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var ApacheConfHighlightRules = require("./apache_conf_highlight_rules").ApacheConfHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = ApacheConfHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.$id = "ace/mode/apache_conf"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-applescript.js ================================================ ace.define("ace/mode/applescript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var AppleScriptHighlightRules = function() { var keywords = ( "about|above|after|against|and|around|as|at|back|before|beginning|" + "behind|below|beneath|beside|between|but|by|considering|" + "contain|contains|continue|copy|div|does|eighth|else|end|equal|" + "equals|error|every|exit|fifth|first|for|fourth|from|front|" + "get|given|global|if|ignoring|in|into|is|it|its|last|local|me|" + "middle|mod|my|ninth|not|of|on|onto|or|over|prop|property|put|ref|" + "reference|repeat|returning|script|second|set|seventh|since|" + "sixth|some|tell|tenth|that|the|then|third|through|thru|" + "timeout|times|to|transaction|try|until|where|while|whose|with|without" ); var builtinConstants = ( "AppleScript|false|linefeed|return|pi|quote|result|space|tab|true" ); var builtinFunctions = ( "activate|beep|count|delay|launch|log|offset|read|round|run|say|" + "summarize|write" ); var builtinTypes = ( "alias|application|boolean|class|constant|date|file|integer|list|" + "number|real|record|string|text|character|characters|contents|day|" + "frontmost|id|item|length|month|name|paragraph|paragraphs|rest|" + "reverse|running|time|version|weekday|word|words|year" ); var keywordMapper = this.createKeywordMapper({ "support.function": builtinFunctions, "constant.language": builtinConstants, "support.type": builtinTypes, "keyword": keywords }, "identifier"); this.$rules = { "start": [ { token: "comment", regex: "--.*$" }, { token : "comment", // multi line comment regex : "\\(\\*", next : "comment" }, { token: "string", // " string regex: '".*?"' }, { token: "support.type", regex: '\\b(POSIX file|POSIX path|(date|time) string|quoted form)\\b' }, { token: "support.function", regex: '\\b(clipboard info|the clipboard|info for|list (disks|folder)|' + 'mount volume|path to|(close|open for) access|(get|set) eof|' + 'current date|do shell script|get volume settings|random number|' + 'set volume|system attribute|system info|time to GMT|' + '(load|run|store) script|scripting components|' + 'ASCII (character|number)|localized string|' + 'choose (application|color|file|file name|' + 'folder|from list|remote application|URL)|' + 'display (alert|dialog))\\b|^\\s*return\\b' }, { token: "constant.language", regex: '\\b(text item delimiters|current application|missing value)\\b' }, { token: "keyword", regex: '\\b(apart from|aside from|instead of|out of|greater than|' + "isn't|(doesn't|does not) (equal|come before|come after|contain)|" + '(greater|less) than( or equal)?|(starts?|ends|begins?) with|' + 'contained by|comes (before|after)|a (ref|reference))\\b' }, { token: keywordMapper, regex: "[a-zA-Z][a-zA-Z0-9_]*\\b" } ], "comment": [ { token: "comment", // closing comment regex: "\\*\\)", next: "start" }, { defaultToken: "comment" } ] } this.normalizeRules(); }; oop.inherits(AppleScriptHighlightRules, TextHighlightRules); exports.AppleScriptHighlightRules = AppleScriptHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/applescript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/applescript_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var AppleScriptHighlightRules = require("./applescript_highlight_rules").AppleScriptHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = AppleScriptHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "--"; this.blockComment = {start: "(*", end: "*)"}; this.$id = "ace/mode/applescript"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-asciidoc.js ================================================ ace.define("ace/mode/asciidoc_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var AsciidocHighlightRules = function() { var identifierRe = "[a-zA-Z\u00a1-\uffff]+\\b"; this.$rules = { "start": [ {token: "empty", regex: /$/}, {token: "literal", regex: /^\.{4,}\s*$/, next: "listingBlock"}, {token: "literal", regex: /^-{4,}\s*$/, next: "literalBlock"}, {token: "string", regex: /^\+{4,}\s*$/, next: "passthroughBlock"}, {token: "keyword", regex: /^={4,}\s*$/}, {token: "text", regex: /^\s*$/}, {token: "empty", regex: "", next: "dissallowDelimitedBlock"} ], "dissallowDelimitedBlock": [ {include: "paragraphEnd"}, {token: "comment", regex: '^//.+$'}, {token: "keyword", regex: "^(?:NOTE|TIP|IMPORTANT|WARNING|CAUTION):"}, {include: "listStart"}, {token: "literal", regex: /^\s+.+$/, next: "indentedBlock"}, {token: "empty", regex: "", next: "text"} ], "paragraphEnd": [ {token: "doc.comment", regex: /^\/{4,}\s*$/, next: "commentBlock"}, {token: "tableBlock", regex: /^\s*[|!]=+\s*$/, next: "tableBlock"}, {token: "keyword", regex: /^(?:--|''')\s*$/, next: "start"}, {token: "option", regex: /^\[.*\]\s*$/, next: "start"}, {token: "pageBreak", regex: /^>{3,}$/, next: "start"}, {token: "literal", regex: /^\.{4,}\s*$/, next: "listingBlock"}, {token: "titleUnderline", regex: /^(?:={2,}|-{2,}|~{2,}|\^{2,}|\+{2,})\s*$/, next: "start"}, {token: "singleLineTitle", regex: /^={1,5}\s+\S.*$/, next: "start"}, {token: "otherBlock", regex: /^(?:\*{2,}|_{2,})\s*$/, next: "start"}, {token: "optionalTitle", regex: /^\.[^.\s].+$/, next: "start"} ], "listStart": [ {token: "keyword", regex: /^\s*(?:\d+\.|[a-zA-Z]\.|[ixvmIXVM]+\)|\*{1,5}|-|\.{1,5})\s/, next: "listText"}, {token: "meta.tag", regex: /^.+(?::{2,4}|;;)(?: |$)/, next: "listText"}, {token: "support.function.list.callout", regex: /^(?:<\d+>|\d+>|>) /, next: "text"}, {token: "keyword", regex: /^\+\s*$/, next: "start"} ], "text": [ {token: ["link", "variable.language"], regex: /((?:https?:\/\/|ftp:\/\/|file:\/\/|mailto:|callto:)[^\s\[]+)(\[.*?\])/}, {token: "link", regex: /(?:https?:\/\/|ftp:\/\/|file:\/\/|mailto:|callto:)[^\s\[]+/}, {token: "link", regex: /\b[\w\.\/\-]+@[\w\.\/\-]+\b/}, {include: "macros"}, {include: "paragraphEnd"}, {token: "literal", regex:/\+{3,}/, next:"smallPassthrough"}, {token: "escape", regex: /\((?:C|TM|R)\)|\.{3}|->|<-|=>|<=|&#(?:\d+|x[a-fA-F\d]+);|(?: |^)--(?=\s+\S)/}, {token: "escape", regex: /\\[_*'`+#]|\\{2}[_*'`+#]{2}/}, {token: "keyword", regex: /\s\+$/}, {token: "text", regex: identifierRe}, {token: ["keyword", "string", "keyword"], regex: /(<<[\w\d\-$]+,)(.*?)(>>|$)/}, {token: "keyword", regex: /<<[\w\d\-$]+,?|>>/}, {token: "constant.character", regex: /\({2,3}.*?\){2,3}/}, {token: "keyword", regex: /\[\[.+?\]\]/}, {token: "support", regex: /^\[{3}[\w\d =\-]+\]{3}/}, {include: "quotes"}, {token: "empty", regex: /^\s*$/, next: "start"} ], "listText": [ {include: "listStart"}, {include: "text"} ], "indentedBlock": [ {token: "literal", regex: /^[\s\w].+$/, next: "indentedBlock"}, {token: "literal", regex: "", next: "start"} ], "listingBlock": [ {token: "literal", regex: /^\.{4,}\s*$/, next: "dissallowDelimitedBlock"}, {token: "constant.numeric", regex: '<\\d+>'}, {token: "literal", regex: '[^<]+'}, {token: "literal", regex: '<'} ], "literalBlock": [ {token: "literal", regex: /^-{4,}\s*$/, next: "dissallowDelimitedBlock"}, {token: "constant.numeric", regex: '<\\d+>'}, {token: "literal", regex: '[^<]+'}, {token: "literal", regex: '<'} ], "passthroughBlock": [ {token: "literal", regex: /^\+{4,}\s*$/, next: "dissallowDelimitedBlock"}, {token: "literal", regex: identifierRe + "|\\d+"}, {include: "macros"}, {token: "literal", regex: "."} ], "smallPassthrough": [ {token: "literal", regex: /[+]{3,}/, next: "dissallowDelimitedBlock"}, {token: "literal", regex: /^\s*$/, next: "dissallowDelimitedBlock"}, {token: "literal", regex: identifierRe + "|\\d+"}, {include: "macros"} ], "commentBlock": [ {token: "doc.comment", regex: /^\/{4,}\s*$/, next: "dissallowDelimitedBlock"}, {token: "doc.comment", regex: '^.*$'} ], "tableBlock": [ {token: "tableBlock", regex: /^\s*\|={3,}\s*$/, next: "dissallowDelimitedBlock"}, {token: "tableBlock", regex: /^\s*!={3,}\s*$/, next: "innerTableBlock"}, {token: "tableBlock", regex: /\|/}, {include: "text", noEscape: true} ], "innerTableBlock": [ {token: "tableBlock", regex: /^\s*!={3,}\s*$/, next: "tableBlock"}, {token: "tableBlock", regex: /^\s*|={3,}\s*$/, next: "dissallowDelimitedBlock"}, {token: "tableBlock", regex: /\!/} ], "macros": [ {token: "macro", regex: /{[\w\-$]+}/}, {token: ["text", "string", "text", "constant.character", "text"], regex: /({)([\w\-$]+)(:)?(.+)?(})/}, {token: ["text", "markup.list.macro", "keyword", "string"], regex: /(\w+)(footnote(?:ref)?::?)([^\s\[]+)?(\[.*?\])?/}, {token: ["markup.list.macro", "keyword", "string"], regex: /([a-zA-Z\-][\w\.\/\-]*::?)([^\s\[]+)(\[.*?\])?/}, {token: ["markup.list.macro", "keyword"], regex: /([a-zA-Z\-][\w\.\/\-]+::?)(\[.*?\])/}, {token: "keyword", regex: /^:.+?:(?= |$)/} ], "quotes": [ {token: "string.italic", regex: /__[^_\s].*?__/}, {token: "string.italic", regex: quoteRule("_")}, {token: "keyword.bold", regex: /\*\*[^*\s].*?\*\*/}, {token: "keyword.bold", regex: quoteRule("\\*")}, {token: "literal", regex: quoteRule("\\+")}, {token: "literal", regex: /\+\+[^+\s].*?\+\+/}, {token: "literal", regex: /\$\$.+?\$\$/}, {token: "literal", regex: quoteRule("`")}, {token: "keyword", regex: quoteRule("^")}, {token: "keyword", regex: quoteRule("~")}, {token: "keyword", regex: /##?/}, {token: "keyword", regex: /(?:\B|^)``|\b''/} ] }; function quoteRule(ch) { var prefix = /\w/.test(ch) ? "\\b" : "(?:\\B|^)"; return prefix + ch + "[^" + ch + "].*?" + ch + "(?![\\w*])"; } var tokenMap = { macro: "constant.character", tableBlock: "doc.comment", titleUnderline: "markup.heading", singleLineTitle: "markup.heading", pageBreak: "string", option: "string.regexp", otherBlock: "markup.list", literal: "support.function", optionalTitle: "constant.numeric", escape: "constant.language.escape", link: "markup.underline.list" }; for (var state in this.$rules) { var stateRules = this.$rules[state]; for (var i = stateRules.length; i--; ) { var rule = stateRules[i]; if (rule.include || typeof rule == "string") { var args = [i, 1].concat(this.$rules[rule.include || rule]); if (rule.noEscape) { args = args.filter(function(x) { return !x.next; }); } stateRules.splice.apply(stateRules, args); } else if (rule.token in tokenMap) { rule.token = tokenMap[rule.token]; } } } }; oop.inherits(AsciidocHighlightRules, TextHighlightRules); exports.AsciidocHighlightRules = AsciidocHighlightRules; }); ace.define("ace/mode/folding/asciidoc",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /^(?:\|={10,}|[\.\/=\-~^+]{4,}\s*$|={1,5} )/; this.singleLineHeadingRe = /^={1,5}(?=\s+\S)/; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (!this.foldingStartMarker.test(line)) return "" if (line[0] == "=") { if (this.singleLineHeadingRe.test(line)) return "start"; if (session.getLine(row - 1).length != session.getLine(row).length) return ""; return "start"; } if (session.bgTokenizer.getState(row) == "dissallowDelimitedBlock") return "end"; return "start"; }; this.getFoldWidgetRange = function(session, foldStyle, row) { var line = session.getLine(row); var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; if (!line.match(this.foldingStartMarker)) return; var token; function getTokenType(row) { token = session.getTokens(row)[0]; return token && token.type; } var levels = ["=","-","~","^","+"]; var heading = "markup.heading"; var singleLineHeadingRe = this.singleLineHeadingRe; function getLevel() { var match = token.value.match(singleLineHeadingRe); if (match) return match[0].length; var level = levels.indexOf(token.value[0]) + 1; if (level == 1) { if (session.getLine(row - 1).length != session.getLine(row).length) return Infinity; } return level; } if (getTokenType(row) == heading) { var startHeadingLevel = getLevel(); while (++row < maxRow) { if (getTokenType(row) != heading) continue; var level = getLevel(); if (level <= startHeadingLevel) break; } var isSingleLineHeading = token && token.value.match(this.singleLineHeadingRe); endRow = isSingleLineHeading ? row - 1 : row - 2; if (endRow > startRow) { while (endRow > startRow && (!getTokenType(endRow) || token.value[0] == "[")) endRow--; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } } else { var state = session.bgTokenizer.getState(row); if (state == "dissallowDelimitedBlock") { while (row -- > 0) { if (session.bgTokenizer.getState(row).lastIndexOf("Block") == -1) break; } endRow = row + 1; if (endRow < startRow) { var endColumn = session.getLine(row).length; return new Range(endRow, 5, startRow, startColumn - 5); } } else { while (++row < maxRow) { if (session.bgTokenizer.getState(row) == "dissallowDelimitedBlock") break; } endRow = row; if (endRow > startRow) { var endColumn = session.getLine(row).length; return new Range(startRow, 5, endRow, endColumn - 5); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/asciidoc",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/asciidoc_highlight_rules","ace/mode/folding/asciidoc"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var AsciidocHighlightRules = require("./asciidoc_highlight_rules").AsciidocHighlightRules; var AsciidocFoldMode = require("./folding/asciidoc").FoldMode; var Mode = function() { this.HighlightRules = AsciidocHighlightRules; this.foldingRules = new AsciidocFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.type = "text"; this.getNextLineIndent = function(state, line, tab) { if (state == "listblock") { var match = /^((?:.+)?)([-+*][ ]+)/.exec(line); if (match) { return new Array(match[1].length + 1).join(" ") + match[2]; } else { return ""; } } else { return this.$getIndent(line); } }; this.$id = "ace/mode/asciidoc"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-assembly_x86.js ================================================ ace.define("ace/mode/assembly_x86_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var AssemblyX86HighlightRules = function() { this.$rules = { start: [ { token: 'keyword.control.assembly', regex: '\\b(?:aaa|aad|aam|aas|adc|add|addpd|addps|addsd|addss|addsubpd|addsubps|aesdec|aesdeclast|aesenc|aesenclast|aesimc|aeskeygenassist|and|andpd|andps|andnpd|andnps|arpl|blendpd|blendps|blendvpd|blendvps|bound|bsf|bsr|bswap|bt|btc|btr|bts|cbw|cwde|cdqe|clc|cld|cflush|clts|cmc|cmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|cmp|cmppd|cmpps|cmps|cnpsb|cmpsw|cmpsd|cmpsq|cmpss|cmpxchg|cmpxchg8b|cmpxchg16b|comisd|comiss|cpuid|crc32|cvtdq2pd|cvtdq2ps|cvtpd2dq|cvtpd2pi|cvtpd2ps|cvtpi2pd|cvtpi2ps|cvtps2dq|cvtps2pd|cvtps2pi|cvtsd2si|cvtsd2ss|cvts2sd|cvtsi2ss|cvtss2sd|cvtss2si|cvttpd2dq|cvtpd2pi|cvttps2dq|cvttps2pi|cvttps2dq|cvttps2pi|cvttsd2si|cvttss2si|cwd|cdq|cqo|daa|das|dec|div|divpd|divps|divsd|divss|dppd|dpps|emms|enter|extractps|f2xm1|fabs|fadd|faddp|fiadd|fbld|fbstp|fchs|fclex|fnclex|fcmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|fcom|fcmop|fcompp|fcomi|fcomip|fucomi|fucomip|fcos|fdecstp|fdiv|fdivp|fidiv|fdivr|fdivrp|fidivr|ffree|ficom|ficomp|fild|fincstp|finit|fnint|fist|fistp|fisttp|fld|fld1|fldl2t|fldl2e|fldpi|fldlg2|fldln2|fldz|fldcw|fldenv|fmul|fmulp|fimul|fnop|fpatan|fprem|fprem1|fptan|frndint|frstor|fsave|fnsave|fscale|fsin|fsincos|fsqrt|fst|fstp|fstcw|fnstcw|fstenv|fnstenv|fsts|fnstsw|fsub|fsubp|fisub|fsubr|fsubrp|fisubr|ftst|fucom|fucomp|fucompp|fxam|fxch|fxrstor|fxsave|fxtract|fyl2x|fyl2xp1|haddpd|haddps|husbpd|hsubps|idiv|imul|in|inc|ins|insb|insw|insd|insertps|int|into|invd|invplg|invpcid|iret|iretd|iretq|lahf|lar|lddqu|ldmxcsr|lds|les|lfs|lgs|lss|lea|leave|lfence|lgdt|lidt|llgdt|lmsw|lock|lods|lodsb|lodsw|lodsd|lodsq|lsl|ltr|maskmovdqu|maskmovq|maxpd|maxps|maxsd|maxss|mfence|minpd|minps|minsd|minss|monitor|mov|movapd|movaps|movbe|movd|movq|movddup|movdqa|movdqu|movq2q|movhlps|movhpd|movhps|movlhps|movlpd|movlps|movmskpd|movmskps|movntdqa|movntdq|movnti|movntpd|movntps|movntq|movq|movq2dq|movs|movsb|movsw|movsd|movsq|movsd|movshdup|movsldup|movss|movsx|movsxd|movupd|movups|movzx|mpsadbw|mul|mulpd|mulps|mulsd|mulss|mwait|neg|not|or|orpd|orps|out|outs|outsb|outsw|outsd|pabsb|pabsw|pabsd|packsswb|packssdw|packusdw|packuswbpaddb|paddw|paddd|paddq|paddsb|paddsw|paddusb|paddusw|palignr|pand|pandn|pause|pavgb|pavgw|pblendvb|pblendw|pclmulqdq|pcmpeqb|pcmpeqw|pcmpeqd|pcmpeqq|pcmpestri|pcmpestrm|pcmptb|pcmptgw|pcmpgtd|pcmpgtq|pcmpistri|pcmpisrm|pextrb|pextrd|pextrq|pextrw|phaddw|phaddd|phaddsw|phinposuw|phsubw|phsubd|phsubsw|pinsrb|pinsrd|pinsrq|pinsrw|pmaddubsw|pmadddwd|pmaxsb|pmaxsd|pmaxsw|pmaxsw|pmaxub|pmaxud|pmaxuw|pminsb|pminsd|pminsw|pminub|pminud|pminuw|pmovmskb|pmovsx|pmovzx|pmuldq|pmulhrsw|pmulhuw|pmulhw|pmulld|pmullw|pmuludw|pop|popa|popad|popcnt|popf|popfd|popfq|por|prefetch|psadbw|pshufb|pshufd|pshufhw|pshuflw|pshufw|psignb|psignw|psignd|pslldq|psllw|pslld|psllq|psraw|psrad|psrldq|psrlw|psrld|psrlq|psubb|psubw|psubd|psubq|psubsb|psubsw|psubusb|psubusw|test|ptest|punpckhbw|punpckhwd|punpckhdq|punpckhddq|punpcklbw|punpcklwd|punpckldq|punpckldqd|push|pusha|pushad|pushf|pushfd|pxor|prcl|rcr|rol|ror|rcpps|rcpss|rdfsbase|rdgsbase|rdmsr|rdpmc|rdrand|rdtsc|rdtscp|rep|repe|repz|repne|repnz|roundpd|roundps|roundsd|roundss|rsm|rsqrps|rsqrtss|sahf|sal|sar|shl|shr|sbb|scas|scasb|scasw|scasd|set(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|sfence|sgdt|shld|shrd|shufpd|shufps|sidt|sldt|smsw|sqrtpd|sqrtps|sqrtsd|sqrtss|stc|std|stmxcsr|stos|stosb|stosw|stosd|stosq|str|sub|subpd|subps|subsd|subss|swapgs|syscall|sysenter|sysexit|sysret|teset|ucomisd|ucomiss|ud2|unpckhpd|unpckhps|unpcklpd|unpcklps|vbroadcast|vcvtph2ps|vcvtp2sph|verr|verw|vextractf128|vinsertf128|vmaskmov|vpermilpd|vpermilps|vperm2f128|vtestpd|vtestps|vzeroall|vzeroupper|wait|fwait|wbinvd|wrfsbase|wrgsbase|wrmsr|xadd|xchg|xgetbv|xlat|xlatb|xor|xorpd|xorps|xrstor|xsave|xsaveopt|xsetbv|lzcnt|extrq|insertq|movntsd|movntss|vfmaddpd|vfmaddps|vfmaddsd|vfmaddss|vfmaddsubbpd|vfmaddsubps|vfmsubaddpd|vfmsubaddps|vfmsubpd|vfmsubps|vfmsubsd|vfnmaddpd|vfnmaddps|vfnmaddsd|vfnmaddss|vfnmsubpd|vfnmusbps|vfnmusbsd|vfnmusbss|cvt|xor|cli|sti|hlt|nop|lock|wait|enter|leave|ret|loop(?:n?e|n?z)?|call|j(?:mp|n?e|ge?|ae?|le?|be?|n?o|n?z))\\b', caseInsensitive: true }, { token: 'variable.parameter.register.assembly', regex: '\\b(?:CS|DS|ES|FS|GS|SS|RAX|EAX|RBX|EBX|RCX|ECX|RDX|EDX|RCX|RIP|EIP|IP|RSP|ESP|SP|RSI|ESI|SI|RDI|EDI|DI|RFLAGS|EFLAGS|FLAGS|R8-15|(?:Y|X)MM(?:[0-9]|10|11|12|13|14|15)|(?:A|B|C|D)(?:X|H|L)|CR(?:[0-4]|DR(?:[0-7]|TR6|TR7|EFER)))\\b', caseInsensitive: true }, { token: 'constant.character.decimal.assembly', regex: '\\b[0-9]+\\b' }, { token: 'constant.character.hexadecimal.assembly', regex: '\\b0x[A-F0-9]+\\b', caseInsensitive: true }, { token: 'constant.character.hexadecimal.assembly', regex: '\\b[A-F0-9]+h\\b', caseInsensitive: true }, { token: 'string.assembly', regex: /'([^\\']|\\.)*'/ }, { token: 'string.assembly', regex: /"([^\\"]|\\.)*"/ }, { token: 'support.function.directive.assembly', regex: '^\\[', push: [ { token: 'support.function.directive.assembly', regex: '\\]$', next: 'pop' }, { defaultToken: 'support.function.directive.assembly' } ] }, { token: [ 'support.function.directive.assembly', 'support.function.directive.assembly', 'entity.name.function.assembly' ], regex: '(^struc)( )([_a-zA-Z][_a-zA-Z0-9]*)' }, { token: 'support.function.directive.assembly', regex: '^endstruc\\b' }, { token: [ 'support.function.directive.assembly', 'entity.name.function.assembly', 'support.function.directive.assembly', 'constant.character.assembly' ], regex: '^(%macro )([_a-zA-Z][_a-zA-Z0-9]*)( )([0-9]+)' }, { token: 'support.function.directive.assembly', regex: '^%endmacro' }, { token: [ 'text', 'support.function.directive.assembly', 'text', 'entity.name.function.assembly' ], regex: '(\\s*)(%define|%xdefine|%idefine|%undef|%assign|%defstr|%strcat|%strlen|%substr|%00|%0|%rotate|%rep|%endrep|%include|\\$\\$|\\$|%unmacro|%if|%elif|%else|%endif|%(?:el)?ifdef|%(?:el)?ifmacro|%(?:el)?ifctx|%(?:el)?ifidn|%(?:el)?ifidni|%(?:el)?ifid|%(?:el)?ifnum|%(?:el)?ifstr|%(?:el)?iftoken|%(?:el)?ifempty|%(?:el)?ifenv|%pathsearch|%depend|%use|%push|%pop|%repl|%arg|%stacksize|%local|%error|%warning|%fatal|%line|%!|%comment|%endcomment|__NASM_VERSION_ID__|__NASM_VER__|__FILE__|__LINE__|__BITS__|__OUTPUT_FORMAT__|__DATE__|__TIME__|__DATE_NUM__|_TIME__NUM__|__UTC_DATE__|__UTC_TIME__|__UTC_DATE_NUM__|__UTC_TIME_NUM__|__POSIX_TIME__|__PASS__|ISTRUC|AT|IEND|BITS 16|BITS 32|BITS 64|USE16|USE32|__SECT__|ABSOLUTE|EXTERN|GLOBAL|COMMON|CPU|FLOAT)\\b( ?)((?:[_a-zA-Z][_a-zA-Z0-9]*)?)', caseInsensitive: true }, { token: 'support.function.directive.assembly', regex: '\\b(?:d[bwdqtoy]|res[bwdqto]|equ|times|align|alignb|sectalign|section|ptr|byte|word|dword|qword|incbin)\\b', caseInsensitive: true }, { token: 'entity.name.function.assembly', regex: '^\\s*%%[\\w.]+?:$' }, { token: 'entity.name.function.assembly', regex: '^\\s*%\\$[\\w.]+?:$' }, { token: 'entity.name.function.assembly', regex: '^[\\w.]+?:' }, { token: 'entity.name.function.assembly', regex: '^[\\w.]+?\\b' }, { token: 'comment.assembly', regex: ';.*$' } ] } this.normalizeRules(); }; AssemblyX86HighlightRules.metaData = { fileTypes: [ 'asm' ], name: 'Assembly x86', scopeName: 'source.assembly' } oop.inherits(AssemblyX86HighlightRules, TextHighlightRules); exports.AssemblyX86HighlightRules = AssemblyX86HighlightRules; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/assembly_x86",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/assembly_x86_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var AssemblyX86HighlightRules = require("./assembly_x86_highlight_rules").AssemblyX86HighlightRules; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = AssemblyX86HighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = ";"; this.$id = "ace/mode/assembly_x86"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-autohotkey.js ================================================ ace.define("ace/mode/autohotkey_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var AutoHotKeyHighlightRules = function() { var autoItKeywords = 'And|ByRef|Case|Const|ContinueCase|ContinueLoop|Default|Dim|Do|Else|ElseIf|EndFunc|EndIf|EndSelect|EndSwitch|EndWith|Enum|Exit|ExitLoop|False|For|Func|Global|If|In|Local|Next|Not|Or|ReDim|Return|Select|Step|Switch|Then|To|True|Until|WEnd|While|With|' + 'Abs|ACos|AdlibDisable|AdlibEnable|Asc|AscW|ASin|Assign|ATan|AutoItSetOption|AutoItWinGetTitle|AutoItWinSetTitle|Beep|Binary|BinaryLen|BinaryMid|BinaryToString|BitAND|BitNOT|BitOR|BitRotate|BitShift|BitXOR|BlockInput|Break|Call|CDTray|Ceiling|Chr|ChrW|ClipGet|ClipPut|ConsoleRead|ConsoleWrite|ConsoleWriteError|ControlClick|ControlCommand|ControlDisable|ControlEnable|ControlFocus|ControlGetFocus|ControlGetHandle|ControlGetPos|ControlGetText|ControlHide|ControlListView|ControlMove|ControlSend|ControlSetText|ControlShow|ControlTreeView|Cos|Dec|DirCopy|DirCreate|DirGetSize|DirMove|DirRemove|DllCall|DllCallbackFree|DllCallbackGetPtr|DllCallbackRegister|DllClose|DllOpen|DllStructCreate|DllStructGetData|DllStructGetPtr|DllStructGetSize|DllStructSetData|DriveGetDrive|DriveGetFileSystem|DriveGetLabel|DriveGetSerial|DriveGetType|DriveMapAdd|DriveMapDel|DriveMapGet|DriveSetLabel|DriveSpaceFree|DriveSpaceTotal|DriveStatus|EnvGet|EnvSet|EnvUpdate|Eval|Execute|Exp|FileChangeDir|FileClose|FileCopy|FileCreateNTFSLink|FileCreateShortcut|FileDelete|FileExists|FileFindFirstFile|FileFindNextFile|FileGetAttrib|FileGetLongName|FileGetShortcut|FileGetShortName|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileOpen|FileOpenDialog|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileSaveDialog|FileSelectFolder|FileSetAttrib|FileSetTime|FileWrite|FileWriteLine|Floor|FtpSetProxy|GUICreate|GUICtrlCreateAvi|GUICtrlCreateButton|GUICtrlCreateCheckbox|GUICtrlCreateCombo|GUICtrlCreateContextMenu|GUICtrlCreateDate|GUICtrlCreateDummy|GUICtrlCreateEdit|GUICtrlCreateGraphic|GUICtrlCreateGroup|GUICtrlCreateIcon|GUICtrlCreateInput|GUICtrlCreateLabel|GUICtrlCreateList|GUICtrlCreateListView|GUICtrlCreateListViewItem|GUICtrlCreateMenu|GUICtrlCreateMenuItem|GUICtrlCreateMonthCal|GUICtrlCreateObj|GUICtrlCreatePic|GUICtrlCreateProgress|GUICtrlCreateRadio|GUICtrlCreateSlider|GUICtrlCreateTab|GUICtrlCreateTabItem|GUICtrlCreateTreeView|GUICtrlCreateTreeViewItem|GUICtrlCreateUpdown|GUICtrlDelete|GUICtrlGetHandle|GUICtrlGetState|GUICtrlRead|GUICtrlRecvMsg|GUICtrlRegisterListViewSort|GUICtrlSendMsg|GUICtrlSendToDummy|GUICtrlSetBkColor|GUICtrlSetColor|GUICtrlSetCursor|GUICtrlSetData|GUICtrlSetFont|GUICtrlSetDefColor|GUICtrlSetDefBkColor|GUICtrlSetGraphic|GUICtrlSetImage|GUICtrlSetLimit|GUICtrlSetOnEvent|GUICtrlSetPos|GUICtrlSetResizing|GUICtrlSetState|GUICtrlSetStyle|GUICtrlSetTip|GUIDelete|GUIGetCursorInfo|GUIGetMsg|GUIGetStyle|GUIRegisterMsg|GUISetAccelerators()|GUISetBkColor|GUISetCoord|GUISetCursor|GUISetFont|GUISetHelp|GUISetIcon|GUISetOnEvent|GUISetState|GUISetStyle|GUIStartGroup|GUISwitch|Hex|HotKeySet|HttpSetProxy|HWnd|InetGet|InetGetSize|IniDelete|IniRead|IniReadSection|IniReadSectionNames|IniRenameSection|IniWrite|IniWriteSection|InputBox|Int|IsAdmin|IsArray|IsBinary|IsBool|IsDeclared|IsDllStruct|IsFloat|IsHWnd|IsInt|IsKeyword|IsNumber|IsObj|IsPtr|IsString|Log|MemGetStats|Mod|MouseClick|MouseClickDrag|MouseDown|MouseGetCursor|MouseGetPos|MouseMove|MouseUp|MouseWheel|MsgBox|Number|ObjCreate|ObjEvent|ObjGet|ObjName|Opt|Ping|PixelChecksum|PixelGetColor|PixelSearch|PluginClose|PluginOpen|ProcessClose|ProcessExists|ProcessGetStats|ProcessList|ProcessSetPriority|ProcessWait|ProcessWaitClose|ProgressOff|ProgressOn|ProgressSet|Ptr|Random|RegDelete|RegEnumKey|RegEnumVal|RegRead|RegWrite|Round|Run|RunAs|RunAsWait|RunWait|Send|SendKeepActive|SetError|SetExtended|ShellExecute|ShellExecuteWait|Shutdown|Sin|Sleep|SoundPlay|SoundSetWaveVolume|SplashImageOn|SplashOff|SplashTextOn|Sqrt|SRandom|StatusbarGetText|StderrRead|StdinWrite|StdioClose|StdoutRead|String|StringAddCR|StringCompare|StringFormat|StringInStr|StringIsAlNum|StringIsAlpha|StringIsASCII|StringIsDigit|StringIsFloat|StringIsInt|StringIsLower|StringIsSpace|StringIsUpper|StringIsXDigit|StringLeft|StringLen|StringLower|StringMid|StringRegExp|StringRegExpReplace|StringReplace|StringRight|StringSplit|StringStripCR|StringStripWS|StringToBinary|StringTrimLeft|StringTrimRight|StringUpper|Tan|TCPAccept|TCPCloseSocket|TCPConnect|TCPListen|TCPNameToIP|TCPRecv|TCPSend|TCPShutdown|TCPStartup|TimerDiff|TimerInit|ToolTip|TrayCreateItem|TrayCreateMenu|TrayGetMsg|TrayItemDelete|TrayItemGetHandle|TrayItemGetState|TrayItemGetText|TrayItemSetOnEvent|TrayItemSetState|TrayItemSetText|TraySetClick|TraySetIcon|TraySetOnEvent|TraySetPauseIcon|TraySetState|TraySetToolTip|TrayTip|UBound|UDPBind|UDPCloseSocket|UDPOpen|UDPRecv|UDPSend|UDPShutdown|UDPStartup|VarGetType|WinActivate|WinActive|WinClose|WinExists|WinFlash|WinGetCaretPos|WinGetClassList|WinGetClientSize|WinGetHandle|WinGetPos|WinGetProcess|WinGetState|WinGetText|WinGetTitle|WinKill|WinList|WinMenuSelectItem|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinSetOnTop|WinSetState|WinSetTitle|WinSetTrans|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive|' + 'ArrayAdd|ArrayBinarySearch|ArrayConcatenate|ArrayDelete|ArrayDisplay|ArrayFindAll|ArrayInsert|ArrayMax|ArrayMaxIndex|ArrayMin|ArrayMinIndex|ArrayPop|ArrayPush|ArrayReverse|ArraySearch|ArraySort|ArraySwap|ArrayToClip|ArrayToString|ArrayTrim|ChooseColor|ChooseFont|ClipBoard_ChangeChain|ClipBoard_Close|ClipBoard_CountFormats|ClipBoard_Empty|ClipBoard_EnumFormats|ClipBoard_FormatStr|ClipBoard_GetData|ClipBoard_GetDataEx|ClipBoard_GetFormatName|ClipBoard_GetOpenWindow|ClipBoard_GetOwner|ClipBoard_GetPriorityFormat|ClipBoard_GetSequenceNumber|ClipBoard_GetViewer|ClipBoard_IsFormatAvailable|ClipBoard_Open|ClipBoard_RegisterFormat|ClipBoard_SetData|ClipBoard_SetDataEx|ClipBoard_SetViewer|ClipPutFile|ColorConvertHSLtoRGB|ColorConvertRGBtoHSL|ColorGetBlue|ColorGetGreen|ColorGetRed|Date_Time_CompareFileTime|Date_Time_DOSDateTimeToArray|Date_Time_DOSDateTimeToFileTime|Date_Time_DOSDateTimeToStr|Date_Time_DOSDateToArray|Date_Time_DOSDateToStr|Date_Time_DOSTimeToArray|Date_Time_DOSTimeToStr|Date_Time_EncodeFileTime|Date_Time_EncodeSystemTime|Date_Time_FileTimeToArray|Date_Time_FileTimeToDOSDateTime|Date_Time_FileTimeToLocalFileTime|Date_Time_FileTimeToStr|Date_Time_FileTimeToSystemTime|Date_Time_GetFileTime|Date_Time_GetLocalTime|Date_Time_GetSystemTime|Date_Time_GetSystemTimeAdjustment|Date_Time_GetSystemTimeAsFileTime|Date_Time_GetSystemTimes|Date_Time_GetTickCount|Date_Time_GetTimeZoneInformation|Date_Time_LocalFileTimeToFileTime|Date_Time_SetFileTime|Date_Time_SetLocalTime|Date_Time_SetSystemTime|Date_Time_SetSystemTimeAdjustment|Date_Time_SetTimeZoneInformation|Date_Time_SystemTimeToArray|Date_Time_SystemTimeToDateStr|Date_Time_SystemTimeToDateTimeStr|Date_Time_SystemTimeToFileTime|Date_Time_SystemTimeToTimeStr|Date_Time_SystemTimeToTzSpecificLocalTime|Date_Time_TzSpecificLocalTimeToSystemTime|DateAdd|DateDayOfWeek|DateDaysInMonth|DateDiff|DateIsLeapYear|DateIsValid|DateTimeFormat|DateTimeSplit|DateToDayOfWeek|DateToDayOfWeekISO|DateToDayValue|DateToMonth|DayValueToDate|DebugBugReportEnv|DebugOut|DebugSetup|Degree|EventLog__Backup|EventLog__Clear|EventLog__Close|EventLog__Count|EventLog__DeregisterSource|EventLog__Full|EventLog__Notify|EventLog__Oldest|EventLog__Open|EventLog__OpenBackup|EventLog__Read|EventLog__RegisterSource|EventLog__Report|FileCountLines|FileCreate|FileListToArray|FilePrint|FileReadToArray|FileWriteFromArray|FileWriteLog|FileWriteToLine|GDIPlus_ArrowCapCreate|GDIPlus_ArrowCapDispose|GDIPlus_ArrowCapGetFillState|GDIPlus_ArrowCapGetHeight|GDIPlus_ArrowCapGetMiddleInset|GDIPlus_ArrowCapGetWidth|GDIPlus_ArrowCapSetFillState|GDIPlus_ArrowCapSetHeight|GDIPlus_ArrowCapSetMiddleInset|GDIPlus_ArrowCapSetWidth|GDIPlus_BitmapCloneArea|GDIPlus_BitmapCreateFromFile|GDIPlus_BitmapCreateFromGraphics|GDIPlus_BitmapCreateFromHBITMAP|GDIPlus_BitmapCreateHBITMAPFromBitmap|GDIPlus_BitmapDispose|GDIPlus_BitmapLockBits|GDIPlus_BitmapUnlockBits|GDIPlus_BrushClone|GDIPlus_BrushCreateSolid|GDIPlus_BrushDispose|GDIPlus_BrushGetType|GDIPlus_CustomLineCapDispose|GDIPlus_Decoders|GDIPlus_DecodersGetCount|GDIPlus_DecodersGetSize|GDIPlus_Encoders|GDIPlus_EncodersGetCLSID|GDIPlus_EncodersGetCount|GDIPlus_EncodersGetParamList|GDIPlus_EncodersGetParamListSize|GDIPlus_EncodersGetSize|GDIPlus_FontCreate|GDIPlus_FontDispose|GDIPlus_FontFamilyCreate|GDIPlus_FontFamilyDispose|GDIPlus_GraphicsClear|GDIPlus_GraphicsCreateFromHDC|GDIPlus_GraphicsCreateFromHWND|GDIPlus_GraphicsDispose|GDIPlus_GraphicsDrawArc|GDIPlus_GraphicsDrawBezier|GDIPlus_GraphicsDrawClosedCurve|GDIPlus_GraphicsDrawCurve|GDIPlus_GraphicsDrawEllipse|GDIPlus_GraphicsDrawImage|GDIPlus_GraphicsDrawImageRect|GDIPlus_GraphicsDrawImageRectRect|GDIPlus_GraphicsDrawLine|GDIPlus_GraphicsDrawPie|GDIPlus_GraphicsDrawPolygon|GDIPlus_GraphicsDrawRect|GDIPlus_GraphicsDrawString|GDIPlus_GraphicsDrawStringEx|GDIPlus_GraphicsFillClosedCurve|GDIPlus_GraphicsFillEllipse|GDIPlus_GraphicsFillPie|GDIPlus_GraphicsFillRect|GDIPlus_GraphicsGetDC|GDIPlus_GraphicsGetSmoothingMode|GDIPlus_GraphicsMeasureString|GDIPlus_GraphicsReleaseDC|GDIPlus_GraphicsSetSmoothingMode|GDIPlus_GraphicsSetTransform|GDIPlus_ImageDispose|GDIPlus_ImageGetGraphicsContext|GDIPlus_ImageGetHeight|GDIPlus_ImageGetWidth|GDIPlus_ImageLoadFromFile|GDIPlus_ImageSaveToFile|GDIPlus_ImageSaveToFileEx|GDIPlus_MatrixCreate|GDIPlus_MatrixDispose|GDIPlus_MatrixRotate|GDIPlus_ParamAdd|GDIPlus_ParamInit|GDIPlus_PenCreate|GDIPlus_PenDispose|GDIPlus_PenGetAlignment|GDIPlus_PenGetColor|GDIPlus_PenGetCustomEndCap|GDIPlus_PenGetDashCap|GDIPlus_PenGetDashStyle|GDIPlus_PenGetEndCap|GDIPlus_PenGetWidth|GDIPlus_PenSetAlignment|GDIPlus_PenSetColor|GDIPlus_PenSetCustomEndCap|GDIPlus_PenSetDashCap|GDIPlus_PenSetDashStyle|GDIPlus_PenSetEndCap|GDIPlus_PenSetWidth|GDIPlus_RectFCreate|GDIPlus_Shutdown|GDIPlus_Startup|GDIPlus_StringFormatCreate|GDIPlus_StringFormatDispose|GetIP|GUICtrlAVI_Close|GUICtrlAVI_Create|GUICtrlAVI_Destroy|GUICtrlAVI_Open|GUICtrlAVI_OpenEx|GUICtrlAVI_Play|GUICtrlAVI_Seek|GUICtrlAVI_Show|GUICtrlAVI_Stop|GUICtrlButton_Click|GUICtrlButton_Create|GUICtrlButton_Destroy|GUICtrlButton_Enable|GUICtrlButton_GetCheck|GUICtrlButton_GetFocus|GUICtrlButton_GetIdealSize|GUICtrlButton_GetImage|GUICtrlButton_GetImageList|GUICtrlButton_GetState|GUICtrlButton_GetText|GUICtrlButton_GetTextMargin|GUICtrlButton_SetCheck|GUICtrlButton_SetFocus|GUICtrlButton_SetImage|GUICtrlButton_SetImageList|GUICtrlButton_SetSize|GUICtrlButton_SetState|GUICtrlButton_SetStyle|GUICtrlButton_SetText|GUICtrlButton_SetTextMargin|GUICtrlButton_Show|GUICtrlComboBox_AddDir|GUICtrlComboBox_AddString|GUICtrlComboBox_AutoComplete|GUICtrlComboBox_BeginUpdate|GUICtrlComboBox_Create|GUICtrlComboBox_DeleteString|GUICtrlComboBox_Destroy|GUICtrlComboBox_EndUpdate|GUICtrlComboBox_FindString|GUICtrlComboBox_FindStringExact|GUICtrlComboBox_GetComboBoxInfo|GUICtrlComboBox_GetCount|GUICtrlComboBox_GetCurSel|GUICtrlComboBox_GetDroppedControlRect|GUICtrlComboBox_GetDroppedControlRectEx|GUICtrlComboBox_GetDroppedState|GUICtrlComboBox_GetDroppedWidth|GUICtrlComboBox_GetEditSel|GUICtrlComboBox_GetEditText|GUICtrlComboBox_GetExtendedUI|GUICtrlComboBox_GetHorizontalExtent|GUICtrlComboBox_GetItemHeight|GUICtrlComboBox_GetLBText|GUICtrlComboBox_GetLBTextLen|GUICtrlComboBox_GetList|GUICtrlComboBox_GetListArray|GUICtrlComboBox_GetLocale|GUICtrlComboBox_GetLocaleCountry|GUICtrlComboBox_GetLocaleLang|GUICtrlComboBox_GetLocalePrimLang|GUICtrlComboBox_GetLocaleSubLang|GUICtrlComboBox_GetMinVisible|GUICtrlComboBox_GetTopIndex|GUICtrlComboBox_InitStorage|GUICtrlComboBox_InsertString|GUICtrlComboBox_LimitText|GUICtrlComboBox_ReplaceEditSel|GUICtrlComboBox_ResetContent|GUICtrlComboBox_SelectString|GUICtrlComboBox_SetCurSel|GUICtrlComboBox_SetDroppedWidth|GUICtrlComboBox_SetEditSel|GUICtrlComboBox_SetEditText|GUICtrlComboBox_SetExtendedUI|GUICtrlComboBox_SetHorizontalExtent|GUICtrlComboBox_SetItemHeight|GUICtrlComboBox_SetMinVisible|GUICtrlComboBox_SetTopIndex|GUICtrlComboBox_ShowDropDown|GUICtrlComboBoxEx_AddDir|GUICtrlComboBoxEx_AddString|GUICtrlComboBoxEx_BeginUpdate|GUICtrlComboBoxEx_Create|GUICtrlComboBoxEx_CreateSolidBitMap|GUICtrlComboBoxEx_DeleteString|GUICtrlComboBoxEx_Destroy|GUICtrlComboBoxEx_EndUpdate|GUICtrlComboBoxEx_FindStringExact|GUICtrlComboBoxEx_GetComboBoxInfo|GUICtrlComboBoxEx_GetComboControl|GUICtrlComboBoxEx_GetCount|GUICtrlComboBoxEx_GetCurSel|GUICtrlComboBoxEx_GetDroppedControlRect|GUICtrlComboBoxEx_GetDroppedControlRectEx|GUICtrlComboBoxEx_GetDroppedState|GUICtrlComboBoxEx_GetDroppedWidth|GUICtrlComboBoxEx_GetEditControl|GUICtrlComboBoxEx_GetEditSel|GUICtrlComboBoxEx_GetEditText|GUICtrlComboBoxEx_GetExtendedStyle|GUICtrlComboBoxEx_GetExtendedUI|GUICtrlComboBoxEx_GetImageList|GUICtrlComboBoxEx_GetItem|GUICtrlComboBoxEx_GetItemEx|GUICtrlComboBoxEx_GetItemHeight|GUICtrlComboBoxEx_GetItemImage|GUICtrlComboBoxEx_GetItemIndent|GUICtrlComboBoxEx_GetItemOverlayImage|GUICtrlComboBoxEx_GetItemParam|GUICtrlComboBoxEx_GetItemSelectedImage|GUICtrlComboBoxEx_GetItemText|GUICtrlComboBoxEx_GetItemTextLen|GUICtrlComboBoxEx_GetList|GUICtrlComboBoxEx_GetListArray|GUICtrlComboBoxEx_GetLocale|GUICtrlComboBoxEx_GetLocaleCountry|GUICtrlComboBoxEx_GetLocaleLang|GUICtrlComboBoxEx_GetLocalePrimLang|GUICtrlComboBoxEx_GetLocaleSubLang|GUICtrlComboBoxEx_GetMinVisible|GUICtrlComboBoxEx_GetTopIndex|GUICtrlComboBoxEx_InitStorage|GUICtrlComboBoxEx_InsertString|GUICtrlComboBoxEx_LimitText|GUICtrlComboBoxEx_ReplaceEditSel|GUICtrlComboBoxEx_ResetContent|GUICtrlComboBoxEx_SetCurSel|GUICtrlComboBoxEx_SetDroppedWidth|GUICtrlComboBoxEx_SetEditSel|GUICtrlComboBoxEx_SetEditText|GUICtrlComboBoxEx_SetExtendedStyle|GUICtrlComboBoxEx_SetExtendedUI|GUICtrlComboBoxEx_SetImageList|GUICtrlComboBoxEx_SetItem|GUICtrlComboBoxEx_SetItemEx|GUICtrlComboBoxEx_SetItemHeight|GUICtrlComboBoxEx_SetItemImage|GUICtrlComboBoxEx_SetItemIndent|GUICtrlComboBoxEx_SetItemOverlayImage|GUICtrlComboBoxEx_SetItemParam|GUICtrlComboBoxEx_SetItemSelectedImage|GUICtrlComboBoxEx_SetMinVisible|GUICtrlComboBoxEx_SetTopIndex|GUICtrlComboBoxEx_ShowDropDown|GUICtrlDTP_Create|GUICtrlDTP_Destroy|GUICtrlDTP_GetMCColor|GUICtrlDTP_GetMCFont|GUICtrlDTP_GetMonthCal|GUICtrlDTP_GetRange|GUICtrlDTP_GetRangeEx|GUICtrlDTP_GetSystemTime|GUICtrlDTP_GetSystemTimeEx|GUICtrlDTP_SetFormat|GUICtrlDTP_SetMCColor|GUICtrlDTP_SetMCFont|GUICtrlDTP_SetRange|GUICtrlDTP_SetRangeEx|GUICtrlDTP_SetSystemTime|GUICtrlDTP_SetSystemTimeEx|GUICtrlEdit_AppendText|GUICtrlEdit_BeginUpdate|GUICtrlEdit_CanUndo|GUICtrlEdit_CharFromPos|GUICtrlEdit_Create|GUICtrlEdit_Destroy|GUICtrlEdit_EmptyUndoBuffer|GUICtrlEdit_EndUpdate|GUICtrlEdit_Find|GUICtrlEdit_FmtLines|GUICtrlEdit_GetFirstVisibleLine|GUICtrlEdit_GetLimitText|GUICtrlEdit_GetLine|GUICtrlEdit_GetLineCount|GUICtrlEdit_GetMargins|GUICtrlEdit_GetModify|GUICtrlEdit_GetPasswordChar|GUICtrlEdit_GetRECT|GUICtrlEdit_GetRECTEx|GUICtrlEdit_GetSel|GUICtrlEdit_GetText|GUICtrlEdit_GetTextLen|GUICtrlEdit_HideBalloonTip|GUICtrlEdit_InsertText|GUICtrlEdit_LineFromChar|GUICtrlEdit_LineIndex|GUICtrlEdit_LineLength|GUICtrlEdit_LineScroll|GUICtrlEdit_PosFromChar|GUICtrlEdit_ReplaceSel|GUICtrlEdit_Scroll|GUICtrlEdit_SetLimitText|GUICtrlEdit_SetMargins|GUICtrlEdit_SetModify|GUICtrlEdit_SetPasswordChar|GUICtrlEdit_SetReadOnly|GUICtrlEdit_SetRECT|GUICtrlEdit_SetRECTEx|GUICtrlEdit_SetRECTNP|GUICtrlEdit_SetRectNPEx|GUICtrlEdit_SetSel|GUICtrlEdit_SetTabStops|GUICtrlEdit_SetText|GUICtrlEdit_ShowBalloonTip|GUICtrlEdit_Undo|GUICtrlHeader_AddItem|GUICtrlHeader_ClearFilter|GUICtrlHeader_ClearFilterAll|GUICtrlHeader_Create|GUICtrlHeader_CreateDragImage|GUICtrlHeader_DeleteItem|GUICtrlHeader_Destroy|GUICtrlHeader_EditFilter|GUICtrlHeader_GetBitmapMargin|GUICtrlHeader_GetImageList|GUICtrlHeader_GetItem|GUICtrlHeader_GetItemAlign|GUICtrlHeader_GetItemBitmap|GUICtrlHeader_GetItemCount|GUICtrlHeader_GetItemDisplay|GUICtrlHeader_GetItemFlags|GUICtrlHeader_GetItemFormat|GUICtrlHeader_GetItemImage|GUICtrlHeader_GetItemOrder|GUICtrlHeader_GetItemParam|GUICtrlHeader_GetItemRect|GUICtrlHeader_GetItemRectEx|GUICtrlHeader_GetItemText|GUICtrlHeader_GetItemWidth|GUICtrlHeader_GetOrderArray|GUICtrlHeader_GetUnicodeFormat|GUICtrlHeader_HitTest|GUICtrlHeader_InsertItem|GUICtrlHeader_Layout|GUICtrlHeader_OrderToIndex|GUICtrlHeader_SetBitmapMargin|GUICtrlHeader_SetFilterChangeTimeout|GUICtrlHeader_SetHotDivider|GUICtrlHeader_SetImageList|GUICtrlHeader_SetItem|GUICtrlHeader_SetItemAlign|GUICtrlHeader_SetItemBitmap|GUICtrlHeader_SetItemDisplay|GUICtrlHeader_SetItemFlags|GUICtrlHeader_SetItemFormat|GUICtrlHeader_SetItemImage|GUICtrlHeader_SetItemOrder|GUICtrlHeader_SetItemParam|GUICtrlHeader_SetItemText|GUICtrlHeader_SetItemWidth|GUICtrlHeader_SetOrderArray|GUICtrlHeader_SetUnicodeFormat|GUICtrlIpAddress_ClearAddress|GUICtrlIpAddress_Create|GUICtrlIpAddress_Destroy|GUICtrlIpAddress_Get|GUICtrlIpAddress_GetArray|GUICtrlIpAddress_GetEx|GUICtrlIpAddress_IsBlank|GUICtrlIpAddress_Set|GUICtrlIpAddress_SetArray|GUICtrlIpAddress_SetEx|GUICtrlIpAddress_SetFocus|GUICtrlIpAddress_SetFont|GUICtrlIpAddress_SetRange|GUICtrlIpAddress_ShowHide|GUICtrlListBox_AddFile|GUICtrlListBox_AddString|GUICtrlListBox_BeginUpdate|GUICtrlListBox_Create|GUICtrlListBox_DeleteString|GUICtrlListBox_Destroy|GUICtrlListBox_Dir|GUICtrlListBox_EndUpdate|GUICtrlListBox_FindInText|GUICtrlListBox_FindString|GUICtrlListBox_GetAnchorIndex|GUICtrlListBox_GetCaretIndex|GUICtrlListBox_GetCount|GUICtrlListBox_GetCurSel|GUICtrlListBox_GetHorizontalExtent|GUICtrlListBox_GetItemData|GUICtrlListBox_GetItemHeight|GUICtrlListBox_GetItemRect|GUICtrlListBox_GetItemRectEx|GUICtrlListBox_GetListBoxInfo|GUICtrlListBox_GetLocale|GUICtrlListBox_GetLocaleCountry|GUICtrlListBox_GetLocaleLang|GUICtrlListBox_GetLocalePrimLang|GUICtrlListBox_GetLocaleSubLang|GUICtrlListBox_GetSel|GUICtrlListBox_GetSelCount|GUICtrlListBox_GetSelItems|GUICtrlListBox_GetSelItemsText|GUICtrlListBox_GetText|GUICtrlListBox_GetTextLen|GUICtrlListBox_GetTopIndex|GUICtrlListBox_InitStorage|GUICtrlListBox_InsertString|GUICtrlListBox_ItemFromPoint|GUICtrlListBox_ReplaceString|GUICtrlListBox_ResetContent|GUICtrlListBox_SelectString|GUICtrlListBox_SelItemRange|GUICtrlListBox_SelItemRangeEx|GUICtrlListBox_SetAnchorIndex|GUICtrlListBox_SetCaretIndex|GUICtrlListBox_SetColumnWidth|GUICtrlListBox_SetCurSel|GUICtrlListBox_SetHorizontalExtent|GUICtrlListBox_SetItemData|GUICtrlListBox_SetItemHeight|GUICtrlListBox_SetLocale|GUICtrlListBox_SetSel|GUICtrlListBox_SetTabStops|GUICtrlListBox_SetTopIndex|GUICtrlListBox_Sort|GUICtrlListBox_SwapString|GUICtrlListBox_UpdateHScroll|GUICtrlListView_AddArray|GUICtrlListView_AddColumn|GUICtrlListView_AddItem|GUICtrlListView_AddSubItem|GUICtrlListView_ApproximateViewHeight|GUICtrlListView_ApproximateViewRect|GUICtrlListView_ApproximateViewWidth|GUICtrlListView_Arrange|GUICtrlListView_BeginUpdate|GUICtrlListView_CancelEditLabel|GUICtrlListView_ClickItem|GUICtrlListView_CopyItems|GUICtrlListView_Create|GUICtrlListView_CreateDragImage|GUICtrlListView_CreateSolidBitMap|GUICtrlListView_DeleteAllItems|GUICtrlListView_DeleteColumn|GUICtrlListView_DeleteItem|GUICtrlListView_DeleteItemsSelected|GUICtrlListView_Destroy|GUICtrlListView_DrawDragImage|GUICtrlListView_EditLabel|GUICtrlListView_EnableGroupView|GUICtrlListView_EndUpdate|GUICtrlListView_EnsureVisible|GUICtrlListView_FindInText|GUICtrlListView_FindItem|GUICtrlListView_FindNearest|GUICtrlListView_FindParam|GUICtrlListView_FindText|GUICtrlListView_GetBkColor|GUICtrlListView_GetBkImage|GUICtrlListView_GetCallbackMask|GUICtrlListView_GetColumn|GUICtrlListView_GetColumnCount|GUICtrlListView_GetColumnOrder|GUICtrlListView_GetColumnOrderArray|GUICtrlListView_GetColumnWidth|GUICtrlListView_GetCounterPage|GUICtrlListView_GetEditControl|GUICtrlListView_GetExtendedListViewStyle|GUICtrlListView_GetGroupInfo|GUICtrlListView_GetGroupViewEnabled|GUICtrlListView_GetHeader|GUICtrlListView_GetHotCursor|GUICtrlListView_GetHotItem|GUICtrlListView_GetHoverTime|GUICtrlListView_GetImageList|GUICtrlListView_GetISearchString|GUICtrlListView_GetItem|GUICtrlListView_GetItemChecked|GUICtrlListView_GetItemCount|GUICtrlListView_GetItemCut|GUICtrlListView_GetItemDropHilited|GUICtrlListView_GetItemEx|GUICtrlListView_GetItemFocused|GUICtrlListView_GetItemGroupID|GUICtrlListView_GetItemImage|GUICtrlListView_GetItemIndent|GUICtrlListView_GetItemParam|GUICtrlListView_GetItemPosition|GUICtrlListView_GetItemPositionX|GUICtrlListView_GetItemPositionY|GUICtrlListView_GetItemRect|GUICtrlListView_GetItemRectEx|GUICtrlListView_GetItemSelected|GUICtrlListView_GetItemSpacing|GUICtrlListView_GetItemSpacingX|GUICtrlListView_GetItemSpacingY|GUICtrlListView_GetItemState|GUICtrlListView_GetItemStateImage|GUICtrlListView_GetItemText|GUICtrlListView_GetItemTextArray|GUICtrlListView_GetItemTextString|GUICtrlListView_GetNextItem|GUICtrlListView_GetNumberOfWorkAreas|GUICtrlListView_GetOrigin|GUICtrlListView_GetOriginX|GUICtrlListView_GetOriginY|GUICtrlListView_GetOutlineColor|GUICtrlListView_GetSelectedColumn|GUICtrlListView_GetSelectedCount|GUICtrlListView_GetSelectedIndices|GUICtrlListView_GetSelectionMark|GUICtrlListView_GetStringWidth|GUICtrlListView_GetSubItemRect|GUICtrlListView_GetTextBkColor|GUICtrlListView_GetTextColor|GUICtrlListView_GetToolTips|GUICtrlListView_GetTopIndex|GUICtrlListView_GetUnicodeFormat|GUICtrlListView_GetView|GUICtrlListView_GetViewDetails|GUICtrlListView_GetViewLarge|GUICtrlListView_GetViewList|GUICtrlListView_GetViewRect|GUICtrlListView_GetViewSmall|GUICtrlListView_GetViewTile|GUICtrlListView_HideColumn|GUICtrlListView_HitTest|GUICtrlListView_InsertColumn|GUICtrlListView_InsertGroup|GUICtrlListView_InsertItem|GUICtrlListView_JustifyColumn|GUICtrlListView_MapIDToIndex|GUICtrlListView_MapIndexToID|GUICtrlListView_RedrawItems|GUICtrlListView_RegisterSortCallBack|GUICtrlListView_RemoveAllGroups|GUICtrlListView_RemoveGroup|GUICtrlListView_Scroll|GUICtrlListView_SetBkColor|GUICtrlListView_SetBkImage|GUICtrlListView_SetCallBackMask|GUICtrlListView_SetColumn|GUICtrlListView_SetColumnOrder|GUICtrlListView_SetColumnOrderArray|GUICtrlListView_SetColumnWidth|GUICtrlListView_SetExtendedListViewStyle|GUICtrlListView_SetGroupInfo|GUICtrlListView_SetHotItem|GUICtrlListView_SetHoverTime|GUICtrlListView_SetIconSpacing|GUICtrlListView_SetImageList|GUICtrlListView_SetItem|GUICtrlListView_SetItemChecked|GUICtrlListView_SetItemCount|GUICtrlListView_SetItemCut|GUICtrlListView_SetItemDropHilited|GUICtrlListView_SetItemEx|GUICtrlListView_SetItemFocused|GUICtrlListView_SetItemGroupID|GUICtrlListView_SetItemImage|GUICtrlListView_SetItemIndent|GUICtrlListView_SetItemParam|GUICtrlListView_SetItemPosition|GUICtrlListView_SetItemPosition32|GUICtrlListView_SetItemSelected|GUICtrlListView_SetItemState|GUICtrlListView_SetItemStateImage|GUICtrlListView_SetItemText|GUICtrlListView_SetOutlineColor|GUICtrlListView_SetSelectedColumn|GUICtrlListView_SetSelectionMark|GUICtrlListView_SetTextBkColor|GUICtrlListView_SetTextColor|GUICtrlListView_SetToolTips|GUICtrlListView_SetUnicodeFormat|GUICtrlListView_SetView|GUICtrlListView_SetWorkAreas|GUICtrlListView_SimpleSort|GUICtrlListView_SortItems|GUICtrlListView_SubItemHitTest|GUICtrlListView_UnRegisterSortCallBack|GUICtrlMenu_AddMenuItem|GUICtrlMenu_AppendMenu|GUICtrlMenu_CheckMenuItem|GUICtrlMenu_CheckRadioItem|GUICtrlMenu_CreateMenu|GUICtrlMenu_CreatePopup|GUICtrlMenu_DeleteMenu|GUICtrlMenu_DestroyMenu|GUICtrlMenu_DrawMenuBar|GUICtrlMenu_EnableMenuItem|GUICtrlMenu_FindItem|GUICtrlMenu_FindParent|GUICtrlMenu_GetItemBmp|GUICtrlMenu_GetItemBmpChecked|GUICtrlMenu_GetItemBmpUnchecked|GUICtrlMenu_GetItemChecked|GUICtrlMenu_GetItemCount|GUICtrlMenu_GetItemData|GUICtrlMenu_GetItemDefault|GUICtrlMenu_GetItemDisabled|GUICtrlMenu_GetItemEnabled|GUICtrlMenu_GetItemGrayed|GUICtrlMenu_GetItemHighlighted|GUICtrlMenu_GetItemID|GUICtrlMenu_GetItemInfo|GUICtrlMenu_GetItemRect|GUICtrlMenu_GetItemRectEx|GUICtrlMenu_GetItemState|GUICtrlMenu_GetItemStateEx|GUICtrlMenu_GetItemSubMenu|GUICtrlMenu_GetItemText|GUICtrlMenu_GetItemType|GUICtrlMenu_GetMenu|GUICtrlMenu_GetMenuBackground|GUICtrlMenu_GetMenuBarInfo|GUICtrlMenu_GetMenuContextHelpID|GUICtrlMenu_GetMenuData|GUICtrlMenu_GetMenuDefaultItem|GUICtrlMenu_GetMenuHeight|GUICtrlMenu_GetMenuInfo|GUICtrlMenu_GetMenuStyle|GUICtrlMenu_GetSystemMenu|GUICtrlMenu_InsertMenuItem|GUICtrlMenu_InsertMenuItemEx|GUICtrlMenu_IsMenu|GUICtrlMenu_LoadMenu|GUICtrlMenu_MapAccelerator|GUICtrlMenu_MenuItemFromPoint|GUICtrlMenu_RemoveMenu|GUICtrlMenu_SetItemBitmaps|GUICtrlMenu_SetItemBmp|GUICtrlMenu_SetItemBmpChecked|GUICtrlMenu_SetItemBmpUnchecked|GUICtrlMenu_SetItemChecked|GUICtrlMenu_SetItemData|GUICtrlMenu_SetItemDefault|GUICtrlMenu_SetItemDisabled|GUICtrlMenu_SetItemEnabled|GUICtrlMenu_SetItemGrayed|GUICtrlMenu_SetItemHighlighted|GUICtrlMenu_SetItemID|GUICtrlMenu_SetItemInfo|GUICtrlMenu_SetItemState|GUICtrlMenu_SetItemSubMenu|GUICtrlMenu_SetItemText|GUICtrlMenu_SetItemType|GUICtrlMenu_SetMenu|GUICtrlMenu_SetMenuBackground|GUICtrlMenu_SetMenuContextHelpID|GUICtrlMenu_SetMenuData|GUICtrlMenu_SetMenuDefaultItem|GUICtrlMenu_SetMenuHeight|GUICtrlMenu_SetMenuInfo|GUICtrlMenu_SetMenuStyle|GUICtrlMenu_TrackPopupMenu|GUICtrlMonthCal_Create|GUICtrlMonthCal_Destroy|GUICtrlMonthCal_GetColor|GUICtrlMonthCal_GetColorArray|GUICtrlMonthCal_GetCurSel|GUICtrlMonthCal_GetCurSelStr|GUICtrlMonthCal_GetFirstDOW|GUICtrlMonthCal_GetFirstDOWStr|GUICtrlMonthCal_GetMaxSelCount|GUICtrlMonthCal_GetMaxTodayWidth|GUICtrlMonthCal_GetMinReqHeight|GUICtrlMonthCal_GetMinReqRect|GUICtrlMonthCal_GetMinReqRectArray|GUICtrlMonthCal_GetMinReqWidth|GUICtrlMonthCal_GetMonthDelta|GUICtrlMonthCal_GetMonthRange|GUICtrlMonthCal_GetMonthRangeMax|GUICtrlMonthCal_GetMonthRangeMaxStr|GUICtrlMonthCal_GetMonthRangeMin|GUICtrlMonthCal_GetMonthRangeMinStr|GUICtrlMonthCal_GetMonthRangeSpan|GUICtrlMonthCal_GetRange|GUICtrlMonthCal_GetRangeMax|GUICtrlMonthCal_GetRangeMaxStr|GUICtrlMonthCal_GetRangeMin|GUICtrlMonthCal_GetRangeMinStr|GUICtrlMonthCal_GetSelRange|GUICtrlMonthCal_GetSelRangeMax|GUICtrlMonthCal_GetSelRangeMaxStr|GUICtrlMonthCal_GetSelRangeMin|GUICtrlMonthCal_GetSelRangeMinStr|GUICtrlMonthCal_GetToday|GUICtrlMonthCal_GetTodayStr|GUICtrlMonthCal_GetUnicodeFormat|GUICtrlMonthCal_HitTest|GUICtrlMonthCal_SetColor|GUICtrlMonthCal_SetCurSel|GUICtrlMonthCal_SetDayState|GUICtrlMonthCal_SetFirstDOW|GUICtrlMonthCal_SetMaxSelCount|GUICtrlMonthCal_SetMonthDelta|GUICtrlMonthCal_SetRange|GUICtrlMonthCal_SetSelRange|GUICtrlMonthCal_SetToday|GUICtrlMonthCal_SetUnicodeFormat|GUICtrlRebar_AddBand|GUICtrlRebar_AddToolBarBand|GUICtrlRebar_BeginDrag|GUICtrlRebar_Create|GUICtrlRebar_DeleteBand|GUICtrlRebar_Destroy|GUICtrlRebar_DragMove|GUICtrlRebar_EndDrag|GUICtrlRebar_GetBandBackColor|GUICtrlRebar_GetBandBorders|GUICtrlRebar_GetBandBordersEx|GUICtrlRebar_GetBandChildHandle|GUICtrlRebar_GetBandChildSize|GUICtrlRebar_GetBandCount|GUICtrlRebar_GetBandForeColor|GUICtrlRebar_GetBandHeaderSize|GUICtrlRebar_GetBandID|GUICtrlRebar_GetBandIdealSize|GUICtrlRebar_GetBandLength|GUICtrlRebar_GetBandLParam|GUICtrlRebar_GetBandMargins|GUICtrlRebar_GetBandMarginsEx|GUICtrlRebar_GetBandRect|GUICtrlRebar_GetBandRectEx|GUICtrlRebar_GetBandStyle|GUICtrlRebar_GetBandStyleBreak|GUICtrlRebar_GetBandStyleChildEdge|GUICtrlRebar_GetBandStyleFixedBMP|GUICtrlRebar_GetBandStyleFixedSize|GUICtrlRebar_GetBandStyleGripperAlways|GUICtrlRebar_GetBandStyleHidden|GUICtrlRebar_GetBandStyleHideTitle|GUICtrlRebar_GetBandStyleNoGripper|GUICtrlRebar_GetBandStyleTopAlign|GUICtrlRebar_GetBandStyleUseChevron|GUICtrlRebar_GetBandStyleVariableHeight|GUICtrlRebar_GetBandText|GUICtrlRebar_GetBarHeight|GUICtrlRebar_GetBKColor|GUICtrlRebar_GetColorScheme|GUICtrlRebar_GetRowCount|GUICtrlRebar_GetRowHeight|GUICtrlRebar_GetTextColor|GUICtrlRebar_GetToolTips|GUICtrlRebar_GetUnicodeFormat|GUICtrlRebar_HitTest|GUICtrlRebar_IDToIndex|GUICtrlRebar_MaximizeBand|GUICtrlRebar_MinimizeBand|GUICtrlRebar_MoveBand|GUICtrlRebar_SetBandBackColor|GUICtrlRebar_SetBandForeColor|GUICtrlRebar_SetBandHeaderSize|GUICtrlRebar_SetBandID|GUICtrlRebar_SetBandIdealSize|GUICtrlRebar_SetBandLength|GUICtrlRebar_SetBandLParam|GUICtrlRebar_SetBandStyle|GUICtrlRebar_SetBandStyleBreak|GUICtrlRebar_SetBandStyleChildEdge|GUICtrlRebar_SetBandStyleFixedBMP|GUICtrlRebar_SetBandStyleFixedSize|GUICtrlRebar_SetBandStyleGripperAlways|GUICtrlRebar_SetBandStyleHidden|GUICtrlRebar_SetBandStyleHideTitle|GUICtrlRebar_SetBandStyleNoGripper|GUICtrlRebar_SetBandStyleTopAlign|GUICtrlRebar_SetBandStyleUseChevron|GUICtrlRebar_SetBandStyleVariableHeight|GUICtrlRebar_SetBandText|GUICtrlRebar_SetBKColor|GUICtrlRebar_SetColorScheme|GUICtrlRebar_SetTextColor|GUICtrlRebar_SetToolTips|GUICtrlRebar_SetUnicodeFormat|GUICtrlRebar_ShowBand|GUICtrlSlider_ClearSel|GUICtrlSlider_ClearTics|GUICtrlSlider_Create|GUICtrlSlider_Destroy|GUICtrlSlider_GetBuddy|GUICtrlSlider_GetChannelRect|GUICtrlSlider_GetLineSize|GUICtrlSlider_GetNumTics|GUICtrlSlider_GetPageSize|GUICtrlSlider_GetPos|GUICtrlSlider_GetPTics|GUICtrlSlider_GetRange|GUICtrlSlider_GetRangeMax|GUICtrlSlider_GetRangeMin|GUICtrlSlider_GetSel|GUICtrlSlider_GetSelEnd|GUICtrlSlider_GetSelStart|GUICtrlSlider_GetThumbLength|GUICtrlSlider_GetThumbRect|GUICtrlSlider_GetThumbRectEx|GUICtrlSlider_GetTic|GUICtrlSlider_GetTicPos|GUICtrlSlider_GetToolTips|GUICtrlSlider_GetUnicodeFormat|GUICtrlSlider_SetBuddy|GUICtrlSlider_SetLineSize|GUICtrlSlider_SetPageSize|GUICtrlSlider_SetPos|GUICtrlSlider_SetRange|GUICtrlSlider_SetRangeMax|GUICtrlSlider_SetRangeMin|GUICtrlSlider_SetSel|GUICtrlSlider_SetSelEnd|GUICtrlSlider_SetSelStart|GUICtrlSlider_SetThumbLength|GUICtrlSlider_SetTic|GUICtrlSlider_SetTicFreq|GUICtrlSlider_SetTipSide|GUICtrlSlider_SetToolTips|GUICtrlSlider_SetUnicodeFormat|GUICtrlStatusBar_Create|GUICtrlStatusBar_Destroy|GUICtrlStatusBar_EmbedControl|GUICtrlStatusBar_GetBorders|GUICtrlStatusBar_GetBordersHorz|GUICtrlStatusBar_GetBordersRect|GUICtrlStatusBar_GetBordersVert|GUICtrlStatusBar_GetCount|GUICtrlStatusBar_GetHeight|GUICtrlStatusBar_GetIcon|GUICtrlStatusBar_GetParts|GUICtrlStatusBar_GetRect|GUICtrlStatusBar_GetRectEx|GUICtrlStatusBar_GetText|GUICtrlStatusBar_GetTextFlags|GUICtrlStatusBar_GetTextLength|GUICtrlStatusBar_GetTextLengthEx|GUICtrlStatusBar_GetTipText|GUICtrlStatusBar_GetUnicodeFormat|GUICtrlStatusBar_GetWidth|GUICtrlStatusBar_IsSimple|GUICtrlStatusBar_Resize|GUICtrlStatusBar_SetBkColor|GUICtrlStatusBar_SetIcon|GUICtrlStatusBar_SetMinHeight|GUICtrlStatusBar_SetParts|GUICtrlStatusBar_SetSimple|GUICtrlStatusBar_SetText|GUICtrlStatusBar_SetTipText|GUICtrlStatusBar_SetUnicodeFormat|GUICtrlStatusBar_ShowHide|GUICtrlTab_Create|GUICtrlTab_DeleteAllItems|GUICtrlTab_DeleteItem|GUICtrlTab_DeselectAll|GUICtrlTab_Destroy|GUICtrlTab_FindTab|GUICtrlTab_GetCurFocus|GUICtrlTab_GetCurSel|GUICtrlTab_GetDisplayRect|GUICtrlTab_GetDisplayRectEx|GUICtrlTab_GetExtendedStyle|GUICtrlTab_GetImageList|GUICtrlTab_GetItem|GUICtrlTab_GetItemCount|GUICtrlTab_GetItemImage|GUICtrlTab_GetItemParam|GUICtrlTab_GetItemRect|GUICtrlTab_GetItemRectEx|GUICtrlTab_GetItemState|GUICtrlTab_GetItemText|GUICtrlTab_GetRowCount|GUICtrlTab_GetToolTips|GUICtrlTab_GetUnicodeFormat|GUICtrlTab_HighlightItem|GUICtrlTab_HitTest|GUICtrlTab_InsertItem|GUICtrlTab_RemoveImage|GUICtrlTab_SetCurFocus|GUICtrlTab_SetCurSel|GUICtrlTab_SetExtendedStyle|GUICtrlTab_SetImageList|GUICtrlTab_SetItem|GUICtrlTab_SetItemImage|GUICtrlTab_SetItemParam|GUICtrlTab_SetItemSize|GUICtrlTab_SetItemState|GUICtrlTab_SetItemText|GUICtrlTab_SetMinTabWidth|GUICtrlTab_SetPadding|GUICtrlTab_SetToolTips|GUICtrlTab_SetUnicodeFormat|GUICtrlToolbar_AddBitmap|GUICtrlToolbar_AddButton|GUICtrlToolbar_AddButtonSep|GUICtrlToolbar_AddString|GUICtrlToolbar_ButtonCount|GUICtrlToolbar_CheckButton|GUICtrlToolbar_ClickAccel|GUICtrlToolbar_ClickButton|GUICtrlToolbar_ClickIndex|GUICtrlToolbar_CommandToIndex|GUICtrlToolbar_Create|GUICtrlToolbar_Customize|GUICtrlToolbar_DeleteButton|GUICtrlToolbar_Destroy|GUICtrlToolbar_EnableButton|GUICtrlToolbar_FindToolbar|GUICtrlToolbar_GetAnchorHighlight|GUICtrlToolbar_GetBitmapFlags|GUICtrlToolbar_GetButtonBitmap|GUICtrlToolbar_GetButtonInfo|GUICtrlToolbar_GetButtonInfoEx|GUICtrlToolbar_GetButtonParam|GUICtrlToolbar_GetButtonRect|GUICtrlToolbar_GetButtonRectEx|GUICtrlToolbar_GetButtonSize|GUICtrlToolbar_GetButtonState|GUICtrlToolbar_GetButtonStyle|GUICtrlToolbar_GetButtonText|GUICtrlToolbar_GetColorScheme|GUICtrlToolbar_GetDisabledImageList|GUICtrlToolbar_GetExtendedStyle|GUICtrlToolbar_GetHotImageList|GUICtrlToolbar_GetHotItem|GUICtrlToolbar_GetImageList|GUICtrlToolbar_GetInsertMark|GUICtrlToolbar_GetInsertMarkColor|GUICtrlToolbar_GetMaxSize|GUICtrlToolbar_GetMetrics|GUICtrlToolbar_GetPadding|GUICtrlToolbar_GetRows|GUICtrlToolbar_GetString|GUICtrlToolbar_GetStyle|GUICtrlToolbar_GetStyleAltDrag|GUICtrlToolbar_GetStyleCustomErase|GUICtrlToolbar_GetStyleFlat|GUICtrlToolbar_GetStyleList|GUICtrlToolbar_GetStyleRegisterDrop|GUICtrlToolbar_GetStyleToolTips|GUICtrlToolbar_GetStyleTransparent|GUICtrlToolbar_GetStyleWrapable|GUICtrlToolbar_GetTextRows|GUICtrlToolbar_GetToolTips|GUICtrlToolbar_GetUnicodeFormat|GUICtrlToolbar_HideButton|GUICtrlToolbar_HighlightButton|GUICtrlToolbar_HitTest|GUICtrlToolbar_IndexToCommand|GUICtrlToolbar_InsertButton|GUICtrlToolbar_InsertMarkHitTest|GUICtrlToolbar_IsButtonChecked|GUICtrlToolbar_IsButtonEnabled|GUICtrlToolbar_IsButtonHidden|GUICtrlToolbar_IsButtonHighlighted|GUICtrlToolbar_IsButtonIndeterminate|GUICtrlToolbar_IsButtonPressed|GUICtrlToolbar_LoadBitmap|GUICtrlToolbar_LoadImages|GUICtrlToolbar_MapAccelerator|GUICtrlToolbar_MoveButton|GUICtrlToolbar_PressButton|GUICtrlToolbar_SetAnchorHighlight|GUICtrlToolbar_SetBitmapSize|GUICtrlToolbar_SetButtonBitMap|GUICtrlToolbar_SetButtonInfo|GUICtrlToolbar_SetButtonInfoEx|GUICtrlToolbar_SetButtonParam|GUICtrlToolbar_SetButtonSize|GUICtrlToolbar_SetButtonState|GUICtrlToolbar_SetButtonStyle|GUICtrlToolbar_SetButtonText|GUICtrlToolbar_SetButtonWidth|GUICtrlToolbar_SetCmdID|GUICtrlToolbar_SetColorScheme|GUICtrlToolbar_SetDisabledImageList|GUICtrlToolbar_SetDrawTextFlags|GUICtrlToolbar_SetExtendedStyle|GUICtrlToolbar_SetHotImageList|GUICtrlToolbar_SetHotItem|GUICtrlToolbar_SetImageList|GUICtrlToolbar_SetIndent|GUICtrlToolbar_SetIndeterminate|GUICtrlToolbar_SetInsertMark|GUICtrlToolbar_SetInsertMarkColor|GUICtrlToolbar_SetMaxTextRows|GUICtrlToolbar_SetMetrics|GUICtrlToolbar_SetPadding|GUICtrlToolbar_SetParent|GUICtrlToolbar_SetRows|GUICtrlToolbar_SetStyle|GUICtrlToolbar_SetStyleAltDrag|GUICtrlToolbar_SetStyleCustomErase|GUICtrlToolbar_SetStyleFlat|GUICtrlToolbar_SetStyleList|GUICtrlToolbar_SetStyleRegisterDrop|GUICtrlToolbar_SetStyleToolTips|GUICtrlToolbar_SetStyleTransparent|GUICtrlToolbar_SetStyleWrapable|GUICtrlToolbar_SetToolTips|GUICtrlToolbar_SetUnicodeFormat|GUICtrlToolbar_SetWindowTheme|GUICtrlTreeView_Add|GUICtrlTreeView_AddChild|GUICtrlTreeView_AddChildFirst|GUICtrlTreeView_AddFirst|GUICtrlTreeView_BeginUpdate|GUICtrlTreeView_ClickItem|GUICtrlTreeView_Create|GUICtrlTreeView_CreateDragImage|GUICtrlTreeView_CreateSolidBitMap|GUICtrlTreeView_Delete|GUICtrlTreeView_DeleteAll|GUICtrlTreeView_DeleteChildren|GUICtrlTreeView_Destroy|GUICtrlTreeView_DisplayRect|GUICtrlTreeView_DisplayRectEx|GUICtrlTreeView_EditText|GUICtrlTreeView_EndEdit|GUICtrlTreeView_EndUpdate|GUICtrlTreeView_EnsureVisible|GUICtrlTreeView_Expand|GUICtrlTreeView_ExpandedOnce|GUICtrlTreeView_FindItem|GUICtrlTreeView_FindItemEx|GUICtrlTreeView_GetBkColor|GUICtrlTreeView_GetBold|GUICtrlTreeView_GetChecked|GUICtrlTreeView_GetChildCount|GUICtrlTreeView_GetChildren|GUICtrlTreeView_GetCount|GUICtrlTreeView_GetCut|GUICtrlTreeView_GetDropTarget|GUICtrlTreeView_GetEditControl|GUICtrlTreeView_GetExpanded|GUICtrlTreeView_GetFirstChild|GUICtrlTreeView_GetFirstItem|GUICtrlTreeView_GetFirstVisible|GUICtrlTreeView_GetFocused|GUICtrlTreeView_GetHeight|GUICtrlTreeView_GetImageIndex|GUICtrlTreeView_GetImageListIconHandle|GUICtrlTreeView_GetIndent|GUICtrlTreeView_GetInsertMarkColor|GUICtrlTreeView_GetISearchString|GUICtrlTreeView_GetItemByIndex|GUICtrlTreeView_GetItemHandle|GUICtrlTreeView_GetItemParam|GUICtrlTreeView_GetLastChild|GUICtrlTreeView_GetLineColor|GUICtrlTreeView_GetNext|GUICtrlTreeView_GetNextChild|GUICtrlTreeView_GetNextSibling|GUICtrlTreeView_GetNextVisible|GUICtrlTreeView_GetNormalImageList|GUICtrlTreeView_GetParentHandle|GUICtrlTreeView_GetParentParam|GUICtrlTreeView_GetPrev|GUICtrlTreeView_GetPrevChild|GUICtrlTreeView_GetPrevSibling|GUICtrlTreeView_GetPrevVisible|GUICtrlTreeView_GetScrollTime|GUICtrlTreeView_GetSelected|GUICtrlTreeView_GetSelectedImageIndex|GUICtrlTreeView_GetSelection|GUICtrlTreeView_GetSiblingCount|GUICtrlTreeView_GetState|GUICtrlTreeView_GetStateImageIndex|GUICtrlTreeView_GetStateImageList|GUICtrlTreeView_GetText|GUICtrlTreeView_GetTextColor|GUICtrlTreeView_GetToolTips|GUICtrlTreeView_GetTree|GUICtrlTreeView_GetUnicodeFormat|GUICtrlTreeView_GetVisible|GUICtrlTreeView_GetVisibleCount|GUICtrlTreeView_HitTest|GUICtrlTreeView_HitTestEx|GUICtrlTreeView_HitTestItem|GUICtrlTreeView_Index|GUICtrlTreeView_InsertItem|GUICtrlTreeView_IsFirstItem|GUICtrlTreeView_IsParent|GUICtrlTreeView_Level|GUICtrlTreeView_SelectItem|GUICtrlTreeView_SelectItemByIndex|GUICtrlTreeView_SetBkColor|GUICtrlTreeView_SetBold|GUICtrlTreeView_SetChecked|GUICtrlTreeView_SetCheckedByIndex|GUICtrlTreeView_SetChildren|GUICtrlTreeView_SetCut|GUICtrlTreeView_SetDropTarget|GUICtrlTreeView_SetFocused|GUICtrlTreeView_SetHeight|GUICtrlTreeView_SetIcon|GUICtrlTreeView_SetImageIndex|GUICtrlTreeView_SetIndent|GUICtrlTreeView_SetInsertMark|GUICtrlTreeView_SetInsertMarkColor|GUICtrlTreeView_SetItemHeight|GUICtrlTreeView_SetItemParam|GUICtrlTreeView_SetLineColor|GUICtrlTreeView_SetNormalImageList|GUICtrlTreeView_SetScrollTime|GUICtrlTreeView_SetSelected|GUICtrlTreeView_SetSelectedImageIndex|GUICtrlTreeView_SetState|GUICtrlTreeView_SetStateImageIndex|GUICtrlTreeView_SetStateImageList|GUICtrlTreeView_SetText|GUICtrlTreeView_SetTextColor|GUICtrlTreeView_SetToolTips|GUICtrlTreeView_SetUnicodeFormat|GUICtrlTreeView_Sort|GUIImageList_Add|GUIImageList_AddBitmap|GUIImageList_AddIcon|GUIImageList_AddMasked|GUIImageList_BeginDrag|GUIImageList_Copy|GUIImageList_Create|GUIImageList_Destroy|GUIImageList_DestroyIcon|GUIImageList_DragEnter|GUIImageList_DragLeave|GUIImageList_DragMove|GUIImageList_Draw|GUIImageList_DrawEx|GUIImageList_Duplicate|GUIImageList_EndDrag|GUIImageList_GetBkColor|GUIImageList_GetIcon|GUIImageList_GetIconHeight|GUIImageList_GetIconSize|GUIImageList_GetIconSizeEx|GUIImageList_GetIconWidth|GUIImageList_GetImageCount|GUIImageList_GetImageInfoEx|GUIImageList_Remove|GUIImageList_ReplaceIcon|GUIImageList_SetBkColor|GUIImageList_SetIconSize|GUIImageList_SetImageCount|GUIImageList_Swap|GUIScrollBars_EnableScrollBar|GUIScrollBars_GetScrollBarInfoEx|GUIScrollBars_GetScrollBarRect|GUIScrollBars_GetScrollBarRGState|GUIScrollBars_GetScrollBarXYLineButton|GUIScrollBars_GetScrollBarXYThumbBottom|GUIScrollBars_GetScrollBarXYThumbTop|GUIScrollBars_GetScrollInfo|GUIScrollBars_GetScrollInfoEx|GUIScrollBars_GetScrollInfoMax|GUIScrollBars_GetScrollInfoMin|GUIScrollBars_GetScrollInfoPage|GUIScrollBars_GetScrollInfoPos|GUIScrollBars_GetScrollInfoTrackPos|GUIScrollBars_GetScrollPos|GUIScrollBars_GetScrollRange|GUIScrollBars_Init|GUIScrollBars_ScrollWindow|GUIScrollBars_SetScrollInfo|GUIScrollBars_SetScrollInfoMax|GUIScrollBars_SetScrollInfoMin|GUIScrollBars_SetScrollInfoPage|GUIScrollBars_SetScrollInfoPos|GUIScrollBars_SetScrollRange|GUIScrollBars_ShowScrollBar|GUIToolTip_Activate|GUIToolTip_AddTool|GUIToolTip_AdjustRect|GUIToolTip_BitsToTTF|GUIToolTip_Create|GUIToolTip_DelTool|GUIToolTip_Destroy|GUIToolTip_EnumTools|GUIToolTip_GetBubbleHeight|GUIToolTip_GetBubbleSize|GUIToolTip_GetBubbleWidth|GUIToolTip_GetCurrentTool|GUIToolTip_GetDelayTime|GUIToolTip_GetMargin|GUIToolTip_GetMarginEx|GUIToolTip_GetMaxTipWidth|GUIToolTip_GetText|GUIToolTip_GetTipBkColor|GUIToolTip_GetTipTextColor|GUIToolTip_GetTitleBitMap|GUIToolTip_GetTitleText|GUIToolTip_GetToolCount|GUIToolTip_GetToolInfo|GUIToolTip_HitTest|GUIToolTip_NewToolRect|GUIToolTip_Pop|GUIToolTip_PopUp|GUIToolTip_SetDelayTime|GUIToolTip_SetMargin|GUIToolTip_SetMaxTipWidth|GUIToolTip_SetTipBkColor|GUIToolTip_SetTipTextColor|GUIToolTip_SetTitle|GUIToolTip_SetToolInfo|GUIToolTip_SetWindowTheme|GUIToolTip_ToolExists|GUIToolTip_ToolToArray|GUIToolTip_TrackActivate|GUIToolTip_TrackPosition|GUIToolTip_TTFToBits|GUIToolTip_Update|GUIToolTip_UpdateTipText|HexToString|IE_Example|IE_Introduction|IE_VersionInfo|IEAction|IEAttach|IEBodyReadHTML|IEBodyReadText|IEBodyWriteHTML|IECreate|IECreateEmbedded|IEDocGetObj|IEDocInsertHTML|IEDocInsertText|IEDocReadHTML|IEDocWriteHTML|IEErrorHandlerDeRegister|IEErrorHandlerRegister|IEErrorNotify|IEFormElementCheckBoxSelect|IEFormElementGetCollection|IEFormElementGetObjByName|IEFormElementGetValue|IEFormElementOptionSelect|IEFormElementRadioSelect|IEFormElementSetValue|IEFormGetCollection|IEFormGetObjByName|IEFormImageClick|IEFormReset|IEFormSubmit|IEFrameGetCollection|IEFrameGetObjByName|IEGetObjById|IEGetObjByName|IEHeadInsertEventScript|IEImgClick|IEImgGetCollection|IEIsFrameSet|IELinkClickByIndex|IELinkClickByText|IELinkGetCollection|IELoadWait|IELoadWaitTimeout|IENavigate|IEPropertyGet|IEPropertySet|IEQuit|IETableGetCollection|IETableWriteToArray|IETagNameAllGetCollection|IETagNameGetCollection|Iif|INetExplorerCapable|INetGetSource|INetMail|INetSmtpMail|IsPressed|MathCheckDiv|Max|MemGlobalAlloc|MemGlobalFree|MemGlobalLock|MemGlobalSize|MemGlobalUnlock|MemMoveMemory|MemMsgBox|MemShowError|MemVirtualAlloc|MemVirtualAllocEx|MemVirtualFree|MemVirtualFreeEx|Min|MouseTrap|NamedPipes_CallNamedPipe|NamedPipes_ConnectNamedPipe|NamedPipes_CreateNamedPipe|NamedPipes_CreatePipe|NamedPipes_DisconnectNamedPipe|NamedPipes_GetNamedPipeHandleState|NamedPipes_GetNamedPipeInfo|NamedPipes_PeekNamedPipe|NamedPipes_SetNamedPipeHandleState|NamedPipes_TransactNamedPipe|NamedPipes_WaitNamedPipe|Net_Share_ConnectionEnum|Net_Share_FileClose|Net_Share_FileEnum|Net_Share_FileGetInfo|Net_Share_PermStr|Net_Share_ResourceStr|Net_Share_SessionDel|Net_Share_SessionEnum|Net_Share_SessionGetInfo|Net_Share_ShareAdd|Net_Share_ShareCheck|Net_Share_ShareDel|Net_Share_ShareEnum|Net_Share_ShareGetInfo|Net_Share_ShareSetInfo|Net_Share_StatisticsGetSvr|Net_Share_StatisticsGetWrk|Now|NowCalc|NowCalcDate|NowDate|NowTime|PathFull|PathMake|PathSplit|ProcessGetName|ProcessGetPriority|Radian|ReplaceStringInFile|RunDOS|ScreenCapture_Capture|ScreenCapture_CaptureWnd|ScreenCapture_SaveImage|ScreenCapture_SetBMPFormat|ScreenCapture_SetJPGQuality|ScreenCapture_SetTIFColorDepth|ScreenCapture_SetTIFCompression|Security__AdjustTokenPrivileges|Security__GetAccountSid|Security__GetLengthSid|Security__GetTokenInformation|Security__ImpersonateSelf|Security__IsValidSid|Security__LookupAccountName|Security__LookupAccountSid|Security__LookupPrivilegeValue|Security__OpenProcessToken|Security__OpenThreadToken|Security__OpenThreadTokenEx|Security__SetPrivilege|Security__SidToStringSid|Security__SidTypeStr|Security__StringSidToSid|SendMessage|SendMessageA|SetDate|SetTime|Singleton|SoundClose|SoundLength|SoundOpen|SoundPause|SoundPlay|SoundPos|SoundResume|SoundSeek|SoundStatus|SoundStop|SQLite_Changes|SQLite_Close|SQLite_Display2DResult|SQLite_Encode|SQLite_ErrCode|SQLite_ErrMsg|SQLite_Escape|SQLite_Exec|SQLite_FetchData|SQLite_FetchNames|SQLite_GetTable|SQLite_GetTable2d|SQLite_LastInsertRowID|SQLite_LibVersion|SQLite_Open|SQLite_Query|SQLite_QueryFinalize|SQLite_QueryReset|SQLite_QuerySingleRow|SQLite_SaveMode|SQLite_SetTimeout|SQLite_Shutdown|SQLite_SQLiteExe|SQLite_Startup|SQLite_TotalChanges|StringAddComma|StringBetween|StringEncrypt|StringInsert|StringProper|StringRepeat|StringReverse|StringSplit|StringToHex|TCPIpToName|TempFile|TicksToTime|Timer_Diff|Timer_GetTimerID|Timer_Init|Timer_KillAllTimers|Timer_KillTimer|Timer_SetTimer|TimeToTicks|VersionCompare|viClose|viExecCommand|viFindGpib|viGpibBusReset|viGTL|viOpen|viSetAttribute|viSetTimeout|WeekNumberISO|WinAPI_AttachConsole|WinAPI_AttachThreadInput|WinAPI_Beep|WinAPI_BitBlt|WinAPI_CallNextHookEx|WinAPI_Check|WinAPI_ClientToScreen|WinAPI_CloseHandle|WinAPI_CommDlgExtendedError|WinAPI_CopyIcon|WinAPI_CreateBitmap|WinAPI_CreateCompatibleBitmap|WinAPI_CreateCompatibleDC|WinAPI_CreateEvent|WinAPI_CreateFile|WinAPI_CreateFont|WinAPI_CreateFontIndirect|WinAPI_CreateProcess|WinAPI_CreateSolidBitmap|WinAPI_CreateSolidBrush|WinAPI_CreateWindowEx|WinAPI_DefWindowProc|WinAPI_DeleteDC|WinAPI_DeleteObject|WinAPI_DestroyIcon|WinAPI_DestroyWindow|WinAPI_DrawEdge|WinAPI_DrawFrameControl|WinAPI_DrawIcon|WinAPI_DrawIconEx|WinAPI_DrawText|WinAPI_EnableWindow|WinAPI_EnumDisplayDevices|WinAPI_EnumWindows|WinAPI_EnumWindowsPopup|WinAPI_EnumWindowsTop|WinAPI_ExpandEnvironmentStrings|WinAPI_ExtractIconEx|WinAPI_FatalAppExit|WinAPI_FillRect|WinAPI_FindExecutable|WinAPI_FindWindow|WinAPI_FlashWindow|WinAPI_FlashWindowEx|WinAPI_FloatToInt|WinAPI_FlushFileBuffers|WinAPI_FormatMessage|WinAPI_FrameRect|WinAPI_FreeLibrary|WinAPI_GetAncestor|WinAPI_GetAsyncKeyState|WinAPI_GetClassName|WinAPI_GetClientHeight|WinAPI_GetClientRect|WinAPI_GetClientWidth|WinAPI_GetCurrentProcess|WinAPI_GetCurrentProcessID|WinAPI_GetCurrentThread|WinAPI_GetCurrentThreadId|WinAPI_GetCursorInfo|WinAPI_GetDC|WinAPI_GetDesktopWindow|WinAPI_GetDeviceCaps|WinAPI_GetDIBits|WinAPI_GetDlgCtrlID|WinAPI_GetDlgItem|WinAPI_GetFileSizeEx|WinAPI_GetFocus|WinAPI_GetForegroundWindow|WinAPI_GetIconInfo|WinAPI_GetLastError|WinAPI_GetLastErrorMessage|WinAPI_GetModuleHandle|WinAPI_GetMousePos|WinAPI_GetMousePosX|WinAPI_GetMousePosY|WinAPI_GetObject|WinAPI_GetOpenFileName|WinAPI_GetOverlappedResult|WinAPI_GetParent|WinAPI_GetProcessAffinityMask|WinAPI_GetSaveFileName|WinAPI_GetStdHandle|WinAPI_GetStockObject|WinAPI_GetSysColor|WinAPI_GetSysColorBrush|WinAPI_GetSystemMetrics|WinAPI_GetTextExtentPoint32|WinAPI_GetWindow|WinAPI_GetWindowDC|WinAPI_GetWindowHeight|WinAPI_GetWindowLong|WinAPI_GetWindowRect|WinAPI_GetWindowText|WinAPI_GetWindowThreadProcessId|WinAPI_GetWindowWidth|WinAPI_GetXYFromPoint|WinAPI_GlobalMemStatus|WinAPI_GUIDFromString|WinAPI_GUIDFromStringEx|WinAPI_HiWord|WinAPI_InProcess|WinAPI_IntToFloat|WinAPI_InvalidateRect|WinAPI_IsClassName|WinAPI_IsWindow|WinAPI_IsWindowVisible|WinAPI_LoadBitmap|WinAPI_LoadImage|WinAPI_LoadLibrary|WinAPI_LoadLibraryEx|WinAPI_LoadShell32Icon|WinAPI_LoadString|WinAPI_LocalFree|WinAPI_LoWord|WinAPI_MakeDWord|WinAPI_MAKELANGID|WinAPI_MAKELCID|WinAPI_MakeLong|WinAPI_MessageBeep|WinAPI_Mouse_Event|WinAPI_MoveWindow|WinAPI_MsgBox|WinAPI_MulDiv|WinAPI_MultiByteToWideChar|WinAPI_MultiByteToWideCharEx|WinAPI_OpenProcess|WinAPI_PointFromRect|WinAPI_PostMessage|WinAPI_PrimaryLangId|WinAPI_PtInRect|WinAPI_ReadFile|WinAPI_ReadProcessMemory|WinAPI_RectIsEmpty|WinAPI_RedrawWindow|WinAPI_RegisterWindowMessage|WinAPI_ReleaseCapture|WinAPI_ReleaseDC|WinAPI_ScreenToClient|WinAPI_SelectObject|WinAPI_SetBkColor|WinAPI_SetCapture|WinAPI_SetCursor|WinAPI_SetDefaultPrinter|WinAPI_SetDIBits|WinAPI_SetEvent|WinAPI_SetFocus|WinAPI_SetFont|WinAPI_SetHandleInformation|WinAPI_SetLastError|WinAPI_SetParent|WinAPI_SetProcessAffinityMask|WinAPI_SetSysColors|WinAPI_SetTextColor|WinAPI_SetWindowLong|WinAPI_SetWindowPos|WinAPI_SetWindowsHookEx|WinAPI_SetWindowText|WinAPI_ShowCursor|WinAPI_ShowError|WinAPI_ShowMsg|WinAPI_ShowWindow|WinAPI_StringFromGUID|WinAPI_SubLangId|WinAPI_SystemParametersInfo|WinAPI_TwipsPerPixelX|WinAPI_TwipsPerPixelY|WinAPI_UnhookWindowsHookEx|WinAPI_UpdateLayeredWindow|WinAPI_UpdateWindow|WinAPI_ValidateClassName|WinAPI_WaitForInputIdle|WinAPI_WaitForMultipleObjects|WinAPI_WaitForSingleObject|WinAPI_WideCharToMultiByte|WinAPI_WindowFromPoint|WinAPI_WriteConsole|WinAPI_WriteFile|WinAPI_WriteProcessMemory|WinNet_AddConnection|WinNet_AddConnection2|WinNet_AddConnection3|WinNet_CancelConnection|WinNet_CancelConnection2|WinNet_CloseEnum|WinNet_ConnectionDialog|WinNet_ConnectionDialog1|WinNet_DisconnectDialog|WinNet_DisconnectDialog1|WinNet_EnumResource|WinNet_GetConnection|WinNet_GetConnectionPerformance|WinNet_GetLastError|WinNet_GetNetworkInformation|WinNet_GetProviderName|WinNet_GetResourceInformation|WinNet_GetResourceParent|WinNet_GetUniversalName|WinNet_GetUser|WinNet_OpenEnum|WinNet_RestoreConnection|WinNet_UseConnection|Word_VersionInfo|WordAttach|WordCreate|WordDocAdd|WordDocAddLink|WordDocAddPicture|WordDocClose|WordDocFindReplace|WordDocGetCollection|WordDocLinkGetCollection|WordDocOpen|WordDocPrint|WordDocPropertyGet|WordDocPropertySet|WordDocSave|WordDocSaveAs|WordErrorHandlerDeRegister|WordErrorHandlerRegister|WordErrorNotify|WordMacroRun|WordPropertyGet|WordPropertySet|WordQuit|' + 'ce|comments-end|comments-start|cs|include|include-once|NoTrayIcon|RequireAdmin|' + 'AutoIt3Wrapper_Au3Check_Parameters|AutoIt3Wrapper_Au3Check_Stop_OnWarning|AutoIt3Wrapper_Change2CUI|AutoIt3Wrapper_Compression|AutoIt3Wrapper_cvsWrapper_Parameters|AutoIt3Wrapper_Icon|AutoIt3Wrapper_Outfile|AutoIt3Wrapper_Outfile_Type|AutoIt3Wrapper_Plugin_Funcs|AutoIt3Wrapper_Res_Comment|AutoIt3Wrapper_Res_Description|AutoIt3Wrapper_Res_Field|AutoIt3Wrapper_Res_File_Add|AutoIt3Wrapper_Res_Fileversion|AutoIt3Wrapper_Res_FileVersion_AutoIncrement|AutoIt3Wrapper_Res_Icon_Add|AutoIt3Wrapper_Res_Language|AutoIt3Wrapper_Res_LegalCopyright|AutoIt3Wrapper_res_requestedExecutionLevel|AutoIt3Wrapper_Res_SaveSource|AutoIt3Wrapper_Run_After|AutoIt3Wrapper_Run_Au3check|AutoIt3Wrapper_Run_Before|AutoIt3Wrapper_Run_cvsWrapper|AutoIt3Wrapper_Run_Debug_Mode|AutoIt3Wrapper_Run_Obfuscator|AutoIt3Wrapper_Run_Tidy|AutoIt3Wrapper_Tidy_Stop_OnError|AutoIt3Wrapper_UseAnsi|AutoIt3Wrapper_UseUpx|AutoIt3Wrapper_UseX64|AutoIt3Wrapper_Version|EndRegion|forceref|Obfuscator_Ignore_Funcs|Obfuscator_Ignore_Variables|Obfuscator_Parameters|Region|Tidy_Parameters' var atKeywords = 'AppDataCommonDir|AppDataDir|AutoItExe|AutoItPID|AutoItUnicode|AutoItVersion|AutoItX64|COM_EventObj|CommonFilesDir|Compiled|ComputerName|ComSpec|CR|CRLF|DesktopCommonDir|DesktopDepth|DesktopDir|DesktopHeight|DesktopRefresh|DesktopWidth|DocumentsCommonDir|error|exitCode|exitMethod|extended|FavoritesCommonDir|FavoritesDir|GUI_CtrlHandle|GUI_CtrlId|GUI_DragFile|GUI_DragId|GUI_DropId|GUI_WinHandle|HomeDrive|HomePath|HomeShare|HotKeyPressed|HOUR|InetGetActive|InetGetBytesRead|IPAddress1|IPAddress2|IPAddress3|IPAddress4|KBLayout|LF|LogonDNSDomain|LogonDomain|LogonServer|MDAY|MIN|MON|MyDocumentsDir|NumParams|OSBuild|OSLang|OSServicePack|OSTYPE|OSVersion|ProcessorArch|ProgramFilesDir|ProgramsCommonDir|ProgramsDir|ScriptDir|ScriptFullPath|ScriptLineNumber|ScriptName|SEC|StartMenuCommonDir|StartMenuDir|StartupCommonDir|StartupDir|SW_DISABLE|SW_ENABLE|SW_HIDE|SW_LOCK|SW_MAXIMIZE|SW_MINIMIZE|SW_RESTORE|SW_SHOW|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWMINNOACTIVE|SW_SHOWNA|SW_SHOWNOACTIVATE|SW_SHOWNORMAL|SW_UNLOCK|SystemDir|TAB|TempDir|TRAY_ID|TrayIconFlashing|TrayIconVisible|UserName|UserProfileDir|WDAY|WindowsDir|WorkingDir|YDAY|YEAR' this.$rules = { start: [ { token: 'comment.line.ahk', regex: '(?:^| );.*$' }, { token: 'comment.block.ahk', regex: '/\\*', push: [ { token: 'comment.block.ahk', regex: '\\*/', next: 'pop' }, { defaultToken: 'comment.block.ahk' } ] }, { token: 'doc.comment.ahk', regex: '#cs', push: [ { token: 'doc.comment.ahk', regex: '#ce', next: 'pop' }, { defaultToken: 'doc.comment.ahk' } ] }, { token: 'keyword.command.ahk', regex: '(?:\\b|^)(?:allowsamelinecomments|clipboardtimeout|commentflag|errorstdout|escapechar|hotkeyinterval|hotkeymodifiertimeout|hotstring|include|includeagain|installkeybdhook|installmousehook|keyhistory|ltrim|maxhotkeysperinterval|maxmem|maxthreads|maxthreadsbuffer|maxthreadsperhotkey|noenv|notrayicon|persistent|singleinstance|usehook|winactivateforce|autotrim|blockinput|click|clipwait|continue|control|controlclick|controlfocus|controlget|controlgetfocus|controlgetpos|controlgettext|controlmove|controlsend|controlsendraw|controlsettext|coordmode|critical|detecthiddentext|detecthiddenwindows|drive|driveget|drivespacefree|edit|endrepeat|envadd|envdiv|envget|envmult|envset|envsub|envupdate|exit|exitapp|fileappend|filecopy|filecopydir|filecreatedir|filecreateshortcut|filedelete|filegetattrib|filegetshortcut|filegetsize|filegettime|filegetversion|fileinstall|filemove|filemovedir|fileread|filereadline|filerecycle|filerecycleempty|fileremovedir|fileselectfile|fileselectfolder|filesetattrib|filesettime|formattime|getkeystate|gosub|goto|groupactivate|groupadd|groupclose|groupdeactivate|gui|guicontrol|guicontrolget|hideautoitwin|hotkey|ifequal|ifexist|ifgreater|ifgreaterorequal|ifinstring|ifless|iflessorequal|ifmsgbox|ifnotequal|ifnotexist|ifnotinstring|ifwinactive|ifwinexist|ifwinnotactive|ifwinnotexist|imagesearch|inidelete|iniread|iniwrite|input|inputbox|keyhistory|keywait|listhotkeys|listlines|listvars|menu|mouseclick|mouseclickdrag|mousegetpos|mousemove|msgbox|onexit|outputdebug|pause|pixelgetcolor|pixelsearch|postmessage|process|progress|random|regdelete|regread|regwrite|reload|repeat|run|runas|runwait|send|sendevent|sendinput|sendmode|sendplay|sendmessage|sendraw|setbatchlines|setcapslockstate|setcontroldelay|setdefaultmousespeed|setenv|setformat|setkeydelay|setmousedelay|setnumlockstate|setscrolllockstate|setstorecapslockmode|settimer|settitlematchmode|setwindelay|setworkingdir|shutdown|sleep|sort|soundbeep|soundget|soundgetwavevolume|soundplay|soundset|soundsetwavevolume|splashimage|splashtextoff|splashtexton|splitpath|statusbargettext|statusbarwait|stringcasesense|stringgetpos|stringleft|stringlen|stringlower|stringmid|stringreplace|stringright|stringsplit|stringtrimleft|stringtrimright|stringupper|suspend|sysget|thread|tooltip|transform|traytip|urldownloadtofile|while|winactivate|winactivatebottom|winclose|winget|wingetactivestats|wingetactivetitle|wingetclass|wingetpos|wingettext|wingettitle|winhide|winkill|winmaximize|winmenuselectitem|winminimize|winminimizeall|winminimizeallundo|winmove|winrestore|winset|winsettitle|winshow|winwait|winwaitactive|winwaitclose|winwaitnotactive)\\b', caseInsensitive: true }, { token: 'keyword.control.ahk', regex: '(?:\\b|^)(?:if|else|return|loop|break|for|while|global|local|byref)\\b', caseInsensitive: true }, { token: 'support.function.ahk', regex: '(?:\\b|^)(?:abs|acos|asc|asin|atan|ceil|chr|cos|dllcall|exp|fileexist|floor|getkeystate|il_add|il_create|il_destroy|instr|substr|isfunc|islabel|ln|log|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|onmessage|numget|numput|registercallback|regexmatch|regexreplace|round|sin|tan|sqrt|strlen|sb_seticon|sb_setparts|sb_settext|tv_add|tv_delete|tv_getchild|tv_getcount|tv_getnext|tv_get|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist)\\b', caseInsensitive: true }, { token: 'variable.predefined.ahk', regex: '(?:\\b|^)(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_formatfloat|a_formatinteger|a_gui|a_guievent|a_guicontrol|a_guicontrolevent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|programfiles|a_programfiles|a_programs|a_programscommon|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel)\\b', caseInsensitive: true }, { token: 'support.constant.ahk', regex: '(?:\\b|^)(?:shift|lshift|rshift|alt|lalt|ralt|control|lcontrol|rcontrol|ctrl|lctrl|rctrl|lwin|rwin|appskey|altdown|altup|shiftdown|shiftup|ctrldown|ctrlup|lwindown|lwinup|rwindown|rwinup|lbutton|rbutton|mbutton|wheelup|wheelleft|wheelright|wheeldown|xbutton1|xbutton2|joy1|joy2|joy3|joy4|joy5|joy6|joy7|joy8|joy9|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy30|joy31|joy32|joyx|joyy|joyz|joyr|joyu|joyv|joypov|joyname|joybuttons|joyaxes|joyinfo|space|tab|enter|escape|esc|backspace|bs|delete|del|insert|ins|pgup|pgdn|home|end|up|down|left|right|printscreen|ctrlbreak|pause|scrolllock|capslock|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadmult|numpadadd|numpadsub|numpaddiv|numpaddot|numpaddel|numpadins|numpadclear|numpadup|numpaddown|numpadleft|numpadright|numpadhome|numpadend|numpadpgup|numpadpgdn|numpadenter|f1|f2|f3|f4|f5|f6|f7|f8|f9|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f20|f21|f22|f23|f24|browser_back|browser_forward|browser_refresh|browser_stop|browser_search|browser_favorites|browser_home|volume_mute|volume_down|volume_up|media_next|media_prev|media_stop|media_play_pause|launch_mail|launch_media|launch_app1|launch_app2)\\b', caseInsensitive: true }, { token: 'variable.parameter', regex: '(?:\\b|^)(?:pixel|mouse|screen|relative|rgb|ltrim|rtrim|join|low|belownormal|normal|abovenormal|high|realtime|ahk_id|ahk_pid|ahk_class|ahk_group|between|contains|in|is|integer|float|integerfast|floatfast|number|digit|xdigit|alpha|upper|lower|alnum|time|date|not|or|and|alwaysontop|topmost|top|bottom|transparent|transcolor|redraw|region|id|idlast|processname|minmax|controllist|count|list|capacity|statuscd|eject|lock|unlock|label|filesystem|label|setlabel|serial|type|status|static|seconds|minutes|hours|days|read|parse|logoff|close|error|single|tray|add|rename|check|uncheck|togglecheck|enable|disable|toggleenable|default|nodefault|standard|nostandard|color|delete|deleteall|icon|noicon|tip|click|show|mainwindow|nomainwindow|useerrorlevel|text|picture|pic|groupbox|button|checkbox|radio|dropdownlist|ddl|combobox|listbox|listview|datetime|monthcal|updown|slider|tab|tab2|statusbar|treeview|iconsmall|tile|report|sortdesc|nosort|nosorthdr|grid|hdr|autosize|range|xm|ym|ys|xs|xp|yp|font|resize|owner|submit|nohide|minimize|maximize|restore|noactivate|na|cancel|destroy|center|margin|maxsize|minsize|owndialogs|guiescape|guiclose|guisize|guicontextmenu|guidropfiles|tabstop|section|altsubmit|wrap|hscroll|vscroll|border|top|bottom|buttons|expand|first|imagelist|lines|wantctrla|wantf2|vis|visfirst|number|uppercase|lowercase|limit|password|multi|wantreturn|group|background|bold|italic|strike|underline|norm|backgroundtrans|theme|caption|delimiter|minimizebox|maximizebox|sysmenu|toolwindow|flash|style|exstyle|check3|checked|checkedgray|readonly|password|hidden|left|right|center|notab|section|move|focus|hide|choose|choosestring|text|pos|enabled|disabled|visible|lastfound|lastfoundexist|alttab|shiftalttab|alttabmenu|alttabandmenu|alttabmenudismiss|notimers|interrupt|priority|waitclose|blind|raw|unicode|deref|pow|bitnot|bitand|bitor|bitxor|bitshiftleft|bitshiftright|yes|no|ok|cancel|abort|retry|ignore|tryagain|on|off|all|hkey_local_machine|hkey_users|hkey_current_user|hkey_classes_root|hkey_current_config|hklm|hku|hkcu|hkcr|hkcc|reg_sz|reg_expand_sz|reg_multi_sz|reg_dword|reg_qword|reg_binary|reg_link|reg_resource_list|reg_full_resource_descriptor|reg_resource_requirements_list|reg_dword_big_endian)\\b', caseInsensitive: true }, { keywordMap: {"constant.language": autoItKeywords}, regex: '\\w+\\b'}, { keywordMap: {"variable.function": atKeywords}, regex: '@\\w+\\b'}, { token : "constant.numeric", regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"}, { token: 'keyword.operator.ahk', regex: '=|==|<>|:=|<|>|\\*|\\/|\\+|:|\\?|\\-' }, { token: 'punctuation.ahk', regex: '#|`|::|,|\\{|\\}|\\(|\\)|\\%' }, { token: [ 'punctuation.quote.double', 'string.quoted.ahk', 'punctuation.quote.double' ], regex: '(")((?:[^"]|"")*)(")' }, { token: [ 'label.ahk', 'punctuation.definition.label.ahk' ], regex: '^([^: ]+)(:)(?!:)' } ] } this.normalizeRules(); }; AutoHotKeyHighlightRules.metaData = { name: 'AutoHotKey', scopeName: 'source.ahk', fileTypes: [ 'ahk' ], foldingStartMarker: '^\\s*/\\*|^(?![^{]*?;|[^{]*?/\\*(?!.*?\\*/.*?\\{)).*?\\{\\s*($|;|/\\*(?!.*?\\*/.*\\S))', foldingStopMarker: '^\\s*\\*/|^\\s*\\}' } oop.inherits(AutoHotKeyHighlightRules, TextHighlightRules); exports.AutoHotKeyHighlightRules = AutoHotKeyHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/autohotkey",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/autohotkey_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var AutoHotKeyHighlightRules = require("./autohotkey_highlight_rules").AutoHotKeyHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = AutoHotKeyHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = ";"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/autohotkey"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-batchfile.js ================================================ ace.define("ace/mode/batchfile_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var BatchFileHighlightRules = function() { this.$rules = { start: [ { token: 'keyword.command.dosbatch', regex: '\\b(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\\b', caseInsensitive: true }, { token: 'keyword.control.statement.dosbatch', regex: '\\b(?:goto|call|exit)\\b', caseInsensitive: true }, { token: 'keyword.control.conditional.if.dosbatch', regex: '\\bif\\s+not\\s+(?:exist|defined|errorlevel|cmdextversion)\\b', caseInsensitive: true }, { token: 'keyword.control.conditional.dosbatch', regex: '\\b(?:if|else)\\b', caseInsensitive: true }, { token: 'keyword.control.repeat.dosbatch', regex: '\\bfor\\b', caseInsensitive: true }, { token: 'keyword.operator.dosbatch', regex: '\\b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\\b' }, { token: ['doc.comment', 'comment'], regex: '(?:^|\\b)(rem)($|\\s.*$)', caseInsensitive: true }, { token: 'comment.line.colons.dosbatch', regex: '::.*$' }, { include: 'variable' }, { token: 'punctuation.definition.string.begin.shell', regex: '"', push: [ { token: 'punctuation.definition.string.end.shell', regex: '"', next: 'pop' }, { include: 'variable' }, { defaultToken: 'string.quoted.double.dosbatch' } ] }, { token: 'keyword.operator.pipe.dosbatch', regex: '[|]' }, { token: 'keyword.operator.redirect.shell', regex: '&>|\\d*>&\\d*|\\d*(?:>>|>|<)|\\d*<&|\\d*<>' } ], variable: [ { token: 'constant.numeric', regex: '%%\\w+|%[*\\d]|%\\w+%'}, { token: 'constant.numeric', regex: '%~\\d+'}, { token: ['markup.list', 'constant.other', 'markup.list'], regex: '(%)(\\w+)(%?)' }]} this.normalizeRules(); }; BatchFileHighlightRules.metaData = { name: 'Batch File', scopeName: 'source.dosbatch', fileTypes: [ 'bat' ] } oop.inherits(BatchFileHighlightRules, TextHighlightRules); exports.BatchFileHighlightRules = BatchFileHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/batchfile",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/batchfile_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var BatchFileHighlightRules = require("./batchfile_highlight_rules").BatchFileHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = BatchFileHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "::"; this.blockComment = ""; this.$id = "ace/mode/batchfile"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-c9search.js ================================================ ace.define("ace/mode/c9search_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; function safeCreateRegexp(source, flag) { try { return new RegExp(source, flag); } catch(e) {} } var C9SearchHighlightRules = function() { this.$rules = { "start" : [ { tokenNames : ["c9searchresults.constant.numeric", "c9searchresults.text", "c9searchresults.text", "c9searchresults.keyword"], regex : "(^\\s+[0-9]+)(:\\s)(.+)", onMatch : function(val, state, stack) { var values = this.splitRegex.exec(val); var types = this.tokenNames; var tokens = [{ type: types[0], value: values[1] },{ type: types[1], value: values[2] }]; var regex = stack[1]; var str = values[3]; var m; var last = 0; if (regex && regex.exec) { regex.lastIndex = 0; while (m = regex.exec(str)) { var skipped = str.substring(last, m.index); last = regex.lastIndex; if (skipped) tokens.push({type: types[2], value: skipped}); if (m[0]) tokens.push({type: types[3], value: m[0]}); else if (!skipped) break; } } if (last < str.length) tokens.push({type: types[2], value: str.substr(last)}); return tokens; } }, { token : ["string", "text"], // single line regex : "(\\S.*)(:$)" }, { regex : "Searching for .*$", onMatch: function(val, state, stack) { var parts = val.split("\x01"); if (parts.length < 3) return "text"; var options, search, replace; var i = 0; var tokens = [{ value: parts[i++] + "'", type: "text" }, { value: search = parts[i++], type: "text" // "c9searchresults.keyword" }, { value: "'" + parts[i++], type: "text" }]; if (parts[2] !== " in") { replace = parts[i]; tokens.push({ value: "'" + parts[i++] + "'", type: "text" }, { value: parts[i++], type: "text" }); } tokens.push({ value: " " + parts[i++] + " ", type: "text" }); if (parts[i+1]) { options = parts[i+1]; tokens.push({ value: "(" + parts[i+1] + ")", type: "text" }); i += 1; } else { i -= 1; } while (i++ < parts.length) { parts[i] && tokens.push({ value: parts[i], type: "text" }); } if (replace) { search = replace; options = ""; } if (search) { if (!/regex/.test(options)) search = lang.escapeRegExp(search); if (/whole/.test(options)) search = "\\b" + search + "\\b"; } var regex = search && safeCreateRegexp( "(" + search + ")", / sensitive/.test(options) ? "g" : "ig" ); if (regex) { stack[0] = state; stack[1] = regex; } return tokens; } }, { regex : "\\d+", token: "constant.numeric" } ] }; }; oop.inherits(C9SearchHighlightRules, TextHighlightRules); exports.C9SearchHighlightRules = C9SearchHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/folding/c9search",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /^(\S.*\:|Searching for.*)$/; this.foldingStopMarker = /^(\s+|Found.*)$/; this.getFoldWidgetRange = function(session, foldStyle, row) { var lines = session.doc.getAllLines(row); var line = lines[row]; var level1 = /^(Found.*|Searching for.*)$/; var level2 = /^(\S.*\:|\s*)$/; var re = level1.test(line) ? level1 : level2; var startRow = row; var endRow = row; if (this.foldingStartMarker.test(line)) { for (var i = row + 1, l = session.getLength(); i < l; i++) { if (re.test(lines[i])) break; } endRow = i; } else if (this.foldingStopMarker.test(line)) { for (var i = row - 1; i >= 0; i--) { line = lines[i]; if (re.test(line)) break; } startRow = i; } if (startRow != endRow) { var col = line.length; if (re === level1) col = line.search(/\(Found[^)]+\)$|$/); return new Range(startRow, col, endRow, 0); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/c9search",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c9search_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/c9search"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var C9SearchHighlightRules = require("./c9search_highlight_rules").C9SearchHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var C9StyleFoldMode = require("./folding/c9search").FoldMode; var Mode = function() { this.HighlightRules = C9SearchHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.foldingRules = new C9StyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/c9search"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-c_cpp.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var cFunctions = exports.cFunctions = "\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\b" var c_cppHighlightRules = function() { var keywordControls = ( "break|case|continue|default|do|else|for|goto|if|_Pragma|" + "return|switch|while|catch|operator|try|throw|using" ); var storageType = ( "asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|" + "_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|" + "class|wchar_t|template" ); var storageModifiers = ( "const|extern|register|restrict|static|volatile|inline|private|" + "protected|public|friend|explicit|virtual|export|mutable|typename|" + "constexpr|new|delete" ); var keywordOperators = ( "and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq" + "const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace" ); var builtinConstants = ( "NULL|true|false|TRUE|FALSE" ); var keywordMapper = this.$keywords = this.createKeywordMapper({ "keyword.control" : keywordControls, "storage.type" : storageType, "storage.modifier" : storageModifiers, "keyword.operator" : keywordOperators, "variable.language": "this", "constant.language": builtinConstants }, "identifier"); var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\d\\$_\u00a1-\uffff]*\\b"; this.$rules = { "start" : [ { token : "comment", regex : "//", next : "singleLineComment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '["].*\\\\$', next : "qqstring" }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "string", // multi line string start regex : "['].*\\\\$", next : "qstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "keyword", // pre-compiler directives regex : "#\\s*(?:include|import|pragma|line|define|undef|if|ifdef|else|elif|ifndef)\\b", next : "directive" }, { token : "keyword", // special case pre-compiler directive regex : "(?:#\\s*endif)\\b" }, { token : "support.function.C99.c", regex : cFunctions }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)" }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\." }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "singleLineComment" : [ { token : "comment", regex : /\\$/, next : "singleLineComment" }, { token : "comment", regex : /$/, next : "start" }, { defaultToken: "comment" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { defaultToken : "string" } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { defaultToken : "string" } ], "directive" : [ { token : "constant.other.multiline", regex : /\\/ }, { token : "constant.other.multiline", regex : /.*\\/ }, { token : "constant.other", regex : "\\s*<.+?>", next : "start" }, { token : "constant.other", // single line regex : '\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]', next : "start" }, { token : "constant.other", // single line regex : "\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']", next : "start" }, { token : "constant.other", regex : /[^\\\/]+/, next : "start" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(c_cppHighlightRules, TextHighlightRules); exports.c_cppHighlightRules = c_cppHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = c_cppHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/c_cpp"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-cirru.js ================================================ ace.define("ace/mode/cirru_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var CirruHighlightRules = function() { this.$rules = { start: [{ token: 'constant.numeric', regex: /[\d\.]+/ }, { token: 'comment.line.double-dash', regex: /--/, next: 'comment', }, { token: 'storage.modifier', regex: /\(/, }, { token: 'storage.modifier', regex: /\,/, next: 'line', }, { token: 'support.function', regex: /[^\(\)\"\s]+/, next: 'line' }, { token: 'string.quoted.double', regex: /"/, next: 'string', }, { token: 'storage.modifier', regex: /\)/, }], comment: [{ token: 'comment.line.double-dash', regex: /\ +[^\n]+/, next: 'start', }], string: [{ token: 'string.quoted.double', regex: /"/, next: 'line', }, { token: 'constant.character.escape', regex: /\\/, next: 'escape', }, { token: 'string.quoted.double', regex: /[^\\\"]+/, }], escape: [{ token: 'constant.character.escape', regex: /./, next: 'string', }], line: [{ token: 'constant.numeric', regex: /[\d\.]+/ }, { token: 'markup.raw', regex: /^\s*/, next: 'start', }, { token: 'storage.modifier', regex: /\$/, next: 'start', }, { token: 'variable.parameter', regex: /[^\(\)\"\s]+/ }, { token: 'storage.modifier', regex: /\(/, next: 'start' }, { token: 'storage.modifier', regex: /\)/, }, { token: 'markup.raw', regex: /^\ */, next: 'start', }, { token: 'string.quoted.double', regex: /"/, next: 'string', }] } }; oop.inherits(CirruHighlightRules, TextHighlightRules); exports.CirruHighlightRules = CirruHighlightRules; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/cirru",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/cirru_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CirruHighlightRules = require("./cirru_highlight_rules").CirruHighlightRules; var CoffeeFoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = CirruHighlightRules; this.foldingRules = new CoffeeFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "--"; this.$id = "ace/mode/cirru"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-clojure.js ================================================ ace.define("ace/mode/clojure_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ClojureHighlightRules = function() { var builtinFunctions = ( '* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* ' + '*command-line-args* *compile-files* *compile-path* *e *err* *file* ' + '*flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* ' + '*print-dup* *print-length* *print-level* *print-meta* *print-readably* ' + '*read-eval* *source-path* *use-context-classloader* ' + '*warn-on-reflection* + - -> ->> .. / < <= = ' + '== > > >= >= accessor aclone ' + 'add-classpath add-watch agent agent-errors aget alength alias all-ns ' + 'alter alter-meta! alter-var-root amap ancestors and apply areduce ' + 'array-map aset aset-boolean aset-byte aset-char aset-double aset-float ' + 'aset-int aset-long aset-short assert assoc assoc! assoc-in associative? ' + 'atom await await-for await1 bases bean bigdec bigint binding bit-and ' + 'bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left ' + 'bit-shift-right bit-test bit-xor boolean boolean-array booleans ' + 'bound-fn bound-fn* butlast byte byte-array bytes cast char char-array ' + 'char-escape-string char-name-string char? chars chunk chunk-append ' + 'chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? ' + 'class class? clear-agent-errors clojure-version coll? comment commute ' + 'comp comparator compare compare-and-set! compile complement concat cond ' + 'condp conj conj! cons constantly construct-proxy contains? count ' + 'counted? create-ns create-struct cycle dec decimal? declare definline ' + 'defmacro defmethod defmulti defn defn- defonce defstruct delay delay? ' + 'deliver deref derive descendants destructure disj disj! dissoc dissoc! ' + 'distinct distinct? doall doc dorun doseq dosync dotimes doto double ' + 'double-array doubles drop drop-last drop-while empty empty? ensure ' + 'enumeration-seq eval even? every? false? ffirst file-seq filter find ' + 'find-doc find-ns find-var first float float-array float? floats flush ' + 'fn fn? fnext for force format future future-call future-cancel ' + 'future-cancelled? future-done? future? gen-class gen-interface gensym ' + 'get get-in get-method get-proxy-class get-thread-bindings get-validator ' + 'hash hash-map hash-set identical? identity if-let if-not ifn? import ' + 'in-ns inc init-proxy instance? int int-array integer? interleave intern ' + 'interpose into into-array ints io! isa? iterate iterator-seq juxt key ' + 'keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list ' + 'list* list? load load-file load-reader load-string loaded-libs locking ' + 'long long-array longs loop macroexpand macroexpand-1 make-array ' + 'make-hierarchy map map? mapcat max max-key memfn memoize merge ' + 'merge-with meta method-sig methods min min-key mod name namespace neg? ' + 'newline next nfirst nil? nnext not not-any? not-empty not-every? not= ' + 'ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ' + 'ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? ' + 'or parents partial partition pcalls peek persistent! pmap pop pop! ' + 'pop-thread-bindings pos? pr pr-str prefer-method prefers ' + 'primitives-classnames print print-ctor print-doc print-dup print-method ' + 'print-namespace-doc print-simple print-special-doc print-str printf ' + 'println println-str prn prn-str promise proxy proxy-call-with-super ' + 'proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot ' + 'rand rand-int range ratio? rational? rationalize re-find re-groups ' + 're-matcher re-matches re-pattern re-seq read read-line read-string ' + 'reduce ref ref-history-count ref-max-history ref-min-history ref-set ' + 'refer refer-clojure release-pending-sends rem remove remove-method ' + 'remove-ns remove-watch repeat repeatedly replace replicate require ' + 'reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq ' + 'rsubseq second select-keys send send-off seq seq? seque sequence ' + 'sequential? set set-validator! set? short short-array shorts ' + 'shutdown-agents slurp some sort sort-by sorted-map sorted-map-by ' + 'sorted-set sorted-set-by sorted? special-form-anchor special-symbol? ' + 'split-at split-with str stream? string? struct struct-map subs subseq ' + 'subvec supers swap! symbol symbol? sync syntax-symbol-anchor take ' + 'take-last take-nth take-while test the-ns time to-array to-array-2d ' + 'trampoline transient tree-seq true? type unchecked-add unchecked-dec ' + 'unchecked-divide unchecked-inc unchecked-multiply unchecked-negate ' + 'unchecked-remainder unchecked-subtract underive unquote ' + 'unquote-splicing update-in update-proxy use val vals var-get var-set ' + 'var? vary-meta vec vector vector? when when-first when-let when-not ' + 'while with-bindings with-bindings* with-in-str with-loading-context ' + 'with-local-vars with-meta with-open with-out-str with-precision xml-seq ' + 'zero? zipmap' ); var keywords = ('throw try var ' + 'def do fn if let loop monitor-enter monitor-exit new quote recur set!' ); var buildinConstants = ("true false nil"); var keywordMapper = this.createKeywordMapper({ "keyword": keywords, "constant.language": buildinConstants, "support.function": builtinFunctions }, "identifier", false, " "); this.$rules = { "start" : [ { token : "comment", regex : ";.*$" }, { token : "keyword", //parens regex : "[\\(|\\)]" }, { token : "keyword", //lists regex : "[\\'\\(]" }, { token : "keyword", //vectors regex : "[\\[|\\]]" }, { token : "keyword", //sets and maps regex : "[\\{|\\}|\\#\\{|\\#\\}]" }, { token : "keyword", // ampersands regex : '[\\&]' }, { token : "keyword", // metadata regex : '[\\#\\^\\{]' }, { token : "keyword", // anonymous fn syntactic sugar regex : '[\\%]' }, { token : "keyword", // deref reader macro regex : '[@]' }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language", regex : '[!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+||=|!=|<=|>=|<>|<|>|!|&&]' }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$\\-]*\\b" }, { token : "string", // single line regex : '"', next: "string" }, { token : "constant", // symbol regex : /:[^()\[\]{}'"\^%`,;\s]+/ }, { token : "string.regexp", //Regular Expressions regex : '/#"(?:\\.|(?:\\\")|[^\""\n])*"/g' } ], "string" : [ { token : "constant.language.escape", regex : "\\\\.|\\\\$" }, { token : "string", regex : '[^"\\\\]+' }, { token : "string", regex : '"', next : "start" } ] }; }; oop.inherits(ClojureHighlightRules, TextHighlightRules); exports.ClojureHighlightRules = ClojureHighlightRules; }); ace.define("ace/mode/matching_parens_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingParensOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\)/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\))/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { var match = line.match(/^(\s+)/); if (match) { return match[1]; } return ""; }; }).call(MatchingParensOutdent.prototype); exports.MatchingParensOutdent = MatchingParensOutdent; }); ace.define("ace/mode/clojure",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/clojure_highlight_rules","ace/mode/matching_parens_outdent"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var ClojureHighlightRules = require("./clojure_highlight_rules").ClojureHighlightRules; var MatchingParensOutdent = require("./matching_parens_outdent").MatchingParensOutdent; var Mode = function() { this.HighlightRules = ClojureHighlightRules; this.$outdent = new MatchingParensOutdent(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = ";"; this.minorIndentFunctions = ["defn", "defn-", "defmacro", "def", "deftest", "testing"]; this.$toIndent = function(str) { return str.split('').map(function(ch) { if (/\s/.exec(ch)) { return ch; } else { return ' '; } }).join(''); }; this.$calculateIndent = function(line, tab) { var baseIndent = this.$getIndent(line); var delta = 0; var isParen, ch; for (var i = line.length - 1; i >= 0; i--) { ch = line[i]; if (ch === '(') { delta--; isParen = true; } else if (ch === '(' || ch === '[' || ch === '{') { delta--; isParen = false; } else if (ch === ')' || ch === ']' || ch === '}') { delta++; } if (delta < 0) { break; } } if (delta < 0 && isParen) { i += 1; var iBefore = i; var fn = ''; while (true) { ch = line[i]; if (ch === ' ' || ch === '\t') { if(this.minorIndentFunctions.indexOf(fn) !== -1) { return this.$toIndent(line.substring(0, iBefore - 1) + tab); } else { return this.$toIndent(line.substring(0, i + 1)); } } else if (ch === undefined) { return this.$toIndent(line.substring(0, iBefore - 1) + tab); } fn += line[i]; i++; } } else if(delta < 0 && !isParen) { return this.$toIndent(line.substring(0, i+1)); } else if(delta > 0) { baseIndent = baseIndent.substring(0, baseIndent.length - tab.length); return baseIndent; } else { return baseIndent; } }; this.getNextLineIndent = function(state, line, tab) { return this.$calculateIndent(line, tab); }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/clojure"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-cobol.js ================================================ ace.define("ace/mode/cobol_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var CobolHighlightRules = function() { var keywords = "ACCEPT|MERGE|SUM|ADD||MESSAGE|TABLE|ADVANCING|MODE|TAPE|" + "AFTER|MULTIPLY|TEST|ALL|NEGATIVE|TEXT|ALPHABET|NEXT|THAN|" + "ALSO|NO|THEN|ALTERNATE|NOT|THROUGH|AND|NUMBER|THRU|ANY|OCCURS|" + "TIME|ARE|OF|TO|AREA|OFF|TOP||ASCENDING|OMITTED|TRUE|ASSIGN|ON|TYPE|AT|OPEN|" + "UNIT|AUTHOR|OR|UNTIL|BEFORE|OTHER|UP|BLANK|OUTPUT|USE|BLOCK|PAGE|USING|BOTTOM|" + "PERFORM|VALUE|BY|PIC|VALUES|CALL|PICTURE|WHEN|CANCEL|PLUS|WITH|CD|POINTER|WRITE|" + "CHARACTER|POSITION||ZERO|CLOSE|POSITIVE|ZEROS|COLUMN|PROCEDURE|ZEROES|COMMA|PROGRAM|" + "COMMON|PROGRAM-ID|COMMUNICATION|QUOTE|COMP|RANDOM|COMPUTE|READ|CONTAINS|RECEIVE|CONFIGURATION|" + "RECORD|CONTINUE|REDEFINES|CONTROL|REFERENCE|COPY|REMAINDER|COUNT|REPLACE|DATA|REPORT|DATE|RESERVE|" + "DAY|RESET|DELETE|RETURN|DESTINATION|REWIND|DISABLE|REWRITE|DISPLAY|RIGHT|DIVIDE|RUN|DOWN|SAME|" + "ELSE|SEARCH|ENABLE|SECTION|END|SELECT|ENVIRONMENT|SENTENCE|EQUAL|SET|ERROR|SIGN|EXIT|SEQUENTIAL|" + "EXTERNAL|SIZE|FLASE|SORT|FILE|SOURCE|LENGTH|SPACE|LESS|STANDARD|LIMIT|START|LINE|STOP|LOCK|STRING|LOW-VALUE|SUBTRACT"; var builtinConstants = ( "true|false|null" ); var builtinFunctions = ( "count|min|max|avg|sum|rank|now|coalesce|main" ); var keywordMapper = this.createKeywordMapper({ "support.function": builtinFunctions, "keyword": keywords, "constant.language": builtinConstants }, "identifier", true); this.$rules = { "start" : [ { token : "comment", regex : "\\*.*$" }, { token : "string", // " string regex : '".*?"' }, { token : "string", // ' string regex : "'.*?'" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=" }, { token : "paren.lparen", regex : "[\\(]" }, { token : "paren.rparen", regex : "[\\)]" }, { token : "text", regex : "\\s+" } ] }; }; oop.inherits(CobolHighlightRules, TextHighlightRules); exports.CobolHighlightRules = CobolHighlightRules; }); ace.define("ace/mode/cobol",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/cobol_highlight_rules","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CobolHighlightRules = require("./cobol_highlight_rules").CobolHighlightRules; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = CobolHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "*"; this.$id = "ace/mode/cobol"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-coffee.js ================================================ ace.define("ace/mode/coffee_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; oop.inherits(CoffeeHighlightRules, TextHighlightRules); function CoffeeHighlightRules() { var identifier = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*"; var keywords = ( "this|throw|then|try|typeof|super|switch|return|break|by|continue|" + "catch|class|in|instanceof|is|isnt|if|else|extends|for|own|" + "finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|" + "or|on|unless|until|and|yes" ); var langConstant = ( "true|false|null|undefined|NaN|Infinity" ); var illegal = ( "case|const|default|function|var|void|with|enum|export|implements|" + "interface|let|package|private|protected|public|static|yield|" + "__hasProp|slice|bind|indexOf" ); var supportClass = ( "Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + "SyntaxError|TypeError|URIError|" + "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray" ); var supportFunction = ( "Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|" + "encodeURIComponent|decodeURI|decodeURIComponent|String|" ); var variableLanguage = ( "window|arguments|prototype|document" ); var keywordMapper = this.createKeywordMapper({ "keyword": keywords, "constant.language": langConstant, "invalid.illegal": illegal, "language.support.class": supportClass, "language.support.function": supportFunction, "variable.language": variableLanguage }, "identifier"); var functionRule = { token: ["paren.lparen", "variable.parameter", "paren.rparen", "text", "storage.type"], regex: /(?:(\()((?:"[^")]*?"|'[^')]*?'|\/[^\/)]*?\/|[^()\"'\/])*?)(\))(\s*))?([\-=]>)/.source }; var stringEscape = /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/; this.$rules = { start : [ { token : "constant.numeric", regex : "(?:0x[\\da-fA-F]+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:[eE][+-]?\\d+)?)" }, { stateName: "qdoc", token : "string", regex : "'''", next : [ {token : "string", regex : "'''", next : "start"}, {token : "constant.language.escape", regex : stringEscape}, {defaultToken: "string"} ] }, { stateName: "qqdoc", token : "string", regex : '"""', next : [ {token : "string", regex : '"""', next : "start"}, {token : "paren.string", regex : '#{', push : "start"}, {token : "constant.language.escape", regex : stringEscape}, {defaultToken: "string"} ] }, { stateName: "qstring", token : "string", regex : "'", next : [ {token : "string", regex : "'", next : "start"}, {token : "constant.language.escape", regex : stringEscape}, {defaultToken: "string"} ] }, { stateName: "qqstring", token : "string.start", regex : '"', next : [ {token : "string.end", regex : '"', next : "start"}, {token : "paren.string", regex : '#{', push : "start"}, {token : "constant.language.escape", regex : stringEscape}, {defaultToken: "string"} ] }, { stateName: "js", token : "string", regex : "`", next : [ {token : "string", regex : "`", next : "start"}, {token : "constant.language.escape", regex : stringEscape}, {defaultToken: "string"} ] }, { regex: "[{}]", onMatch: function(val, state, stack) { this.next = ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift() || ""; if (this.next.indexOf("string") != -1) return "paren.string"; } return "paren"; } }, { token : "string.regex", regex : "///", next : "heregex" }, { token : "string.regex", regex : /(?:\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)(?:[imgy]{0,4})(?!\w)/ }, { token : "comment", regex : "###(?!#)", next : "comment" }, { token : "comment", regex : "#.*" }, { token : ["punctuation.operator", "text", "identifier"], regex : "(\\.)(\\s*)(" + illegal + ")" }, { token : "punctuation.operator", regex : "\\." }, { token : ["keyword", "text", "language.support.class", "text", "keyword", "text", "language.support.class"], regex : "(class)(\\s+)(" + identifier + ")(?:(\\s+)(extends)(\\s+)(" + identifier + "))?" }, { token : ["entity.name.function", "text", "keyword.operator", "text"].concat(functionRule.token), regex : "(" + identifier + ")(\\s*)([=:])(\\s*)" + functionRule.regex }, functionRule, { token : "variable", regex : "@(?:" + identifier + ")?" }, { token: keywordMapper, regex : identifier }, { token : "punctuation.operator", regex : "\\,|\\." }, { token : "storage.type", regex : "[\\-=]>" }, { token : "keyword.operator", regex : "(?:[-+*/%<>&|^!?=]=|>>>=?|\\-\\-|\\+\\+|::|&&=|\\|\\|=|<<=|>>=|\\?\\.|\\.{2,3}|[!*+-=><])" }, { token : "paren.lparen", regex : "[({[]" }, { token : "paren.rparen", regex : "[\\]})]" }, { token : "text", regex : "\\s+" }], heregex : [{ token : "string.regex", regex : '.*?///[imgy]{0,4}', next : "start" }, { token : "comment.regex", regex : "\\s+(?:#.*)?" }, { token : "string.regex", regex : "\\S+" }], comment : [{ token : "comment", regex : '###', next : "start" }, { defaultToken : "comment" }] }; this.normalizeRules(); } exports.CoffeeHighlightRules = CoffeeHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/coffee",["require","exports","module","ace/mode/coffee_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/coffee","ace/range","ace/mode/text","ace/worker/worker_client","ace/lib/oop"], function(require, exports, module) { "use strict"; var Rules = require("./coffee_highlight_rules").CoffeeHighlightRules; var Outdent = require("./matching_brace_outdent").MatchingBraceOutdent; var FoldMode = require("./folding/coffee").FoldMode; var Range = require("../range").Range; var TextMode = require("./text").Mode; var WorkerClient = require("../worker/worker_client").WorkerClient; var oop = require("../lib/oop"); function Mode() { this.HighlightRules = Rules; this.$outdent = new Outdent(); this.foldingRules = new FoldMode(); } oop.inherits(Mode, TextMode); (function() { var indenter = /(?:[({[=:]|[-=]>|\b(?:else|try|(?:swi|ca)tch(?:\s+[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$|^\s*(else\b\s*)?(?:if|for|while|loop)\b(?!.*\bthen\b)/; var commentLine = /^(\s*)#/; var hereComment = /^\s*###(?!#)/; var indentation = /^\s*/; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') && state === 'start' && indenter.test(line)) indent += tab; return indent; }; this.toggleCommentLines = function(state, doc, startRow, endRow){ console.log("toggle"); var range = new Range(0, 0, 0, 0); for (var i = startRow; i <= endRow; ++i) { var line = doc.getLine(i); if (hereComment.test(line)) continue; if (commentLine.test(line)) line = line.replace(commentLine, '$1'); else line = line.replace(indentation, '$&#'); range.end.row = range.start.row = i; range.end.column = line.length + 1; doc.replace(range, line); } }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/coffee_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("error", function(e) { session.setAnnotations([e.data]); }); worker.on("ok", function(e) { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/coffee"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-coldfusion.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/coldfusion_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/javascript_highlight_rules","ace/mode/html_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var ColdfusionHighlightRules = function() { HtmlHighlightRules.call(this); this.embedTagRules(JavaScriptHighlightRules, "cfjs-", "cfscript"); this.normalizeRules(); }; oop.inherits(ColdfusionHighlightRules, HtmlHighlightRules); exports.ColdfusionHighlightRules = ColdfusionHighlightRules; }); ace.define("ace/mode/coldfusion",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/html","ace/mode/coldfusion_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var HtmlMode = require("./html").Mode; var ColdfusionHighlightRules = require("./coldfusion_highlight_rules").ColdfusionHighlightRules; var voidElements = "cfabort|cfapplication|cfargument|cfassociate|cfbreak|cfcache|cfcollection|cfcookie|cfdbinfo|cfdirectory|cfdump|cfelse|cfelseif|cferror|cfexchangecalendar|cfexchangeconnection|cfexchangecontact|cfexchangefilter|cfexchangetask|cfexit|cffeed|cffile|cfflush|cfftp|cfheader|cfhtmlhead|cfhttpparam|cfimage|cfimport|cfinclude|cfindex|cfinsert|cfinvokeargument|cflocation|cflog|cfmailparam|cfNTauthenticate|cfobject|cfobjectcache|cfparam|cfpdfformparam|cfprint|cfprocparam|cfprocresult|cfproperty|cfqueryparam|cfregistry|cfreportparam|cfrethrow|cfreturn|cfschedule|cfsearch|cfset|cfsetting|cfthrow|cfzipparam)".split("|"); var Mode = function() { HtmlMode.call(this); this.HighlightRules = ColdfusionHighlightRules; }; oop.inherits(Mode, HtmlMode); (function() { this.voidElements = oop.mixin(lang.arrayToMap(voidElements), this.voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.$id = "ace/mode/coldfusion"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-csharp.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/csharp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var CSharpHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "variable.language": "this", "keyword": "abstract|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic", "constant.language": "null|true|false" }, "identifier"); this.$rules = { "start" : [ { token : "comment", regex : "\\/\\/.*$" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // character regex : /'(?:.|\\(:?u[\da-fA-F]+|x[\da-fA-F]+|[tbrf'"n]))'/ }, { token : "string", start : '"', end : '"|$', next: [ {token: "constant.language.escape", regex: /\\(:?u[\da-fA-F]+|x[\da-fA-F]+|[tbrf'"n])/}, {token: "invalid", regex: /\\./} ] }, { token : "string", start : '@"', end : '"', next:[ {token: "constant.language.escape", regex: '""'} ] }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" }, { token : "keyword", regex : "^\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)" }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\." }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); this.normalizeRules(); }; oop.inherits(CSharpHighlightRules, TextHighlightRules); exports.CSharpHighlightRules = CSharpHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/csharp",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var CFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, CFoldMode); (function() { this.usingRe = /^\s*using \S/; this.getFoldWidgetRangeBase = this.getFoldWidgetRange; this.getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var fw = this.getFoldWidgetBase(session, foldStyle, row); if (!fw) { var line = session.getLine(row); if (/^\s*#region\b/.test(line)) return "start"; var usingRe = this.usingRe; if (usingRe.test(line)) { var prev = session.getLine(row - 1); var next = session.getLine(row + 1); if (!usingRe.test(prev) && usingRe.test(next)) return "start" } } return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.getFoldWidgetRangeBase(session, foldStyle, row); if (range) return range; var line = session.getLine(row); if (this.usingRe.test(line)) return this.getUsingStatementBlock(session, line, row); if (/^\s*#region\b/.test(line)) return this.getRegionBlock(session, line, row); }; this.getUsingStatementBlock = function(session, line, row) { var startColumn = line.match(this.usingRe)[0].length - 1; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); if (/^\s*$/.test(line)) continue; if (!this.usingRe.test(line)) break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/csharp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/csharp_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/csharp"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CSharpHighlightRules = require("./csharp_highlight_rules").CSharpHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/csharp").FoldMode; var Mode = function() { this.HighlightRules = CSharpHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { return null; }; this.$id = "ace/mode/csharp"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-css.js ================================================ ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-curly.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/curly_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var CurlyHighlightRules = function() { HtmlHighlightRules.call(this); this.$rules["start"].unshift({ token: "variable", regex: "{{", push: "curly-start" }); this.$rules["curly-start"] = [{ token: "variable", regex: "}}", next: "pop" }]; this.normalizeRules(); }; oop.inherits(CurlyHighlightRules, HtmlHighlightRules); exports.CurlyHighlightRules = CurlyHighlightRules; }); ace.define("ace/mode/curly",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/matching_brace_outdent","ace/mode/html_highlight_rules","ace/mode/folding/html","ace/mode/curly_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlMode = require("./html").Mode; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var HtmlFoldMode = require("./folding/html").FoldMode; var CurlyHighlightRules = require("./curly_highlight_rules").CurlyHighlightRules; var Mode = function() { HtmlMode.call(this); this.HighlightRules = CurlyHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.foldingRules = new HtmlFoldMode(); }; oop.inherits(Mode, HtmlMode); (function() { this.$id = "ace/mode/curly"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-d.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/d_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DHighlightRules = function() { var keywords = ( "this|super|import|module|body|mixin|__traits|invariant|alias|asm|delete|"+ "typeof|typeid|sizeof|cast|new|in|is|typedef|__vector|__parameters" ); var keywordControls = ( "break|case|continue|default|do|else|for|foreach|foreach_reverse|goto|if|" + "return|switch|while|catch|try|throw|finally|version|assert|unittest|with" ); var types = ( "auto|bool|char|dchar|wchar|byte|ubyte|float|double|real|" + "cfloat|creal|cdouble|cent|ifloat|ireal|idouble|" + "int|long|short|void|uint|ulong|ushort|ucent|" + "function|delegate|string|wstring|dstring|size_t|ptrdiff_t|hash_t|Object" ); var modifiers = ( "abstract|align|debug|deprecated|export|extern|const|final|in|inout|out|" + "ref|immutable|lazy|nothrow|override|package|pragma|private|protected|" + "public|pure|scope|shared|__gshared|synchronized|static|volatile" ); var storages = ( "class|struct|union|template|interface|enum|macro" ); var stringEscapesSeq = { token: "constant.language.escape", regex: "\\\\(?:(?:x[0-9A-F]{2})|(?:[0-7]{1,3})|(?:['\"\\?0abfnrtv\\\\])|" + "(?:u[0-9a-fA-F]{4})|(?:U[0-9a-fA-F]{8}))" }; var builtinConstants = ( "null|true|false|"+ "__DATE__|__EOF__|__TIME__|__TIMESTAMP__|__VENDOR__|__VERSION__|"+ "__FILE__|__MODULE__|__LINE__|__FUNCTION__|__PRETTY_FUNCTION__" ); var operators = ( "/|/\\=|&|&\\=|&&|\\|\\|\\=|\\|\\||\\-|\\-\\=|\\-\\-|\\+|" + "\\+\\=|\\+\\+|\\<|\\<\\=|\\<\\<|\\<\\<\\=|\\<\\>|\\<\\>\\=|\\>|\\>\\=|\\>\\>\\=|" + "\\>\\>\\>\\=|\\>\\>|\\>\\>\\>|\\!|\\!\\=|\\!\\<\\>|\\!\\<\\>\\=|\\!\\<|\\!\\<\\=|" + "\\!\\>|\\!\\>\\=|\\?|\\$|\\=|\\=\\=|\\*|\\*\\=|%|%\\=|" + "\\^|\\^\\=|\\^\\^|\\^\\^\\=|~|~\\=|\\=\\>|#" ); var keywordMapper = this.$keywords = this.createKeywordMapper({ "keyword.modifier" : modifiers, "keyword.control" : keywordControls, "keyword.type" : types, "keyword": keywords, "keyword.storage": storages, "punctation": "\\.|\\,|;|\\.\\.|\\.\\.\\.", "keyword.operator" : operators, "constant.language": builtinConstants }, "identifier"); var identifierRe = "[a-zA-Z_\u00a1-\uffff][a-zA-Z\\d_\u00a1-\uffff]*\\b"; this.$rules = { "start" : [ { //-------------------------------------------------------- COMMENTS token : "comment", regex : "\\/\\/.*$" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "star-comment" }, { token: "comment.shebang", regex: "^\s*#!.*" }, { token : "comment", regex : "\\/\\+", next: "plus-comment" }, { //-------------------------------------------------------- STRINGS onMatch: function(value, currentState, state) { state.unshift(this.next, value.substr(2)); return "string"; }, regex: 'q"(?:[\\[\\(\\{\\<]+)', next: 'operator-heredoc-string' }, { onMatch: function(value, currentState, state) { state.unshift(this.next, value.substr(2)); return "string"; }, regex: 'q"(?:[a-zA-Z_]+)$', next: 'identifier-heredoc-string' }, { token : "string", // multi line string start regex : '[xr]?"', next : "quote-string" }, { token : "string", // multi line string start regex : '[xr]?`', next : "backtick-string" }, { token : "string", // single line regex : "[xr]?['](?:(?:\\\\.)|(?:[^'\\\\]))*?['][cdw]?" }, { //-------------------------------------------------------- RULES token: ["keyword", "text", "paren.lparen"], regex: /(asm)(\s*)({)/, next: "d-asm" }, { token: ["keyword", "text", "paren.lparen", "constant.language"], regex: "(__traits)(\\s*)(\\()("+identifierRe+")" }, { // import|module abc token: ["keyword", "text", "variable.module"], regex: "(import|module)(\\s+)((?:"+identifierRe+"\\.?)*)" }, { // storage Name token: ["keyword.storage", "text", "entity.name.type"], regex: "("+storages+")(\\s*)("+identifierRe+")" }, { // alias|typedef foo bar; token: ["keyword", "text", "variable.storage", "text"], regex: "(alias|typedef)(\\s*)("+identifierRe+")(\\s*)" }, { //-------------------------------------------------------- OTHERS token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F_]+(l|ul|u|f|F|L|U|UL)?\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?(l|ul|u|f|F|L|U|UL)?\\b" }, { token: "entity.other.attribute-name", regex: "@"+identifierRe }, { token : keywordMapper, regex : "[a-zA-Z_][a-zA-Z0-9_]*\\b" }, { token : "keyword.operator", regex : operators }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\.|\\:" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "star-comment" : [ { token : "comment", // closing comment regex : "\\*\\/", next : "start" }, { defaultToken: 'comment' } ], "plus-comment" : [ { token : "comment", // closing comment regex : "\\+\\/", next : "start" }, { defaultToken: 'comment' } ], "quote-string" : [ stringEscapesSeq, { token : "string", regex : '"[cdw]?', next : "start" }, { defaultToken: 'string' } ], "backtick-string" : [ stringEscapesSeq, { token : "string", regex : '`[cdw]?', next : "start" }, { defaultToken: 'string' } ], "operator-heredoc-string": [ { onMatch: function(value, currentState, state) { value = value.substring(value.length-2, value.length-1); var map = {'>':'<',']':'[',')':'(','}':'{'}; if(Object.keys(map).indexOf(value) != -1) value = map[value]; if(value != state[1]) return "string"; state.shift(); state.shift(); return "string"; }, regex: '(?:[\\]\\)}>]+)"', next: 'start' }, { token: 'string', regex: '[^\\]\\)}>]+' } ], "identifier-heredoc-string": [ { onMatch: function(value, currentState, state) { value = value.substring(0, value.length-1); if(value != state[1]) return "string"; state.shift(); state.shift(); return "string"; }, regex: '^(?:[A-Za-z_][a-zA-Z0-9]+)"', next: 'start' }, { token: 'string', regex: '[^\\]\\)}>]+' } ], "d-asm": [ { token: "paren.rparen", regex: "\\}", next: "start" }, { token: 'keyword.instruction', regex: '[a-zA-Z]+', next: 'd-asm-instruction' }, { token: "text", regex: "\\s+" } ], 'd-asm-instruction': [ { token: 'constant.language', regex: /AL|AH|AX|EAX|BL|BH|BX|EBX|CL|CH|CX|ECX|DL|DH|DX|EDX|BP|EBP|SP|ESP|DI|EDI|SI|ESI/i }, { token: 'identifier', regex: '[a-zA-Z]+' }, { token: 'string', regex: '".*"' }, { token: 'comment', regex: '//.*$' }, { token: 'constant.numeric', regex: '[0-9.xA-F]+' }, { token: 'punctuation.operator', regex: '\\,' }, { token: 'punctuation.operator', regex: ';', next: 'd-asm' }, { token: 'text', regex: '\\s+' } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; DHighlightRules.metaData = { comment: 'D language', fileTypes: [ 'd', 'di' ], firstLineMatch: '^#!.*\\b[glr]?dmd\\b.', foldingStartMarker: '(?x)/\\*\\*(?!\\*)|^(?![^{]*?//|[^{]*?/\\*(?!.*?\\*/.*?\\{)).*?\\{\\s*($|//|/\\*(?!.*?\\*/.*\\S))', foldingStopMarker: '(? indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/d",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/d_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var DHighlightRules = require("./d_highlight_rules").DHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = DHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/d"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-dart.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var cFunctions = exports.cFunctions = "\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\b" var c_cppHighlightRules = function() { var keywordControls = ( "break|case|continue|default|do|else|for|goto|if|_Pragma|" + "return|switch|while|catch|operator|try|throw|using" ); var storageType = ( "asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|" + "_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|" + "class|wchar_t|template" ); var storageModifiers = ( "const|extern|register|restrict|static|volatile|inline|private|" + "protected|public|friend|explicit|virtual|export|mutable|typename|" + "constexpr|new|delete" ); var keywordOperators = ( "and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq" + "const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace" ); var builtinConstants = ( "NULL|true|false|TRUE|FALSE" ); var keywordMapper = this.$keywords = this.createKeywordMapper({ "keyword.control" : keywordControls, "storage.type" : storageType, "storage.modifier" : storageModifiers, "keyword.operator" : keywordOperators, "variable.language": "this", "constant.language": builtinConstants }, "identifier"); var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\d\\$_\u00a1-\uffff]*\\b"; this.$rules = { "start" : [ { token : "comment", regex : "//", next : "singleLineComment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '["].*\\\\$', next : "qqstring" }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "string", // multi line string start regex : "['].*\\\\$", next : "qstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "keyword", // pre-compiler directives regex : "#\\s*(?:include|import|pragma|line|define|undef|if|ifdef|else|elif|ifndef)\\b", next : "directive" }, { token : "keyword", // special case pre-compiler directive regex : "(?:#\\s*endif)\\b" }, { token : "support.function.C99.c", regex : cFunctions }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)" }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\." }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "singleLineComment" : [ { token : "comment", regex : /\\$/, next : "singleLineComment" }, { token : "comment", regex : /$/, next : "start" }, { defaultToken: "comment" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { defaultToken : "string" } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { defaultToken : "string" } ], "directive" : [ { token : "constant.other.multiline", regex : /\\/ }, { token : "constant.other.multiline", regex : /.*\\/ }, { token : "constant.other", regex : "\\s*<.+?>", next : "start" }, { token : "constant.other", // single line regex : '\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]', next : "start" }, { token : "constant.other", // single line regex : "\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']", next : "start" }, { token : "constant.other", regex : /[^\\\/]+/, next : "start" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(c_cppHighlightRules, TextHighlightRules); exports.c_cppHighlightRules = c_cppHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = c_cppHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/c_cpp"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/dart_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DartHighlightRules = function() { var constantLanguage = "true|false|null"; var variableLanguage = "this|super"; var keywordControl = "try|catch|finally|throw|rethrow|assert|break|case|continue|default|do|else|for|if|in|return|switch|while|new|deferred|async|await"; var keywordDeclaration = "abstract|class|extends|external|factory|implements|get|native|operator|set|typedef|with|enum"; var storageModifier = "static|final|const"; var storageType = "void|bool|num|int|double|dynamic|var|String"; var keywordMapper = this.createKeywordMapper({ "constant.language.dart": constantLanguage, "variable.language.dart": variableLanguage, "keyword.control.dart": keywordControl, "keyword.declaration.dart": keywordDeclaration, "storage.modifier.dart": storageModifier, "storage.type.primitive.dart": storageType }, "identifier"); var stringfill = { token : "string", regex : ".+" }; this.$rules = { "start": [ { token : "comment", regex : /\/\/.*$/ }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token: ["meta.preprocessor.script.dart"], regex: "^(#!.*)$" }, { token: "keyword.other.import.dart", regex: "(?:\\b)(?:library|import|export|part|of|show|hide)(?:\\b)" }, { token : ["keyword.other.import.dart", "text"], regex : "(?:\\b)(prefix)(\\s*:)" }, { regex: "\\bas\\b", token: "keyword.cast.dart" }, { regex: "\\?|:", token: "keyword.control.ternary.dart" }, { regex: "(?:\\b)(is\\!?)(?:\\b)", token: ["keyword.operator.dart"] }, { regex: "(<<|>>>?|~|\\^|\\||&)", token: ["keyword.operator.bitwise.dart"] }, { regex: "((?:&|\\^|\\||<<|>>>?)=)", token: ["keyword.operator.assignment.bitwise.dart"] }, { regex: "(===?|!==?|<=?|>=?)", token: ["keyword.operator.comparison.dart"] }, { regex: "((?:[+*/%-]|\\~)=)", token: ["keyword.operator.assignment.arithmetic.dart"] }, { regex: "=", token: "keyword.operator.assignment.dart" }, { token : "string", regex : "'''", next : "qdoc" }, { token : "string", regex : '"""', next : "qqdoc" }, { token : "string", regex : "'", next : "qstring" }, { token : "string", regex : '"', next : "qqstring" }, { regex: "(\\-\\-|\\+\\+)", token: ["keyword.operator.increment-decrement.dart"] }, { regex: "(\\-|\\+|\\*|\\/|\\~\\/|%)", token: ["keyword.operator.arithmetic.dart"] }, { regex: "(!|&&|\\|\\|)", token: ["keyword.operator.logical.dart"] }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "qdoc" : [ { token : "string", regex : ".*?'''", next : "start" }, stringfill], "qqdoc" : [ { token : "string", regex : '.*?"""', next : "start" }, stringfill], "qstring" : [ { token : "string", regex : "[^\\\\']*(?:\\\\.[^\\\\']*)*'", next : "start" }, stringfill], "qqstring" : [ { token : "string", regex : '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"', next : "start" }, stringfill] } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(DartHighlightRules, TextHighlightRules); exports.DartHighlightRules = DartHighlightRules; }); ace.define("ace/mode/dart",["require","exports","module","ace/lib/oop","ace/mode/c_cpp","ace/mode/dart_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var CMode = require("./c_cpp").Mode; var DartHighlightRules = require("./dart_highlight_rules").DartHighlightRules; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { CMode.call(this); this.HighlightRules = DartHighlightRules; this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, CMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/dart"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-diff.js ================================================ ace.define("ace/mode/diff_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DiffHighlightRules = function() { this.$rules = { "start" : [{ regex: "^(?:\\*{15}|={67}|-{3}|\\+{3})$", token: "punctuation.definition.separator.diff", "name": "keyword" }, { //diff.range.unified regex: "^(@@)(\\s*.+?\\s*)(@@)(.*)$", token: [ "constant", "constant.numeric", "constant", "comment.doc.tag" ] }, { //diff.range.normal regex: "^(\\d+)([,\\d]+)(a|d|c)(\\d+)([,\\d]+)(.*)$", token: [ "constant.numeric", "punctuation.definition.range.diff", "constant.function", "constant.numeric", "punctuation.definition.range.diff", "invalid" ], "name": "meta." }, { regex: "^(\\-{3}|\\+{3}|\\*{3})( .+)$", token: [ "constant.numeric", "meta.tag" ] }, { // added regex: "^([!+>])(.*?)(\\s*)$", token: [ "support.constant", "text", "invalid" ] }, { // removed regex: "^([<\\-])(.*?)(\\s*)$", token: [ "support.function", "string", "invalid" ] }, { regex: "^(diff)(\\s+--\\w+)?(.+?)( .+)?$", token: ["variable", "variable", "keyword", "variable"] }, { regex: "^Index.+$", token: "variable" }, { regex: "^\\s+$", token: "text" }, { regex: "\\s*$", token: "invalid" }, { defaultToken: "invisible", caseInsensitive: true } ] }; }; oop.inherits(DiffHighlightRules, TextHighlightRules); exports.DiffHighlightRules = DiffHighlightRules; }); ace.define("ace/mode/folding/diff",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function(levels, flag) { this.regExpList = levels; this.flag = flag; this.foldingStartMarker = RegExp("^(" + levels.join("|") + ")", this.flag); }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var line = session.getLine(row); var start = {row: row, column: line.length}; var regList = this.regExpList; for (var i = 1; i <= regList.length; i++) { var re = RegExp("^(" + regList.slice(0, i).join("|") + ")", this.flag); if (re.test(line)) break; } for (var l = session.getLength(); ++row < l; ) { line = session.getLine(row); if (re.test(line)) break; } if (row == start.row + 1) return; return Range.fromPoints(start, {row: row - 1, column: line.length}); }; }).call(FoldMode.prototype); }); ace.define("ace/mode/diff",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/diff_highlight_rules","ace/mode/folding/diff"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var HighlightRules = require("./diff_highlight_rules").DiffHighlightRules; var FoldMode = require("./folding/diff").FoldMode; var Mode = function() { this.HighlightRules = HighlightRules; this.foldingRules = new FoldMode(["diff", "index", "\\+{3}", "@@|\\*{5}"], "i"); }; oop.inherits(Mode, TextMode); (function() { this.$id = "ace/mode/diff"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-django.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/django",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/html_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { var oop = require("../lib/oop"); var HtmlMode = require("./html").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DjangoHighlightRules = function(){ this.$rules = { 'start': [{ token: "string", regex: '".*?"' }, { token: "string", regex: "'.*?'" }, { token: "constant", regex: '[0-9]+' }, { token: "variable", regex: "[-_a-zA-Z0-9:]+" }], 'comment': [{ token : "comment.block", merge: true, regex : ".+?" }], 'tag': [{ token: "entity.name.function", regex: "[a-zA-Z][_a-zA-Z0-9]*", next: "start" }] }; }; oop.inherits(DjangoHighlightRules, TextHighlightRules) var DjangoHtmlHighlightRules = function() { this.$rules = new HtmlHighlightRules().getRules(); for (var i in this.$rules) { this.$rules[i].unshift({ token: "comment.line", regex: "\\{#.*?#\\}" }, { token: "comment.block", regex: "\\{\\%\\s*comment\\s*\\%\\}", merge: true, next: "django-comment" }, { token: "constant.language", regex: "\\{\\{", next: "django-start" }, { token: "constant.language", regex: "\\{\\%", next: "django-tag" }); this.embedRules(DjangoHighlightRules, "django-", [{ token: "comment.block", regex: "\\{\\%\\s*endcomment\\s*\\%\\}", merge: true, next: "start" }, { token: "constant.language", regex: "\\%\\}", next: "start" }, { token: "constant.language", regex: "\\}\\}", next: "start" }]); } }; oop.inherits(DjangoHtmlHighlightRules, HtmlHighlightRules); var Mode = function() { HtmlMode.call(this); this.HighlightRules = DjangoHtmlHighlightRules; }; oop.inherits(Mode, HtmlMode); (function() { this.$id = "ace/mode/django"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-dockerfile.js ================================================ ace.define("ace/mode/sh_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var reservedKeywords = exports.reservedKeywords = ( '!|{|}|case|do|done|elif|else|'+ 'esac|fi|for|if|in|then|until|while|'+ '&|;|export|local|read|typeset|unset|'+ 'elif|select|set' ); var languageConstructs = exports.languageConstructs = ( '[|]|alias|bg|bind|break|builtin|'+ 'cd|command|compgen|complete|continue|'+ 'dirs|disown|echo|enable|eval|exec|'+ 'exit|fc|fg|getopts|hash|help|history|'+ 'jobs|kill|let|logout|popd|printf|pushd|'+ 'pwd|return|set|shift|shopt|source|'+ 'suspend|test|times|trap|type|ulimit|'+ 'umask|unalias|wait' ); var ShHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "keyword": reservedKeywords, "support.function.builtin": languageConstructs, "invalid.deprecated": "debugger" }, "identifier"); var integer = "(?:(?:[1-9]\\d*)|(?:0))"; var fraction = "(?:\\.\\d+)"; var intPart = "(?:\\d+)"; var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))"; var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + ")"; var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")"; var fileDescriptor = "(?:&" + intPart + ")"; var variableName = "[a-zA-Z_][a-zA-Z0-9_]*"; var variable = "(?:(?:\\$" + variableName + ")|(?:" + variableName + "=))"; var builtinVariable = "(?:\\$(?:SHLVL|\\$|\\!|\\?))"; var func = "(?:" + variableName + "\\s*\\(\\))"; this.$rules = { "start" : [{ token : "constant", regex : /\\./ }, { token : ["text", "comment"], regex : /(^|\s)(#.*)$/ }, { token : "string", regex : '"', push : [{ token : "constant.language.escape", regex : /\\(?:[$abeEfnrtv\\'"]|x[a-fA-F\d]{1,2}|u[a-fA-F\d]{4}([a-fA-F\d]{4})?|c.|\d{1,3})/ }, { token : "constant", regex : /\$\w+/ }, { token : "string", regex : '"', next: "pop" }, { defaultToken: "string" }] }, { regex : "<<<", token : "keyword.operator" }, { stateName: "heredoc", regex : "(<<)(\\s*)(['\"`]?)([\\w\\-]+)(['\"`]?)", onMatch : function(value, currentState, stack) { var next = value[2] == '-' ? "indentedHeredoc" : "heredoc"; var tokens = value.split(this.splitRegex); stack.push(next, tokens[4]); return [ {type:"constant", value: tokens[1]}, {type:"text", value: tokens[2]}, {type:"string", value: tokens[3]}, {type:"support.class", value: tokens[4]}, {type:"string", value: tokens[5]} ]; }, rules: { heredoc: [{ onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }], indentedHeredoc: [{ token: "string", regex: "^\t+" }, { onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }] } }, { regex : "$", token : "empty", next : function(currentState, stack) { if (stack[0] === "heredoc" || stack[0] === "indentedHeredoc") return stack[0]; return currentState; } }, { token : "variable.language", regex : builtinVariable }, { token : "variable", regex : variable }, { token : "support.function", regex : func }, { token : "support.function", regex : fileDescriptor }, { token : "string", // ' string start : "'", end : "'" }, { token : "constant.numeric", // float regex : floatNumber }, { token : "constant.numeric", // integer regex : integer + "\\b" }, { token : keywordMapper, regex : "[a-zA-Z_][a-zA-Z0-9_]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!=" }, { token : "paren.lparen", regex : "[\\[\\(\\{]" }, { token : "paren.rparen", regex : "[\\]\\)\\}]" } ] }; this.normalizeRules(); }; oop.inherits(ShHighlightRules, TextHighlightRules); exports.ShHighlightRules = ShHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/sh",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sh_highlight_rules","ace/range","ace/mode/folding/cstyle","ace/mode/behaviour/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var ShHighlightRules = require("./sh_highlight_rules").ShHighlightRules; var Range = require("../range").Range; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var Mode = function() { this.HighlightRules = ShHighlightRules; this.foldingRules = new CStyleFoldMode(); this.$behaviour = new CstyleBehaviour(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[\:]\s*$/); if (match) { indent += tab; } } return indent; }; var outdents = { "pass": 1, "return": 1, "raise": 1, "break": 1, "continue": 1 }; this.checkOutdent = function(state, line, input) { if (input !== "\r\n" && input !== "\r" && input !== "\n") return false; var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens; if (!tokens) return false; do { var last = tokens.pop(); } while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/)))); if (!last) return false; return (last.type == "keyword" && outdents[last.value]); }; this.autoOutdent = function(state, doc, row) { row += 1; var indent = this.$getIndent(doc.getLine(row)); var tab = doc.getTabString(); if (indent.slice(-tab.length) == tab) doc.remove(new Range(row, indent.length-tab.length, row, indent.length)); }; this.$id = "ace/mode/sh"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/dockerfile_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/sh_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var ShHighlightRules = require("./sh_highlight_rules").ShHighlightRules; var DockerfileHighlightRules = function() { ShHighlightRules.call(this); var startRules = this.$rules.start; for (var i = 0; i < startRules.length; i++) { if (startRules[i].token == "variable.language") { startRules.splice(i, 0, { token: "constant.language", regex: "(?:^(?:FROM|MAINTAINER|RUN|CMD|EXPOSE|ENV|ADD|ENTRYPOINT|VOLUME|USER|WORKDIR|ONBUILD|COPY)\\b)", caseInsensitive: true }); break; } } }; oop.inherits(DockerfileHighlightRules, ShHighlightRules); exports.DockerfileHighlightRules = DockerfileHighlightRules; }); ace.define("ace/mode/dockerfile",["require","exports","module","ace/lib/oop","ace/mode/sh","ace/mode/dockerfile_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var ShMode = require("./sh").Mode; var DockerfileHighlightRules = require("./dockerfile_highlight_rules").DockerfileHighlightRules; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { ShMode.call(this); this.HighlightRules = DockerfileHighlightRules; this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, ShMode); (function() { this.$id = "ace/mode/dockerfile"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-dot.js ================================================ ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/dot_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/doc_comment_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var DotHighlightRules = function() { var keywords = lang.arrayToMap( ("strict|node|edge|graph|digraph|subgraph").split("|") ); var attributes = lang.arrayToMap( ("damping|k|url|area|arrowhead|arrowsize|arrowtail|aspect|bb|bgcolor|center|charset|clusterrank|color|colorscheme|comment|compound|concentrate|constraint|decorate|defaultdist|dim|dimen|dir|diredgeconstraints|distortion|dpi|edgeurl|edgehref|edgetarget|edgetooltip|epsilon|esep|fillcolor|fixedsize|fontcolor|fontname|fontnames|fontpath|fontsize|forcelabels|gradientangle|group|headurl|head_lp|headclip|headhref|headlabel|headport|headtarget|headtooltip|height|href|id|image|imagepath|imagescale|label|labelurl|label_scheme|labelangle|labeldistance|labelfloat|labelfontcolor|labelfontname|labelfontsize|labelhref|labeljust|labelloc|labeltarget|labeltooltip|landscape|layer|layerlistsep|layers|layerselect|layersep|layout|len|levels|levelsgap|lhead|lheight|lp|ltail|lwidth|margin|maxiter|mclimit|mindist|minlen|mode|model|mosek|nodesep|nojustify|normalize|nslimit|nslimit1|ordering|orientation|outputorder|overlap|overlap_scaling|pack|packmode|pad|page|pagedir|pencolor|penwidth|peripheries|pin|pos|quadtree|quantum|rank|rankdir|ranksep|ratio|rects|regular|remincross|repulsiveforce|resolution|root|rotate|rotation|samehead|sametail|samplepoints|scale|searchsize|sep|shape|shapefile|showboxes|sides|size|skew|smoothing|sortv|splines|start|style|stylesheet|tailurl|tail_lp|tailclip|tailhref|taillabel|tailport|tailtarget|tailtooltip|target|tooltip|truecolor|vertices|viewport|voro_margin|weight|width|xlabel|xlp|z").split("|") ); this.$rules = { "start" : [ { token : "comment", regex : /\/\/.*$/ }, { token : "comment", regex : /#.*$/ }, { token : "comment", // multi line comment merge : true, regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", regex : /[+\-]?\d+(?:(?:\.\d*)?(?:[eE][+\-]?\d+)?)?\b/ }, { token : "keyword.operator", regex : /\+|=|\->/ }, { token : "punctuation.operator", regex : /,|;/ }, { token : "paren.lparen", regex : /[\[{]/ }, { token : "paren.rparen", regex : /[\]}]/ }, { token: "comment", regex: /^#!.*$/ }, { token: function(value) { if (keywords.hasOwnProperty(value.toLowerCase())) { return "keyword"; } else if (attributes.hasOwnProperty(value.toLowerCase())) { return "variable"; } else { return "text"; } }, regex: "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", merge : true, next : "start" }, { token : "comment", // comment spanning whole line merge : true, regex : ".+" } ], "qqstring" : [ { token : "string", regex : '[^"\\\\]+', merge : true }, { token : "string", regex : "\\\\$", next : "qqstring", merge : true }, { token : "string", regex : '"|$', next : "start", merge : true } ], "qstring" : [ { token : "string", regex : "[^'\\\\]+", merge : true }, { token : "string", regex : "\\\\$", next : "qstring", merge : true }, { token : "string", regex : "'|$", next : "start", merge : true } ] }; }; oop.inherits(DotHighlightRules, TextHighlightRules); exports.DotHighlightRules = DotHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/dot",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/matching_brace_outdent","ace/mode/dot_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var DotHighlightRules = require("./dot_highlight_rules").DotHighlightRules; var DotFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = DotHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.foldingRules = new DotFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = ["//", "#"]; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/dot"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-eiffel.js ================================================ ace.define("ace/mode/eiffel_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var EiffelHighlightRules = function() { var keywords = "across|agent|alias|all|attached|as|assign|attribute|check|" + "class|convert|create|debug|deferred|detachable|do|else|elseif|end|" + "ensure|expanded|export|external|feature|from|frozen|if|inherit|" + "inspect|invariant|like|local|loop|not|note|obsolete|old|once|" + "Precursor|redefine|rename|require|rescue|retry|select|separate|" + "some|then|undefine|until|variant|when"; var operatorKeywords = "and|implies|or|xor"; var languageConstants = "Void"; var booleanConstants = "True|False"; var languageVariables = "Current|Result"; var keywordMapper = this.createKeywordMapper({ "constant.language": languageConstants, "constant.language.boolean": booleanConstants, "variable.language": languageVariables, "keyword.operator": operatorKeywords, "keyword": keywords }, "identifier", true); var simpleString = /(?:[^"%\b\f\v]|%[A-DFHLNQR-V%'"()<>]|%\/(?:0[xX][\da-fA-F](?:_*[\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\d(?:_*\d)*)\/)+?/; this.$rules = { "start": [{ token : "string.quoted.other", // Aligned-verbatim-strings (verbatim option not supported) regex : /"\[/, next: "aligned_verbatim_string" }, { token : "string.quoted.other", // Non-aligned-verbatim-strings (verbatim option not supported) regex : /"\{/, next: "non-aligned_verbatim_string" }, { token : "string.quoted.double", regex : /"(?:[^%\b\f\n\r\v]|%[A-DFHLNQR-V%'"()<>]|%\/(?:0[xX][\da-fA-F](?:_*[\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\d(?:_*\d)*)\/)*?"/ }, { token : "comment.line.double-dash", regex : /--.*/ }, { token : "constant.character", regex : /'(?:[^%\b\f\n\r\t\v]|%[A-DFHLNQR-V%'"()<>]|%\/(?:0[xX][\da-fA-F](?:_*[\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\d(?:_*\d)*)\/)'/ }, { token : "constant.numeric", // hexa | octal | bin regex : /\b0(?:[xX][\da-fA-F](?:_*[\da-fA-F])*|[cC][0-7](?:_*[0-7])*|[bB][01](?:_*[01])*)\b/ }, { token : "constant.numeric", regex : /(?:\d(?:_*\d)*)?\.(?:(?:\d(?:_*\d)*)?[eE][+-]?)?\d(?:_*\d)*|\d(?:_*\d)*\.?/ }, { token : "paren.lparen", regex : /[\[({]|<<|\|\(/ }, { token : "paren.rparen", regex : /[\])}]|>>|\|\)/ }, { token : "keyword.operator", // punctuation regex : /:=|->|\.(?=\w)|[;,:?]/ }, { token : "keyword.operator", regex : /\\\\|\|\.\.\||\.\.|\/[~\/]?|[><\/]=?|[-+*^=~]/ }, { token : function (v) { var result = keywordMapper (v); if (result === "identifier" && v === v.toUpperCase ()) { result = "entity.name.type"; } return result; }, regex : /[a-zA-Z][a-zA-Z\d_]*\b/ }, { token : "text", regex : /\s+/ } ], "aligned_verbatim_string" : [{ token : "string", regex : /]"/, next : "start" }, { token : "string", regex : simpleString } ], "non-aligned_verbatim_string" : [{ token : "string.quoted.other", regex : /}"/, next : "start" }, { token : "string.quoted.other", regex : simpleString } ]}; }; oop.inherits(EiffelHighlightRules, TextHighlightRules); exports.EiffelHighlightRules = EiffelHighlightRules; }); ace.define("ace/mode/eiffel",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/eiffel_highlight_rules","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var EiffelHighlightRules = require("./eiffel_highlight_rules").EiffelHighlightRules; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = EiffelHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "--"; this.$id = "ace/mode/eiffel"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-ejs.js ================================================ ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/ruby_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var constantOtherSymbol = exports.constantOtherSymbol = { token : "constant.other.symbol.ruby", // symbol regex : "[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?" }; var qString = exports.qString = { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }; var qqString = exports.qqString = { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }; var tString = exports.tString = { token : "string", // backtick string regex : "[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]" }; var constantNumericHex = exports.constantNumericHex = { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b" }; var constantNumericFloat = exports.constantNumericFloat = { token : "constant.numeric", // float regex : "[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b" }; var RubyHighlightRules = function() { var builtinFunctions = ( "abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|" + "assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|" + "assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|" + "assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|" + "assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|" + "assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|" + "attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|" + "caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|" + "exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|" + "gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|" + "link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|" + "p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|" + "raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|" + "set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|" + "throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|" + "render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|" + "content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|" + "fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|" + "time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|" + "select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|" + "file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|" + "protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|" + "send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|" + "validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|" + "validates_inclusion_of|validates_numericality_of|validates_with|validates_each|" + "authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|" + "filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|" + "translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|" + "cache|expire_fragment|expire_cache_for|observe|cache_sweeper|" + "has_many|has_one|belongs_to|has_and_belongs_to_many" ); var keywords = ( "alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|" + "__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|" + "redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield" ); var buildinConstants = ( "true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|" + "RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING" ); var builtinVariables = ( "\$DEBUG|\$defout|\$FILENAME|\$LOAD_PATH|\$SAFE|\$stdin|\$stdout|\$stderr|\$VERBOSE|" + "$!|root_url|flash|session|cookies|params|request|response|logger|self" ); var keywordMapper = this.$keywords = this.createKeywordMapper({ "keyword": keywords, "constant.language": buildinConstants, "variable.language": builtinVariables, "support.function": builtinFunctions, "invalid.deprecated": "debugger" // TODO is this a remnant from js mode? }, "identifier"); this.$rules = { "start" : [ { token : "comment", regex : "#.*$" }, { token : "comment", // multi line comment regex : "^=begin(?:$|\\s.*$)", next : "comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)" }, [{ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren.lparen"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.start", regex : /"/, push : [{ token : "constant.language.escape", regex : /\\(?:[nsrtvfbae'"\\]|c.|C-.|M-.(?:\\C-.)?|[0-7]{3}|x[\da-fA-F]{2}|u[\da-fA-F]{4})/ }, { token : "paren.start", regex : /\#{/, push : "start" }, { token : "string.end", regex : /"/, next : "pop" }, { defaultToken: "string" }] }, { token : "string.start", regex : /`/, push : [{ token : "constant.language.escape", regex : /\\(?:[nsrtvfbae'"\\]|c.|C-.|M-.(?:\\C-.)?|[0-7]{3}|x[\da-fA-F]{2}|u[\da-fA-F]{4})/ }, { token : "paren.start", regex : /\#{/, push : "start" }, { token : "string.end", regex : /`/, next : "pop" }, { defaultToken: "string" }] }, { token : "string.start", regex : /'/, push : [{ token : "constant.language.escape", regex : /\\['\\]/ }, { token : "string.end", regex : /'/, next : "pop" }, { defaultToken: "string" }] }], { token : "text", // namespaces aren't symbols regex : "::" }, { token : "variable.instance", // instance variable regex : "@{1,2}[a-zA-Z_\\d]+" }, { token : "support.class", // class name regex : "[A-Z][a-zA-Z_\\d]+" }, constantOtherSymbol, constantNumericHex, constantNumericFloat, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "punctuation.separator.key-value", regex : "=>" }, { stateName: "heredoc", onMatch : function(value, currentState, stack) { var next = value[2] == '-' ? "indentedHeredoc" : "heredoc"; var tokens = value.split(this.splitRegex); stack.push(next, tokens[3]); return [ {type:"constant", value: tokens[1]}, {type:"string", value: tokens[2]}, {type:"support.class", value: tokens[3]}, {type:"string", value: tokens[4]} ]; }, regex : "(<<-?)(['\"`]?)([\\w]+)(['\"`]?)", rules: { heredoc: [{ onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }], indentedHeredoc: [{ token: "string", regex: "^ +" }, { onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }] } }, { regex : "$", token : "empty", next : function(currentState, stack) { if (stack[0] === "heredoc" || stack[0] === "indentedHeredoc") return stack[0]; return currentState; } }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : "^=end(?:$|\\s.*$)", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ] }; this.normalizeRules(); }; oop.inherits(RubyHighlightRules, TextHighlightRules); exports.RubyHighlightRules = RubyHighlightRules; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/ruby",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/ruby_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var RubyHighlightRules = require("./ruby_highlight_rules").RubyHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = RubyHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); var startingClassOrMethod = line.match(/^\s*(class|def|module)\s.*$/); var startingDoBlock = line.match(/.*do(\s*|\s+\|.*\|\s*)$/); var startingConditional = line.match(/^\s*(if|else)\s*/) if (match || startingClassOrMethod || startingDoBlock || startingConditional) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return /^\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, session, row) { var line = session.getLine(row); if (/}/.test(line)) return this.$outdent.autoOutdent(session, row); var indent = this.$getIndent(line); var prevLine = session.getLine(row - 1); var prevIndent = this.$getIndent(prevLine); var tab = session.getTabString(); if (prevIndent.length <= indent.length) { if (indent.slice(-tab.length) == tab) session.remove(new Range(row, indent.length-tab.length, row, indent.length)); } }; this.$id = "ace/mode/ruby"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/ejs",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules","ace/mode/javascript_highlight_rules","ace/lib/oop","ace/mode/html","ace/mode/javascript","ace/mode/css","ace/mode/ruby"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var EjsHighlightRules = function(start, end) { HtmlHighlightRules.call(this); if (!start) start = "(?:<%|<\\?|{{)"; if (!end) end = "(?:%>|\\?>|}})"; for (var i in this.$rules) { this.$rules[i].unshift({ token : "markup.list.meta.tag", regex : start + "(?![>}])[-=]?", push : "ejs-start" }); } this.embedRules(JavaScriptHighlightRules, "ejs-"); this.$rules["ejs-start"].unshift({ token : "markup.list.meta.tag", regex : "-?" + end, next : "pop" }, { token: "comment", regex: "//.*?" + end, next: "pop" }); this.$rules["ejs-no_regex"].unshift({ token : "markup.list.meta.tag", regex : "-?" + end, next : "pop" }, { token: "comment", regex: "//.*?" + end, next: "pop" }); this.normalizeRules(); }; oop.inherits(EjsHighlightRules, HtmlHighlightRules); exports.EjsHighlightRules = EjsHighlightRules; var oop = require("../lib/oop"); var HtmlMode = require("./html").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var RubyMode = require("./ruby").Mode; var Mode = function() { HtmlMode.call(this); this.HighlightRules = EjsHighlightRules; this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode, "ejs-": JavaScriptMode }); }; oop.inherits(Mode, HtmlMode); (function() { this.$id = "ace/mode/ejs"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-elixir.js ================================================ ace.define("ace/mode/elixir_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ElixirHighlightRules = function() { this.$rules = { start: [ { token: [ 'meta.module.elixir', 'keyword.control.module.elixir', 'meta.module.elixir', 'entity.name.type.module.elixir' ], regex: '^(\\s*)(defmodule)(\\s+)((?:[A-Z]\\w*\\s*\\.\\s*)*[A-Z]\\w*)' }, { token: 'comment.documentation.heredoc', regex: '@(?:module|type)?doc (?:~[a-z])?"""', push: [ { token: 'comment.documentation.heredoc', regex: '\\s*"""', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'comment.documentation.heredoc' } ], comment: '@doc with heredocs is treated as documentation' }, { token: 'comment.documentation.heredoc', regex: '@(?:module|type)?doc ~[A-Z]"""', push: [ { token: 'comment.documentation.heredoc', regex: '\\s*"""', next: 'pop' }, { defaultToken: 'comment.documentation.heredoc' } ], comment: '@doc with heredocs is treated as documentation' }, { token: 'comment.documentation.heredoc', regex: '@(?:module|type)?doc (?:~[a-z])?\'\'\'', push: [ { token: 'comment.documentation.heredoc', regex: '\\s*\'\'\'', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'comment.documentation.heredoc' } ], comment: '@doc with heredocs is treated as documentation' }, { token: 'comment.documentation.heredoc', regex: '@(?:module|type)?doc ~[A-Z]\'\'\'', push: [ { token: 'comment.documentation.heredoc', regex: '\\s*\'\'\'', next: 'pop' }, { defaultToken: 'comment.documentation.heredoc' } ], comment: '@doc with heredocs is treated as documentation' }, { token: 'comment.documentation.false', regex: '@(?:module|type)?doc false', comment: '@doc false is treated as documentation' }, { token: 'comment.documentation.string', regex: '@(?:module|type)?doc "', push: [ { token: 'comment.documentation.string', regex: '"', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'comment.documentation.string' } ], comment: '@doc with string is treated as documentation' }, { token: 'keyword.control.elixir', regex: '\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\b(?![?!])', TODO: 'FIXME: regexp doesn\'t have js equivalent', originalRegex: '(?_?\\h)*|\\d(?>_?\\d)*(\\.(?![^[:space:][:digit:]])(?>_?\\d)*)?([eE][-+]?\\d(?>_?\\d)*)?|0b[01]+|0o[0-7]+)\\b' }, { token: 'punctuation.definition.constant.elixir', regex: ':\'', push: [ { token: 'punctuation.definition.constant.elixir', regex: '\'', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'constant.other.symbol.single-quoted.elixir' } ] }, { token: 'punctuation.definition.constant.elixir', regex: ':"', push: [ { token: 'punctuation.definition.constant.elixir', regex: '"', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'constant.other.symbol.double-quoted.elixir' } ] }, { token: 'punctuation.definition.string.begin.elixir', regex: '(?:\'\'\')', TODO: 'FIXME: regexp doesn\'t have js equivalent', originalRegex: '(?>\'\'\')', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '^\\s*\'\'\'', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'support.function.variable.quoted.single.heredoc.elixir' } ], comment: 'Single-quoted heredocs' }, { token: 'punctuation.definition.string.begin.elixir', regex: '\'', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '\'', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'support.function.variable.quoted.single.elixir' } ], comment: 'single quoted string (allows for interpolation)' }, { token: 'punctuation.definition.string.begin.elixir', regex: '(?:""")', TODO: 'FIXME: regexp doesn\'t have js equivalent', originalRegex: '(?>""")', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '^\\s*"""', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'string.quoted.double.heredoc.elixir' } ], comment: 'Double-quoted heredocs' }, { token: 'punctuation.definition.string.begin.elixir', regex: '"', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '"', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'string.quoted.double.elixir' } ], comment: 'double quoted string (allows for interpolation)' }, { token: 'punctuation.definition.string.begin.elixir', regex: '~[a-z](?:""")', TODO: 'FIXME: regexp doesn\'t have js equivalent', originalRegex: '~[a-z](?>""")', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '^\\s*"""', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'string.quoted.double.heredoc.elixir' } ], comment: 'Double-quoted heredocs sigils' }, { token: 'punctuation.definition.string.begin.elixir', regex: '~[a-z]\\{', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '\\}[a-z]*', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'string.interpolated.elixir' } ], comment: 'sigil (allow for interpolation)' }, { token: 'punctuation.definition.string.begin.elixir', regex: '~[a-z]\\[', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '\\][a-z]*', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'string.interpolated.elixir' } ], comment: 'sigil (allow for interpolation)' }, { token: 'punctuation.definition.string.begin.elixir', regex: '~[a-z]\\<', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '\\>[a-z]*', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'string.interpolated.elixir' } ], comment: 'sigil (allow for interpolation)' }, { token: 'punctuation.definition.string.begin.elixir', regex: '~[a-z]\\(', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '\\)[a-z]*', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { defaultToken: 'string.interpolated.elixir' } ], comment: 'sigil (allow for interpolation)' }, { token: 'punctuation.definition.string.begin.elixir', regex: '~[a-z][^\\w]', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '[^\\w][a-z]*', next: 'pop' }, { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { include: '#escaped_char' }, { defaultToken: 'string.interpolated.elixir' } ], comment: 'sigil (allow for interpolation)' }, { token: 'punctuation.definition.string.begin.elixir', regex: '~[A-Z](?:""")', TODO: 'FIXME: regexp doesn\'t have js equivalent', originalRegex: '~[A-Z](?>""")', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '^\\s*"""', next: 'pop' }, { defaultToken: 'string.quoted.other.literal.upper.elixir' } ], comment: 'Double-quoted heredocs sigils' }, { token: 'punctuation.definition.string.begin.elixir', regex: '~[A-Z]\\{', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '\\}[a-z]*', next: 'pop' }, { defaultToken: 'string.quoted.other.literal.upper.elixir' } ], comment: 'sigil (without interpolation)' }, { token: 'punctuation.definition.string.begin.elixir', regex: '~[A-Z]\\[', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '\\][a-z]*', next: 'pop' }, { defaultToken: 'string.quoted.other.literal.upper.elixir' } ], comment: 'sigil (without interpolation)' }, { token: 'punctuation.definition.string.begin.elixir', regex: '~[A-Z]\\<', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '\\>[a-z]*', next: 'pop' }, { defaultToken: 'string.quoted.other.literal.upper.elixir' } ], comment: 'sigil (without interpolation)' }, { token: 'punctuation.definition.string.begin.elixir', regex: '~[A-Z]\\(', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '\\)[a-z]*', next: 'pop' }, { defaultToken: 'string.quoted.other.literal.upper.elixir' } ], comment: 'sigil (without interpolation)' }, { token: 'punctuation.definition.string.begin.elixir', regex: '~[A-Z][^\\w]', push: [ { token: 'punctuation.definition.string.end.elixir', regex: '[^\\w][a-z]*', next: 'pop' }, { defaultToken: 'string.quoted.other.literal.upper.elixir' } ], comment: 'sigil (without interpolation)' }, { token: ['punctuation.definition.constant.elixir', 'constant.other.symbol.elixir'], regex: '(:)([a-zA-Z_][\\w@]*(?:[?!]|=(?![>=]))?|\\<\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\-|\\|>|=>|~|~=|=|/|\\\\\\\\|\\*\\*?|\\.\\.?\\.?|>=?|<=?|&&?&?|\\+\\+?|\\-\\-?|\\|\\|?\\|?|\\!|@|\\%?\\{\\}|%|\\[\\]|\\^(?:\\^\\^)?)', TODO: 'FIXME: regexp doesn\'t have js equivalent', originalRegex: '(?[a-zA-Z_][\\w@]*(?>[?!]|=(?![>=]))?|\\<\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\-|\\|>|=>|~|~=|=|/|\\\\\\\\|\\*\\*?|\\.\\.?\\.?|>=?|<=?|&&?&?|\\+\\+?|\\-\\-?|\\|\\|?\\|?|\\!|@|\\%?\\{\\}|%|\\[\\]|\\^(\\^\\^)?)', comment: 'symbols' }, { token: 'punctuation.definition.constant.elixir', regex: '(?:[a-zA-Z_][\\w@]*(?:[?!])?):(?!:)', TODO: 'FIXME: regexp doesn\'t have js equivalent', originalRegex: '(?>[a-zA-Z_][\\w@]*(?>[?!])?)(:)(?!:)', comment: 'symbols' }, { token: [ 'punctuation.definition.comment.elixir', 'comment.line.number-sign.elixir' ], regex: '(#)(.*)' }, { token: 'constant.numeric.elixir', regex: '\\?(?:\\\\(?:x[\\da-fA-F]{1,2}(?![\\da-fA-F])\\b|[^xMC])|[^\\s\\\\])', TODO: 'FIXME: regexp doesn\'t have js equivalent', originalRegex: '(?=?' }, { token: 'keyword.operator.bitwise.elixir', regex: '\\|{3}|&{3}|\\^{3}|<{3}|>{3}|~{3}' }, { token: 'keyword.operator.logical.elixir', regex: '!+|\\bnot\\b|&&|\\band\\b|\\|\\||\\bor\\b|\\bxor\\b', originalRegex: '(?<=[ \\t])!+|\\bnot\\b|&&|\\band\\b|\\|\\||\\bor\\b|\\bxor\\b' }, { token: 'keyword.operator.arithmetic.elixir', regex: '\\*|\\+|\\-|/' }, { token: 'keyword.operator.other.elixir', regex: '\\||\\+\\+|\\-\\-|\\*\\*|\\\\\\\\|\\<\\-|\\<\\>|\\<\\<|\\>\\>|\\:\\:|\\.\\.|\\|>|~|=>' }, { token: 'keyword.operator.assignment.elixir', regex: '=' }, { token: 'punctuation.separator.other.elixir', regex: ':' }, { token: 'punctuation.separator.statement.elixir', regex: '\\;' }, { token: 'punctuation.separator.object.elixir', regex: ',' }, { token: 'punctuation.separator.method.elixir', regex: '\\.' }, { token: 'punctuation.section.scope.elixir', regex: '\\{|\\}' }, { token: 'punctuation.section.array.elixir', regex: '\\[|\\]' }, { token: 'punctuation.section.function.elixir', regex: '\\(|\\)' } ], '#escaped_char': [ { token: 'constant.character.escape.elixir', regex: '\\\\(?:x[\\da-fA-F]{1,2}|.)' } ], '#interpolated_elixir': [ { token: [ 'source.elixir.embedded.source', 'source.elixir.embedded.source.empty' ], regex: '(#\\{)(\\})' }, { todo: { token: 'punctuation.section.embedded.elixir', regex: '#\\{', push: [ { token: 'punctuation.section.embedded.elixir', regex: '\\}', next: 'pop' }, { include: '#nest_curly_and_self' }, { include: '$self' }, { defaultToken: 'source.elixir.embedded.source' } ] } } ], '#nest_curly_and_self': [ { token: 'punctuation.section.scope.elixir', regex: '\\{', push: [ { token: 'punctuation.section.scope.elixir', regex: '\\}', next: 'pop' }, { include: '#nest_curly_and_self' } ] }, { include: '$self' } ], '#regex_sub': [ { include: '#interpolated_elixir' }, { include: '#escaped_char' }, { token: [ 'punctuation.definition.arbitrary-repitition.elixir', 'string.regexp.arbitrary-repitition.elixir', 'string.regexp.arbitrary-repitition.elixir', 'punctuation.definition.arbitrary-repitition.elixir' ], regex: '(\\{)(\\d+)((?:,\\d+)?)(\\})' }, { token: 'punctuation.definition.character-class.elixir', regex: '\\[(?:\\^?\\])?', push: [ { token: 'punctuation.definition.character-class.elixir', regex: '\\]', next: 'pop' }, { include: '#escaped_char' }, { defaultToken: 'string.regexp.character-class.elixir' } ] }, { token: 'punctuation.definition.group.elixir', regex: '\\(', push: [ { token: 'punctuation.definition.group.elixir', regex: '\\)', next: 'pop' }, { include: '#regex_sub' }, { defaultToken: 'string.regexp.group.elixir' } ] }, { token: [ 'punctuation.definition.comment.elixir', 'comment.line.number-sign.elixir' ], regex: '(?:^|\\s)(#)(\\s[[a-zA-Z0-9,. \\t?!-][^\\x00-\\x7F]]*$)', originalRegex: '(?<=^|\\s)(#)\\s[[a-zA-Z0-9,. \\t?!-][^\\x{00}-\\x{7F}]]*$', comment: 'We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.' } ] } this.normalizeRules(); }; ElixirHighlightRules.metaData = { comment: 'Textmate bundle for Elixir Programming Language.', fileTypes: [ 'ex', 'exs' ], firstLineMatch: '^#!/.*\\belixir', foldingStartMarker: '(after|else|catch|rescue|\\-\\>|\\{|\\[|do)\\s*$', foldingStopMarker: '^\\s*((\\}|\\]|after|else|catch|rescue)\\s*$|end\\b)', keyEquivalent: '^~E', name: 'Elixir', scopeName: 'source.elixir' } oop.inherits(ElixirHighlightRules, TextHighlightRules); exports.ElixirHighlightRules = ElixirHighlightRules; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/elixir",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/elixir_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var ElixirHighlightRules = require("./elixir_highlight_rules").ElixirHighlightRules; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = ElixirHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.$id = "ace/mode/elixir" }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-elm.js ================================================ ace.define("ace/mode/elm_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ElmHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "keyword": "as|case|class|data|default|deriving|do|else|export|foreign|" + "hiding|jsevent|if|import|in|infix|infixl|infixr|instance|let|" + "module|newtype|of|open|then|type|where|_|port|\u03BB" }, "identifier"); var escapeRe = /\\(\d+|['"\\&trnbvf])/; var smallRe = /[a-z_]/.source; var largeRe = /[A-Z]/.source; var idRe = /[a-z_A-Z0-9\']/.source; this.$rules = { start: [{ token: "string.start", regex: '"', next: "string" }, { token: "string.character", regex: "'(?:" + escapeRe.source + "|.)'?" }, { regex: /0(?:[xX][0-9A-Fa-f]+|[oO][0-7]+)|\d+(\.\d+)?([eE][-+]?\d*)?/, token: "constant.numeric" }, { token : "keyword", regex : /\.\.|\||:|=|\\|\"|->|<-|\u2192/ }, { token : "keyword.operator", regex : /[-!#$%&*+.\/<=>?@\\^|~:\u03BB\u2192]+/ }, { token : "operator.punctuation", regex : /[,;`]/ }, { regex : largeRe + idRe + "+\\.?", token : function(value) { if (value[value.length - 1] == ".") return "entity.name.function"; return "constant.language"; } }, { regex : "^" + smallRe + idRe + "+", token : function(value) { return "constant.language"; } }, { token : keywordMapper, regex : "[\\w\\xff-\\u218e\\u2455-\\uffff]+\\b" }, { regex: "{-#?", token: "comment.start", onMatch: function(value, currentState, stack) { this.next = value.length == 2 ? "blockComment" : "docComment"; return this.token; } }, { token: "variable.language", regex: /\[markdown\|/, next: "markdown" }, { token: "paren.lparen", regex: /[\[({]/ }, { token: "paren.rparen", regex: /[\])}]/ }, ], markdown: [{ regex: /\|\]/, next: "start" }, { defaultToken : "string" }], blockComment: [{ regex: "{-", token: "comment.start", push: "blockComment" }, { regex: "-}", token: "comment.end", next: "pop" }, { defaultToken: "comment" }], docComment: [{ regex: "{-", token: "comment.start", push: "docComment" }, { regex: "-}", token: "comment.end", next: "pop" }, { defaultToken: "doc.comment" }], string: [{ token: "constant.language.escape", regex: escapeRe, }, { token: "text", regex: /\\(\s|$)/, next: "stringGap" }, { token: "string.end", regex: '"', next: "start" }], stringGap: [{ token: "text", regex: /\\/, next: "string" }, { token: "error", regex: "", next: "start" }], }; this.normalizeRules(); }; oop.inherits(ElmHighlightRules, TextHighlightRules); exports.ElmHighlightRules = ElmHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/elm",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/elm_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var HighlightRules = require("./elm_highlight_rules").ElmHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = HighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "--"; this.blockComment = {start: "{-", end: "-}"}; this.$id = "ace/mode/elm"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-erlang.js ================================================ ace.define("ace/mode/erlang_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ErlangHighlightRules = function() { this.$rules = { start: [ { include: '#module-directive' }, { include: '#import-export-directive' }, { include: '#behaviour-directive' }, { include: '#record-directive' }, { include: '#define-directive' }, { include: '#macro-directive' }, { include: '#directive' }, { include: '#function' }, { include: '#everything-else' } ], '#atom': [ { token: 'punctuation.definition.symbol.begin.erlang', regex: '\'', push: [ { token: 'punctuation.definition.symbol.end.erlang', regex: '\'', next: 'pop' }, { token: [ 'punctuation.definition.escape.erlang', 'constant.other.symbol.escape.erlang', 'punctuation.definition.escape.erlang', 'constant.other.symbol.escape.erlang', 'constant.other.symbol.escape.erlang' ], regex: '(\\\\)(?:([bdefnrstv\\\\\'"])|(\\^)([@-_])|([0-7]{1,3}))' }, { token: 'invalid.illegal.atom.erlang', regex: '\\\\\\^?.?' }, { defaultToken: 'constant.other.symbol.quoted.single.erlang' } ] }, { token: 'constant.other.symbol.unquoted.erlang', regex: '[a-z][a-zA-Z\\d@_]*' } ], '#behaviour-directive': [ { token: [ 'meta.directive.behaviour.erlang', 'punctuation.section.directive.begin.erlang', 'meta.directive.behaviour.erlang', 'keyword.control.directive.behaviour.erlang', 'meta.directive.behaviour.erlang', 'punctuation.definition.parameters.begin.erlang', 'meta.directive.behaviour.erlang', 'entity.name.type.class.behaviour.definition.erlang', 'meta.directive.behaviour.erlang', 'punctuation.definition.parameters.end.erlang', 'meta.directive.behaviour.erlang', 'punctuation.section.directive.end.erlang' ], regex: '^(\\s*)(-)(\\s*)(behaviour)(\\s*)(\\()(\\s*)([a-z][a-zA-Z\\d@_]*)(\\s*)(\\))(\\s*)(\\.)' } ], '#binary': [ { token: 'punctuation.definition.binary.begin.erlang', regex: '<<', push: [ { token: 'punctuation.definition.binary.end.erlang', regex: '>>', next: 'pop' }, { token: [ 'punctuation.separator.binary.erlang', 'punctuation.separator.value-size.erlang' ], regex: '(,)|(:)' }, { include: '#internal-type-specifiers' }, { include: '#everything-else' }, { defaultToken: 'meta.structure.binary.erlang' } ] } ], '#character': [ { token: [ 'punctuation.definition.character.erlang', 'punctuation.definition.escape.erlang', 'constant.character.escape.erlang', 'punctuation.definition.escape.erlang', 'constant.character.escape.erlang', 'constant.character.escape.erlang' ], regex: '(\\$)(\\\\)(?:([bdefnrstv\\\\\'"])|(\\^)([@-_])|([0-7]{1,3}))' }, { token: 'invalid.illegal.character.erlang', regex: '\\$\\\\\\^?.?' }, { token: [ 'punctuation.definition.character.erlang', 'constant.character.erlang' ], regex: '(\\$)(\\S)' }, { token: 'invalid.illegal.character.erlang', regex: '\\$.?' } ], '#comment': [ { token: 'punctuation.definition.comment.erlang', regex: '%.*$', push_: [ { token: 'comment.line.percentage.erlang', regex: '$', next: 'pop' }, { defaultToken: 'comment.line.percentage.erlang' } ] } ], '#define-directive': [ { token: [ 'meta.directive.define.erlang', 'punctuation.section.directive.begin.erlang', 'meta.directive.define.erlang', 'keyword.control.directive.define.erlang', 'meta.directive.define.erlang', 'punctuation.definition.parameters.begin.erlang', 'meta.directive.define.erlang', 'entity.name.function.macro.definition.erlang', 'meta.directive.define.erlang', 'punctuation.separator.parameters.erlang' ], regex: '^(\\s*)(-)(\\s*)(define)(\\s*)(\\()(\\s*)([a-zA-Z\\d@_]+)(\\s*)(,)', push: [ { token: [ 'punctuation.definition.parameters.end.erlang', 'meta.directive.define.erlang', 'punctuation.section.directive.end.erlang' ], regex: '(\\))(\\s*)(\\.)', next: 'pop' }, { include: '#everything-else' }, { defaultToken: 'meta.directive.define.erlang' } ] }, { token: 'meta.directive.define.erlang', regex: '(?=^\\s*-\\s*define\\s*\\(\\s*[a-zA-Z\\d@_]+\\s*\\()', push: [ { token: [ 'punctuation.definition.parameters.end.erlang', 'meta.directive.define.erlang', 'punctuation.section.directive.end.erlang' ], regex: '(\\))(\\s*)(\\.)', next: 'pop' }, { token: [ 'text', 'punctuation.section.directive.begin.erlang', 'text', 'keyword.control.directive.define.erlang', 'text', 'punctuation.definition.parameters.begin.erlang', 'text', 'entity.name.function.macro.definition.erlang', 'text', 'punctuation.definition.parameters.begin.erlang' ], regex: '^(\\s*)(-)(\\s*)(define)(\\s*)(\\()(\\s*)([a-zA-Z\\d@_]+)(\\s*)(\\()', push: [ { token: [ 'punctuation.definition.parameters.end.erlang', 'text', 'punctuation.separator.parameters.erlang' ], regex: '(\\))(\\s*)(,)', next: 'pop' }, { token: 'punctuation.separator.parameters.erlang', regex: ',' }, { include: '#everything-else' } ] }, { token: 'punctuation.separator.define.erlang', regex: '\\|\\||\\||:|;|,|\\.|->' }, { include: '#everything-else' }, { defaultToken: 'meta.directive.define.erlang' } ] } ], '#directive': [ { token: [ 'meta.directive.erlang', 'punctuation.section.directive.begin.erlang', 'meta.directive.erlang', 'keyword.control.directive.erlang', 'meta.directive.erlang', 'punctuation.definition.parameters.begin.erlang' ], regex: '^(\\s*)(-)(\\s*)([a-z][a-zA-Z\\d@_]*)(\\s*)(\\(?)', push: [ { token: [ 'punctuation.definition.parameters.end.erlang', 'meta.directive.erlang', 'punctuation.section.directive.end.erlang' ], regex: '(\\)?)(\\s*)(\\.)', next: 'pop' }, { include: '#everything-else' }, { defaultToken: 'meta.directive.erlang' } ] }, { token: [ 'meta.directive.erlang', 'punctuation.section.directive.begin.erlang', 'meta.directive.erlang', 'keyword.control.directive.erlang', 'meta.directive.erlang', 'punctuation.section.directive.end.erlang' ], regex: '^(\\s*)(-)(\\s*)([a-z][a-zA-Z\\d@_]*)(\\s*)(\\.)' } ], '#everything-else': [ { include: '#comment' }, { include: '#record-usage' }, { include: '#macro-usage' }, { include: '#expression' }, { include: '#keyword' }, { include: '#textual-operator' }, { include: '#function-call' }, { include: '#tuple' }, { include: '#list' }, { include: '#binary' }, { include: '#parenthesized-expression' }, { include: '#character' }, { include: '#number' }, { include: '#atom' }, { include: '#string' }, { include: '#symbolic-operator' }, { include: '#variable' } ], '#expression': [ { token: 'keyword.control.if.erlang', regex: '\\bif\\b', push: [ { token: 'keyword.control.end.erlang', regex: '\\bend\\b', next: 'pop' }, { include: '#internal-expression-punctuation' }, { include: '#everything-else' }, { defaultToken: 'meta.expression.if.erlang' } ] }, { token: 'keyword.control.case.erlang', regex: '\\bcase\\b', push: [ { token: 'keyword.control.end.erlang', regex: '\\bend\\b', next: 'pop' }, { include: '#internal-expression-punctuation' }, { include: '#everything-else' }, { defaultToken: 'meta.expression.case.erlang' } ] }, { token: 'keyword.control.receive.erlang', regex: '\\breceive\\b', push: [ { token: 'keyword.control.end.erlang', regex: '\\bend\\b', next: 'pop' }, { include: '#internal-expression-punctuation' }, { include: '#everything-else' }, { defaultToken: 'meta.expression.receive.erlang' } ] }, { token: [ 'keyword.control.fun.erlang', 'text', 'entity.name.type.class.module.erlang', 'text', 'punctuation.separator.module-function.erlang', 'text', 'entity.name.function.erlang', 'text', 'punctuation.separator.function-arity.erlang' ], regex: '\\b(fun)(\\s*)(?:([a-z][a-zA-Z\\d@_]*)(\\s*)(:)(\\s*))?([a-z][a-zA-Z\\d@_]*)(\\s*)(/)' }, { token: 'keyword.control.fun.erlang', regex: '\\bfun\\b', push: [ { token: 'keyword.control.end.erlang', regex: '\\bend\\b', next: 'pop' }, { token: 'text', regex: '(?=\\()', push: [ { token: 'punctuation.separator.clauses.erlang', regex: ';|(?=\\bend\\b)', next: 'pop' }, { include: '#internal-function-parts' } ] }, { include: '#everything-else' }, { defaultToken: 'meta.expression.fun.erlang' } ] }, { token: 'keyword.control.try.erlang', regex: '\\btry\\b', push: [ { token: 'keyword.control.end.erlang', regex: '\\bend\\b', next: 'pop' }, { include: '#internal-expression-punctuation' }, { include: '#everything-else' }, { defaultToken: 'meta.expression.try.erlang' } ] }, { token: 'keyword.control.begin.erlang', regex: '\\bbegin\\b', push: [ { token: 'keyword.control.end.erlang', regex: '\\bend\\b', next: 'pop' }, { include: '#internal-expression-punctuation' }, { include: '#everything-else' }, { defaultToken: 'meta.expression.begin.erlang' } ] }, { token: 'keyword.control.query.erlang', regex: '\\bquery\\b', push: [ { token: 'keyword.control.end.erlang', regex: '\\bend\\b', next: 'pop' }, { include: '#everything-else' }, { defaultToken: 'meta.expression.query.erlang' } ] } ], '#function': [ { token: [ 'meta.function.erlang', 'entity.name.function.definition.erlang', 'meta.function.erlang' ], regex: '^(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(?=\\()', push: [ { token: 'punctuation.terminator.function.erlang', regex: '\\.', next: 'pop' }, { token: [ 'text', 'entity.name.function.erlang', 'text' ], regex: '^(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(?=\\()' }, { token: 'text', regex: '(?=\\()', push: [ { token: 'punctuation.separator.clauses.erlang', regex: ';|(?=\\.)', next: 'pop' }, { include: '#parenthesized-expression' }, { include: '#internal-function-parts' } ] }, { include: '#everything-else' }, { defaultToken: 'meta.function.erlang' } ] } ], '#function-call': [ { token: 'meta.function-call.erlang', regex: '(?=(?:[a-z][a-zA-Z\\d@_]*|\'[^\']*\')\\s*(?:\\(|:\\s*(?:[a-z][a-zA-Z\\d@_]*|\'[^\']*\')\\s*\\())', push: [ { token: 'punctuation.definition.parameters.end.erlang', regex: '\\)', next: 'pop' }, { token: [ 'entity.name.type.class.module.erlang', 'text', 'punctuation.separator.module-function.erlang', 'text', 'entity.name.function.guard.erlang', 'text', 'punctuation.definition.parameters.begin.erlang' ], regex: '(?:(erlang)(\\s*)(:)(\\s*))?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)(\\s*)(\\()', push: [ { token: 'text', regex: '(?=\\))', next: 'pop' }, { token: 'punctuation.separator.parameters.erlang', regex: ',' }, { include: '#everything-else' } ] }, { token: [ 'entity.name.type.class.module.erlang', 'text', 'punctuation.separator.module-function.erlang', 'text', 'entity.name.function.erlang', 'text', 'punctuation.definition.parameters.begin.erlang' ], regex: '(?:([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(:)(\\s*))?([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(\\()', push: [ { token: 'text', regex: '(?=\\))', next: 'pop' }, { token: 'punctuation.separator.parameters.erlang', regex: ',' }, { include: '#everything-else' } ] }, { defaultToken: 'meta.function-call.erlang' } ] } ], '#import-export-directive': [ { token: [ 'meta.directive.import.erlang', 'punctuation.section.directive.begin.erlang', 'meta.directive.import.erlang', 'keyword.control.directive.import.erlang', 'meta.directive.import.erlang', 'punctuation.definition.parameters.begin.erlang', 'meta.directive.import.erlang', 'entity.name.type.class.module.erlang', 'meta.directive.import.erlang', 'punctuation.separator.parameters.erlang' ], regex: '^(\\s*)(-)(\\s*)(import)(\\s*)(\\()(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(,)', push: [ { token: [ 'punctuation.definition.parameters.end.erlang', 'meta.directive.import.erlang', 'punctuation.section.directive.end.erlang' ], regex: '(\\))(\\s*)(\\.)', next: 'pop' }, { include: '#internal-function-list' }, { defaultToken: 'meta.directive.import.erlang' } ] }, { token: [ 'meta.directive.export.erlang', 'punctuation.section.directive.begin.erlang', 'meta.directive.export.erlang', 'keyword.control.directive.export.erlang', 'meta.directive.export.erlang', 'punctuation.definition.parameters.begin.erlang' ], regex: '^(\\s*)(-)(\\s*)(export)(\\s*)(\\()', push: [ { token: [ 'punctuation.definition.parameters.end.erlang', 'meta.directive.export.erlang', 'punctuation.section.directive.end.erlang' ], regex: '(\\))(\\s*)(\\.)', next: 'pop' }, { include: '#internal-function-list' }, { defaultToken: 'meta.directive.export.erlang' } ] } ], '#internal-expression-punctuation': [ { token: [ 'punctuation.separator.clause-head-body.erlang', 'punctuation.separator.clauses.erlang', 'punctuation.separator.expressions.erlang' ], regex: '(->)|(;)|(,)' } ], '#internal-function-list': [ { token: 'punctuation.definition.list.begin.erlang', regex: '\\[', push: [ { token: 'punctuation.definition.list.end.erlang', regex: '\\]', next: 'pop' }, { token: [ 'entity.name.function.erlang', 'text', 'punctuation.separator.function-arity.erlang' ], regex: '([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(/)', push: [ { token: 'punctuation.separator.list.erlang', regex: ',|(?=\\])', next: 'pop' }, { include: '#everything-else' } ] }, { include: '#everything-else' }, { defaultToken: 'meta.structure.list.function.erlang' } ] } ], '#internal-function-parts': [ { token: 'text', regex: '(?=\\()', push: [ { token: 'punctuation.separator.clause-head-body.erlang', regex: '->', next: 'pop' }, { token: 'punctuation.definition.parameters.begin.erlang', regex: '\\(', push: [ { token: 'punctuation.definition.parameters.end.erlang', regex: '\\)', next: 'pop' }, { token: 'punctuation.separator.parameters.erlang', regex: ',' }, { include: '#everything-else' } ] }, { token: 'punctuation.separator.guards.erlang', regex: ',|;' }, { include: '#everything-else' } ] }, { token: 'punctuation.separator.expressions.erlang', regex: ',' }, { include: '#everything-else' } ], '#internal-record-body': [ { token: 'punctuation.definition.class.record.begin.erlang', regex: '\\{', push: [ { token: 'meta.structure.record.erlang', regex: '(?=\\})', next: 'pop' }, { token: [ 'variable.other.field.erlang', 'variable.language.omitted.field.erlang', 'text', 'keyword.operator.assignment.erlang' ], regex: '(?:([a-z][a-zA-Z\\d@_]*|\'[^\']*\')|(_))(\\s*)(=|::)', push: [ { token: 'punctuation.separator.class.record.erlang', regex: ',|(?=\\})', next: 'pop' }, { include: '#everything-else' } ] }, { token: [ 'variable.other.field.erlang', 'text', 'punctuation.separator.class.record.erlang' ], regex: '([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)((?:,)?)' }, { include: '#everything-else' }, { defaultToken: 'meta.structure.record.erlang' } ] } ], '#internal-type-specifiers': [ { token: 'punctuation.separator.value-type.erlang', regex: '/', push: [ { token: 'text', regex: '(?=,|:|>>)', next: 'pop' }, { token: [ 'storage.type.erlang', 'storage.modifier.signedness.erlang', 'storage.modifier.endianness.erlang', 'storage.modifier.unit.erlang', 'punctuation.separator.type-specifiers.erlang' ], regex: '(integer|float|binary|bytes|bitstring|bits)|(signed|unsigned)|(big|little|native)|(unit)|(-)' } ] } ], '#keyword': [ { token: 'keyword.control.erlang', regex: '\\b(?:after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\\b' } ], '#list': [ { token: 'punctuation.definition.list.begin.erlang', regex: '\\[', push: [ { token: 'punctuation.definition.list.end.erlang', regex: '\\]', next: 'pop' }, { token: 'punctuation.separator.list.erlang', regex: '\\||\\|\\||,' }, { include: '#everything-else' }, { defaultToken: 'meta.structure.list.erlang' } ] } ], '#macro-directive': [ { token: [ 'meta.directive.ifdef.erlang', 'punctuation.section.directive.begin.erlang', 'meta.directive.ifdef.erlang', 'keyword.control.directive.ifdef.erlang', 'meta.directive.ifdef.erlang', 'punctuation.definition.parameters.begin.erlang', 'meta.directive.ifdef.erlang', 'entity.name.function.macro.erlang', 'meta.directive.ifdef.erlang', 'punctuation.definition.parameters.end.erlang', 'meta.directive.ifdef.erlang', 'punctuation.section.directive.end.erlang' ], regex: '^(\\s*)(-)(\\s*)(ifdef)(\\s*)(\\()(\\s*)([a-zA-z\\d@_]+)(\\s*)(\\))(\\s*)(\\.)' }, { token: [ 'meta.directive.ifndef.erlang', 'punctuation.section.directive.begin.erlang', 'meta.directive.ifndef.erlang', 'keyword.control.directive.ifndef.erlang', 'meta.directive.ifndef.erlang', 'punctuation.definition.parameters.begin.erlang', 'meta.directive.ifndef.erlang', 'entity.name.function.macro.erlang', 'meta.directive.ifndef.erlang', 'punctuation.definition.parameters.end.erlang', 'meta.directive.ifndef.erlang', 'punctuation.section.directive.end.erlang' ], regex: '^(\\s*)(-)(\\s*)(ifndef)(\\s*)(\\()(\\s*)([a-zA-z\\d@_]+)(\\s*)(\\))(\\s*)(\\.)' }, { token: [ 'meta.directive.undef.erlang', 'punctuation.section.directive.begin.erlang', 'meta.directive.undef.erlang', 'keyword.control.directive.undef.erlang', 'meta.directive.undef.erlang', 'punctuation.definition.parameters.begin.erlang', 'meta.directive.undef.erlang', 'entity.name.function.macro.erlang', 'meta.directive.undef.erlang', 'punctuation.definition.parameters.end.erlang', 'meta.directive.undef.erlang', 'punctuation.section.directive.end.erlang' ], regex: '^(\\s*)(-)(\\s*)(undef)(\\s*)(\\()(\\s*)([a-zA-z\\d@_]+)(\\s*)(\\))(\\s*)(\\.)' } ], '#macro-usage': [ { token: [ 'keyword.operator.macro.erlang', 'meta.macro-usage.erlang', 'entity.name.function.macro.erlang' ], regex: '(\\?\\??)(\\s*)([a-zA-Z\\d@_]+)' } ], '#module-directive': [ { token: [ 'meta.directive.module.erlang', 'punctuation.section.directive.begin.erlang', 'meta.directive.module.erlang', 'keyword.control.directive.module.erlang', 'meta.directive.module.erlang', 'punctuation.definition.parameters.begin.erlang', 'meta.directive.module.erlang', 'entity.name.type.class.module.definition.erlang', 'meta.directive.module.erlang', 'punctuation.definition.parameters.end.erlang', 'meta.directive.module.erlang', 'punctuation.section.directive.end.erlang' ], regex: '^(\\s*)(-)(\\s*)(module)(\\s*)(\\()(\\s*)([a-z][a-zA-Z\\d@_]*)(\\s*)(\\))(\\s*)(\\.)' } ], '#number': [ { token: 'text', regex: '(?=\\d)', push: [ { token: 'text', regex: '(?!\\d)', next: 'pop' }, { token: [ 'constant.numeric.float.erlang', 'punctuation.separator.integer-float.erlang', 'constant.numeric.float.erlang', 'punctuation.separator.float-exponent.erlang' ], regex: '(\\d+)(\\.)(\\d+)((?:[eE][\\+\\-]?\\d+)?)' }, { token: [ 'constant.numeric.integer.binary.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.binary.erlang' ], regex: '(2)(#)([0-1]+)' }, { token: [ 'constant.numeric.integer.base-3.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-3.erlang' ], regex: '(3)(#)([0-2]+)' }, { token: [ 'constant.numeric.integer.base-4.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-4.erlang' ], regex: '(4)(#)([0-3]+)' }, { token: [ 'constant.numeric.integer.base-5.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-5.erlang' ], regex: '(5)(#)([0-4]+)' }, { token: [ 'constant.numeric.integer.base-6.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-6.erlang' ], regex: '(6)(#)([0-5]+)' }, { token: [ 'constant.numeric.integer.base-7.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-7.erlang' ], regex: '(7)(#)([0-6]+)' }, { token: [ 'constant.numeric.integer.octal.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.octal.erlang' ], regex: '(8)(#)([0-7]+)' }, { token: [ 'constant.numeric.integer.base-9.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-9.erlang' ], regex: '(9)(#)([0-8]+)' }, { token: [ 'constant.numeric.integer.decimal.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.decimal.erlang' ], regex: '(10)(#)(\\d+)' }, { token: [ 'constant.numeric.integer.base-11.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-11.erlang' ], regex: '(11)(#)([\\daA]+)' }, { token: [ 'constant.numeric.integer.base-12.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-12.erlang' ], regex: '(12)(#)([\\da-bA-B]+)' }, { token: [ 'constant.numeric.integer.base-13.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-13.erlang' ], regex: '(13)(#)([\\da-cA-C]+)' }, { token: [ 'constant.numeric.integer.base-14.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-14.erlang' ], regex: '(14)(#)([\\da-dA-D]+)' }, { token: [ 'constant.numeric.integer.base-15.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-15.erlang' ], regex: '(15)(#)([\\da-eA-E]+)' }, { token: [ 'constant.numeric.integer.hexadecimal.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.hexadecimal.erlang' ], regex: '(16)(#)([\\da-fA-F]+)' }, { token: [ 'constant.numeric.integer.base-17.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-17.erlang' ], regex: '(17)(#)([\\da-gA-G]+)' }, { token: [ 'constant.numeric.integer.base-18.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-18.erlang' ], regex: '(18)(#)([\\da-hA-H]+)' }, { token: [ 'constant.numeric.integer.base-19.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-19.erlang' ], regex: '(19)(#)([\\da-iA-I]+)' }, { token: [ 'constant.numeric.integer.base-20.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-20.erlang' ], regex: '(20)(#)([\\da-jA-J]+)' }, { token: [ 'constant.numeric.integer.base-21.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-21.erlang' ], regex: '(21)(#)([\\da-kA-K]+)' }, { token: [ 'constant.numeric.integer.base-22.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-22.erlang' ], regex: '(22)(#)([\\da-lA-L]+)' }, { token: [ 'constant.numeric.integer.base-23.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-23.erlang' ], regex: '(23)(#)([\\da-mA-M]+)' }, { token: [ 'constant.numeric.integer.base-24.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-24.erlang' ], regex: '(24)(#)([\\da-nA-N]+)' }, { token: [ 'constant.numeric.integer.base-25.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-25.erlang' ], regex: '(25)(#)([\\da-oA-O]+)' }, { token: [ 'constant.numeric.integer.base-26.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-26.erlang' ], regex: '(26)(#)([\\da-pA-P]+)' }, { token: [ 'constant.numeric.integer.base-27.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-27.erlang' ], regex: '(27)(#)([\\da-qA-Q]+)' }, { token: [ 'constant.numeric.integer.base-28.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-28.erlang' ], regex: '(28)(#)([\\da-rA-R]+)' }, { token: [ 'constant.numeric.integer.base-29.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-29.erlang' ], regex: '(29)(#)([\\da-sA-S]+)' }, { token: [ 'constant.numeric.integer.base-30.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-30.erlang' ], regex: '(30)(#)([\\da-tA-T]+)' }, { token: [ 'constant.numeric.integer.base-31.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-31.erlang' ], regex: '(31)(#)([\\da-uA-U]+)' }, { token: [ 'constant.numeric.integer.base-32.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-32.erlang' ], regex: '(32)(#)([\\da-vA-V]+)' }, { token: [ 'constant.numeric.integer.base-33.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-33.erlang' ], regex: '(33)(#)([\\da-wA-W]+)' }, { token: [ 'constant.numeric.integer.base-34.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-34.erlang' ], regex: '(34)(#)([\\da-xA-X]+)' }, { token: [ 'constant.numeric.integer.base-35.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-35.erlang' ], regex: '(35)(#)([\\da-yA-Y]+)' }, { token: [ 'constant.numeric.integer.base-36.erlang', 'punctuation.separator.base-integer.erlang', 'constant.numeric.integer.base-36.erlang' ], regex: '(36)(#)([\\da-zA-Z]+)' }, { token: 'invalid.illegal.integer.erlang', regex: '\\d+#[\\da-zA-Z]+' }, { token: 'constant.numeric.integer.decimal.erlang', regex: '\\d+' } ] } ], '#parenthesized-expression': [ { token: 'punctuation.section.expression.begin.erlang', regex: '\\(', push: [ { token: 'punctuation.section.expression.end.erlang', regex: '\\)', next: 'pop' }, { include: '#everything-else' }, { defaultToken: 'meta.expression.parenthesized' } ] } ], '#record-directive': [ { token: [ 'meta.directive.record.erlang', 'punctuation.section.directive.begin.erlang', 'meta.directive.record.erlang', 'keyword.control.directive.import.erlang', 'meta.directive.record.erlang', 'punctuation.definition.parameters.begin.erlang', 'meta.directive.record.erlang', 'entity.name.type.class.record.definition.erlang', 'meta.directive.record.erlang', 'punctuation.separator.parameters.erlang' ], regex: '^(\\s*)(-)(\\s*)(record)(\\s*)(\\()(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(,)', push: [ { token: [ 'punctuation.definition.class.record.end.erlang', 'meta.directive.record.erlang', 'punctuation.definition.parameters.end.erlang', 'meta.directive.record.erlang', 'punctuation.section.directive.end.erlang' ], regex: '(\\})(\\s*)(\\))(\\s*)(\\.)', next: 'pop' }, { include: '#internal-record-body' }, { defaultToken: 'meta.directive.record.erlang' } ] } ], '#record-usage': [ { token: [ 'keyword.operator.record.erlang', 'meta.record-usage.erlang', 'entity.name.type.class.record.erlang', 'meta.record-usage.erlang', 'punctuation.separator.record-field.erlang', 'meta.record-usage.erlang', 'variable.other.field.erlang' ], regex: '(#)(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(\\.)(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')' }, { token: [ 'keyword.operator.record.erlang', 'meta.record-usage.erlang', 'entity.name.type.class.record.erlang' ], regex: '(#)(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')', push: [ { token: 'punctuation.definition.class.record.end.erlang', regex: '\\}', next: 'pop' }, { include: '#internal-record-body' }, { defaultToken: 'meta.record-usage.erlang' } ] } ], '#string': [ { token: 'punctuation.definition.string.begin.erlang', regex: '"', push: [ { token: 'punctuation.definition.string.end.erlang', regex: '"', next: 'pop' }, { token: [ 'punctuation.definition.escape.erlang', 'constant.character.escape.erlang', 'punctuation.definition.escape.erlang', 'constant.character.escape.erlang', 'constant.character.escape.erlang' ], regex: '(\\\\)(?:([bdefnrstv\\\\\'"])|(\\^)([@-_])|([0-7]{1,3}))' }, { token: 'invalid.illegal.string.erlang', regex: '\\\\\\^?.?' }, { token: [ 'punctuation.definition.placeholder.erlang', 'punctuation.separator.placeholder-parts.erlang', 'constant.other.placeholder.erlang', 'punctuation.separator.placeholder-parts.erlang', 'punctuation.separator.placeholder-parts.erlang', 'constant.other.placeholder.erlang', 'punctuation.separator.placeholder-parts.erlang', 'punctuation.separator.placeholder-parts.erlang', 'punctuation.separator.placeholder-parts.erlang', 'constant.other.placeholder.erlang', 'constant.other.placeholder.erlang' ], regex: '(~)(?:((?:\\-)?)(\\d+)|(\\*))?(?:(\\.)(?:(\\d+)|(\\*)))?(?:(\\.)(?:(\\*)|(.)))?([~cfegswpWPBX#bx\\+ni])' }, { token: [ 'punctuation.definition.placeholder.erlang', 'punctuation.separator.placeholder-parts.erlang', 'constant.other.placeholder.erlang', 'constant.other.placeholder.erlang' ], regex: '(~)((?:\\*)?)((?:\\d+)?)([~du\\-#fsacl])' }, { token: 'invalid.illegal.string.erlang', regex: '~.?' }, { defaultToken: 'string.quoted.double.erlang' } ] } ], '#symbolic-operator': [ { token: 'keyword.operator.symbolic.erlang', regex: '\\+\\+|\\+|--|-|\\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!|::' } ], '#textual-operator': [ { token: 'keyword.operator.textual.erlang', regex: '\\b(?:andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\\b' } ], '#tuple': [ { token: 'punctuation.definition.tuple.begin.erlang', regex: '\\{', push: [ { token: 'punctuation.definition.tuple.end.erlang', regex: '\\}', next: 'pop' }, { token: 'punctuation.separator.tuple.erlang', regex: ',' }, { include: '#everything-else' }, { defaultToken: 'meta.structure.tuple.erlang' } ] } ], '#variable': [ { token: [ 'variable.other.erlang', 'variable.language.omitted.erlang' ], regex: '(_[a-zA-Z\\d@_]+|[A-Z][a-zA-Z\\d@_]*)|(_)' } ] } this.normalizeRules(); }; ErlangHighlightRules.metaData = { comment: 'The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace). Also, the function/module/record/macro names must be given unquoted. -- desp', fileTypes: [ 'erl', 'hrl' ], keyEquivalent: '^~E', name: 'Erlang', scopeName: 'source.erlang' } oop.inherits(ErlangHighlightRules, TextHighlightRules); exports.ErlangHighlightRules = ErlangHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/erlang",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/erlang_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var ErlangHighlightRules = require("./erlang_highlight_rules").ErlangHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = ErlangHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "%"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/erlang"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-forth.js ================================================ ace.define("ace/mode/forth_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ForthHighlightRules = function() { this.$rules = { start: [ { include: '#forth' } ], '#comment': [ { token: 'comment.line.double-dash.forth', regex: '(?:^|\\s)--\\s.*$', comment: 'line comments for iForth' }, { token: 'comment.line.backslash.forth', regex: '(?:^|\\s)\\\\[\\s\\S]*$', comment: 'ANSI line comment' }, { token: 'comment.line.backslash-g.forth', regex: '(?:^|\\s)\\\\[Gg] .*$', comment: 'gForth line comment' }, { token: 'comment.block.forth', regex: '(?:^|\\s)\\(\\*(?=\\s|$)', push: [ { token: 'comment.block.forth', regex: '(?:^|\\s)\\*\\)(?=\\s|$)', next: 'pop' }, { defaultToken: 'comment.block.forth' } ], comment: 'multiline comments for iForth' }, { token: 'comment.block.documentation.forth', regex: '\\bDOC\\b', caseInsensitive: true, push: [ { token: 'comment.block.documentation.forth', regex: '\\bENDDOC\\b', caseInsensitive: true, next: 'pop' }, { defaultToken: 'comment.block.documentation.forth' } ], comment: 'documentation comments for iForth' }, { token: 'comment.line.parentheses.forth', regex: '(?:^|\\s)\\.?\\( [^)]*\\)', comment: 'ANSI line comment' } ], '#constant': [ { token: 'constant.language.forth', regex: '(?:^|\\s)(?:TRUE|FALSE|BL|PI|CELL|C/L|R/O|W/O|R/W)(?=\\s|$)', caseInsensitive: true}, { token: 'constant.numeric.forth', regex: '(?:^|\\s)[$#%]?[-+]?[0-9]+(?:\\.[0-9]*e-?[0-9]+|\\.?[0-9a-fA-F]*)(?=\\s|$)'}, { token: 'constant.character.forth', regex: '(?:^|\\s)(?:[&^]\\S|(?:"|\')\\S(?:"|\'))(?=\\s|$)'}], '#forth': [ { include: '#constant' }, { include: '#comment' }, { include: '#string' }, { include: '#word' }, { include: '#variable' }, { include: '#storage' }, { include: '#word-def' } ], '#storage': [ { token: 'storage.type.forth', regex: '(?:^|\\s)(?:2CONSTANT|2VARIABLE|ALIAS|CONSTANT|CREATE-INTERPRET/COMPILE[:]?|CREATE|DEFER|FCONSTANT|FIELD|FVARIABLE|USER|VALUE|VARIABLE|VOCABULARY)(?=\\s|$)', caseInsensitive: true}], '#string': [ { token: 'string.quoted.double.forth', regex: '(ABORT" |BREAK" |\\." |C" |0"|S\\\\?" )([^"]+")', caseInsensitive: true}, { token: 'string.unquoted.forth', regex: '(?:INCLUDE|NEEDS|REQUIRE|USE)[ ]\\S+(?=\\s|$)', caseInsensitive: true}], '#variable': [ { token: 'variable.language.forth', regex: '\\b(?:I|J)\\b', caseInsensitive: true } ], '#word': [ { token: 'keyword.control.immediate.forth', regex: '(?:^|\\s)\\[(?:\\?DO|\\+LOOP|AGAIN|BEGIN|DEFINED|DO|ELSE|ENDIF|FOR|IF|IFDEF|IFUNDEF|LOOP|NEXT|REPEAT|THEN|UNTIL|WHILE)\\](?=\\s|$)', caseInsensitive: true}, { token: 'keyword.other.immediate.forth', regex: '(?:^|\\s)(?:COMPILE-ONLY|IMMEDIATE|IS|RESTRICT|TO|WHAT\'S|])(?=\\s|$)', caseInsensitive: true}, { token: 'keyword.control.compile-only.forth', regex: '(?:^|\\s)(?:-DO|\\-LOOP|\\?DO|\\?LEAVE|\\+DO|\\+LOOP|ABORT\\"|AGAIN|AHEAD|BEGIN|CASE|DO|ELSE|ENDCASE|ENDIF|ENDOF|ENDTRY\\-IFERROR|ENDTRY|FOR|IF|IFERROR|LEAVE|LOOP|NEXT|RECOVER|REPEAT|RESTORE|THEN|TRY|U\\-DO|U\\+DO|UNTIL|WHILE)(?=\\s|$)', caseInsensitive: true}, { token: 'keyword.other.compile-only.forth', regex: '(?:^|\\s)(?:\\?DUP-0=-IF|\\?DUP-IF|\\)|\\[|\\[\'\\]|\\[CHAR\\]|\\[COMPILE\\]|\\[IS\\]|\\[TO\\]||DEFERS|DOES>|INTERPRETATION>|OF|POSTPONE)(?=\\s|$)', caseInsensitive: true}, { token: 'keyword.other.non-immediate.forth', regex: '(?:^|\\s)(?:\'|||CHAR|END-STRUCT|INCLUDE[D]?|LOAD|NEEDS|REQUIRE[D]?|REVISION|SEE|STRUCT|THRU|USE)(?=\\s|$)', caseInsensitive: true}, { token: 'keyword.other.warning.forth', regex: '(?:^|\\s)(?:~~|BREAK:|BREAK"|DBG)(?=\\s|$)', caseInsensitive: true}], '#word-def': [ { token: [ 'keyword.other.compile-only.forth', 'keyword.other.compile-only.forth', 'meta.block.forth', 'entity.name.function.forth' ], regex: '(:NONAME)|(^:|\\s:)(\\s)(\\S+)(?=\\s|$)', caseInsensitive: true, push: [ { token: 'keyword.other.compile-only.forth', regex: ';(?:CODE)?', caseInsensitive: true, next: 'pop' }, { include: '#constant' }, { include: '#comment' }, { include: '#string' }, { include: '#word' }, { include: '#variable' }, { include: '#storage' }, { defaultToken: 'meta.block.forth' } ] } ] } this.normalizeRules(); }; ForthHighlightRules.metaData = { fileTypes: [ 'frt', 'fs', 'ldr' ], foldingStartMarker: '/\\*\\*|\\{\\s*$', foldingStopMarker: '\\*\\*/|^\\s*\\}', keyEquivalent: '^~F', name: 'Forth', scopeName: 'source.forth' } oop.inherits(ForthHighlightRules, TextHighlightRules); exports.ForthHighlightRules = ForthHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/forth",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/forth_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var ForthHighlightRules = require("./forth_highlight_rules").ForthHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = ForthHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "--"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/forth"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-ftl.js ================================================ ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/ftl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var FtlLangHighlightRules = function () { var stringBuiltIns = "\\?|substring|cap_first|uncap_first|capitalize|chop_linebreak|date|time|datetime|" + "ends_with|html|groups|index_of|j_string|js_string|json_string|last_index_of|length|lower_case|" + "left_pad|right_pad|contains|matches|number|replace|rtf|url|split|starts_with|string|trim|" + "upper_case|word_list|xhtml|xml"; var numberBuiltIns = "c|round|floor|ceiling"; var dateBuiltIns = "iso_[a-z_]+"; var seqBuiltIns = "first|last|seq_contains|seq_index_of|seq_last_index_of|reverse|size|sort|sort_by|chunk"; var hashBuiltIns = "keys|values"; var xmlBuiltIns = "children|parent|root|ancestors|node_name|node_type|node_namespace"; var expertBuiltIns = "byte|double|float|int|long|short|number_to_date|number_to_time|number_to_datetime|" + "eval|has_content|interpret|is_[a-z_]+|namespacenew"; var allBuiltIns = stringBuiltIns + numberBuiltIns + dateBuiltIns + seqBuiltIns + hashBuiltIns + xmlBuiltIns + expertBuiltIns; var deprecatedBuiltIns = "default|exists|if_exists|web_safe"; var variables = "data_model|error|globals|lang|locale|locals|main|namespace|node|current_node|" + "now|output_encoding|template_name|url_escaping_charset|vars|version"; var operators = "gt|gte|lt|lte|as|in|using"; var reserved = "true|false"; var attributes = "encoding|parse|locale|number_format|date_format|time_format|datetime_format|time_zone|" + "url_escaping_charset|classic_compatible|strip_whitespace|strip_text|strict_syntax|ns_prefixes|" + "attributes"; this.$rules = { "start" : [{ token : "constant.character.entity", regex : /&[^;]+;/ }, { token : "support.function", regex : "\\?("+allBuiltIns+")" }, { token : "support.function.deprecated", regex : "\\?("+deprecatedBuiltIns+")" }, { token : "language.variable", regex : "\\.(?:"+variables+")" }, { token : "constant.language", regex : "\\b("+reserved+")\\b" }, { token : "keyword.operator", regex : "\\b(?:"+operators+")\\b" }, { token : "entity.other.attribute-name", regex : attributes }, { token : "string", // regex : /['"]/, next : "qstring" }, { token : function(value) { if (value.match("^[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?$")) { return "constant.numeric"; } else { return "variable"; } }, regex : /[\w.+\-]+/ }, { token : "keyword.operator", regex : "!|\\.|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" }], "qstring" : [{ token : "constant.character.escape", regex : '\\\\[nrtvef\\\\"$]' }, { token : "string", regex : /['"]/, next : "start" }, { defaultToken : "string" }] }; }; oop.inherits(FtlLangHighlightRules, TextHighlightRules); var FtlHighlightRules = function() { HtmlHighlightRules.call(this); var directives = "assign|attempt|break|case|compress|default|elseif|else|escape|fallback|function|flush|" + "ftl|global|if|import|include|list|local|lt|macro|nested|noescape|noparse|nt|recover|recurse|return|rt|" + "setting|stop|switch|t|visit"; var startRules = [ { token : "comment", regex : "<#--", next : "ftl-dcomment" }, { token : "string.interpolated", regex : "\\${", push : "ftl-start" }, { token : "keyword.function", regex : "", next : "pop" }, { token : "string.interpolated", regex : "}", next : "pop" } ]; for (var key in this.$rules) this.$rules[key].unshift.apply(this.$rules[key], startRules); this.embedRules(FtlLangHighlightRules, "ftl-", endRules, ["start"]); this.addRules({ "ftl-dcomment" : [{ token : "comment", regex : ".*?-->", next : "pop" }, { token : "comment", regex : ".+" }] }); this.normalizeRules(); }; oop.inherits(FtlHighlightRules, HtmlHighlightRules); exports.FtlHighlightRules = FtlHighlightRules; }); ace.define("ace/mode/ftl",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/ftl_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var FtlHighlightRules = require("./ftl_highlight_rules").FtlHighlightRules; var Mode = function() { this.HighlightRules = FtlHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.$id = "ace/mode/ftl"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-gcode.js ================================================ ace.define("ace/mode/gcode_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var GcodeHighlightRules = function() { var keywords = ( "IF|DO|WHILE|ENDWHILE|CALL|ENDIF|SUB|ENDSUB|GOTO|REPEAT|ENDREPEAT|CALL" ); var builtinConstants = ( "PI" ); var builtinFunctions = ( "ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN" ); var keywordMapper = this.createKeywordMapper({ "support.function": builtinFunctions, "keyword": keywords, "constant.language": builtinConstants }, "identifier", true); this.$rules = { "start" : [ { token : "comment", regex : "\\(.*\\)" }, { token : "comment", // block number regex : "([N])([0-9]+)" }, { token : "string", // " string regex : "([G])([0-9]+\\.?[0-9]?)" }, { token : "string", // ' string regex : "([M])([0-9]+\\.?[0-9]?)" }, { token : "constant.numeric", // float regex : "([-+]?([0-9]*\\.?[0-9]+\\.?))|(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)" }, { token : keywordMapper, regex : "[A-Z]" }, { token : "keyword.operator", regex : "EQ|LT|GT|NE|GE|LE|OR|XOR" }, { token : "paren.lparen", regex : "[\\[]" }, { token : "paren.rparen", regex : "[\\]]" }, { token : "text", regex : "\\s+" } ] }; }; oop.inherits(GcodeHighlightRules, TextHighlightRules); exports.GcodeHighlightRules = GcodeHighlightRules; }); ace.define("ace/mode/gcode",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/gcode_highlight_rules","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var GcodeHighlightRules = require("./gcode_highlight_rules").GcodeHighlightRules; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = GcodeHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.$id = "ace/mode/gcode"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-gherkin.js ================================================ ace.define("ace/mode/gherkin_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var stringEscape = "\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})"; var GherkinHighlightRules = function() { this.$rules = { start : [{ token: 'constant.numeric', regex: "(?:(?:[1-9]\\d*)|(?:0))" }, { token : "comment", regex : "#.*$" }, { token : "keyword", regex : "Feature:|Background:|Scenario:|Scenario\ Outline:|Examples:|Given|When|Then|And|But|\\*", }, { token : "string", // multi line """ string start regex : '"{3}', next : "qqstring3" }, { token : "string", // " string regex : '"', next : "qqstring" }, { token : "comment", regex : "@[A-Za-z0-9]+", next : "start" }, { token : "comment", regex : "<.+>" }, { token : "comment", regex : "\\| ", next : "table-item" }, { token : "comment", regex : "\\|$", next : "start" }], "qqstring3" : [ { token : "constant.language.escape", regex : stringEscape }, { token : "string", // multi line """ string end regex : '"{3}', next : "start" }, { defaultToken : "string" }], "qqstring" : [{ token : "constant.language.escape", regex : stringEscape }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "start" }, { defaultToken: "string" }], "table-item" : [{ token : "string", regex : "[A-Za-z0-9 ]*", next : "start" }], }; } oop.inherits(GherkinHighlightRules, TextHighlightRules); exports.GherkinHighlightRules = GherkinHighlightRules; }); ace.define("ace/mode/gherkin",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/gherkin_highlight_rules"], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var GherkinHighlightRules = require("./gherkin_highlight_rules").GherkinHighlightRules; var Mode = function() { this.HighlightRules = GherkinHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.$id = "ace/mode/gherkin"; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var space2 = " "; var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; console.log(state) if(line.match("[ ]*\\|")) { indent += "| "; } if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { if (line.match("Scenario:|Feature:|Scenario\ Outline:|Background:")) { indent += space2; } else if(line.match("(Given|Then).+(:)$|Examples:")) { indent += space2; } else if(line.match("\\*.+")) { indent += "* "; } } return indent; }; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-gitignore.js ================================================ ace.define("ace/mode/gitignore_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var GitignoreHighlightRules = function() { this.$rules = { "start" : [ { token : "comment", regex : /^\s*#.*$/ }, { token : "keyword", // negated patterns regex : /^\s*!.*$/ } ] }; this.normalizeRules(); }; GitignoreHighlightRules.metaData = { fileTypes: ['gitignore'], name: 'Gitignore' }; oop.inherits(GitignoreHighlightRules, TextHighlightRules); exports.GitignoreHighlightRules = GitignoreHighlightRules; }); ace.define("ace/mode/gitignore",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/gitignore_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var GitignoreHighlightRules = require("./gitignore_highlight_rules").GitignoreHighlightRules; var Mode = function() { this.HighlightRules = GitignoreHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.$id = "ace/mode/gitignore"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-glsl.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var cFunctions = exports.cFunctions = "\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\b" var c_cppHighlightRules = function() { var keywordControls = ( "break|case|continue|default|do|else|for|goto|if|_Pragma|" + "return|switch|while|catch|operator|try|throw|using" ); var storageType = ( "asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|" + "_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|" + "class|wchar_t|template" ); var storageModifiers = ( "const|extern|register|restrict|static|volatile|inline|private|" + "protected|public|friend|explicit|virtual|export|mutable|typename|" + "constexpr|new|delete" ); var keywordOperators = ( "and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq" + "const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace" ); var builtinConstants = ( "NULL|true|false|TRUE|FALSE" ); var keywordMapper = this.$keywords = this.createKeywordMapper({ "keyword.control" : keywordControls, "storage.type" : storageType, "storage.modifier" : storageModifiers, "keyword.operator" : keywordOperators, "variable.language": "this", "constant.language": builtinConstants }, "identifier"); var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\d\\$_\u00a1-\uffff]*\\b"; this.$rules = { "start" : [ { token : "comment", regex : "//", next : "singleLineComment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '["].*\\\\$', next : "qqstring" }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "string", // multi line string start regex : "['].*\\\\$", next : "qstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "keyword", // pre-compiler directives regex : "#\\s*(?:include|import|pragma|line|define|undef|if|ifdef|else|elif|ifndef)\\b", next : "directive" }, { token : "keyword", // special case pre-compiler directive regex : "(?:#\\s*endif)\\b" }, { token : "support.function.C99.c", regex : cFunctions }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)" }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\." }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "singleLineComment" : [ { token : "comment", regex : /\\$/, next : "singleLineComment" }, { token : "comment", regex : /$/, next : "start" }, { defaultToken: "comment" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { defaultToken : "string" } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { defaultToken : "string" } ], "directive" : [ { token : "constant.other.multiline", regex : /\\/ }, { token : "constant.other.multiline", regex : /.*\\/ }, { token : "constant.other", regex : "\\s*<.+?>", next : "start" }, { token : "constant.other", // single line regex : '\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]', next : "start" }, { token : "constant.other", // single line regex : "\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']", next : "start" }, { token : "constant.other", regex : /[^\\\/]+/, next : "start" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(c_cppHighlightRules, TextHighlightRules); exports.c_cppHighlightRules = c_cppHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = c_cppHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/c_cpp"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/glsl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/c_cpp_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules; var glslHighlightRules = function() { var keywords = ( "attribute|const|uniform|varying|break|continue|do|for|while|" + "if|else|in|out|inout|float|int|void|bool|true|false|" + "lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|" + "mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|" + "samplerCube|struct" ); var buildinConstants = ( "radians|degrees|sin|cos|tan|asin|acos|atan|pow|" + "exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|" + "min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|" + "normalize|faceforward|reflect|refract|matrixCompMult|lessThan|" + "lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|" + "not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|" + "texture2DProjLod|textureCube|textureCubeLod|" + "gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|" + "gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|" + "gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|" + "gl_DepthRangeParameters|gl_DepthRange|" + "gl_Position|gl_PointSize|" + "gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData" ); var keywordMapper = this.createKeywordMapper({ "variable.language": "this", "keyword": keywords, "constant.language": buildinConstants }, "identifier"); this.$rules = new c_cppHighlightRules().$rules; this.$rules.start.forEach(function(rule) { if (typeof rule.token == "function") rule.token = keywordMapper; }) }; oop.inherits(glslHighlightRules, c_cppHighlightRules); exports.glslHighlightRules = glslHighlightRules; }); ace.define("ace/mode/glsl",["require","exports","module","ace/lib/oop","ace/mode/c_cpp","ace/mode/glsl_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var CMode = require("./c_cpp").Mode; var glslHighlightRules = require("./glsl_highlight_rules").glslHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = glslHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, CMode); (function() { this.$id = "ace/mode/glsl"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-golang.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/golang_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var GolangHighlightRules = function() { var keywords = ( "else|break|case|return|goto|if|const|select|" + "continue|struct|default|switch|for|range|" + "func|import|package|chan|defer|fallthrough|go|interface|map|range|" + "select|type|var" ); var builtinTypes = ( "string|uint8|uint16|uint32|uint64|int8|int16|int32|int64|float32|" + "float64|complex64|complex128|byte|rune|uint|int|uintptr|bool|error" ); var builtinFunctions = ( "make|close|new|panic|recover" ); var builtinConstants = ("nil|true|false|iota"); var keywordMapper = this.createKeywordMapper({ "keyword": keywords, "constant.language": builtinConstants, "support.function": builtinFunctions, "support.type": builtinTypes }, "identifier"); this.$rules = { "start" : [ { token : "comment", regex : "\\/\\/.*$" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : '[`](?:[^`]*)[`]' }, { token : "string", // multi line string start merge : true, regex : '[`](?:[^`]*)$', next : "bqstring" }, { token : "constant.numeric", // rune regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))[']" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=" }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\." }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "bqstring" : [ { token : "string", regex : '(?:[^`]*)`', next : "start" }, { token : "string", regex : '.+' } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(GolangHighlightRules, TextHighlightRules); exports.GolangHighlightRules = GolangHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/golang",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/golang_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var GolangHighlightRules = require("./golang_highlight_rules").GolangHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = GolangHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; };//end getNextLineIndent this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/golang"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-groovy.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/groovy_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var GroovyHighlightRules = function() { var keywords = ( "assert|with|abstract|continue|for|new|switch|" + "assert|default|goto|package|synchronized|" + "boolean|do|if|private|this|" + "break|double|implements|protected|throw|" + "byte|else|import|public|throws|" + "case|enum|instanceof|return|transient|" + "catch|extends|int|short|try|" + "char|final|interface|static|void|" + "class|finally|long|strictfp|volatile|" + "def|float|native|super|while" ); var buildinConstants = ( "null|Infinity|NaN|undefined" ); var langClasses = ( "AbstractMethodError|AssertionError|ClassCircularityError|"+ "ClassFormatError|Deprecated|EnumConstantNotPresentException|"+ "ExceptionInInitializerError|IllegalAccessError|"+ "IllegalThreadStateException|InstantiationError|InternalError|"+ "NegativeArraySizeException|NoSuchFieldError|Override|Process|"+ "ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|"+ "SuppressWarnings|TypeNotPresentException|UnknownError|"+ "UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|"+ "InstantiationException|IndexOutOfBoundsException|"+ "ArrayIndexOutOfBoundsException|CloneNotSupportedException|"+ "NoSuchFieldException|IllegalArgumentException|NumberFormatException|"+ "SecurityException|Void|InheritableThreadLocal|IllegalStateException|"+ "InterruptedException|NoSuchMethodException|IllegalAccessException|"+ "UnsupportedOperationException|Enum|StrictMath|Package|Compiler|"+ "Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|"+ "NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|"+ "NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|"+ "Character|Boolean|StackTraceElement|Appendable|StringBuffer|"+ "Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|"+ "StackOverflowError|OutOfMemoryError|VirtualMachineError|"+ "ArrayStoreException|ClassCastException|LinkageError|"+ "NoClassDefFoundError|ClassNotFoundException|RuntimeException|"+ "Exception|ThreadDeath|Error|Throwable|System|ClassLoader|"+ "Cloneable|Class|CharSequence|Comparable|String|Object" ); var keywordMapper = this.createKeywordMapper({ "variable.language": "this", "keyword": keywords, "support.function": langClasses, "constant.language": buildinConstants }, "identifier"); this.$rules = { "start" : [ { token : "comment", regex : "\\/\\/.*$" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)" }, { token : "string", regex : '"""', next : "qqstring" }, { token : "string", regex : "'''", next : "qstring" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "\\?:|\\?\\.|\\*\\.|<=>|=~|==~|\\.@|\\*\\.@|\\.&|as|in|is|!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" }, { token : "lparen", regex : "[[({]" }, { token : "rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "qqstring" : [ { token : "constant.language.escape", regex : /\\(?:u[0-9A-Fa-f]{4}|.|$)/ }, { token : "constant.language.escape", regex : /\$[\w\d]+/ }, { token : "constant.language.escape", regex : /\$\{[^"\}]+\}?/ }, { token : "string", regex : '"{3,5}', next : "start" }, { token : "string", regex : '.+?' } ], "qstring" : [ { token : "constant.language.escape", regex : /\\(?:u[0-9A-Fa-f]{4}|.|$)/ }, { token : "string", regex : "'{3,5}", next : "start" }, { token : "string", regex : ".+?" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(GroovyHighlightRules, TextHighlightRules); exports.GroovyHighlightRules = GroovyHighlightRules; }); ace.define("ace/mode/groovy",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/mode/groovy_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var JavaScriptMode = require("./javascript").Mode; var GroovyHighlightRules = require("./groovy_highlight_rules").GroovyHighlightRules; var Mode = function() { JavaScriptMode.call(this); this.HighlightRules = GroovyHighlightRules; }; oop.inherits(Mode, JavaScriptMode); (function() { this.createWorker = function(session) { return null; }; this.$id = "ace/mode/groovy"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-haml.js ================================================ ace.define("ace/mode/ruby_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var constantOtherSymbol = exports.constantOtherSymbol = { token : "constant.other.symbol.ruby", // symbol regex : "[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?" }; var qString = exports.qString = { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }; var qqString = exports.qqString = { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }; var tString = exports.tString = { token : "string", // backtick string regex : "[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]" }; var constantNumericHex = exports.constantNumericHex = { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b" }; var constantNumericFloat = exports.constantNumericFloat = { token : "constant.numeric", // float regex : "[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b" }; var RubyHighlightRules = function() { var builtinFunctions = ( "abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|" + "assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|" + "assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|" + "assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|" + "assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|" + "assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|" + "attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|" + "caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|" + "exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|" + "gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|" + "link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|" + "p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|" + "raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|" + "set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|" + "throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|" + "render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|" + "content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|" + "fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|" + "time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|" + "select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|" + "file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|" + "protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|" + "send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|" + "validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|" + "validates_inclusion_of|validates_numericality_of|validates_with|validates_each|" + "authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|" + "filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|" + "translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|" + "cache|expire_fragment|expire_cache_for|observe|cache_sweeper|" + "has_many|has_one|belongs_to|has_and_belongs_to_many" ); var keywords = ( "alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|" + "__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|" + "redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield" ); var buildinConstants = ( "true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|" + "RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING" ); var builtinVariables = ( "\$DEBUG|\$defout|\$FILENAME|\$LOAD_PATH|\$SAFE|\$stdin|\$stdout|\$stderr|\$VERBOSE|" + "$!|root_url|flash|session|cookies|params|request|response|logger|self" ); var keywordMapper = this.$keywords = this.createKeywordMapper({ "keyword": keywords, "constant.language": buildinConstants, "variable.language": builtinVariables, "support.function": builtinFunctions, "invalid.deprecated": "debugger" // TODO is this a remnant from js mode? }, "identifier"); this.$rules = { "start" : [ { token : "comment", regex : "#.*$" }, { token : "comment", // multi line comment regex : "^=begin(?:$|\\s.*$)", next : "comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)" }, [{ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren.lparen"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.start", regex : /"/, push : [{ token : "constant.language.escape", regex : /\\(?:[nsrtvfbae'"\\]|c.|C-.|M-.(?:\\C-.)?|[0-7]{3}|x[\da-fA-F]{2}|u[\da-fA-F]{4})/ }, { token : "paren.start", regex : /\#{/, push : "start" }, { token : "string.end", regex : /"/, next : "pop" }, { defaultToken: "string" }] }, { token : "string.start", regex : /`/, push : [{ token : "constant.language.escape", regex : /\\(?:[nsrtvfbae'"\\]|c.|C-.|M-.(?:\\C-.)?|[0-7]{3}|x[\da-fA-F]{2}|u[\da-fA-F]{4})/ }, { token : "paren.start", regex : /\#{/, push : "start" }, { token : "string.end", regex : /`/, next : "pop" }, { defaultToken: "string" }] }, { token : "string.start", regex : /'/, push : [{ token : "constant.language.escape", regex : /\\['\\]/ }, { token : "string.end", regex : /'/, next : "pop" }, { defaultToken: "string" }] }], { token : "text", // namespaces aren't symbols regex : "::" }, { token : "variable.instance", // instance variable regex : "@{1,2}[a-zA-Z_\\d]+" }, { token : "support.class", // class name regex : "[A-Z][a-zA-Z_\\d]+" }, constantOtherSymbol, constantNumericHex, constantNumericFloat, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "punctuation.separator.key-value", regex : "=>" }, { stateName: "heredoc", onMatch : function(value, currentState, stack) { var next = value[2] == '-' ? "indentedHeredoc" : "heredoc"; var tokens = value.split(this.splitRegex); stack.push(next, tokens[3]); return [ {type:"constant", value: tokens[1]}, {type:"string", value: tokens[2]}, {type:"support.class", value: tokens[3]}, {type:"string", value: tokens[4]} ]; }, regex : "(<<-?)(['\"`]?)([\\w]+)(['\"`]?)", rules: { heredoc: [{ onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }], indentedHeredoc: [{ token: "string", regex: "^ +" }, { onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }] } }, { regex : "$", token : "empty", next : function(currentState, stack) { if (stack[0] === "heredoc" || stack[0] === "indentedHeredoc") return stack[0]; return currentState; } }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : "^=end(?:$|\\s.*$)", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ] }; this.normalizeRules(); }; oop.inherits(RubyHighlightRules, TextHighlightRules); exports.RubyHighlightRules = RubyHighlightRules; }); ace.define("ace/mode/haml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/ruby_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var RubyExports = require("./ruby_highlight_rules"); var RubyHighlightRules = RubyExports.RubyHighlightRules; var HamlHighlightRules = function() { this.$rules = { "start": [ { token : "punctuation.section.comment", regex : /^\s*\/.*/ }, { token : "punctuation.section.comment", regex : /^\s*#.*/ }, { token: "string.quoted.double", regex: "==.+?==" }, { token: "keyword.other.doctype", regex: "^!!!\\s*(?:[a-zA-Z0-9-_]+)?" }, RubyExports.qString, RubyExports.qqString, RubyExports.tString, { token: ["entity.name.tag.haml"], regex: /^\s*%[\w:]+/, next: "tag_single" }, { token: [ "meta.escape.haml" ], regex: "^\\s*\\\\." }, RubyExports.constantNumericHex, RubyExports.constantNumericFloat, RubyExports.constantOtherSymbol, { token: "text", regex: "=|-|~", next: "embedded_ruby" } ], "tag_single": [ { token: "entity.other.attribute-name.class.haml", regex: "\\.[\\w-]+" }, { token: "entity.other.attribute-name.id.haml", regex: "#[\\w-]+" }, { token: "punctuation.section", regex: "\\{", next: "section" }, RubyExports.constantOtherSymbol, { token: "text", regex: /\s/, next: "start" }, { token: "empty", regex: "$|(?!\\.|#|\\{|\\[|=|-|~|\\/)", next: "start" } ], "section": [ RubyExports.constantOtherSymbol, RubyExports.qString, RubyExports.qqString, RubyExports.tString, RubyExports.constantNumericHex, RubyExports.constantNumericFloat, { token: "punctuation.section", regex: "\\}", next: "start" } ], "embedded_ruby": [ RubyExports.constantNumericHex, RubyExports.constantNumericFloat, { token : "support.class", // class name regex : "[A-Z][a-zA-Z_\\d]+" }, { token : new RubyHighlightRules().getKeywords(), regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : ["keyword", "text", "text"], regex : "(?:do|\\{)(?: \\|[^|]+\\|)?$", next : "start" }, { token : ["text"], regex : "^$", next : "start" }, { token : ["text"], regex : "^(?!.*\\|\\s*$)", next : "start" } ] } }; oop.inherits(HamlHighlightRules, TextHighlightRules); exports.HamlHighlightRules = HamlHighlightRules; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/haml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/haml_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var HamlHighlightRules = require("./haml_highlight_rules").HamlHighlightRules; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = HamlHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = ["//", "#"]; this.$id = "ace/mode/haml"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-handlebars.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/handlebars_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; function pop2(currentState, stack) { stack.splice(0, 3); return stack.shift() || "start"; } var HandlebarsHighlightRules = function() { HtmlHighlightRules.call(this); var hbs = { regex : "(?={{)", push : "handlebars" }; for (var key in this.$rules) { this.$rules[key].unshift(hbs); } this.$rules.handlebars = [{ token : "comment.start", regex : "{{!--", push : [{ token : "comment.end", regex : "--}}", next : pop2 }, { defaultToken : "comment" }] }, { token : "comment.start", regex : "{{!", push : [{ token : "comment.end", regex : "}}", next : pop2 }, { defaultToken : "comment" }] }, { token : "support.function", // unescaped variable regex : "{{{", push : [{ token : "support.function", regex : "}}}", next : pop2 }, { token : "variable.parameter", regex : "[a-zA-Z_$][a-zA-Z0-9_$]*" }] }, { token : "storage.type.start", // begin section regex : "{{[#\\^/&]?", push : [{ token : "storage.type.end", regex : "}}", next : pop2 }, { token : "variable.parameter", regex : "[a-zA-Z_$][a-zA-Z0-9_$]*" }] }]; this.normalizeRules(); }; oop.inherits(HandlebarsHighlightRules, HtmlHighlightRules); exports.HandlebarsHighlightRules = HandlebarsHighlightRules; }); ace.define("ace/mode/behaviour/html",["require","exports","module","ace/lib/oop","ace/mode/behaviour/xml"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var XmlBehaviour = require("../behaviour/xml").XmlBehaviour; var HtmlBehaviour = function () { XmlBehaviour.call(this); }; oop.inherits(HtmlBehaviour, XmlBehaviour); exports.HtmlBehaviour = HtmlBehaviour; }); ace.define("ace/mode/handlebars",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/handlebars_highlight_rules","ace/mode/behaviour/html","ace/mode/folding/html"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlMode = require("./html").Mode; var HandlebarsHighlightRules = require("./handlebars_highlight_rules").HandlebarsHighlightRules; var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var Mode = function() { HtmlMode.call(this); this.HighlightRules = HandlebarsHighlightRules; this.$behaviour = new HtmlBehaviour(); this.foldingRules = new HtmlFoldMode(); }; oop.inherits(Mode, HtmlMode); (function() { this.blockComment = {start: "{!--", end: "--}"}; this.$id = "ace/mode/handlebars"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-haskell.js ================================================ ace.define("ace/mode/haskell_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var HaskellHighlightRules = function() { this.$rules = { start: [ { token: [ 'punctuation.definition.entity.haskell', 'keyword.operator.function.infix.haskell', 'punctuation.definition.entity.haskell' ], regex: '(`)([a-zA-Z_\']*?)(`)', comment: 'In case this regex seems unusual for an infix operator, note that Haskell allows any ordinary function application (elem 4 [1..10]) to be rewritten as an infix expression (4 `elem` [1..10]).' }, { token: 'constant.language.unit.haskell', regex: '\\(\\)' }, { token: 'constant.language.empty-list.haskell', regex: '\\[\\]' }, { token: 'keyword.other.haskell', regex: 'module', push: [ { token: 'keyword.other.haskell', regex: 'where', next: 'pop' }, { include: '#module_name' }, { include: '#module_exports' }, { token: 'invalid', regex: '[a-z]+' }, { defaultToken: 'meta.declaration.module.haskell' } ] }, { token: 'keyword.other.haskell', regex: '\\bclass\\b', push: [ { token: 'keyword.other.haskell', regex: '\\bwhere\\b', next: 'pop' }, { token: 'support.class.prelude.haskell', regex: '\\b(?:Monad|Functor|Eq|Ord|Read|Show|Num|(?:Frac|Ra)tional|Enum|Bounded|Real(?:Frac|Float)?|Integral|Floating)\\b' }, { token: 'entity.other.inherited-class.haskell', regex: '[A-Z][A-Za-z_\']*' }, { token: 'variable.other.generic-type.haskell', regex: '\\b[a-z][a-zA-Z0-9_\']*\\b' }, { defaultToken: 'meta.declaration.class.haskell' } ] }, { token: 'keyword.other.haskell', regex: '\\binstance\\b', push: [ { token: 'keyword.other.haskell', regex: '\\bwhere\\b|$', next: 'pop' }, { include: '#type_signature' }, { defaultToken: 'meta.declaration.instance.haskell' } ] }, { token: 'keyword.other.haskell', regex: 'import', push: [ { token: 'meta.import.haskell', regex: '$|;', next: 'pop' }, { token: 'keyword.other.haskell', regex: 'qualified|as|hiding' }, { include: '#module_name' }, { include: '#module_exports' }, { defaultToken: 'meta.import.haskell' } ] }, { token: [ 'keyword.other.haskell', 'meta.deriving.haskell' ], regex: '(deriving)(\\s*\\()', push: [ { token: 'meta.deriving.haskell', regex: '\\)', next: 'pop' }, { token: 'entity.other.inherited-class.haskell', regex: '\\b[A-Z][a-zA-Z_\']*' }, { defaultToken: 'meta.deriving.haskell' } ] }, { token: 'keyword.other.haskell', regex: '\\b(?:deriving|where|data|type|case|of|let|in|newtype|default)\\b' }, { token: 'keyword.operator.haskell', regex: '\\binfix[lr]?\\b' }, { token: 'keyword.control.haskell', regex: '\\b(?:do|if|then|else)\\b' }, { token: 'constant.numeric.float.haskell', regex: '\\b(?:[0-9]+\\.[0-9]+(?:[eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\\b', comment: 'Floats are always decimal' }, { token: 'constant.numeric.haskell', regex: '\\b(?:[0-9]+|0(?:[xX][0-9a-fA-F]+|[oO][0-7]+))\\b' }, { token: [ 'meta.preprocessor.c', 'punctuation.definition.preprocessor.c', 'meta.preprocessor.c' ], regex: '^(\\s*)(#)(\\s*\\w+)', comment: 'In addition to Haskell\'s "native" syntax, GHC permits the C preprocessor to be run on a source file.' }, { include: '#pragma' }, { token: 'punctuation.definition.string.begin.haskell', regex: '"', push: [ { token: 'punctuation.definition.string.end.haskell', regex: '"', next: 'pop' }, { token: 'constant.character.escape.haskell', regex: '\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\"\'\\&])' }, { token: 'constant.character.escape.octal.haskell', regex: '\\\\o[0-7]+|\\\\x[0-9A-Fa-f]+|\\\\[0-9]+' }, { token: 'constant.character.escape.control.haskell', regex: '\\^[A-Z@\\[\\]\\\\\\^_]' }, { defaultToken: 'string.quoted.double.haskell' } ] }, { token: [ 'punctuation.definition.string.begin.haskell', 'string.quoted.single.haskell', 'constant.character.escape.haskell', 'constant.character.escape.octal.haskell', 'constant.character.escape.hexadecimal.haskell', 'constant.character.escape.control.haskell', 'punctuation.definition.string.end.haskell' ], regex: '(\')(?:([\\ -\\[\\]-~])|(\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\"\'\\&]))|(\\\\o[0-7]+)|(\\\\x[0-9A-Fa-f]+)|(\\^[A-Z@\\[\\]\\\\\\^_]))(\')' }, { token: [ 'meta.function.type-declaration.haskell', 'entity.name.function.haskell', 'meta.function.type-declaration.haskell', 'keyword.other.double-colon.haskell' ], regex: '^(\\s*)([a-z_][a-zA-Z0-9_\']*|\\([|!%$+\\-.,=]+\\))(\\s*)(::)', push: [ { token: 'meta.function.type-declaration.haskell', regex: '$', next: 'pop' }, { include: '#type_signature' }, { defaultToken: 'meta.function.type-declaration.haskell' } ] }, { token: 'support.constant.haskell', regex: '\\b(?:Just|Nothing|Left|Right|True|False|LT|EQ|GT|\\(\\)|\\[\\])\\b' }, { token: 'constant.other.haskell', regex: '\\b[A-Z]\\w*\\b' }, { include: '#comments' }, { token: 'support.function.prelude.haskell', regex: '\\b(?:abs|acos|acosh|all|and|any|appendFile|applyM|asTypeOf|asin|asinh|atan|atan2|atanh|break|catch|ceiling|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|div|divMod|drop|dropWhile|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromEnum|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|head|id|init|interact|ioError|isDenormalized|isIEEE|isInfinite|isNaN|isNegativeZero|iterate|last|lcm|length|lex|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|odd|or|otherwise|pi|pred|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|read|readFile|readIO|readList|readLn|readParen|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showList|showParen|showString|shows|showsPrec|significand|signum|sin|sinh|snd|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|toEnum|toInteger|toRational|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\\b' }, { include: '#infix_op' }, { token: 'keyword.operator.haskell', regex: '[|!%$?~+:\\-.=\\\\]+', comment: 'In case this regex seems overly general, note that Haskell permits the definition of new operators which can be nearly any string of punctuation characters, such as $%^&*.' }, { token: 'punctuation.separator.comma.haskell', regex: ',' } ], '#block_comment': [ { token: 'punctuation.definition.comment.haskell', regex: '\\{-(?!#)', push: [ { include: '#block_comment' }, { token: 'punctuation.definition.comment.haskell', regex: '-\\}', next: 'pop' }, { defaultToken: 'comment.block.haskell' } ] } ], '#comments': [ { token: 'punctuation.definition.comment.haskell', regex: '--.*', push_: [ { token: 'comment.line.double-dash.haskell', regex: '$', next: 'pop' }, { defaultToken: 'comment.line.double-dash.haskell' } ] }, { include: '#block_comment' } ], '#infix_op': [ { token: 'entity.name.function.infix.haskell', regex: '\\([|!%$+:\\-.=]+\\)|\\(,+\\)' } ], '#module_exports': [ { token: 'meta.declaration.exports.haskell', regex: '\\(', push: [ { token: 'meta.declaration.exports.haskell', regex: '\\)', next: 'pop' }, { token: 'entity.name.function.haskell', regex: '\\b[a-z][a-zA-Z_\']*' }, { token: 'storage.type.haskell', regex: '\\b[A-Z][A-Za-z_\']*' }, { token: 'punctuation.separator.comma.haskell', regex: ',' }, { include: '#infix_op' }, { token: 'meta.other.unknown.haskell', regex: '\\(.*?\\)', comment: 'So named because I don\'t know what to call this.' }, { defaultToken: 'meta.declaration.exports.haskell' } ] } ], '#module_name': [ { token: 'support.other.module.haskell', regex: '[A-Z][A-Za-z._\']*' } ], '#pragma': [ { token: 'meta.preprocessor.haskell', regex: '\\{-#', push: [ { token: 'meta.preprocessor.haskell', regex: '#-\\}', next: 'pop' }, { token: 'keyword.other.preprocessor.haskell', regex: '\\b(?:LANGUAGE|UNPACK|INLINE)\\b' }, { defaultToken: 'meta.preprocessor.haskell' } ] } ], '#type_signature': [ { token: [ 'meta.class-constraint.haskell', 'entity.other.inherited-class.haskell', 'meta.class-constraint.haskell', 'variable.other.generic-type.haskell', 'meta.class-constraint.haskell', 'keyword.other.big-arrow.haskell' ], regex: '(\\(\\s*)([A-Z][A-Za-z]*)(\\s+)([a-z][A-Za-z_\']*)(\\)\\s*)(=>)' }, { include: '#pragma' }, { token: 'keyword.other.arrow.haskell', regex: '->' }, { token: 'keyword.other.big-arrow.haskell', regex: '=>' }, { token: 'support.type.prelude.haskell', regex: '\\b(?:Int(?:eger)?|Maybe|Either|Bool|Float|Double|Char|String|Ordering|ShowS|ReadS|FilePath|IO(?:Error)?)\\b' }, { token: 'variable.other.generic-type.haskell', regex: '\\b[a-z][a-zA-Z0-9_\']*\\b' }, { token: 'storage.type.haskell', regex: '\\b[A-Z][a-zA-Z0-9_\']*\\b' }, { token: 'support.constant.unit.haskell', regex: '\\(\\)' }, { include: '#comments' } ] } this.normalizeRules(); }; HaskellHighlightRules.metaData = { fileTypes: [ 'hs' ], keyEquivalent: '^~H', name: 'Haskell', scopeName: 'source.haskell' } oop.inherits(HaskellHighlightRules, TextHighlightRules); exports.HaskellHighlightRules = HaskellHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/haskell",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/haskell_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var HaskellHighlightRules = require("./haskell_highlight_rules").HaskellHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = HaskellHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "--"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/haskell"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-haxe.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/haxe_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var HaxeHighlightRules = function() { var keywords = ( "break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std" ); var buildinConstants = ( "null|true|false" ); var keywordMapper = this.createKeywordMapper({ "variable.language": "this", "keyword": keywords, "constant.language": buildinConstants }, "identifier"); this.$rules = { "start" : [ { token : "comment", regex : "\\/\\/.*$" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\." }, { token : "paren.lparen", regex : "[[({<]" }, { token : "paren.rparen", regex : "[\\])}>]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(HaxeHighlightRules, TextHighlightRules); exports.HaxeHighlightRules = HaxeHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/haxe",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/haxe_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var HaxeHighlightRules = require("./haxe_highlight_rules").HaxeHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = HaxeHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/haxe"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-html.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-html_ruby.js ================================================ ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/ruby_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var constantOtherSymbol = exports.constantOtherSymbol = { token : "constant.other.symbol.ruby", // symbol regex : "[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?" }; var qString = exports.qString = { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }; var qqString = exports.qqString = { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }; var tString = exports.tString = { token : "string", // backtick string regex : "[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]" }; var constantNumericHex = exports.constantNumericHex = { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b" }; var constantNumericFloat = exports.constantNumericFloat = { token : "constant.numeric", // float regex : "[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b" }; var RubyHighlightRules = function() { var builtinFunctions = ( "abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|" + "assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|" + "assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|" + "assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|" + "assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|" + "assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|" + "attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|" + "caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|" + "exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|" + "gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|" + "link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|" + "p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|" + "raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|" + "set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|" + "throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|" + "render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|" + "content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|" + "fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|" + "time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|" + "select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|" + "file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|" + "protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|" + "send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|" + "validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|" + "validates_inclusion_of|validates_numericality_of|validates_with|validates_each|" + "authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|" + "filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|" + "translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|" + "cache|expire_fragment|expire_cache_for|observe|cache_sweeper|" + "has_many|has_one|belongs_to|has_and_belongs_to_many" ); var keywords = ( "alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|" + "__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|" + "redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield" ); var buildinConstants = ( "true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|" + "RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING" ); var builtinVariables = ( "\$DEBUG|\$defout|\$FILENAME|\$LOAD_PATH|\$SAFE|\$stdin|\$stdout|\$stderr|\$VERBOSE|" + "$!|root_url|flash|session|cookies|params|request|response|logger|self" ); var keywordMapper = this.$keywords = this.createKeywordMapper({ "keyword": keywords, "constant.language": buildinConstants, "variable.language": builtinVariables, "support.function": builtinFunctions, "invalid.deprecated": "debugger" // TODO is this a remnant from js mode? }, "identifier"); this.$rules = { "start" : [ { token : "comment", regex : "#.*$" }, { token : "comment", // multi line comment regex : "^=begin(?:$|\\s.*$)", next : "comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)" }, [{ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren.lparen"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.start", regex : /"/, push : [{ token : "constant.language.escape", regex : /\\(?:[nsrtvfbae'"\\]|c.|C-.|M-.(?:\\C-.)?|[0-7]{3}|x[\da-fA-F]{2}|u[\da-fA-F]{4})/ }, { token : "paren.start", regex : /\#{/, push : "start" }, { token : "string.end", regex : /"/, next : "pop" }, { defaultToken: "string" }] }, { token : "string.start", regex : /`/, push : [{ token : "constant.language.escape", regex : /\\(?:[nsrtvfbae'"\\]|c.|C-.|M-.(?:\\C-.)?|[0-7]{3}|x[\da-fA-F]{2}|u[\da-fA-F]{4})/ }, { token : "paren.start", regex : /\#{/, push : "start" }, { token : "string.end", regex : /`/, next : "pop" }, { defaultToken: "string" }] }, { token : "string.start", regex : /'/, push : [{ token : "constant.language.escape", regex : /\\['\\]/ }, { token : "string.end", regex : /'/, next : "pop" }, { defaultToken: "string" }] }], { token : "text", // namespaces aren't symbols regex : "::" }, { token : "variable.instance", // instance variable regex : "@{1,2}[a-zA-Z_\\d]+" }, { token : "support.class", // class name regex : "[A-Z][a-zA-Z_\\d]+" }, constantOtherSymbol, constantNumericHex, constantNumericFloat, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "punctuation.separator.key-value", regex : "=>" }, { stateName: "heredoc", onMatch : function(value, currentState, stack) { var next = value[2] == '-' ? "indentedHeredoc" : "heredoc"; var tokens = value.split(this.splitRegex); stack.push(next, tokens[3]); return [ {type:"constant", value: tokens[1]}, {type:"string", value: tokens[2]}, {type:"support.class", value: tokens[3]}, {type:"string", value: tokens[4]} ]; }, regex : "(<<-?)(['\"`]?)([\\w]+)(['\"`]?)", rules: { heredoc: [{ onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }], indentedHeredoc: [{ token: "string", regex: "^ +" }, { onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }] } }, { regex : "$", token : "empty", next : function(currentState, stack) { if (stack[0] === "heredoc" || stack[0] === "indentedHeredoc") return stack[0]; return currentState; } }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : "^=end(?:$|\\s.*$)", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ] }; this.normalizeRules(); }; oop.inherits(RubyHighlightRules, TextHighlightRules); exports.RubyHighlightRules = RubyHighlightRules; }); ace.define("ace/mode/html_ruby_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules","ace/mode/ruby_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var RubyHighlightRules = require("./ruby_highlight_rules").RubyHighlightRules; var HtmlRubyHighlightRules = function() { HtmlHighlightRules.call(this); var startRules = [ { regex: "<%%|%%>", token: "constant.language.escape" }, { token : "comment.start.erb", regex : "<%#", push : [{ token : "comment.end.erb", regex: "%>", next: "pop", defaultToken:"comment" }] }, { token : "support.ruby_tag", regex : "<%+(?!>)[-=]?", push : "ruby-start" } ]; var endRules = [ { token : "support.ruby_tag", regex : "%>", next : "pop" }, { token: "comment", regex: "#(?:[^%]|%[^>])*" } ]; for (var key in this.$rules) this.$rules[key].unshift.apply(this.$rules[key], startRules); this.embedRules(RubyHighlightRules, "ruby-", endRules, ["start"]); this.normalizeRules(); }; oop.inherits(HtmlRubyHighlightRules, HtmlHighlightRules); exports.HtmlRubyHighlightRules = HtmlRubyHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/ruby",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/ruby_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var RubyHighlightRules = require("./ruby_highlight_rules").RubyHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = RubyHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); var startingClassOrMethod = line.match(/^\s*(class|def|module)\s.*$/); var startingDoBlock = line.match(/.*do(\s*|\s+\|.*\|\s*)$/); var startingConditional = line.match(/^\s*(if|else)\s*/) if (match || startingClassOrMethod || startingDoBlock || startingConditional) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return /^\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, session, row) { var line = session.getLine(row); if (/}/.test(line)) return this.$outdent.autoOutdent(session, row); var indent = this.$getIndent(line); var prevLine = session.getLine(row - 1); var prevIndent = this.$getIndent(prevLine); var tab = session.getTabString(); if (prevIndent.length <= indent.length) { if (indent.slice(-tab.length) == tab) session.remove(new Range(row, indent.length-tab.length, row, indent.length)); } }; this.$id = "ace/mode/ruby"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/html_ruby",["require","exports","module","ace/lib/oop","ace/mode/html_ruby_highlight_rules","ace/mode/html","ace/mode/javascript","ace/mode/css","ace/mode/ruby"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlRubyHighlightRules = require("./html_ruby_highlight_rules").HtmlRubyHighlightRules; var HtmlMode = require("./html").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var RubyMode = require("./ruby").Mode; var Mode = function() { HtmlMode.call(this); this.HighlightRules = HtmlRubyHighlightRules; this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode, "ruby-": RubyMode }); }; oop.inherits(Mode, HtmlMode); (function() { this.$id = "ace/mode/html_ruby"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-ini.js ================================================ ace.define("ace/mode/ini_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var escapeRe = "\\\\(?:[\\\\0abtrn;#=:]|x[a-fA-F\\d]{4})"; var IniHighlightRules = function() { this.$rules = { start: [{ token: 'punctuation.definition.comment.ini', regex: '#.*', push_: [{ token: 'comment.line.number-sign.ini', regex: '$|^', next: 'pop' }, { defaultToken: 'comment.line.number-sign.ini' }] }, { token: 'punctuation.definition.comment.ini', regex: ';.*', push_: [{ token: 'comment.line.semicolon.ini', regex: '$|^', next: 'pop' }, { defaultToken: 'comment.line.semicolon.ini' }] }, { token: ['keyword.other.definition.ini', 'text', 'punctuation.separator.key-value.ini'], regex: '\\b([a-zA-Z0-9_.-]+)\\b(\\s*)(=)' }, { token: ['punctuation.definition.entity.ini', 'constant.section.group-title.ini', 'punctuation.definition.entity.ini'], regex: '^(\\[)(.*?)(\\])' }, { token: 'punctuation.definition.string.begin.ini', regex: "'", push: [{ token: 'punctuation.definition.string.end.ini', regex: "'", next: 'pop' }, { token: "constant.language.escape", regex: escapeRe }, { defaultToken: 'string.quoted.single.ini' }] }, { token: 'punctuation.definition.string.begin.ini', regex: '"', push: [{ token: "constant.language.escape", regex: escapeRe }, { token: 'punctuation.definition.string.end.ini', regex: '"', next: 'pop' }, { defaultToken: 'string.quoted.double.ini' }] }] }; this.normalizeRules(); }; IniHighlightRules.metaData = { fileTypes: ['ini', 'conf'], keyEquivalent: '^~I', name: 'Ini', scopeName: 'source.ini' }; oop.inherits(IniHighlightRules, TextHighlightRules); exports.IniHighlightRules = IniHighlightRules; }); ace.define("ace/mode/folding/ini",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function() { }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /^\s*\[([^\])]*)]\s*(?:$|[;#])/; this.getFoldWidgetRange = function(session, foldStyle, row) { var re = this.foldingStartMarker; var line = session.getLine(row); var m = line.match(re); if (!m) return; var startName = m[1] + "."; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); if (/^\s*$/.test(line)) continue; m = line.match(re); if (m && m[1].lastIndexOf(startName, 0) !== 0) break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/ini",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/ini_highlight_rules","ace/mode/folding/ini"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var IniHighlightRules = require("./ini_highlight_rules").IniHighlightRules; var FoldMode = require("./folding/ini").FoldMode; var Mode = function() { this.HighlightRules = IniHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = ";"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/ini"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-io.js ================================================ ace.define("ace/mode/io_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var IoHighlightRules = function() { this.$rules = { start: [ { token: [ 'text', 'meta.empty-parenthesis.io' ], regex: '(\\()(\\))', comment: 'we match this to overload return inside () --Allan; scoping rules for what gets the scope have changed, so we now group the ) instead of the ( -- Rob' }, { token: [ 'text', 'meta.comma-parenthesis.io' ], regex: '(\\,)(\\))', comment: 'We want to do the same for ,) -- Seckar; same as above -- Rob' }, { token: 'keyword.control.io', regex: '\\b(?:if|ifTrue|ifFalse|ifTrueIfFalse|for|loop|reverseForeach|foreach|map|continue|break|while|do|return)\\b' }, { token: 'punctuation.definition.comment.io', regex: '/\\*', push: [ { token: 'punctuation.definition.comment.io', regex: '\\*/', next: 'pop' }, { defaultToken: 'comment.block.io' } ] }, { token: 'punctuation.definition.comment.io', regex: '//', push: [ { token: 'comment.line.double-slash.io', regex: '$', next: 'pop' }, { defaultToken: 'comment.line.double-slash.io' } ] }, { token: 'punctuation.definition.comment.io', regex: '#', push: [ { token: 'comment.line.number-sign.io', regex: '$', next: 'pop' }, { defaultToken: 'comment.line.number-sign.io' } ] }, { token: 'variable.language.io', regex: '\\b(?:self|sender|target|proto|protos|parent)\\b', comment: 'I wonder if some of this isn\'t variable.other.language? --Allan; scoping this as variable.language to match Objective-C\'s handling of \'self\', which is inconsistent with C++\'s handling of \'this\' but perhaps intentionally so -- Rob' }, { token: 'keyword.operator.io', regex: '<=|>=|=|:=|\\*|\\||\\|\\||\\+|-|/|&|&&|>|<|\\?|@|@@|\\b(?:and|or)\\b' }, { token: 'constant.other.io', regex: '\\bGL[\\w_]+\\b' }, { token: 'support.class.io', regex: '\\b[A-Z](?:\\w+)?\\b' }, { token: 'support.function.io', regex: '\\b(?:clone|call|init|method|list|vector|block|\\w+(?=\\s*\\())\\b' }, { token: 'support.function.open-gl.io', regex: '\\bgl(?:u|ut)?[A-Z]\\w+\\b' }, { token: 'punctuation.definition.string.begin.io', regex: '"""', push: [ { token: 'punctuation.definition.string.end.io', regex: '"""', next: 'pop' }, { token: 'constant.character.escape.io', regex: '\\\\.' }, { defaultToken: 'string.quoted.triple.io' } ] }, { token: 'punctuation.definition.string.begin.io', regex: '"', push: [ { token: 'punctuation.definition.string.end.io', regex: '"', next: 'pop' }, { token: 'constant.character.escape.io', regex: '\\\\.' }, { defaultToken: 'string.quoted.double.io' } ] }, { token: 'constant.numeric.io', regex: '\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\b' }, { token: 'variable.other.global.io', regex: 'Lobby\\b' }, { token: 'constant.language.io', regex: '\\b(?:TRUE|true|FALSE|false|NULL|null|Null|Nil|nil|YES|NO)\\b' } ] } this.normalizeRules(); }; IoHighlightRules.metaData = { fileTypes: [ 'io' ], keyEquivalent: '^~I', name: 'Io', scopeName: 'source.io' } oop.inherits(IoHighlightRules, TextHighlightRules); exports.IoHighlightRules = IoHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/io",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/io_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var IoHighlightRules = require("./io_highlight_rules").IoHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = IoHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/io" }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-jack.js ================================================ ace.define("ace/mode/jack_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JackHighlightRules = function() { this.$rules = { "start" : [ { token : "string", regex : '"', next : "string2" }, { token : "string", regex : "'", next : "string1" }, { token : "constant.numeric", // hex regex: "-?0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "(?:0|[-+]?[1-9][0-9]*)\\b" }, { token : "constant.binary", regex : "<[0-9A-Fa-f][0-9A-Fa-f](\\s+[0-9A-Fa-f][0-9A-Fa-f])*>" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : "constant.language.null", regex : "null\\b" }, { token : "storage.type", regex: "(?:Integer|Boolean|Null|String|Buffer|Tuple|List|Object|Function|Coroutine|Form)\\b" }, { token : "keyword", regex : "(?:return|abort|vars|for|delete|in|is|escape|exec|split|and|if|elif|else|while)\\b" }, { token : "language.builtin", regex : "(?:lines|source|parse|read-stream|interval|substr|parseint|write|print|range|rand|inspect|bind|i-values|i-pairs|i-map|i-filter|i-chunk|i-all\\?|i-any\\?|i-collect|i-zip|i-merge|i-each)\\b" }, { token : "comment", regex : "--.*$" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "storage.form", regex : "@[a-z]+" }, { token : "constant.other.symbol", regex : ':+[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?' }, { token : "variable", regex : '[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?' }, { token : "keyword.operator", regex : "\\|\\||\\^\\^|&&|!=|==|<=|<|>=|>|\\+|-|\\*|\\/|\\^|\\%|\\#|\\!" }, { token : "text", regex : "\\s+" } ], "string1" : [ { token : "constant.language.escape", regex : /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['"\\\/bfnrt])/ }, { token : "string", regex : "[^'\\\\]+" }, { token : "string", regex : "'", next : "start" }, { token : "string", regex : "", next : "start" } ], "string2" : [ { token : "constant.language.escape", regex : /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['"\\\/bfnrt])/ }, { token : "string", regex : '[^"\\\\]+' }, { token : "string", regex : '"', next : "start" }, { token : "string", regex : "", next : "start" } ] }; }; oop.inherits(JackHighlightRules, TextHighlightRules); exports.JackHighlightRules = JackHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/jack",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/jack_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var HighlightRules = require("./jack_highlight_rules").JackHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = HighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "--"; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/jack"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-jade.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/markdown_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules","ace/mode/html_highlight_rules","ace/mode/css_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var escaped = function(ch) { return "(?:[^" + lang.escapeRegExp(ch) + "\\\\]|\\\\.)*"; } function github_embed(tag, prefix) { return { // Github style block token : "support.function", regex : "^\\s*```" + tag + "\\s*$", push : prefix + "start" }; } var MarkdownHighlightRules = function() { HtmlHighlightRules.call(this); this.$rules["start"].unshift({ token : "empty_line", regex : '^$', next: "allowBlock" }, { // h1 token: "markup.heading.1", regex: "^=+(?=\\s*$)" }, { // h2 token: "markup.heading.2", regex: "^\\-+(?=\\s*$)" }, { token : function(value) { return "markup.heading." + value.length; }, regex : /^#{1,6}(?=\s*[^ #]|\s+#.)/, next : "header" }, github_embed("(?:javascript|js)", "jscode-"), github_embed("xml", "xmlcode-"), github_embed("html", "htmlcode-"), github_embed("css", "csscode-"), { // Github style block token : "support.function", regex : "^\\s*```\\s*\\S*(?:{.*?\\})?\\s*$", next : "githubblock" }, { // block quote token : "string.blockquote", regex : "^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+", next : "blockquote" }, { // HR * - _ token : "constant", regex : "^ {0,2}(?:(?: ?\\* ?){3,}|(?: ?\\- ?){3,}|(?: ?\\_ ?){3,})\\s*$", next: "allowBlock" }, { // list token : "markup.list", regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+", next : "listblock-start" }, { include : "basic" }); this.addRules({ "basic" : [{ token : "constant.language.escape", regex : /\\[\\`*_{}\[\]()#+\-.!]/ }, { // code span ` token : "support.function", regex : "(`+)(.*?[^`])(\\1)" }, { // reference token : ["text", "constant", "text", "url", "string", "text"], regex : "^([ ]{0,3}\\[)([^\\]]+)(\\]:\\s*)([^ ]+)(\\s*(?:[\"][^\"]+[\"])?(\\s*))$" }, { // link by reference token : ["text", "string", "text", "constant", "text"], regex : "(\\[)(" + escaped("]") + ")(\\]\s*\\[)("+ escaped("]") + ")(\\])" }, { // link by url token : ["text", "string", "text", "markup.underline", "string", "text"], regex : "(\\[)(" + // [ escaped("]") + // link text ")(\\]\\()"+ // ]( '((?:[^\\)\\s\\\\]|\\\\.|\\s(?=[^"]))*)' + // href '(\\s*"' + escaped('"') + '"\\s*)?' + // "title" "(\\))" // ) }, { // strong ** __ token : "string.strong", regex : "([*]{2}|[_]{2}(?=\\S))(.*?\\S[*_]*)(\\1)" }, { // emphasis * _ token : "string.emphasis", regex : "([*]|[_](?=\\S))(.*?\\S[*_]*)(\\1)" }, { // token : ["text", "url", "text"], regex : "(<)("+ "(?:https?|ftp|dict):[^'\">\\s]+"+ "|"+ "(?:mailto:)?[-.\\w]+\\@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+"+ ")(>)" }], "allowBlock": [ {token : "support.function", regex : "^ {4}.+", next : "allowBlock"}, {token : "empty", regex : "", next : "start"} ], "header" : [{ regex: "$", next : "start" }, { include: "basic" }, { defaultToken : "heading" } ], "listblock-start" : [{ token : "support.variable", regex : /(?:\[[ x]\])?/, next : "listblock" }], "listblock" : [ { // Lists only escape on completely blank lines. token : "empty_line", regex : "^$", next : "start" }, { // list token : "markup.list", regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+", next : "listblock-start" }, { include : "basic", noEscape: true }, { // Github style block token : "support.function", regex : "^\\s*```\\s*[a-zA-Z]*(?:{.*?\\})?\\s*$", next : "githubblock" }, { defaultToken : "list" //do not use markup.list to allow stling leading `*` differntly } ], "blockquote" : [ { // Blockquotes only escape on blank lines. token : "empty_line", regex : "^\\s*$", next : "start" }, { // block quote token : "string.blockquote", regex : "^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+", next : "blockquote" }, { include : "basic", noEscape: true }, { defaultToken : "string.blockquote" } ], "githubblock" : [ { token : "support.function", regex : "^\\s*```", next : "start" }, { token : "support.function", regex : ".+" } ] }); this.embedRules(JavaScriptHighlightRules, "jscode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.embedRules(HtmlHighlightRules, "htmlcode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.embedRules(CssHighlightRules, "csscode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.embedRules(XmlHighlightRules, "xmlcode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.normalizeRules(); }; oop.inherits(MarkdownHighlightRules, TextHighlightRules); exports.MarkdownHighlightRules = MarkdownHighlightRules; }); ace.define("ace/mode/scss_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ScssHighlightRules = function() { var properties = lang.arrayToMap( (function () { var browserPrefix = ("-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-").split("|"); var prefixProperties = ("appearance|background-clip|background-inline-policy|background-origin|" + "background-size|binding|border-bottom-colors|border-left-colors|" + "border-right-colors|border-top-colors|border-end|border-end-color|" + "border-end-style|border-end-width|border-image|border-start|" + "border-start-color|border-start-style|border-start-width|box-align|" + "box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|" + "box-pack|box-sizing|column-count|column-gap|column-width|column-rule|" + "column-rule-width|column-rule-style|column-rule-color|float-edge|" + "font-feature-settings|font-language-override|force-broken-image-icon|" + "image-region|margin-end|margin-start|opacity|outline|outline-color|" + "outline-offset|outline-radius|outline-radius-bottomleft|" + "outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|" + "outline-style|outline-width|padding-end|padding-start|stack-sizing|" + "tab-size|text-blink|text-decoration-color|text-decoration-line|" + "text-decoration-style|transform|transform-origin|transition|" + "transition-delay|transition-duration|transition-property|" + "transition-timing-function|user-focus|user-input|user-modify|user-select|" + "window-shadow|border-radius").split("|"); var properties = ("azimuth|background-attachment|background-color|background-image|" + "background-position|background-repeat|background|border-bottom-color|" + "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" + "border-color|border-left-color|border-left-style|border-left-width|" + "border-left|border-right-color|border-right-style|border-right-width|" + "border-right|border-spacing|border-style|border-top-color|" + "border-top-style|border-top-width|border-top|border-width|border|bottom|" + "box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|" + "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" + "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" + "font-stretch|font-style|font-variant|font-weight|font|height|left|" + "letter-spacing|line-height|list-style-image|list-style-position|" + "list-style-type|list-style|margin-bottom|margin-left|margin-right|" + "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" + "min-width|opacity|orphans|outline-color|" + "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" + "padding-left|padding-right|padding-top|padding|page-break-after|" + "page-break-before|page-break-inside|page|pause-after|pause-before|" + "pause|pitch-range|pitch|play-during|position|quotes|richness|right|" + "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" + "stress|table-layout|text-align|text-decoration|text-indent|" + "text-shadow|text-transform|top|unicode-bidi|vertical-align|" + "visibility|voice-family|volume|white-space|widows|width|word-spacing|" + "z-index").split("|"); var ret = []; for (var i=0, ln=browserPrefix.length; i|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" }, { caseInsensitive: true } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { token : "string", regex : '.+' } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { token : "string", regex : '.+' } ] }; }; oop.inherits(ScssHighlightRules, TextHighlightRules); exports.ScssHighlightRules = ScssHighlightRules; }); ace.define("ace/mode/less_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var LessHighlightRules = function() { var properties = lang.arrayToMap( (function () { var browserPrefix = ("-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-").split("|"); var prefixProperties = ("appearance|background-clip|background-inline-policy|background-origin|" + "background-size|binding|border-bottom-colors|border-left-colors|" + "border-right-colors|border-top-colors|border-end|border-end-color|" + "border-end-style|border-end-width|border-image|border-start|" + "border-start-color|border-start-style|border-start-width|box-align|" + "box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|" + "box-pack|box-sizing|column-count|column-gap|column-width|column-rule|" + "column-rule-width|column-rule-style|column-rule-color|float-edge|" + "font-feature-settings|font-language-override|force-broken-image-icon|" + "image-region|margin-end|margin-start|opacity|outline|outline-color|" + "outline-offset|outline-radius|outline-radius-bottomleft|" + "outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|" + "outline-style|outline-width|padding-end|padding-start|stack-sizing|" + "tab-size|text-blink|text-decoration-color|text-decoration-line|" + "text-decoration-style|transform|transform-origin|transition|" + "transition-delay|transition-duration|transition-property|" + "transition-timing-function|user-focus|user-input|user-modify|user-select|" + "window-shadow|border-radius").split("|"); var properties = ("azimuth|background-attachment|background-color|background-image|" + "background-position|background-repeat|background|border-bottom-color|" + "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" + "border-color|border-left-color|border-left-style|border-left-width|" + "border-left|border-right-color|border-right-style|border-right-width|" + "border-right|border-spacing|border-style|border-top-color|" + "border-top-style|border-top-width|border-top|border-width|border|" + "bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|" + "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" + "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" + "font-stretch|font-style|font-variant|font-weight|font|height|left|" + "letter-spacing|line-height|list-style-image|list-style-position|" + "list-style-type|list-style|margin-bottom|margin-left|margin-right|" + "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" + "min-width|opacity|orphans|outline-color|" + "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" + "padding-left|padding-right|padding-top|padding|page-break-after|" + "page-break-before|page-break-inside|page|pause-after|pause-before|" + "pause|pitch-range|pitch|play-during|position|quotes|richness|right|" + "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" + "stress|table-layout|text-align|text-decoration|text-indent|" + "text-shadow|text-transform|top|unicode-bidi|vertical-align|" + "visibility|voice-family|volume|white-space|widows|width|word-spacing|" + "z-index").split("|"); var ret = []; for (var i=0, ln=browserPrefix.length; i|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" }, { caseInsensitive: true } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ] }; }; oop.inherits(LessHighlightRules, TextHighlightRules); exports.LessHighlightRules = LessHighlightRules; }); ace.define("ace/mode/coffee_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; oop.inherits(CoffeeHighlightRules, TextHighlightRules); function CoffeeHighlightRules() { var identifier = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*"; var keywords = ( "this|throw|then|try|typeof|super|switch|return|break|by|continue|" + "catch|class|in|instanceof|is|isnt|if|else|extends|for|own|" + "finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|" + "or|on|unless|until|and|yes" ); var langConstant = ( "true|false|null|undefined|NaN|Infinity" ); var illegal = ( "case|const|default|function|var|void|with|enum|export|implements|" + "interface|let|package|private|protected|public|static|yield|" + "__hasProp|slice|bind|indexOf" ); var supportClass = ( "Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + "SyntaxError|TypeError|URIError|" + "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray" ); var supportFunction = ( "Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|" + "encodeURIComponent|decodeURI|decodeURIComponent|String|" ); var variableLanguage = ( "window|arguments|prototype|document" ); var keywordMapper = this.createKeywordMapper({ "keyword": keywords, "constant.language": langConstant, "invalid.illegal": illegal, "language.support.class": supportClass, "language.support.function": supportFunction, "variable.language": variableLanguage }, "identifier"); var functionRule = { token: ["paren.lparen", "variable.parameter", "paren.rparen", "text", "storage.type"], regex: /(?:(\()((?:"[^")]*?"|'[^')]*?'|\/[^\/)]*?\/|[^()\"'\/])*?)(\))(\s*))?([\-=]>)/.source }; var stringEscape = /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/; this.$rules = { start : [ { token : "constant.numeric", regex : "(?:0x[\\da-fA-F]+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:[eE][+-]?\\d+)?)" }, { stateName: "qdoc", token : "string", regex : "'''", next : [ {token : "string", regex : "'''", next : "start"}, {token : "constant.language.escape", regex : stringEscape}, {defaultToken: "string"} ] }, { stateName: "qqdoc", token : "string", regex : '"""', next : [ {token : "string", regex : '"""', next : "start"}, {token : "paren.string", regex : '#{', push : "start"}, {token : "constant.language.escape", regex : stringEscape}, {defaultToken: "string"} ] }, { stateName: "qstring", token : "string", regex : "'", next : [ {token : "string", regex : "'", next : "start"}, {token : "constant.language.escape", regex : stringEscape}, {defaultToken: "string"} ] }, { stateName: "qqstring", token : "string.start", regex : '"', next : [ {token : "string.end", regex : '"', next : "start"}, {token : "paren.string", regex : '#{', push : "start"}, {token : "constant.language.escape", regex : stringEscape}, {defaultToken: "string"} ] }, { stateName: "js", token : "string", regex : "`", next : [ {token : "string", regex : "`", next : "start"}, {token : "constant.language.escape", regex : stringEscape}, {defaultToken: "string"} ] }, { regex: "[{}]", onMatch: function(val, state, stack) { this.next = ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift() || ""; if (this.next.indexOf("string") != -1) return "paren.string"; } return "paren"; } }, { token : "string.regex", regex : "///", next : "heregex" }, { token : "string.regex", regex : /(?:\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)(?:[imgy]{0,4})(?!\w)/ }, { token : "comment", regex : "###(?!#)", next : "comment" }, { token : "comment", regex : "#.*" }, { token : ["punctuation.operator", "text", "identifier"], regex : "(\\.)(\\s*)(" + illegal + ")" }, { token : "punctuation.operator", regex : "\\." }, { token : ["keyword", "text", "language.support.class", "text", "keyword", "text", "language.support.class"], regex : "(class)(\\s+)(" + identifier + ")(?:(\\s+)(extends)(\\s+)(" + identifier + "))?" }, { token : ["entity.name.function", "text", "keyword.operator", "text"].concat(functionRule.token), regex : "(" + identifier + ")(\\s*)([=:])(\\s*)" + functionRule.regex }, functionRule, { token : "variable", regex : "@(?:" + identifier + ")?" }, { token: keywordMapper, regex : identifier }, { token : "punctuation.operator", regex : "\\,|\\." }, { token : "storage.type", regex : "[\\-=]>" }, { token : "keyword.operator", regex : "(?:[-+*/%<>&|^!?=]=|>>>=?|\\-\\-|\\+\\+|::|&&=|\\|\\|=|<<=|>>=|\\?\\.|\\.{2,3}|[!*+-=><])" }, { token : "paren.lparen", regex : "[({[]" }, { token : "paren.rparen", regex : "[\\]})]" }, { token : "text", regex : "\\s+" }], heregex : [{ token : "string.regex", regex : '.*?///[imgy]{0,4}', next : "start" }, { token : "comment.regex", regex : "\\s+(?:#.*)?" }, { token : "string.regex", regex : "\\S+" }], comment : [{ token : "comment", regex : '###', next : "start" }, { defaultToken : "comment" }] }; this.normalizeRules(); } exports.CoffeeHighlightRules = CoffeeHighlightRules; }); ace.define("ace/mode/jade_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/markdown_highlight_rules","ace/mode/scss_highlight_rules","ace/mode/less_highlight_rules","ace/mode/coffee_highlight_rules","ace/mode/javascript_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var MarkdownHighlightRules = require("./markdown_highlight_rules").MarkdownHighlightRules; var SassHighlightRules = require("./scss_highlight_rules").ScssHighlightRules; var LessHighlightRules = require("./less_highlight_rules").LessHighlightRules; var CoffeeHighlightRules = require("./coffee_highlight_rules").CoffeeHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; function mixin_embed(tag, prefix) { return { token : "entity.name.function.jade", regex : "^\\s*\\:" + tag, next : prefix + "start" }; } var JadeHighlightRules = function() { var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "start": [ { token: "keyword.control.import.include.jade", regex: "\\s*\\binclude\\b" }, { token: "keyword.other.doctype.jade", regex: "^!!!\\s*(?:[a-zA-Z0-9-_]+)?" }, { token : "punctuation.section.comment", regex : "^\\s*\/\/(?:\\s*[^-\\s]|\\s+\\S)(?:.*$)" }, { onMatch: function(value, currentState, stack) { stack.unshift(this.next, value.length - 2, currentState); return "comment"; }, regex: /^\s*\/\//, next: "comment_block" }, mixin_embed("markdown", "markdown-"), mixin_embed("sass", "sass-"), mixin_embed("less", "less-"), mixin_embed("coffee", "coffee-"), { token: [ "storage.type.function.jade", "entity.name.function.jade", "punctuation.definition.parameters.begin.jade", "variable.parameter.function.jade", "punctuation.definition.parameters.end.jade" ], regex: "^(\\s*mixin)( [\\w\\-]+)(\\s*\\()(.*?)(\\))" }, { token: [ "storage.type.function.jade", "entity.name.function.jade"], regex: "^(\\s*mixin)( [\\w\\-]+)" }, { token: "source.js.embedded.jade", regex: "^\\s*(?:-|=|!=)", next: "js-start" }, { token: "string.interpolated.jade", regex: "[#!]\\{[^\\}]+\\}" }, { token: "meta.tag.any.jade", regex: /^\s*(?!\w+\:)(?:[\w]+|(?=\.|#)])/, next: "tag_single" }, { token: "suport.type.attribute.id.jade", regex: "#\\w+" }, { token: "suport.type.attribute.class.jade", regex: "\\.\\w+" }, { token: "punctuation", regex: "\\s*(?:\\()", next: "tag_attributes" } ], "comment_block": [ {regex: /^\s*/, onMatch: function(value, currentState, stack) { if (value.length <= stack[1]) { stack.shift(); stack.shift(); this.next = stack.shift(); return "text"; } else { this.next = ""; return "comment"; } }, next: "start"}, {defaultToken: "comment"} ], "tag_single": [ { token: "entity.other.attribute-name.class.jade", regex: "\\.[\\w-]+" }, { token: "entity.other.attribute-name.id.jade", regex: "#[\\w-]+" }, { token: ["text", "punctuation"], regex: "($)|((?!\\.|#|=|-))", next: "start" } ], "tag_attributes": [ { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token: "entity.other.attribute-name.jade", regex: "\\b[a-zA-Z\\-:]+" }, { token: ["entity.other.attribute-name.jade", "punctuation"], regex: "\\b([a-zA-Z:\\.-]+)(=)", next: "attribute_strings" }, { token: "punctuation", regex: "\\)", next: "start" } ], "attribute_strings": [ { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" } ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : '[^"\\\\]+' }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "tag_attributes" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "[^'\\\\]+" }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "tag_attributes" } ] }; this.embedRules(JavaScriptHighlightRules, "js-", [{ token: "text", regex: ".$", next: "start" }]); }; oop.inherits(JadeHighlightRules, TextHighlightRules); exports.JadeHighlightRules = JadeHighlightRules; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/jade",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/jade_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JadeHighlightRules = require("./jade_highlight_rules").JadeHighlightRules; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = JadeHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.$id = "ace/mode/jade"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-java.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/java_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaHighlightRules = function() { var keywords = ( "abstract|continue|for|new|switch|" + "assert|default|goto|package|synchronized|" + "boolean|do|if|private|this|" + "break|double|implements|protected|throw|" + "byte|else|import|public|throws|" + "case|enum|instanceof|return|transient|" + "catch|extends|int|short|try|" + "char|final|interface|static|void|" + "class|finally|long|strictfp|volatile|" + "const|float|native|super|while" ); var buildinConstants = ("null|Infinity|NaN|undefined"); var langClasses = ( "AbstractMethodError|AssertionError|ClassCircularityError|"+ "ClassFormatError|Deprecated|EnumConstantNotPresentException|"+ "ExceptionInInitializerError|IllegalAccessError|"+ "IllegalThreadStateException|InstantiationError|InternalError|"+ "NegativeArraySizeException|NoSuchFieldError|Override|Process|"+ "ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|"+ "SuppressWarnings|TypeNotPresentException|UnknownError|"+ "UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|"+ "InstantiationException|IndexOutOfBoundsException|"+ "ArrayIndexOutOfBoundsException|CloneNotSupportedException|"+ "NoSuchFieldException|IllegalArgumentException|NumberFormatException|"+ "SecurityException|Void|InheritableThreadLocal|IllegalStateException|"+ "InterruptedException|NoSuchMethodException|IllegalAccessException|"+ "UnsupportedOperationException|Enum|StrictMath|Package|Compiler|"+ "Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|"+ "NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|"+ "NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|"+ "Character|Boolean|StackTraceElement|Appendable|StringBuffer|"+ "Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|"+ "StackOverflowError|OutOfMemoryError|VirtualMachineError|"+ "ArrayStoreException|ClassCastException|LinkageError|"+ "NoClassDefFoundError|ClassNotFoundException|RuntimeException|"+ "Exception|ThreadDeath|Error|Throwable|System|ClassLoader|"+ "Cloneable|Class|CharSequence|Comparable|String|Object" ); var keywordMapper = this.createKeywordMapper({ "variable.language": "this", "keyword": keywords, "constant.language": buildinConstants, "support.function": langClasses }, "identifier"); this.$rules = { "start" : [ { token : "comment", regex : "\\/\\/.*$" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" }, { token : "lparen", regex : "[[({]" }, { token : "rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(JavaHighlightRules, TextHighlightRules); exports.JavaHighlightRules = JavaHighlightRules; }); ace.define("ace/mode/java",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/mode/java_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var JavaScriptMode = require("./javascript").Mode; var JavaHighlightRules = require("./java_highlight_rules").JavaHighlightRules; var Mode = function() { JavaScriptMode.call(this); this.HighlightRules = JavaHighlightRules; }; oop.inherits(Mode, JavaScriptMode); (function() { this.createWorker = function(session) { return null; }; this.$id = "ace/mode/java"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-javascript.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-json.js ================================================ ace.define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JsonHighlightRules = function() { this.$rules = { "start" : [ { token : "variable", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)' }, { token : "string", // single line regex : '"', next : "string" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : "invalid.illegal", // single quoted strings are not allowed regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "invalid.illegal", // comments are not allowed regex : "\\/\\/.*$" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "string" : [ { token : "constant.language.escape", regex : /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/ }, { token : "string", regex : '[^"\\\\]+' }, { token : "string", regex : '"', next : "start" }, { token : "string", regex : "", next : "start" } ] }; }; oop.inherits(JsonHighlightRules, TextHighlightRules); exports.JsonHighlightRules = JsonHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/json",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var HighlightRules = require("./json_highlight_rules").JsonHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var WorkerClient = require("../worker/worker_client").WorkerClient; var Mode = function() { this.HighlightRules = HighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/json_worker", "JsonWorker"); worker.attachToDocument(session.getDocument()); worker.on("error", function(e) { session.setAnnotations([e.data]); }); worker.on("ok", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/json"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-jsoniq.js ================================================ ace.define("ace/mode/xquery/jsoniq_lexer",["require","exports","module"], function(require, exports, module) { module.exports = (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 0 ? JSONiqTokenizer.TOKEN[o] : null; }; this.getExpectedTokenSet = function(e) { var expected; if (e.getExpected() < 0) { expected = JSONiqTokenizer.getTokenSet(- e.getState()); } else { expected = [JSONiqTokenizer.TOKEN[e.getExpected()]]; } return expected; }; this.getErrorMessage = function(e) { var tokenSet = this.getExpectedTokenSet(e); var found = this.getOffendingToken(e); var prefix = input.substring(0, e.getBegin()); var lines = prefix.split("\n"); var line = lines.length; var column = lines[line - 1].length + 1; var size = e.getEnd() - e.getBegin(); return e.getMessage() + (found == null ? "" : ", found " + found) + "\nwhile expecting " + (tokenSet.length == 1 ? tokenSet[0] : ("[" + tokenSet.join(", ") + "]")) + "\n" + (size == 0 || found != null ? "" : "after successfully scanning " + size + " characters beginning ") + "at line " + line + ", column " + column + ":\n..." + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64)) + "..."; }; this.parse_start = function() { eventHandler.startNonterminal("start", e0); lookahead1W(14); // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest | switch (l1) { case 58: // '' | '=' | '>' switch (l1) { case 61: // '>' shift(61); // '>' break; case 53: // '/>' shift(53); // '/>' break; case 29: // QName shift(29); // QName break; case 60: // '=' shift(60); // '=' break; case 37: // '"' shift(37); // '"' break; case 41: // "'" shift(41); // "'" break; default: shift(35); // EOF } eventHandler.endNonterminal("StartTag", e0); }; this.parse_TagContent = function() { eventHandler.startNonterminal("TagContent", e0); lookahead1(11); // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF | switch (l1) { case 25: // ElementContentChar shift(25); // ElementContentChar break; case 9: // Tag shift(9); // Tag break; case 10: // EndTag shift(10); // EndTag break; case 58: // '' switch (l1) { case 14: // CDataSectionContents shift(14); // CDataSectionContents break; case 67: // ']]>' shift(67); // ']]>' break; default: shift(35); // EOF } eventHandler.endNonterminal("CData", e0); }; this.parse_XMLComment = function() { eventHandler.startNonterminal("XMLComment", e0); lookahead1(0); // DirCommentContents | EOF | '-->' switch (l1) { case 12: // DirCommentContents shift(12); // DirCommentContents break; case 50: // '-->' shift(50); // '-->' break; default: shift(35); // EOF } eventHandler.endNonterminal("XMLComment", e0); }; this.parse_PI = function() { eventHandler.startNonterminal("PI", e0); lookahead1(3); // DirPIContents | EOF | '?' | '?>' switch (l1) { case 13: // DirPIContents shift(13); // DirPIContents break; case 62: // '?' shift(62); // '?' break; case 63: // '?>' shift(63); // '?>' break; default: shift(35); // EOF } eventHandler.endNonterminal("PI", e0); }; this.parse_Pragma = function() { eventHandler.startNonterminal("Pragma", e0); lookahead1(2); // PragmaContents | EOF | '#' | '#)' switch (l1) { case 11: // PragmaContents shift(11); // PragmaContents break; case 38: // '#' shift(38); // '#' break; case 39: // '#)' shift(39); // '#)' break; default: shift(35); // EOF } eventHandler.endNonterminal("Pragma", e0); }; this.parse_Comment = function() { eventHandler.startNonterminal("Comment", e0); lookahead1(4); // CommentContents | EOF | '(:' | ':)' switch (l1) { case 55: // ':)' shift(55); // ':)' break; case 44: // '(:' shift(44); // '(:' break; case 32: // CommentContents shift(32); // CommentContents break; default: shift(35); // EOF } eventHandler.endNonterminal("Comment", e0); }; this.parse_CommentDoc = function() { eventHandler.startNonterminal("CommentDoc", e0); lookahead1(6); // DocTag | DocCommentContents | EOF | '(:' | ':)' switch (l1) { case 33: // DocTag shift(33); // DocTag break; case 34: // DocCommentContents shift(34); // DocCommentContents break; case 55: // ':)' shift(55); // ':)' break; case 44: // '(:' shift(44); // '(:' break; default: shift(35); // EOF } eventHandler.endNonterminal("CommentDoc", e0); }; this.parse_QuotString = function() { eventHandler.startNonterminal("QuotString", e0); lookahead1(5); // JSONChar | JSONCharRef | JSONPredefinedCharRef | EOF | '"' switch (l1) { case 3: // JSONPredefinedCharRef shift(3); // JSONPredefinedCharRef break; case 2: // JSONCharRef shift(2); // JSONCharRef break; case 1: // JSONChar shift(1); // JSONChar break; case 37: // '"' shift(37); // '"' break; default: shift(35); // EOF } eventHandler.endNonterminal("QuotString", e0); }; this.parse_AposString = function() { eventHandler.startNonterminal("AposString", e0); lookahead1(7); // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | "'" switch (l1) { case 21: // PredefinedEntityRef shift(21); // PredefinedEntityRef break; case 31: // CharRef shift(31); // CharRef break; case 23: // EscapeApos shift(23); // EscapeApos break; case 24: // AposChar shift(24); // AposChar break; case 41: // "'" shift(41); // "'" break; default: shift(35); // EOF } eventHandler.endNonterminal("AposString", e0); }; this.parse_Prefix = function() { eventHandler.startNonterminal("Prefix", e0); lookahead1W(13); // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | whitespace(); parse_NCName(); eventHandler.endNonterminal("Prefix", e0); }; this.parse__EQName = function() { eventHandler.startNonterminal("_EQName", e0); lookahead1W(12); // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | whitespace(); parse_EQName(); eventHandler.endNonterminal("_EQName", e0); }; function parse_EQName() { eventHandler.startNonterminal("EQName", e0); switch (l1) { case 80: // 'attribute' shift(80); // 'attribute' break; case 94: // 'comment' shift(94); // 'comment' break; case 118: // 'document-node' shift(118); // 'document-node' break; case 119: // 'element' shift(119); // 'element' break; case 122: // 'empty-sequence' shift(122); // 'empty-sequence' break; case 143: // 'function' shift(143); // 'function' break; case 150: // 'if' shift(150); // 'if' break; case 163: // 'item' shift(163); // 'item' break; case 183: // 'namespace-node' shift(183); // 'namespace-node' break; case 189: // 'node' shift(189); // 'node' break; case 214: // 'processing-instruction' shift(214); // 'processing-instruction' break; case 224: // 'schema-attribute' shift(224); // 'schema-attribute' break; case 225: // 'schema-element' shift(225); // 'schema-element' break; case 241: // 'switch' shift(241); // 'switch' break; case 242: // 'text' shift(242); // 'text' break; case 251: // 'typeswitch' shift(251); // 'typeswitch' break; default: parse_FunctionName(); } eventHandler.endNonterminal("EQName", e0); } function parse_FunctionName() { eventHandler.startNonterminal("FunctionName", e0); switch (l1) { case 17: // EQName^Token shift(17); // EQName^Token break; case 68: // 'after' shift(68); // 'after' break; case 71: // 'ancestor' shift(71); // 'ancestor' break; case 72: // 'ancestor-or-self' shift(72); // 'ancestor-or-self' break; case 73: // 'and' shift(73); // 'and' break; case 77: // 'as' shift(77); // 'as' break; case 78: // 'ascending' shift(78); // 'ascending' break; case 82: // 'before' shift(82); // 'before' break; case 86: // 'case' shift(86); // 'case' break; case 87: // 'cast' shift(87); // 'cast' break; case 88: // 'castable' shift(88); // 'castable' break; case 91: // 'child' shift(91); // 'child' break; case 92: // 'collation' shift(92); // 'collation' break; case 101: // 'copy' shift(101); // 'copy' break; case 103: // 'count' shift(103); // 'count' break; case 106: // 'declare' shift(106); // 'declare' break; case 107: // 'default' shift(107); // 'default' break; case 108: // 'delete' shift(108); // 'delete' break; case 109: // 'descendant' shift(109); // 'descendant' break; case 110: // 'descendant-or-self' shift(110); // 'descendant-or-self' break; case 111: // 'descending' shift(111); // 'descending' break; case 116: // 'div' shift(116); // 'div' break; case 117: // 'document' shift(117); // 'document' break; case 120: // 'else' shift(120); // 'else' break; case 121: // 'empty' shift(121); // 'empty' break; case 124: // 'end' shift(124); // 'end' break; case 126: // 'eq' shift(126); // 'eq' break; case 127: // 'every' shift(127); // 'every' break; case 129: // 'except' shift(129); // 'except' break; case 132: // 'first' shift(132); // 'first' break; case 133: // 'following' shift(133); // 'following' break; case 134: // 'following-sibling' shift(134); // 'following-sibling' break; case 135: // 'for' shift(135); // 'for' break; case 144: // 'ge' shift(144); // 'ge' break; case 146: // 'group' shift(146); // 'group' break; case 148: // 'gt' shift(148); // 'gt' break; case 149: // 'idiv' shift(149); // 'idiv' break; case 151: // 'import' shift(151); // 'import' break; case 157: // 'insert' shift(157); // 'insert' break; case 158: // 'instance' shift(158); // 'instance' break; case 160: // 'intersect' shift(160); // 'intersect' break; case 161: // 'into' shift(161); // 'into' break; case 162: // 'is' shift(162); // 'is' break; case 168: // 'last' shift(168); // 'last' break; case 170: // 'le' shift(170); // 'le' break; case 172: // 'let' shift(172); // 'let' break; case 176: // 'lt' shift(176); // 'lt' break; case 178: // 'mod' shift(178); // 'mod' break; case 179: // 'modify' shift(179); // 'modify' break; case 180: // 'module' shift(180); // 'module' break; case 182: // 'namespace' shift(182); // 'namespace' break; case 184: // 'ne' shift(184); // 'ne' break; case 196: // 'only' shift(196); // 'only' break; case 198: // 'or' shift(198); // 'or' break; case 199: // 'order' shift(199); // 'order' break; case 200: // 'ordered' shift(200); // 'ordered' break; case 204: // 'parent' shift(204); // 'parent' break; case 210: // 'preceding' shift(210); // 'preceding' break; case 211: // 'preceding-sibling' shift(211); // 'preceding-sibling' break; case 216: // 'rename' shift(216); // 'rename' break; case 217: // 'replace' shift(217); // 'replace' break; case 218: // 'return' shift(218); // 'return' break; case 222: // 'satisfies' shift(222); // 'satisfies' break; case 227: // 'self' shift(227); // 'self' break; case 233: // 'some' shift(233); // 'some' break; case 234: // 'stable' shift(234); // 'stable' break; case 235: // 'start' shift(235); // 'start' break; case 246: // 'to' shift(246); // 'to' break; case 247: // 'treat' shift(247); // 'treat' break; case 248: // 'try' shift(248); // 'try' break; case 252: // 'union' shift(252); // 'union' break; case 254: // 'unordered' shift(254); // 'unordered' break; case 258: // 'validate' shift(258); // 'validate' break; case 264: // 'where' shift(264); // 'where' break; case 268: // 'with' shift(268); // 'with' break; case 272: // 'xquery' shift(272); // 'xquery' break; case 70: // 'allowing' shift(70); // 'allowing' break; case 79: // 'at' shift(79); // 'at' break; case 81: // 'base-uri' shift(81); // 'base-uri' break; case 83: // 'boundary-space' shift(83); // 'boundary-space' break; case 84: // 'break' shift(84); // 'break' break; case 89: // 'catch' shift(89); // 'catch' break; case 96: // 'construction' shift(96); // 'construction' break; case 99: // 'context' shift(99); // 'context' break; case 100: // 'continue' shift(100); // 'continue' break; case 102: // 'copy-namespaces' shift(102); // 'copy-namespaces' break; case 104: // 'decimal-format' shift(104); // 'decimal-format' break; case 123: // 'encoding' shift(123); // 'encoding' break; case 130: // 'exit' shift(130); // 'exit' break; case 131: // 'external' shift(131); // 'external' break; case 139: // 'ft-option' shift(139); // 'ft-option' break; case 152: // 'in' shift(152); // 'in' break; case 153: // 'index' shift(153); // 'index' break; case 159: // 'integrity' shift(159); // 'integrity' break; case 169: // 'lax' shift(169); // 'lax' break; case 190: // 'nodes' shift(190); // 'nodes' break; case 197: // 'option' shift(197); // 'option' break; case 201: // 'ordering' shift(201); // 'ordering' break; case 220: // 'revalidation' shift(220); // 'revalidation' break; case 223: // 'schema' shift(223); // 'schema' break; case 226: // 'score' shift(226); // 'score' break; case 232: // 'sliding' shift(232); // 'sliding' break; case 238: // 'strict' shift(238); // 'strict' break; case 249: // 'tumbling' shift(249); // 'tumbling' break; case 250: // 'type' shift(250); // 'type' break; case 255: // 'updating' shift(255); // 'updating' break; case 259: // 'value' shift(259); // 'value' break; case 260: // 'variable' shift(260); // 'variable' break; case 261: // 'version' shift(261); // 'version' break; case 265: // 'while' shift(265); // 'while' break; case 95: // 'constraint' shift(95); // 'constraint' break; case 174: // 'loop' shift(174); // 'loop' break; default: shift(219); // 'returning' } eventHandler.endNonterminal("FunctionName", e0); } function parse_NCName() { eventHandler.startNonterminal("NCName", e0); switch (l1) { case 28: // NCName^Token shift(28); // NCName^Token break; case 68: // 'after' shift(68); // 'after' break; case 73: // 'and' shift(73); // 'and' break; case 77: // 'as' shift(77); // 'as' break; case 78: // 'ascending' shift(78); // 'ascending' break; case 82: // 'before' shift(82); // 'before' break; case 86: // 'case' shift(86); // 'case' break; case 87: // 'cast' shift(87); // 'cast' break; case 88: // 'castable' shift(88); // 'castable' break; case 92: // 'collation' shift(92); // 'collation' break; case 103: // 'count' shift(103); // 'count' break; case 107: // 'default' shift(107); // 'default' break; case 111: // 'descending' shift(111); // 'descending' break; case 116: // 'div' shift(116); // 'div' break; case 120: // 'else' shift(120); // 'else' break; case 121: // 'empty' shift(121); // 'empty' break; case 124: // 'end' shift(124); // 'end' break; case 126: // 'eq' shift(126); // 'eq' break; case 129: // 'except' shift(129); // 'except' break; case 135: // 'for' shift(135); // 'for' break; case 144: // 'ge' shift(144); // 'ge' break; case 146: // 'group' shift(146); // 'group' break; case 148: // 'gt' shift(148); // 'gt' break; case 149: // 'idiv' shift(149); // 'idiv' break; case 158: // 'instance' shift(158); // 'instance' break; case 160: // 'intersect' shift(160); // 'intersect' break; case 161: // 'into' shift(161); // 'into' break; case 162: // 'is' shift(162); // 'is' break; case 170: // 'le' shift(170); // 'le' break; case 172: // 'let' shift(172); // 'let' break; case 176: // 'lt' shift(176); // 'lt' break; case 178: // 'mod' shift(178); // 'mod' break; case 179: // 'modify' shift(179); // 'modify' break; case 184: // 'ne' shift(184); // 'ne' break; case 196: // 'only' shift(196); // 'only' break; case 198: // 'or' shift(198); // 'or' break; case 199: // 'order' shift(199); // 'order' break; case 218: // 'return' shift(218); // 'return' break; case 222: // 'satisfies' shift(222); // 'satisfies' break; case 234: // 'stable' shift(234); // 'stable' break; case 235: // 'start' shift(235); // 'start' break; case 246: // 'to' shift(246); // 'to' break; case 247: // 'treat' shift(247); // 'treat' break; case 252: // 'union' shift(252); // 'union' break; case 264: // 'where' shift(264); // 'where' break; case 268: // 'with' shift(268); // 'with' break; case 71: // 'ancestor' shift(71); // 'ancestor' break; case 72: // 'ancestor-or-self' shift(72); // 'ancestor-or-self' break; case 80: // 'attribute' shift(80); // 'attribute' break; case 91: // 'child' shift(91); // 'child' break; case 94: // 'comment' shift(94); // 'comment' break; case 101: // 'copy' shift(101); // 'copy' break; case 106: // 'declare' shift(106); // 'declare' break; case 108: // 'delete' shift(108); // 'delete' break; case 109: // 'descendant' shift(109); // 'descendant' break; case 110: // 'descendant-or-self' shift(110); // 'descendant-or-self' break; case 117: // 'document' shift(117); // 'document' break; case 118: // 'document-node' shift(118); // 'document-node' break; case 119: // 'element' shift(119); // 'element' break; case 122: // 'empty-sequence' shift(122); // 'empty-sequence' break; case 127: // 'every' shift(127); // 'every' break; case 132: // 'first' shift(132); // 'first' break; case 133: // 'following' shift(133); // 'following' break; case 134: // 'following-sibling' shift(134); // 'following-sibling' break; case 143: // 'function' shift(143); // 'function' break; case 150: // 'if' shift(150); // 'if' break; case 151: // 'import' shift(151); // 'import' break; case 157: // 'insert' shift(157); // 'insert' break; case 163: // 'item' shift(163); // 'item' break; case 168: // 'last' shift(168); // 'last' break; case 180: // 'module' shift(180); // 'module' break; case 182: // 'namespace' shift(182); // 'namespace' break; case 183: // 'namespace-node' shift(183); // 'namespace-node' break; case 189: // 'node' shift(189); // 'node' break; case 200: // 'ordered' shift(200); // 'ordered' break; case 204: // 'parent' shift(204); // 'parent' break; case 210: // 'preceding' shift(210); // 'preceding' break; case 211: // 'preceding-sibling' shift(211); // 'preceding-sibling' break; case 214: // 'processing-instruction' shift(214); // 'processing-instruction' break; case 216: // 'rename' shift(216); // 'rename' break; case 217: // 'replace' shift(217); // 'replace' break; case 224: // 'schema-attribute' shift(224); // 'schema-attribute' break; case 225: // 'schema-element' shift(225); // 'schema-element' break; case 227: // 'self' shift(227); // 'self' break; case 233: // 'some' shift(233); // 'some' break; case 241: // 'switch' shift(241); // 'switch' break; case 242: // 'text' shift(242); // 'text' break; case 248: // 'try' shift(248); // 'try' break; case 251: // 'typeswitch' shift(251); // 'typeswitch' break; case 254: // 'unordered' shift(254); // 'unordered' break; case 258: // 'validate' shift(258); // 'validate' break; case 260: // 'variable' shift(260); // 'variable' break; case 272: // 'xquery' shift(272); // 'xquery' break; case 70: // 'allowing' shift(70); // 'allowing' break; case 79: // 'at' shift(79); // 'at' break; case 81: // 'base-uri' shift(81); // 'base-uri' break; case 83: // 'boundary-space' shift(83); // 'boundary-space' break; case 84: // 'break' shift(84); // 'break' break; case 89: // 'catch' shift(89); // 'catch' break; case 96: // 'construction' shift(96); // 'construction' break; case 99: // 'context' shift(99); // 'context' break; case 100: // 'continue' shift(100); // 'continue' break; case 102: // 'copy-namespaces' shift(102); // 'copy-namespaces' break; case 104: // 'decimal-format' shift(104); // 'decimal-format' break; case 123: // 'encoding' shift(123); // 'encoding' break; case 130: // 'exit' shift(130); // 'exit' break; case 131: // 'external' shift(131); // 'external' break; case 139: // 'ft-option' shift(139); // 'ft-option' break; case 152: // 'in' shift(152); // 'in' break; case 153: // 'index' shift(153); // 'index' break; case 159: // 'integrity' shift(159); // 'integrity' break; case 169: // 'lax' shift(169); // 'lax' break; case 190: // 'nodes' shift(190); // 'nodes' break; case 197: // 'option' shift(197); // 'option' break; case 201: // 'ordering' shift(201); // 'ordering' break; case 220: // 'revalidation' shift(220); // 'revalidation' break; case 223: // 'schema' shift(223); // 'schema' break; case 226: // 'score' shift(226); // 'score' break; case 232: // 'sliding' shift(232); // 'sliding' break; case 238: // 'strict' shift(238); // 'strict' break; case 249: // 'tumbling' shift(249); // 'tumbling' break; case 250: // 'type' shift(250); // 'type' break; case 255: // 'updating' shift(255); // 'updating' break; case 259: // 'value' shift(259); // 'value' break; case 261: // 'version' shift(261); // 'version' break; case 265: // 'while' shift(265); // 'while' break; case 95: // 'constraint' shift(95); // 'constraint' break; case 174: // 'loop' shift(174); // 'loop' break; default: shift(219); // 'returning' } eventHandler.endNonterminal("NCName", e0); } function shift(t) { if (l1 == t) { whitespace(); eventHandler.terminal(JSONiqTokenizer.TOKEN[l1], b1, e1 > size ? size : e1); b0 = b1; e0 = e1; l1 = 0; } else { error(b1, e1, 0, l1, t); } } function whitespace() { if (e0 != b1) { b0 = e0; e0 = b1; eventHandler.whitespace(b0, e0); } } function matchW(set) { var code; for (;;) { code = match(set); if (code != 30) // S^WS { break; } } return code; } function lookahead1W(set) { if (l1 == 0) { l1 = matchW(set); b1 = begin; e1 = end; } } function lookahead1(set) { if (l1 == 0) { l1 = match(set); b1 = begin; e1 = end; } } function error(b, e, s, l, t) { throw new self.ParseException(b, e, s, l, t); } var lk, b0, e0; var l1, b1, e1; var eventHandler; var input; var size; var begin; var end; function match(tokenSetId) { var nonbmp = false; begin = end; var current = end; var result = JSONiqTokenizer.INITIAL[tokenSetId]; var state = 0; for (var code = result & 4095; code != 0; ) { var charclass; var c0 = current < size ? input.charCodeAt(current) : 0; ++current; if (c0 < 0x80) { charclass = JSONiqTokenizer.MAP0[c0]; } else if (c0 < 0xd800) { var c1 = c0 >> 4; charclass = JSONiqTokenizer.MAP1[(c0 & 15) + JSONiqTokenizer.MAP1[(c1 & 31) + JSONiqTokenizer.MAP1[c1 >> 5]]]; } else { if (c0 < 0xdc00) { var c1 = current < size ? input.charCodeAt(current) : 0; if (c1 >= 0xdc00 && c1 < 0xe000) { ++current; c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000; nonbmp = true; } } var lo = 0, hi = 5; for (var m = 3; ; m = (hi + lo) >> 1) { if (JSONiqTokenizer.MAP2[m] > c0) hi = m - 1; else if (JSONiqTokenizer.MAP2[6 + m] < c0) lo = m + 1; else {charclass = JSONiqTokenizer.MAP2[12 + m]; break;} if (lo > hi) {charclass = 0; break;} } } state = code; var i0 = (charclass << 12) + code - 1; code = JSONiqTokenizer.TRANSITION[(i0 & 15) + JSONiqTokenizer.TRANSITION[i0 >> 4]]; if (code > 4095) { result = code; code &= 4095; end = current; } } result >>= 12; if (result == 0) { end = current - 1; var c1 = end < size ? input.charCodeAt(end) : 0; if (c1 >= 0xdc00 && c1 < 0xe000) --end; return error(begin, end, state, -1, -1); } if (nonbmp) { for (var i = result >> 9; i > 0; --i) { --end; var c1 = end < size ? input.charCodeAt(end) : 0; if (c1 >= 0xdc00 && c1 < 0xe000) --end; } } else { end -= result >> 9; } return (result & 511) - 1; } } JSONiqTokenizer.getTokenSet = function(tokenSetId) { var set = []; var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095; for (var i = 0; i < 279; i += 32) { var j = i; var i0 = (i >> 5) * 2066 + s - 1; var i1 = i0 >> 2; var i2 = i1 >> 2; var f = JSONiqTokenizer.EXPECTED[(i0 & 3) + JSONiqTokenizer.EXPECTED[(i1 & 3) + JSONiqTokenizer.EXPECTED[(i2 & 3) + JSONiqTokenizer.EXPECTED[i2 >> 2]]]]; for ( ; f != 0; f >>>= 1, ++j) { if ((f & 1) != 0) { set.push(JSONiqTokenizer.TOKEN[j]); } } } return set; }; JSONiqTokenizer.MAP0 = [ 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37 ]; JSONiqTokenizer.MAP1 = [ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 37, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 31, 31, 37, 37, 37, 37, 37, 37, 37, 66, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66 ]; JSONiqTokenizer.MAP2 = [ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 37, 31, 37, 31, 31, 37 ]; JSONiqTokenizer.INITIAL = [ 1, 2, 49155, 57348, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]; JSONiqTokenizer.TRANSITION = [ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 17408, 19288, 17439, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19074, 36169, 17439, 36866, 17466, 36890, 36866, 22314, 19105, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22182, 19288, 19121, 36866, 17466, 18345, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19273, 19552, 19304, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19332, 17423, 19363, 36866, 17466, 17537, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 18614, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19391, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19427, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36154, 19288, 19457, 36866, 17466, 17740, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22780, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22375, 22197, 18469, 36866, 17466, 36890, 36866, 21991, 24018, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21331, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 19485, 19501, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19537, 22390, 19568, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19596, 19611, 19457, 36866, 17466, 36890, 36866, 18246, 19627, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22242, 20553, 19457, 36866, 17466, 36890, 36866, 18648, 30477, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36472, 19288, 19457, 36866, 17466, 17809, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21770, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19643, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19672, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20538, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17975, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22345, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19726, 19742, 21529, 24035, 23112, 26225, 23511, 27749, 27397, 24035, 34360, 24035, 24036, 23114, 35166, 23114, 23114, 19758, 23511, 35247, 23511, 23511, 28447, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 19821, 23511, 23511, 23511, 23511, 23512, 19441, 36539, 24035, 24035, 24035, 24035, 19846, 19869, 23114, 23114, 23114, 28618, 32187, 19892, 23511, 23511, 23511, 34585, 20402, 36647, 24035, 24035, 24036, 23114, 33757, 23114, 23114, 23029, 20271, 23511, 27070, 23511, 23511, 30562, 24035, 24035, 29274, 26576, 23114, 23114, 31118, 23036, 29695, 23511, 23511, 32431, 23634, 30821, 24035, 23110, 19913, 23114, 23467, 31261, 23261, 34299, 19932, 24035, 32609, 19965, 35389, 19984, 27689, 19830, 29391, 29337, 20041, 22643, 35619, 33728, 20062, 20121, 20166, 35100, 26145, 20211, 23008, 19876, 20208, 20227, 25670, 20132, 26578, 27685, 20141, 20243, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36094, 19288, 19457, 36866, 17466, 21724, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22735, 19552, 20287, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22750, 19288, 21529, 24035, 23112, 28056, 23511, 29483, 28756, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 20327, 23511, 23511, 23511, 23511, 31156, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 20371, 23511, 23511, 23511, 23511, 27443, 20395, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 29457, 29700, 23511, 23511, 23511, 23511, 33444, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 28350, 20421, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 20447, 20475, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20523, 22257, 20569, 20783, 21715, 17603, 20699, 20837, 20614, 20630, 21149, 20670, 21405, 17486, 17509, 17525, 18373, 19179, 20695, 20716, 20732, 20755, 19194, 18042, 21641, 20592, 20779, 20598, 21412, 17470, 17591, 20896, 17468, 17619, 20799, 20700, 21031, 20744, 20699, 20828, 18075, 21259, 20581, 20853, 18048, 20868, 20884, 17756, 17784, 17800, 17825, 17854, 21171, 21200, 20931, 20947, 21378, 20955, 20971, 18086, 20645, 21002, 20986, 18178, 17960, 18012, 18381, 18064, 29176, 21044, 21438, 21018, 21122, 21393, 21060, 21844, 21094, 20654, 17493, 18150, 18166, 18214, 25967, 20763, 21799, 21110, 21830, 21138, 21246, 21301, 18336, 18361, 21165, 21187, 20812, 21216, 21232, 21287, 21317, 18553, 21347, 21363, 21428, 21454, 21271, 21483, 21499, 21515, 21575, 21467, 18712, 21591, 21633, 21078, 18189, 18198, 20679, 21657, 21701, 21074, 21687, 21740, 21756, 21786, 21815, 21860, 21876, 21892, 21946, 21962, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36457, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 36813, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 21981, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 22151, 22007, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 27898, 17884, 18890, 17906, 17928, 22042, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 22070, 22112, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 22142, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36109, 19288, 18469, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22167, 19288, 19457, 36866, 17466, 17768, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22227, 36487, 22273, 36866, 17466, 36890, 36866, 19316, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18749, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 22304, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19580, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22330, 19089, 19457, 36866, 17466, 18721, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22765, 19347, 19457, 36866, 17466, 36890, 36866, 18114, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34541, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 22540, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29908, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22561, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 23837, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22584, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36442, 19288, 21605, 24035, 23112, 28137, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 31568, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22690, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 27584, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 22659, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22360, 19552, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22675, 22811, 19457, 36866, 17466, 36890, 36866, 19133, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22827, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36064, 19288, 22865, 22881, 32031, 22897, 22913, 22956, 29939, 24035, 24035, 24035, 23003, 23114, 23114, 23114, 23024, 22420, 23511, 23511, 23511, 23052, 29116, 23073, 29268, 24035, 25563, 26915, 23106, 23131, 23114, 23114, 23159, 23181, 23197, 23248, 23511, 23511, 23282, 23305, 22493, 32364, 24035, 33472, 30138, 26325, 31770, 33508, 27345, 33667, 23114, 23321, 23473, 23351, 35793, 36576, 23511, 23375, 22500, 24145, 24035, 29197, 20192, 24533, 23440, 23114, 19017, 23459, 22839, 23489, 23510, 23511, 33563, 23528, 32076, 25389, 24035, 26576, 23561, 23583, 23114, 32683, 22516, 23622, 23655, 23511, 23634, 35456, 37144, 23110, 23683, 34153, 20499, 32513, 25824, 23705, 24035, 24035, 23111, 23114, 19874, 27078, 33263, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 20507, 32241, 20150, 31862, 27464, 35108, 23727, 23007, 35895, 34953, 26578, 27685, 20141, 24569, 31691, 19787, 33967, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36427, 19552, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 27027, 26576, 23114, 23114, 23114, 31471, 23756, 22468, 23511, 23511, 23511, 34687, 23772, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 23788, 24035, 24035, 24035, 21559, 23828, 23114, 23114, 23114, 25086, 22839, 23853, 23511, 23511, 23511, 23876, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 31761, 23909, 23953, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36049, 19288, 21605, 30825, 23112, 23987, 23511, 24003, 31001, 27617, 24034, 24035, 24036, 24052, 24089, 23114, 23114, 22420, 24109, 24168, 23511, 23511, 29116, 24188, 27609, 20017, 29516, 24035, 26576, 24222, 19968, 23114, 24252, 33811, 22468, 24270, 33587, 23511, 24320, 27443, 22493, 24035, 24035, 24035, 24035, 24339, 23113, 23114, 23114, 23114, 28128, 28618, 29700, 23511, 23511, 23511, 28276, 34564, 20402, 24035, 24035, 32929, 24036, 23114, 23114, 23114, 24357, 23029, 22839, 23511, 23511, 23511, 24377, 25645, 24035, 34112, 24035, 26576, 23114, 26643, 23114, 32683, 22516, 23511, 25638, 23511, 23711, 24035, 24395, 27809, 23114, 24414, 20499, 24432, 30917, 23628, 24035, 30680, 23111, 23114, 30233, 27078, 25748, 24452, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 24475, 19829, 26577, 26597, 26154, 24519, 24556, 24596, 23007, 20046, 20132, 26578, 24634, 20141, 24569, 31691, 24679, 24727, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36412, 19288, 21605, 19943, 34861, 32618, 26027, 29483, 32016, 32050, 36233, 24776, 35574, 24801, 24819, 32671, 31289, 22420, 24868, 24886, 20087, 26849, 29116, 19803, 24035, 24035, 24035, 36228, 26576, 23114, 23114, 23114, 24981, 33811, 22468, 23511, 23511, 23511, 29028, 27443, 22493, 24923, 27965, 24035, 24035, 32797, 24946, 23443, 23114, 23114, 29636, 24997, 22849, 28252, 23511, 23511, 23511, 25042, 25110, 24035, 24035, 34085, 24036, 25133, 23114, 23114, 25152, 23029, 22839, 25169, 23511, 36764, 23511, 25645, 30403, 24035, 25186, 26576, 31806, 24093, 25212, 32683, 22516, 32713, 26245, 34293, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 32406, 23111, 23114, 28676, 30944, 27689, 25234, 24035, 23112, 19872, 37063, 23266, 24036, 23114, 30243, 20379, 26100, 29218, 20211, 30105, 25257, 25284, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 24834, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36034, 19288, 21671, 25314, 25072, 25330, 25346, 25362, 29939, 29951, 35288, 29984, 23812, 27216, 25405, 25424, 30456, 22584, 26292, 25461, 25480, 31592, 29116, 25516, 34963, 25545, 27007, 25579, 33937, 25614, 25661, 25686, 34872, 25702, 25718, 25734, 25769, 25795, 25811, 25840, 22493, 26533, 25856, 24035, 25876, 30763, 27481, 25909, 23114, 28987, 25936, 25954, 29700, 25983, 23511, 31412, 26043, 26063, 22568, 29241, 29592, 26116, 31216, 35383, 26170, 34783, 26194, 26221, 22839, 26241, 26261, 22477, 26283, 26308, 27306, 31035, 24655, 26576, 29854, 33386, 26341, 32683, 22516, 32153, 30926, 26361, 19996, 26381, 35463, 26397, 26424, 34646, 26478, 35605, 31386, 26494, 35567, 31964, 22940, 23689, 25218, 30309, 32289, 19830, 33605, 23112, 32109, 27733, 27084, 24496, 35886, 35221, 26525, 36602, 26549, 26558, 26574, 26594, 26613, 26629, 26666, 26700, 26578, 27685, 23740, 24285, 31691, 26733, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36397, 19552, 18991, 25887, 28117, 32618, 26776, 29483, 29939, 26802, 24035, 24035, 24036, 28664, 23114, 23114, 23114, 22420, 30297, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 25559, 26576, 23114, 23114, 23114, 30525, 33811, 22468, 23511, 23511, 23511, 28725, 27443, 22493, 24035, 24035, 27249, 24035, 24035, 23113, 23114, 23114, 26827, 23114, 28618, 29700, 23511, 23511, 26845, 23511, 34564, 20402, 24035, 24035, 26979, 24036, 23114, 23114, 23114, 24974, 23029, 22839, 23511, 23511, 23511, 26865, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 33305, 24035, 25598, 23114, 19874, 34253, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 26886, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 26931, 24569, 26439, 26947, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36019, 19288, 26995, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 27043, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 27061, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 29978, 24035, 24035, 23113, 23114, 33114, 23114, 23114, 30010, 29700, 23511, 35913, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 27155, 26576, 23114, 23114, 30447, 23036, 29695, 23511, 23511, 30935, 20099, 24152, 25529, 27100, 34461, 27121, 22625, 29156, 26009, 27137, 30422, 31903, 31655, 28870, 27171, 32439, 31731, 19830, 27232, 22612, 27265, 26786, 25494, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 20342, 27288, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 27322, 27339, 28020, 27361, 27382, 29939, 24035, 24035, 32581, 24036, 23114, 23114, 23114, 27425, 22420, 23511, 23511, 23511, 27442, 28306, 19803, 24035, 24035, 24035, 24035, 26710, 23114, 23114, 23114, 23114, 32261, 22468, 23511, 23511, 23511, 23511, 35719, 24694, 29510, 24035, 24035, 24035, 24035, 26717, 23114, 23114, 23114, 23114, 28618, 32217, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 27459, 23114, 23114, 23114, 36252, 23029, 20271, 23511, 23511, 23511, 28840, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 27480, 34483, 28401, 29761, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36382, 19288, 21605, 27497, 27517, 28504, 28898, 27569, 29939, 29401, 27600, 27323, 27633, 19025, 27662, 23114, 27705, 22420, 20483, 27721, 23511, 27765, 28306, 19803, 23540, 24035, 24610, 27781, 27805, 26650, 23114, 28573, 32990, 25920, 22468, 26870, 23511, 26684, 34262, 34737, 25057, 34622, 24035, 24035, 23971, 24206, 27825, 27847, 23114, 23114, 27865, 27885, 35766, 27914, 23511, 23511, 32766, 32844, 27934, 28795, 26909, 27955, 26092, 27988, 25445, 28005, 28036, 28052, 21965, 23511, 32196, 19897, 28072, 28102, 36534, 21541, 23801, 28153, 28180, 28197, 28221, 23036, 32695, 28251, 28268, 28292, 23667, 34825, 23930, 24580, 28322, 28344, 31627, 28366, 25996, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 35625, 33477, 33359, 27674, 28393, 33992, 24036, 23114, 30243, 19829, 28417, 28433, 28463, 23008, 19876, 20208, 23007, 20046, 20132, 28489, 28520, 20141, 24569, 31691, 19787, 28550, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 28589, 24035, 24035, 24035, 24035, 28608, 23114, 23114, 23114, 23114, 28618, 20431, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36004, 19288, 28634, 31951, 28565, 28702, 28718, 28741, 32544, 20175, 28792, 32086, 20105, 28811, 29059, 29862, 28856, 22420, 28886, 30354, 23359, 28922, 28306, 28952, 23888, 26320, 36506, 24035, 29331, 28968, 36609, 23114, 29003, 31661, 27061, 30649, 27366, 23511, 29023, 27918, 24694, 24035, 24035, 23893, 33094, 30867, 23113, 23114, 23114, 29044, 34184, 30010, 29700, 23511, 23511, 29081, 29102, 34585, 20402, 27789, 24035, 24035, 24036, 23114, 29132, 23114, 23114, 23029, 20271, 23511, 29153, 23511, 23511, 30562, 30174, 24035, 24035, 27409, 25438, 23114, 23114, 29172, 36668, 31332, 23511, 23511, 29192, 30144, 24035, 23110, 30203, 23114, 23467, 31544, 23261, 23628, 24035, 22545, 23111, 23114, 29213, 27078, 27689, 29234, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 29257, 23008, 19876, 20208, 28768, 29290, 29320, 34776, 29353, 20141, 22435, 29378, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36367, 19288, 21605, 34616, 19006, 32618, 31497, 31507, 36216, 20184, 24035, 34393, 29424, 34668, 23114, 34900, 29447, 22420, 30360, 23511, 37089, 29473, 28306, 19803, 29499, 24398, 24035, 24035, 26576, 31799, 29532, 29550, 23114, 33811, 22468, 32298, 29571, 31184, 23511, 23512, 37127, 36628, 29589, 24035, 24135, 24035, 23113, 29608, 23114, 27831, 29634, 28618, 29652, 30037, 23511, 24172, 29671, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 29555, 29690, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 29719, 24035, 23110, 29738, 23114, 23467, 34035, 29756, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 29777, 34364, 28181, 30243, 29799, 31920, 27272, 27185, 23008, 31126, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29828, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35989, 19552, 19687, 35139, 28649, 29878, 29894, 29924, 29939, 23224, 23085, 31969, 24036, 35173, 24752, 24803, 23114, 22420, 31190, 30318, 24870, 23511, 28306, 29967, 23967, 24035, 24035, 24035, 26576, 30000, 23114, 23114, 23114, 33811, 22468, 30026, 23511, 23511, 23511, 23512, 26078, 24035, 24035, 24035, 30053, 37137, 30071, 23114, 23114, 33368, 25136, 28618, 30723, 23511, 23511, 37096, 31356, 34585, 20402, 30092, 30127, 30160, 24036, 35740, 30219, 24960, 30259, 23029, 20271, 34042, 30285, 30342, 30376, 23289, 30055, 30400, 30419, 30438, 32640, 33532, 33514, 30472, 18792, 26267, 24323, 23057, 30493, 23639, 20008, 30196, 33188, 30517, 20075, 23511, 30541, 23628, 30578, 33928, 28776, 30594, 19874, 30610, 30637, 19830, 30677, 27646, 19872, 25779, 23266, 23232, 35016, 30243, 30696, 29812, 30712, 30746, 27206, 30779, 30807, 23007, 33395, 20132, 26578, 27685, 31703, 22928, 31691, 19787, 31079, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36352, 19288, 23335, 30841, 26131, 30888, 30904, 30986, 29939, 24035, 24704, 31017, 20025, 23114, 26178, 31051, 31095, 22420, 23511, 22524, 31142, 31172, 28534, 31206, 35497, 25196, 24035, 28592, 24503, 23114, 31239, 31285, 23114, 31305, 31321, 31355, 31372, 31407, 23511, 30556, 24694, 24035, 27501, 19805, 24035, 24035, 23113, 23114, 31428, 24066, 23114, 28618, 29700, 23511, 31837, 18809, 23511, 34585, 31448, 24035, 24035, 24035, 23090, 23114, 23114, 23114, 23114, 31619, 35038, 23511, 23511, 23511, 23511, 33714, 24035, 33085, 24035, 29431, 23114, 31467, 23114, 23143, 31487, 23511, 31523, 23511, 35195, 36783, 24035, 30111, 23567, 23114, 23467, 31543, 31560, 23628, 24035, 24035, 23111, 23114, 19874, 30953, 31584, 34508, 24035, 31608, 26345, 37055, 23266, 31643, 31677, 31719, 31747, 31786, 31822, 26898, 23008, 19876, 31859, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 31878, 31936, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35974, 19288, 21605, 27972, 35663, 31985, 29655, 32001, 36715, 24785, 25893, 23545, 31912, 19853, 19916, 25938, 24540, 22420, 31843, 29674, 29573, 32735, 28936, 19803, 24035, 24035, 32047, 24035, 26576, 23114, 23114, 27544, 23114, 33811, 22468, 23511, 23511, 32161, 23511, 23512, 32066, 24035, 33313, 24035, 24035, 24035, 23113, 27426, 32102, 23114, 23114, 28618, 32125, 23511, 32144, 23511, 23511, 33569, 20402, 24035, 27045, 24035, 24036, 23114, 23114, 28328, 23114, 30076, 32177, 23511, 23511, 30384, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23595, 32212, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 22635, 25753, 32233, 32257, 32277, 19829, 26577, 26597, 20211, 23008, 19876, 32322, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 32352, 35285, 32380, 34196, 33016, 30661, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 32404, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 32422, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 30269, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 19949, 24035, 23111, 32455, 19874, 31269, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36337, 19552, 19209, 21617, 26509, 32475, 32491, 32529, 29939, 24035, 32578, 25241, 32597, 23114, 32634, 29007, 32656, 22420, 23511, 32729, 26365, 32751, 28306, 32788, 32882, 24035, 24035, 32813, 36727, 23114, 33182, 23114, 27553, 33235, 32829, 23511, 32706, 23511, 28906, 28377, 26962, 32881, 32904, 32898, 32920, 24035, 32953, 23114, 32977, 26408, 23114, 28164, 33006, 23511, 33039, 35774, 23511, 32306, 20402, 33076, 30872, 24035, 24036, 25408, 33110, 28979, 23114, 23029, 20271, 35835, 33130, 33054, 23511, 30562, 33148, 24035, 24035, 33167, 23114, 23114, 33775, 23036, 20459, 23511, 23511, 25464, 24646, 24035, 24035, 22446, 23114, 23114, 25627, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 31391, 33204, 33220, 33251, 33287, 26577, 26597, 20211, 33329, 19876, 33345, 23007, 20046, 20132, 26578, 27685, 28473, 22599, 31691, 33411, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35959, 19288, 21907, 27243, 29843, 32618, 33427, 31507, 29939, 33460, 34090, 24035, 24036, 33493, 24416, 33530, 23114, 22420, 33548, 24379, 33585, 23511, 28306, 19803, 33603, 24202, 24035, 24035, 25593, 33749, 28205, 23114, 23114, 32388, 22468, 33853, 33060, 23511, 23511, 31339, 33621, 24035, 24035, 34397, 24618, 30757, 33663, 23114, 23114, 33683, 35684, 28618, 26678, 23511, 23511, 32506, 33699, 34585, 20402, 24035, 32562, 26973, 24036, 23114, 23114, 33377, 33773, 23029, 20271, 23511, 23511, 30621, 23511, 23860, 24035, 33791, 21553, 26576, 36558, 23114, 33809, 23036, 32857, 26047, 23511, 33827, 23634, 24035, 24035, 23110, 23114, 23114, 31252, 23511, 33845, 23628, 24035, 24459, 23111, 23114, 33869, 27078, 30791, 29783, 24035, 24742, 19872, 33895, 23266, 26462, 19710, 33879, 33919, 26577, 26597, 24123, 24930, 21930, 20208, 30501, 33953, 25268, 20252, 33983, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36322, 19552, 23390, 33634, 35154, 34008, 34024, 34058, 35544, 34106, 34128, 26811, 33151, 34144, 34169, 34212, 23114, 34228, 34244, 34278, 34315, 23511, 34331, 34347, 34380, 34413, 24035, 24663, 26576, 34429, 34453, 34477, 29534, 33811, 22468, 34499, 34524, 34557, 25170, 34580, 35436, 23937, 34601, 24035, 24341, 26453, 23113, 34638, 34662, 23114, 24236, 28618, 34684, 34703, 34729, 23511, 35352, 34753, 34799, 24035, 34815, 32558, 34848, 34888, 35814, 34923, 23165, 29137, 23606, 30326, 30730, 34939, 33023, 30562, 36848, 34979, 24035, 24847, 34996, 23114, 23114, 35032, 29695, 35054, 23511, 23511, 35091, 33296, 35124, 24296, 28235, 24361, 36276, 32772, 35067, 35189, 27301, 30855, 24852, 22452, 35211, 35237, 35316, 25500, 35270, 23405, 24304, 35304, 29362, 24036, 23114, 35332, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 35368, 28823, 23920, 32336, 35405, 20141, 24569, 31691, 35421, 35479, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35944, 22795, 21605, 33647, 35877, 35513, 30962, 35529, 34073, 35557, 24035, 24035, 20405, 31107, 23114, 23114, 23114, 35590, 34713, 23511, 23511, 23511, 35641, 19803, 29408, 32937, 25298, 24035, 35657, 23115, 27849, 24760, 35679, 26205, 22468, 23511, 35700, 24907, 24901, 35075, 31893, 34980, 24035, 24035, 24035, 24035, 23113, 35009, 23114, 23114, 23114, 28618, 35716, 30970, 23511, 23511, 23511, 34585, 23215, 24035, 24035, 24035, 24036, 35735, 23114, 23114, 23114, 27105, 35756, 35790, 23511, 23511, 23511, 35254, 35446, 24035, 24035, 31223, 35809, 23114, 23114, 23036, 36825, 35830, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 31031, 20355, 19872, 33903, 23266, 24036, 23114, 28686, 19829, 26577, 26597, 20211, 23008, 23424, 20208, 24711, 31065, 24486, 26578, 27685, 20141, 19773, 35851, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36307, 19288, 21605, 35494, 19702, 32618, 33437, 31507, 29939, 25117, 24035, 27939, 24036, 27869, 23114, 26829, 23114, 22420, 23494, 23511, 33132, 23511, 28306, 19803, 24035, 34832, 24035, 24035, 26576, 23114, 25153, 23114, 23114, 33811, 22468, 23511, 23511, 35911, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35929, 19288, 21605, 25860, 23112, 36185, 23511, 36201, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 26748, 24035, 24035, 24035, 24035, 24035, 36249, 23114, 23114, 23114, 23114, 28618, 28835, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 27151, 24035, 26760, 23114, 27989, 23114, 23114, 36268, 20271, 23511, 24436, 23511, 29703, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36292, 19288, 21605, 36503, 21922, 32618, 34534, 31507, 36522, 24035, 33793, 24035, 35864, 23114, 23114, 36555, 23417, 22420, 23511, 23511, 36574, 26020, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 36592, 24035, 24035, 36625, 24035, 24035, 23113, 23114, 32961, 23114, 23114, 29618, 29700, 23511, 29086, 23511, 23511, 34585, 20402, 36644, 24035, 24035, 24036, 29740, 23114, 23114, 23114, 29065, 36663, 31527, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 31451, 23112, 36684, 23511, 36700, 29939, 24035, 24035, 24035, 30185, 23114, 23114, 23114, 27526, 22420, 23511, 23511, 23511, 32865, 28306, 19803, 36743, 24035, 27017, 24035, 26576, 27535, 23114, 31432, 23114, 33811, 22468, 33271, 23511, 32128, 23511, 23512, 24694, 24035, 27196, 24035, 24035, 24035, 23113, 32459, 23114, 23114, 23114, 28618, 29700, 33829, 36762, 23511, 23511, 34585, 20402, 24035, 36746, 24035, 29722, 23114, 23114, 34437, 23114, 34907, 20271, 23511, 23511, 18801, 23511, 23206, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 36837, 24035, 24035, 33739, 23114, 23114, 25094, 23511, 23261, 23628, 24035, 36780, 23111, 24073, 19874, 27078, 35344, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22720, 19288, 36799, 36866, 17466, 36890, 36864, 21991, 22211, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17631, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22705, 19288, 19457, 36866, 17466, 36890, 36866, 19375, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36124, 19288, 36951, 36866, 17466, 36890, 36866, 21991, 22404, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18567, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36979, 36995, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18027, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 21529, 24035, 23112, 23033, 23511, 31507, 25377, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 37040, 23511, 23511, 23511, 23511, 28086, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 37079, 23511, 23511, 23511, 23511, 23512, 34766, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 37112, 37160, 18469, 36866, 17466, 36890, 36866, 17656, 37174, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18537, 22984, 17553, 17572, 22285, 18780, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 0, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 127011, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2576384, 2215936, 2215936, 2215936, 2416640, 2424832, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2543616, 2215936, 2215936, 2215936, 2215936, 2215936, 2629632, 2215936, 2617344, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2691072, 2215936, 2707456, 2215936, 2715648, 2215936, 2723840, 2764800, 2215936, 2215936, 2797568, 2215936, 2822144, 2215936, 2215936, 2854912, 2215936, 2215936, 2215936, 2912256, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 180224, 0, 0, 2174976, 0, 0, 2170880, 2617344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2691072, 2170880, 2707456, 2170880, 2715648, 2170880, 2723840, 2764800, 2170880, 2170880, 2797568, 2170880, 2170880, 2797568, 2170880, 2822144, 2170880, 2170880, 2854912, 2170880, 2170880, 2170880, 2912256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2609152, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2654208, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 184599, 280, 0, 2174976, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 544, 0, 546, 0, 0, 2179072, 0, 0, 0, 552, 0, 0, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2158592, 2158592, 2232320, 2232320, 0, 2240512, 2240512, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 2768896, 2789376, 2813952, 2170880, 2170880, 2170880, 2875392, 2904064, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 167936, 0, 0, 0, 0, 2174976, 0, 0, 2215936, 2215936, 2514944, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2592768, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 32768, 0, 0, 0, 0, 0, 2174976, 32768, 0, 2633728, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2711552, 2215936, 2215936, 2215936, 2215936, 2215936, 2760704, 2768896, 2789376, 2813952, 2215936, 2215936, 2215936, 2875392, 2904064, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 65819, 2215936, 2215936, 3031040, 2215936, 3055616, 2215936, 2215936, 2215936, 2215936, 3092480, 2215936, 2215936, 3125248, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2170880, 2170880, 2494464, 2170880, 2170880, 0, 0, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 2699264, 2170880, 2727936, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3026944, 2170880, 2170880, 3063808, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 2379776, 2215936, 2523136, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2596864, 2215936, 2621440, 2215936, 2215936, 2641920, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 548, 0, 0, 0, 0, 287, 2170880, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2699264, 2215936, 2727936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2879488, 2215936, 2916352, 2215936, 2215936, 0, 0, 0, 0, 188416, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 0, 2171019, 2171019, 2171019, 2400395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3031179, 2171019, 3055755, 2171019, 2171019, 2215936, 3133440, 2215936, 2215936, 2215936, 3162112, 2215936, 2215936, 3182592, 3186688, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2523275, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2597003, 2171019, 2621579, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 4337664, 28, 2170880, 2170880, 2170880, 2629632, 2170880, 2170880, 2170880, 2170880, 2719744, 2744320, 2170880, 2170880, 2170880, 2834432, 2838528, 2170880, 2908160, 2170880, 2170880, 2936832, 2215936, 2215936, 2215936, 2215936, 2719744, 2744320, 2215936, 2215936, 2215936, 2834432, 2838528, 2215936, 2908160, 2215936, 2215936, 2936832, 2215936, 2215936, 2985984, 2215936, 2994176, 2215936, 2215936, 3014656, 2215936, 3059712, 3076096, 3088384, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2445312, 2215936, 2465792, 2473984, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2171019, 2494603, 2171019, 2171019, 2215936, 2215936, 2215936, 3215360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3016168, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 124, 124, 0, 128, 128, 2170880, 2170880, 2170880, 3215360, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2535424, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 0, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2170880, 2170880, 3170304, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 2215936, 2215936, 2215936, 2535424, 2539520, 2215936, 2215936, 2588672, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 136, 0, 2215936, 2215936, 2920448, 2215936, 2215936, 2215936, 2990080, 2215936, 2215936, 2215936, 2215936, 3051520, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3108864, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3026944, 2215936, 2215936, 3063808, 2215936, 2215936, 3112960, 2215936, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2537049, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 1508, 2170880, 2170880, 2170880, 1512, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2686976, 2748416, 2170880, 2170880, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3121152, 2170880, 2170880, 3145728, 3158016, 3166208, 2170880, 2420736, 2428928, 2170880, 2478080, 2170880, 2170880, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 0, 0, 3145728, 3158016, 3166208, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 0, 2170880, 2215936, 2215936, 2580480, 2215936, 2605056, 2637824, 2215936, 2215936, 2686976, 2748416, 2215936, 2215936, 2215936, 2924544, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 286, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 1625, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 647, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2686976, 0, 0, 2748416, 2170880, 2170880, 0, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 0, 0, 28, 28, 2170880, 3141632, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2170880, 2420736, 2428928, 2752512, 2756608, 0, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2170880, 3141632, 2170880, 2170880, 2490368, 2215936, 2490368, 2215936, 2215936, 2215936, 2547712, 2555904, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 245760, 0, 3129344, 2170880, 2170880, 2490368, 2170880, 2170880, 2170880, 0, 0, 2547712, 2555904, 2170880, 2170880, 2170880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 45056, 0, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1482, 97, 97, 97, 97, 97, 97, 97, 1354, 97, 97, 97, 97, 97, 97, 97, 97, 1148, 97, 97, 97, 97, 97, 97, 97, 2584576, 2170880, 2170880, 1512, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2170880, 2850816, 2170880, 2170880, 2170880, 3022848, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 2215936, 3022848, 2170880, 2441216, 2170880, 2527232, 0, 0, 2170880, 2600960, 2170880, 0, 2850816, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2596864, 2170880, 2621440, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 3022848, 2170880, 2519040, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2514944, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2519040, 0, 2024, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 2024, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 2170880, 2215936, 2650112, 2965504, 2215936, 0, 0, 2170880, 2650112, 2965504, 2170880, 2551808, 2170880, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 141, 45, 45, 67, 67, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 0, 2551808, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2977792, 2977792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 29, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 49172, 0, 0, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 4256099, 4256099, 24, 24, 0, 28, 28, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 0, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 2170880, 2547712, 2555904, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2215936, 2215936, 543, 543, 545, 545, 0, 0, 2179072, 0, 550, 551, 551, 0, 287, 2171166, 2171166, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 645, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 149, 2584576, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2519040, 0, 0, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 0, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 53264, 18, 49172, 57366, 24, 155648, 28, 102432, 155648, 155687, 114730, 106539, 0, 0, 155648, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 0, 0, 2220032, 0, 94208, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 208896, 18, 278528, 24, 24, 0, 28, 28, 53264, 18, 159765, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 139394, 28, 28, 102432, 131, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 32768, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 546, 0, 0, 2183168, 0, 0, 552, 832, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2654208, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 1084, 0, 1088, 0, 1092, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 937, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 644, 0, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 826, 0, 828, 0, 0, 2183168, 0, 0, 830, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2170880, 2170880, 2633728, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 53264, 18, 49172, 57366, 24, 8192, 28, 172066, 172032, 110630, 172066, 106539, 0, 0, 172032, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 102432, 0, 98304, 0, 0, 2220032, 110630, 0, 0, 0, 0, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 45056, 0, 0, 0, 53264, 18, 49172, 57366, 25, 8192, 30, 102432, 0, 110630, 114730, 106539, 0, 0, 176219, 53264, 18, 18, 49172, 0, 57366, 0, 124, 124, 124, 0, 128, 128, 128, 128, 102432, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 546, 0, 0, 2183168, 0, 65536, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 143, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1824, 67, 1826, 67, 67, 67, 67, 17, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 120, 121, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 2179072, 548, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2033, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 978, 0, 546, 70179, 0, 2183168, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1013, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 67, 67, 67, 483, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1359, 97, 97, 97, 67, 67, 1584, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 45, 45, 45, 45, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 774, 67, 67, 1713, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1723, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 45, 1559, 45, 45, 1561, 45, 45, 45, 45, 45, 45, 45, 687, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1771, 1772, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 1827, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 1614, 97, 97, 97, 97, 97, 603, 97, 97, 605, 97, 97, 608, 97, 97, 97, 97, 0, 1532, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 450, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 1839, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 1883, 97, 1885, 97, 0, 1888, 0, 97, 97, 0, 97, 97, 1848, 97, 97, 97, 97, 1852, 45, 45, 45, 45, 45, 45, 45, 384, 391, 45, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 45, 45, 45, 45, 1237, 45, 45, 45, 45, 45, 45, 67, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1951, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1963, 97, 2023, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 1994, 67, 1995, 67, 67, 67, 67, 67, 67, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 137, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2793472, 2805760, 2170880, 2830336, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 281, 549, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2031, 2032, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1769, 67, 0, 546, 70179, 549, 549, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1858, 45, 641, 0, 0, 0, 0, 41606, 926, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 456, 67, 0, 0, 0, 1313, 0, 0, 0, 1096, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1110, 97, 97, 97, 97, 67, 67, 67, 67, 1301, 1476, 0, 0, 0, 0, 1307, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1486, 97, 1487, 97, 1313, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 97, 45, 1853, 45, 1855, 45, 45, 45, 45, 53264, 18, 49172, 57366, 26, 8192, 31, 102432, 0, 110630, 114730, 106539, 0, 0, 225368, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 18, 49172, 163840, 57366, 0, 24, 24, 229376, 0, 28, 28, 28, 229376, 102432, 0, 0, 0, 0, 2220167, 110630, 0, 0, 0, 114730, 106539, 0, 2171019, 2171019, 2171019, 2171019, 2592907, 2171019, 2171019, 2171019, 2171019, 2633867, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2654347, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3117195, 2171019, 2171019, 2171019, 2171019, 2240641, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 140, 2171019, 2171019, 2171019, 2416779, 2424971, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2617483, 2171019, 2171019, 2642059, 2171019, 2171019, 2171019, 2699403, 2171019, 2728075, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3215499, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2171019, 2822283, 2171019, 2171019, 2855051, 2171019, 2171019, 2171019, 2912395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3002507, 2171019, 2171019, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2171166, 2171166, 2416926, 2425118, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2576670, 2171166, 2617630, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2691358, 2171166, 2707742, 2171166, 2715934, 2171166, 2724126, 2765086, 2171166, 2171166, 2797854, 2171166, 2822430, 2171166, 2171166, 2855198, 2171166, 2171166, 2171166, 2912542, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2793758, 2806046, 2171166, 2830622, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3109150, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2543902, 2171166, 2171166, 2171166, 2171166, 2171166, 2629918, 2793611, 2805899, 2171019, 2830475, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2171166, 2171166, 2171166, 2400542, 2171166, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 0, 2171166, 2920734, 2171166, 2171166, 2171166, 2990366, 2171166, 2171166, 2171166, 2171166, 3117342, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 53264, 0, 18, 18, 4329472, 2232445, 0, 2240641, 4337664, 2711691, 2171019, 2171019, 2171019, 2171019, 2171019, 2760843, 2769035, 2789515, 2814091, 2171019, 2171019, 2171019, 2875531, 2904203, 2171019, 2171019, 3092619, 2171019, 2171019, 3125387, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3199115, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2793472, 2805760, 2215936, 2830336, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2494464, 2170880, 2170880, 2171166, 2171166, 2634014, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2711838, 2171166, 2171166, 2171166, 2171166, 2171166, 2760990, 2769182, 2789662, 2814238, 2171166, 2171166, 2171166, 2875678, 2904350, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3199262, 2171166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379915, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2445451, 2171019, 2465931, 2474123, 2171019, 2171019, 3113099, 2171019, 2171019, 3133579, 2171019, 2171019, 2171019, 3162251, 2171019, 2171019, 3182731, 3186827, 2171019, 2379776, 2879627, 2171019, 2916491, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3027083, 2171019, 2171019, 3063947, 2699550, 2171166, 2728222, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2879774, 2171166, 2916638, 2171166, 2171166, 2171166, 2171166, 2171166, 2609438, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2654494, 2171166, 2171166, 2171166, 2171166, 2171166, 2445598, 2171166, 2466078, 2474270, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2523422, 2171019, 2437259, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2543755, 2171019, 2171019, 2171019, 2584715, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2908299, 2171019, 2171019, 2936971, 2171019, 2171019, 2986123, 2171019, 2994315, 2171019, 2171019, 3014795, 2171019, 3059851, 3076235, 3088523, 2171166, 2171166, 2986270, 2171166, 2994462, 2171166, 2171166, 3014942, 2171166, 3059998, 3076382, 3088670, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3027230, 2171166, 2171166, 3064094, 2171166, 2171166, 3113246, 2171166, 2171166, 3133726, 2506891, 2171019, 2171019, 2171019, 2535563, 2539659, 2171019, 2171019, 2588811, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2691211, 2171019, 2707595, 2171019, 2715787, 2171019, 2723979, 2764939, 2171019, 2171019, 2797707, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2453790, 2457886, 2171166, 2171166, 2171166, 2486558, 2171166, 2171166, 2507038, 2171166, 2171166, 2171166, 2535710, 2539806, 2171166, 2171166, 2588958, 2171166, 2171166, 2171166, 2171166, 2515230, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2593054, 2171166, 2171166, 2171166, 2171166, 3051806, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3170590, 0, 2388107, 2392203, 2171019, 2171019, 2433163, 2171019, 2461835, 2171019, 2171019, 2171019, 2510987, 2171019, 2171019, 2171019, 2171019, 2580619, 2171019, 2605195, 2637963, 2171019, 2171019, 2171019, 2920587, 2171019, 2171019, 2171019, 2990219, 2171019, 2171019, 2171019, 2171019, 3051659, 2171019, 2171019, 2171019, 2453643, 2457739, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2515083, 2171019, 2171019, 2171019, 2171019, 2646155, 2670731, 2752651, 2756747, 2846859, 2961547, 2171019, 2998411, 2171019, 3010699, 2171019, 2171019, 2687115, 2748555, 2171019, 2171019, 2171019, 2924683, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3121291, 2171019, 2171019, 2171019, 3170443, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 3145867, 3158155, 3166347, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 553, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2388254, 2392350, 2171166, 2171166, 2433310, 2171166, 2461982, 2171166, 2171166, 2171166, 2511134, 2171166, 2171166, 0, 2171166, 2171166, 2580766, 2171166, 2605342, 2638110, 2171166, 2171166, 2171166, 2171166, 3031326, 2171166, 3055902, 2171166, 2171166, 2171166, 2171166, 3092766, 2171166, 2171166, 3125534, 2171166, 2171166, 2171166, 3162398, 2171166, 2171166, 3182878, 3186974, 2171166, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 3109003, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2171166, 2687262, 0, 0, 2748702, 2171166, 2171166, 0, 2171166, 2924830, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2597150, 2171166, 2621726, 2171166, 2171166, 2642206, 2171166, 2171166, 2171166, 2171166, 3121438, 2171166, 2171166, 3146014, 3158302, 3166494, 2171019, 2420875, 2429067, 2171019, 2478219, 2171019, 2171019, 2171019, 2171019, 2547851, 2556043, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3129483, 2215936, 2171019, 3141771, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2171166, 2421022, 2429214, 2171166, 2478366, 2171166, 2171166, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2646302, 2670878, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 0, 45, 45, 45, 45, 45, 1405, 1406, 45, 45, 45, 45, 1409, 45, 45, 45, 45, 45, 1415, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1238, 45, 45, 45, 45, 67, 2752798, 2756894, 0, 2847006, 2961694, 2171166, 2998558, 2171166, 3010846, 2171166, 2171166, 2171166, 3141918, 2171019, 2171019, 2490507, 3129344, 2171166, 2171166, 2490654, 2171166, 2171166, 2171166, 0, 0, 2547998, 2556190, 2171166, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 167, 45, 45, 45, 45, 185, 187, 45, 45, 198, 45, 45, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3129630, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2576523, 2171019, 2171019, 2171019, 2171019, 2171019, 2609291, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2171166, 2171166, 2494750, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 147, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 3002654, 2171166, 2171166, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2175257, 0, 0, 2584862, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2441355, 2171019, 2527371, 2171019, 2601099, 2171019, 2850955, 2171019, 2171019, 2171019, 3022987, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 69632, 287, 2170880, 2215936, 3022848, 2171166, 2441502, 2171166, 2527518, 0, 0, 2171166, 2601246, 2171166, 0, 2851102, 2171166, 2171166, 2171166, 2171166, 2720030, 2744606, 2171166, 2171166, 2171166, 2834718, 2838814, 2171166, 2908446, 2171166, 2171166, 2937118, 3023134, 2171019, 2519179, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 3215646, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2486411, 2171019, 2171019, 2171019, 2629771, 2171019, 2171019, 2171019, 2171019, 2719883, 2744459, 2171019, 2171019, 2171019, 2834571, 2838667, 2171019, 2519326, 0, 0, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 2396299, 2171019, 2171019, 2171019, 2171019, 3018891, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396446, 0, 0, 2171166, 2171166, 2171166, 2171166, 3019038, 2171019, 2650251, 2965643, 2171019, 2215936, 2650112, 2965504, 2215936, 0, 0, 2171166, 2650398, 2965790, 2171166, 2551947, 2171019, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 144, 45, 45, 67, 67, 67, 67, 67, 228, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1929, 97, 97, 97, 97, 0, 0, 0, 2552094, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2977931, 2977792, 2978078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1321, 97, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 140, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2584576, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 140, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3215360, 544, 0, 0, 0, 544, 0, 546, 0, 0, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 0, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 552, 0, 0, 0, 552, 0, 287, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 644, 0, 2215936, 2215936, 3170304, 544, 0, 546, 0, 552, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 140, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 249856, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 151640, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 253952, 110630, 114730, 106539, 0, 0, 32856, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 192512, 53264, 18, 18, 49172, 0, 57366, 0, 2232445, 184320, 2232445, 0, 2240641, 2240641, 184320, 2240641, 102432, 0, 0, 0, 221184, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3108864, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 0, 0, 0, 45056, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 127, 127, 53264, 18, 49172, 258071, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 204800, 53264, 18, 49172, 57366, 24, 27, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 33, 0, 33, 33, 33, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2170880, 2170880, 2170880, 2416640, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2030, 45, 45, 45, 45, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1699, 67, 67, 67, 67, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 1358, 97, 97, 97, 641, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 45, 45, 45, 0, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1680, 45, 45, 45, 641, 0, 924, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 45, 45, 45, 45, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 282, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 2028, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1767, 67, 67, 67, 0, 0, 0, 0, 0, 0, 1612, 97, 97, 97, 97, 97, 97, 0, 1785, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1790, 97, 0, 0, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 241664, 2387968, 2392064, 2170880, 2170880, 2433024, 53264, 19, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 274432, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 270336, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 1134711, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 1126440, 1126440, 1126440, 0, 0, 1126400, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 36, 110630, 114730, 106539, 0, 0, 217088, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 94, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 96, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 24666, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 126, 28, 28, 28, 28, 102432, 53264, 122, 123, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 2170880, 2170880, 4256099, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1109, 97, 97, 97, 97, 1113, 132, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 146, 150, 45, 45, 45, 45, 45, 175, 45, 180, 45, 186, 45, 189, 45, 45, 203, 67, 256, 67, 67, 270, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 293, 297, 97, 97, 97, 97, 97, 322, 97, 327, 97, 333, 97, 0, 0, 97, 2026, 0, 2027, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 336, 97, 97, 350, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 2424832, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2617344, 2170880, 45, 439, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 525, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 622, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 1527, 369, 648, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1239, 45, 45, 45, 67, 729, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 762, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 0, 0, 0, 1477, 0, 1086, 0, 0, 0, 1479, 0, 1090, 67, 67, 796, 67, 67, 799, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 67, 67, 811, 67, 67, 67, 67, 67, 816, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 833, 97, 97, 97, 97, 97, 97, 97, 97, 1380, 0, 0, 0, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 45, 45, 45, 45, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 97, 97, 97, 894, 97, 97, 897, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1382, 45, 45, 45, 97, 909, 97, 97, 97, 97, 97, 914, 97, 97, 97, 97, 97, 97, 97, 923, 67, 67, 1079, 67, 67, 67, 67, 67, 37689, 1085, 25403, 1089, 66365, 1093, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 148, 1114, 97, 97, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 97, 97, 606, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1173, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 145, 45, 45, 67, 67, 67, 67, 67, 1762, 67, 67, 67, 1766, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1934, 67, 67, 1255, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 67, 67, 67, 67, 1297, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 33344, 97, 97, 97, 1335, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1377, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 670, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 67, 67, 1438, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 0, 0, 0, 1311, 0, 0, 0, 1317, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1322, 97, 97, 1491, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 1553, 45, 1504, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 97, 97, 0, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 1540, 45, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1700, 67, 67, 67, 97, 1648, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1541, 0, 97, 97, 97, 97, 0, 1940, 0, 97, 97, 97, 97, 97, 97, 45, 45, 2011, 45, 45, 45, 2015, 67, 67, 2017, 67, 67, 67, 2021, 97, 67, 67, 812, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 97, 97, 910, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 0, 0, 0, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 1188, 45, 45, 45, 45, 1414, 45, 45, 45, 1417, 45, 1419, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 453, 45, 45, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 1324, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 930, 45, 45, 45, 45, 97, 97, 97, 97, 1378, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 45, 67, 67, 1923, 67, 1925, 67, 67, 1927, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1985, 45, 45, 45, 45, 45, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 45, 946, 45, 45, 950, 45, 45, 45, 0, 97, 97, 97, 1939, 0, 0, 0, 97, 1943, 97, 97, 1945, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 990, 45, 45, 45, 67, 257, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 337, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 2170880, 2170880, 2170880, 2416640, 401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 459, 461, 67, 67, 67, 67, 67, 67, 67, 67, 475, 67, 480, 67, 67, 67, 67, 67, 67, 1054, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 484, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 67, 67, 97, 556, 558, 97, 97, 97, 97, 97, 97, 97, 97, 572, 97, 577, 97, 97, 0, 0, 1896, 97, 97, 97, 97, 97, 97, 1903, 45, 45, 45, 45, 983, 45, 45, 45, 45, 988, 45, 45, 45, 45, 45, 45, 1195, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1549, 45, 45, 45, 45, 45, 581, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1004, 45, 45, 45, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 761, 67, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 1071, 67, 67, 67, 67, 1076, 794, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 544, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 859, 97, 0, 0, 2025, 97, 20480, 97, 97, 2029, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1775, 67, 67, 67, 97, 97, 97, 97, 892, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1515, 97, 993, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 992, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1607, 67, 67, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 97, 45, 1556, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 696, 45, 1596, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 67, 97, 97, 97, 1621, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1346, 97, 97, 97, 97, 1740, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 45, 45, 67, 97, 97, 97, 97, 97, 97, 1836, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1984, 97, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 45, 45, 45, 45, 67, 739, 67, 67, 67, 67, 67, 744, 45, 45, 1909, 45, 45, 45, 45, 45, 45, 45, 67, 1917, 67, 1918, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 67, 67, 67, 67, 67, 97, 1930, 97, 1931, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 1580, 67, 67, 0, 97, 97, 1938, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 699, 45, 45, 45, 704, 45, 45, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 2006, 97, 97, 97, 97, 0, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 722, 723, 45, 45, 45, 45, 45, 45, 2045, 67, 67, 67, 2047, 0, 0, 97, 97, 97, 2051, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1957, 45, 67, 67, 67, 67, 67, 1836, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 67, 67, 1761, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 45, 45, 420, 45, 45, 422, 45, 45, 425, 45, 45, 45, 45, 45, 45, 45, 387, 45, 45, 45, 45, 397, 45, 45, 45, 67, 460, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 515, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 97, 0, 2039, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1426, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1689, 67, 67, 67, 97, 557, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 612, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 896, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 97, 45, 939, 45, 45, 45, 45, 943, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1916, 67, 67, 67, 67, 67, 45, 67, 67, 67, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 1019, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 804, 67, 67, 67, 67, 67, 1077, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2543616, 2170880, 2170880, 2170880, 2170880, 2170880, 2629632, 1169, 97, 1171, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 936, 45, 45, 67, 67, 214, 67, 220, 67, 67, 233, 67, 243, 67, 248, 67, 67, 67, 67, 67, 67, 1298, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1617, 97, 0, 0, 0, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 45, 45, 45, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 1281, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 776, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 907, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 690, 45, 45, 695, 45, 45, 67, 67, 67, 67, 67, 1465, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1712, 97, 97, 97, 97, 1741, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1924, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1983, 97, 97, 45, 45, 1987, 45, 1988, 45, 0, 97, 97, 97, 97, 0, 0, 0, 1942, 97, 97, 97, 97, 97, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 711, 45, 45, 153, 45, 45, 166, 45, 176, 45, 181, 45, 45, 188, 191, 196, 45, 204, 255, 258, 263, 67, 271, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 97, 97, 294, 97, 300, 97, 97, 313, 97, 323, 97, 328, 97, 97, 335, 338, 343, 97, 351, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1411, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 67, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1263, 67, 67, 67, 67, 67, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1526, 97, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 0, 97, 97, 1796, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1744, 45, 45, 45, 369, 0, 651, 45, 653, 45, 654, 45, 656, 45, 45, 45, 660, 45, 45, 45, 45, 1558, 45, 45, 45, 45, 45, 45, 45, 45, 1566, 45, 45, 681, 45, 683, 45, 45, 45, 45, 45, 45, 45, 45, 691, 692, 694, 45, 45, 45, 716, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 709, 45, 45, 712, 45, 714, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 726, 45, 45, 45, 733, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 747, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 1613, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 67, 764, 67, 67, 67, 67, 768, 67, 770, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1977, 67, 778, 779, 781, 67, 67, 67, 67, 67, 67, 788, 789, 67, 67, 792, 793, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 67, 67, 824, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 836, 97, 838, 97, 839, 97, 841, 97, 97, 97, 845, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 97, 97, 0, 1728, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1802, 45, 97, 97, 862, 97, 97, 97, 97, 866, 97, 868, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1788, 97, 97, 97, 0, 0, 97, 97, 876, 877, 879, 97, 97, 97, 97, 97, 97, 886, 887, 97, 97, 890, 891, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1646, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 97, 97, 922, 923, 45, 955, 45, 957, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 195, 45, 45, 45, 45, 45, 981, 982, 45, 45, 45, 45, 45, 45, 989, 45, 45, 45, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 67, 67, 1031, 67, 1033, 67, 67, 67, 67, 67, 67, 67, 817, 819, 67, 67, 67, 67, 67, 37689, 544, 67, 1065, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 1078, 67, 67, 1081, 1082, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2437406, 2171166, 2171166, 97, 1115, 97, 1117, 97, 97, 97, 97, 97, 97, 1125, 97, 1127, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 1644, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 1642, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1159, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1502, 97, 97, 97, 97, 97, 1172, 97, 97, 1175, 1176, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 935, 45, 45, 45, 1233, 45, 45, 45, 1236, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1873, 67, 67, 45, 45, 1218, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 1230, 45, 45, 67, 67, 215, 219, 222, 67, 230, 67, 67, 244, 246, 249, 67, 67, 67, 67, 67, 67, 1882, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1904, 45, 1905, 45, 67, 67, 67, 67, 67, 1258, 67, 1260, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 67, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 67, 818, 67, 67, 67, 67, 67, 67, 37689, 544, 67, 67, 1295, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 97, 97, 97, 1326, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 97, 97, 97, 97, 97, 1338, 97, 1340, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 1503, 97, 1363, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 578, 97, 1375, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 45, 45, 45, 45, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1778, 97, 97, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 97, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 1554, 45, 1570, 1571, 45, 67, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 67, 1061, 67, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 1594, 67, 67, 67, 67, 67, 97, 2038, 0, 97, 97, 97, 97, 97, 2044, 45, 45, 45, 995, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 45, 45, 45, 1809, 45, 1811, 45, 45, 45, 45, 45, 67, 1610, 1611, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 1618, 1647, 1649, 97, 97, 97, 1652, 97, 1654, 1655, 97, 0, 45, 45, 45, 1658, 45, 45, 67, 67, 216, 67, 67, 67, 67, 234, 67, 67, 67, 67, 252, 254, 1845, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 947, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1881, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1902, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1921, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 0, 97, 1937, 97, 97, 1940, 0, 0, 97, 97, 97, 97, 97, 97, 1947, 1948, 1949, 45, 45, 45, 1952, 45, 1954, 45, 45, 45, 45, 1959, 1960, 1961, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 67, 67, 1964, 67, 1966, 67, 67, 67, 67, 1971, 1972, 1973, 97, 0, 0, 0, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 884, 97, 97, 97, 889, 97, 97, 1978, 97, 0, 0, 1981, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 736, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 45, 67, 67, 67, 67, 0, 2049, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 933, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 97, 97, 288, 97, 97, 97, 97, 97, 97, 317, 97, 97, 97, 97, 97, 97, 0, 0, 97, 1787, 97, 97, 97, 97, 0, 0, 45, 45, 378, 45, 45, 45, 45, 45, 390, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 431, 433, 45, 45, 45, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 67, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 632, 97, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 67, 97, 97, 97, 97, 97, 97, 1837, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1897, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 97, 2010, 45, 45, 45, 45, 45, 45, 2016, 67, 67, 67, 67, 67, 67, 2022, 45, 2046, 67, 67, 67, 0, 0, 2050, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 932, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 45, 45, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 701, 702, 45, 45, 705, 706, 45, 45, 45, 45, 45, 45, 703, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 45, 45, 45, 45, 45, 725, 45, 45, 45, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 834, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1799, 97, 97, 45, 45, 45, 1569, 45, 45, 45, 1572, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1306, 0, 67, 67, 67, 1598, 67, 67, 67, 67, 67, 67, 67, 67, 1606, 67, 67, 1609, 97, 97, 97, 1650, 97, 97, 1653, 97, 97, 97, 0, 45, 45, 1657, 45, 45, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1421, 45, 45, 45, 1703, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1711, 97, 97, 0, 1895, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 958, 45, 960, 45, 45, 45, 45, 45, 45, 45, 45, 1913, 45, 45, 1915, 67, 67, 67, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 481, 67, 45, 1749, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 45, 45, 45, 45, 173, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1773, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1886, 0, 0, 0, 97, 97, 67, 2035, 2036, 67, 67, 97, 0, 0, 97, 2041, 2042, 97, 97, 45, 45, 45, 45, 1662, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1397, 45, 45, 45, 45, 151, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 437, 205, 45, 67, 67, 67, 218, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 67, 97, 97, 97, 97, 298, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 97, 97, 97, 97, 97, 97, 352, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 365, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1427, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1435, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1037, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1919, 67, 1759, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 45, 154, 45, 162, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 964, 45, 45, 45, 206, 45, 67, 67, 67, 67, 221, 67, 229, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 67, 785, 67, 67, 67, 67, 67, 67, 67, 67, 802, 67, 67, 67, 807, 67, 67, 67, 97, 97, 97, 97, 353, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 402, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 45, 45, 674, 45, 45, 45, 45, 45, 45, 45, 45, 389, 45, 394, 45, 45, 398, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 447, 45, 45, 45, 454, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 488, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 67, 67, 67, 67, 67, 1774, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 67, 67, 523, 67, 67, 527, 67, 67, 67, 67, 67, 533, 67, 67, 67, 540, 97, 97, 97, 585, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 97, 97, 97, 97, 1784, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 620, 97, 97, 624, 97, 97, 97, 97, 97, 630, 97, 97, 97, 637, 713, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 45, 45, 45, 1197, 45, 45, 45, 45, 45, 45, 45, 45, 730, 732, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1581, 67, 45, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 775, 67, 67, 67, 67, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 67, 67, 67, 1080, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 287, 0, 2379776, 2170880, 2170880, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 920, 97, 97, 0, 0, 0, 0, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 45, 959, 45, 45, 45, 45, 45, 45, 45, 45, 45, 184, 45, 45, 45, 45, 202, 45, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1266, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1279, 67, 67, 67, 67, 67, 272, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1293, 67, 67, 67, 1296, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 281, 94, 0, 0, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 0, 97, 1376, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1384, 45, 45, 67, 208, 67, 67, 67, 67, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1069, 1070, 67, 67, 67, 67, 67, 67, 67, 0, 37140, 24854, 0, 0, 0, 0, 41098, 65821, 45, 1423, 45, 45, 45, 45, 45, 45, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1083, 37689, 0, 25403, 0, 66365, 0, 0, 0, 1436, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1830, 67, 1452, 1453, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 67, 67, 1461, 67, 67, 67, 1464, 67, 1466, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 1587, 67, 67, 67, 67, 67, 67, 67, 67, 1595, 1489, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 1505, 1506, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 1164, 97, 97, 97, 97, 97, 1516, 97, 97, 97, 1519, 97, 1521, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1301, 0, 0, 0, 1307, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 919, 97, 97, 97, 0, 97, 97, 97, 1781, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1792, 1860, 45, 1862, 1863, 45, 1865, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1875, 67, 1877, 1878, 67, 1880, 67, 97, 97, 97, 97, 97, 1887, 0, 1889, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 237568, 0, 367, 0, 97, 1893, 0, 0, 0, 97, 1898, 1899, 97, 1901, 97, 45, 45, 45, 45, 45, 2014, 45, 67, 67, 67, 67, 67, 2020, 67, 97, 1989, 45, 1990, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1996, 67, 1997, 67, 67, 67, 67, 67, 273, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 2005, 0, 97, 2007, 97, 97, 18, 0, 139621, 0, 0, 0, 642, 0, 133, 364, 0, 0, 367, 41606, 0, 97, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 209, 67, 67, 67, 223, 67, 67, 67, 67, 67, 67, 67, 67, 67, 786, 67, 67, 67, 791, 67, 67, 45, 45, 940, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1016, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 142, 45, 45, 67, 210, 67, 67, 67, 225, 67, 67, 239, 67, 67, 67, 250, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 476, 67, 67, 67, 67, 67, 67, 67, 1709, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1843, 0, 67, 259, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 289, 97, 97, 97, 303, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 97, 339, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 358, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1953, 45, 1955, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1687, 1688, 67, 67, 67, 67, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1203, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 477, 67, 67, 67, 67, 67, 67, 67, 1970, 97, 97, 97, 1974, 0, 0, 0, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1372, 97, 97, 97, 97, 67, 522, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 536, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 574, 97, 97, 97, 97, 97, 301, 97, 309, 97, 97, 97, 97, 97, 97, 97, 97, 97, 900, 97, 97, 97, 905, 97, 97, 97, 619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 633, 97, 97, 18, 0, 139621, 0, 0, 362, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 664, 67, 67, 67, 67, 750, 751, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1057, 1058, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 67, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 902, 97, 97, 97, 97, 67, 67, 1051, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1302, 0, 0, 0, 1308, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1139, 97, 97, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 1161, 97, 97, 97, 97, 97, 1166, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 1257, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 97, 97, 1337, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1630, 97, 67, 1474, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2380062, 2171166, 2171166, 97, 1529, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 45, 45, 67, 67, 67, 67, 1707, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1891, 1739, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 1200, 45, 45, 45, 45, 97, 97, 1894, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 45, 45, 45, 67, 67, 1965, 67, 1967, 67, 67, 67, 97, 97, 97, 97, 0, 1976, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 97, 97, 1979, 0, 0, 97, 1982, 97, 97, 97, 1986, 45, 45, 45, 45, 45, 735, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 2000, 97, 97, 97, 2002, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1798, 97, 97, 97, 45, 45, 45, 2034, 67, 67, 67, 67, 97, 0, 0, 2040, 97, 97, 97, 97, 45, 45, 45, 45, 1752, 45, 45, 45, 1753, 1754, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 45, 45, 438, 45, 45, 45, 45, 45, 445, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1430, 67, 67, 67, 67, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 531, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1096, 97, 97, 97, 621, 97, 97, 97, 97, 97, 628, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 45, 942, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 708, 45, 45, 45, 45, 763, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 809, 810, 67, 67, 67, 67, 783, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1303, 0, 0, 0, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 45, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 67, 67, 67, 67, 1027, 67, 67, 67, 67, 1032, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1097, 1064, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 67, 1098, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 331, 97, 97, 97, 97, 1158, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 1309, 0, 0, 0, 1315, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1374, 97, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1240, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1252, 67, 97, 97, 97, 1635, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1800, 97, 45, 45, 45, 97, 97, 1793, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1743, 45, 45, 45, 1746, 45, 0, 97, 97, 97, 97, 97, 1851, 97, 45, 45, 45, 45, 1856, 45, 45, 45, 45, 1864, 45, 45, 67, 67, 1869, 67, 67, 67, 67, 1874, 67, 0, 97, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 211, 67, 67, 67, 67, 67, 67, 240, 67, 67, 67, 67, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 67, 67, 268, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 290, 97, 97, 97, 305, 97, 97, 319, 97, 97, 97, 330, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 643, 367, 41606, 97, 97, 348, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 395, 45, 45, 45, 400, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 45, 972, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 745, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1086, 25403, 1090, 66365, 1094, 0, 0, 97, 843, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 1121, 97, 97, 97, 97, 1126, 97, 97, 97, 97, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1400, 45, 67, 67, 67, 1011, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1304, 0, 0, 0, 1190, 45, 45, 1193, 1194, 45, 45, 45, 45, 45, 1199, 45, 1201, 45, 45, 45, 45, 1911, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 67, 67, 45, 1205, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1217, 45, 45, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 1229, 45, 45, 45, 1388, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1574, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 1254, 67, 67, 67, 67, 67, 1259, 67, 1261, 67, 67, 67, 67, 1265, 67, 67, 67, 67, 67, 67, 1708, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 1289, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1087, 25403, 1091, 66365, 1095, 0, 0, 97, 97, 97, 97, 1339, 97, 1341, 97, 97, 97, 97, 1345, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 573, 97, 97, 97, 97, 97, 97, 1717, 97, 0, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1329, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 97, 97, 97, 1365, 97, 97, 97, 97, 1369, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1399, 45, 45, 45, 1413, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1669, 45, 1422, 45, 45, 1425, 45, 45, 1428, 45, 1429, 67, 67, 67, 67, 67, 67, 67, 67, 1468, 67, 67, 67, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 539, 67, 67, 1475, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 97, 97, 1530, 97, 0, 45, 45, 1534, 45, 45, 45, 45, 45, 45, 45, 45, 1956, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 67, 67, 1601, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 67, 1632, 97, 1634, 0, 97, 97, 97, 1640, 97, 97, 97, 1643, 97, 97, 1645, 97, 97, 97, 97, 97, 912, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1660, 1661, 45, 45, 45, 45, 1665, 1666, 45, 45, 45, 45, 45, 1670, 1692, 1693, 67, 67, 67, 67, 67, 1697, 67, 67, 67, 67, 67, 67, 67, 1702, 97, 97, 1714, 1715, 97, 97, 97, 97, 0, 1721, 1722, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 97, 97, 1362, 1726, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 1734, 97, 97, 97, 97, 97, 848, 849, 97, 97, 97, 97, 856, 97, 97, 97, 97, 97, 354, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 45, 45, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1681, 45, 0, 1846, 97, 97, 97, 97, 97, 97, 45, 45, 1854, 45, 45, 45, 45, 1859, 67, 67, 67, 1879, 67, 67, 97, 97, 1884, 97, 97, 0, 0, 0, 97, 97, 97, 1105, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 1347, 97, 1892, 97, 0, 0, 0, 97, 97, 97, 1900, 97, 97, 45, 45, 45, 45, 45, 997, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1002, 45, 45, 1005, 1006, 45, 67, 67, 67, 67, 67, 1926, 67, 67, 1928, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1737, 97, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1944, 97, 97, 1946, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 190, 45, 45, 45, 152, 155, 45, 163, 45, 45, 177, 179, 182, 45, 45, 45, 193, 197, 45, 45, 45, 1672, 45, 45, 45, 45, 45, 1677, 45, 1679, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 67, 260, 264, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 295, 299, 302, 97, 310, 97, 97, 324, 326, 329, 97, 97, 97, 0, 97, 97, 1639, 0, 1641, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 97, 97, 97, 1523, 97, 97, 97, 97, 97, 97, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 97, 97, 312, 97, 97, 97, 97, 97, 97, 97, 97, 1123, 97, 97, 97, 97, 97, 97, 97, 340, 344, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 373, 375, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 435, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1410, 45, 45, 45, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 67, 67, 67, 67, 1969, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 2064, 2065, 0, 2066, 45, 521, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 465, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1933, 0, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 18, 640, 139621, 358, 641, 0, 0, 0, 0, 364, 0, 0, 367, 0, 618, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 97, 97, 881, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 569, 97, 97, 97, 97, 97, 369, 0, 45, 652, 45, 45, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1432, 67, 67, 67, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 67, 0, 1305, 0, 1311, 0, 1317, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 1724, 97, 97, 97, 777, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 535, 67, 67, 67, 67, 67, 67, 67, 814, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 837, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 97, 97, 97, 0, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1168, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 97, 97, 0, 1637, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1801, 45, 45, 97, 875, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1151, 1152, 97, 97, 97, 67, 67, 67, 1040, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 790, 67, 67, 67, 1180, 0, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 200, 45, 45, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 67, 67, 67, 0, 0, 0, 1481, 0, 1094, 0, 0, 97, 1483, 97, 97, 97, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 1633, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1381, 0, 0, 45, 45, 45, 45, 97, 97, 1727, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 636, 45, 45, 1760, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 67, 67, 1299, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1616, 97, 97, 1803, 45, 45, 45, 45, 1807, 45, 45, 45, 45, 45, 1813, 45, 45, 45, 67, 67, 1684, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 822, 67, 67, 37689, 544, 67, 67, 1818, 67, 67, 67, 67, 1822, 67, 67, 67, 67, 67, 1828, 67, 67, 67, 67, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2012, 2013, 45, 45, 67, 67, 67, 2018, 2019, 67, 67, 97, 67, 97, 97, 97, 1833, 97, 97, 0, 0, 97, 97, 1840, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 1733, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 1849, 97, 97, 97, 45, 45, 45, 45, 45, 1857, 45, 45, 45, 1910, 45, 1912, 45, 45, 1914, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 67, 1020, 67, 45, 1861, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1446, 67, 67, 67, 67, 67, 1876, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1890, 97, 97, 97, 97, 97, 1134, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 97, 97, 97, 580, 1935, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1906, 45, 67, 67, 67, 67, 2048, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 931, 45, 45, 45, 45, 45, 45, 1674, 45, 1676, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1871, 67, 67, 67, 67, 0, 97, 97, 45, 67, 0, 97, 2060, 2061, 0, 2063, 45, 67, 0, 97, 45, 45, 156, 45, 45, 45, 45, 45, 45, 45, 45, 45, 192, 45, 45, 45, 45, 1673, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 429, 45, 45, 45, 45, 67, 67, 67, 269, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 349, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 374, 45, 45, 67, 67, 213, 217, 67, 67, 67, 67, 67, 242, 67, 247, 67, 253, 45, 45, 698, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 399, 45, 45, 0, 0, 0, 0, 925, 41606, 0, 929, 0, 0, 45, 45, 45, 45, 45, 45, 1391, 45, 45, 1395, 45, 45, 45, 45, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 436, 45, 67, 67, 67, 67, 1041, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1776, 67, 67, 97, 97, 97, 1099, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 888, 97, 97, 97, 1131, 97, 97, 97, 97, 1135, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 97, 97, 883, 97, 97, 97, 97, 97, 97, 1310, 0, 0, 0, 1316, 0, 0, 0, 0, 1100, 0, 0, 0, 97, 97, 97, 97, 97, 1107, 97, 97, 97, 97, 97, 97, 97, 97, 1343, 97, 97, 97, 97, 97, 97, 1348, 0, 0, 1317, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1868, 67, 1870, 67, 67, 67, 67, 67, 1817, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 823, 67, 37689, 544, 67, 97, 1832, 97, 97, 1834, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 1732, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1177, 0, 0, 925, 0, 0, 0, 0, 97, 97, 97, 97, 0, 0, 1941, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1991, 1992, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1998, 134, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 941, 45, 45, 944, 45, 45, 45, 45, 45, 45, 952, 45, 45, 207, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 67, 67, 67, 37689, 544, 369, 650, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1682, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 835, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1725, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 1036, 67, 67, 67, 265, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 296, 97, 97, 97, 97, 314, 97, 97, 97, 97, 332, 334, 97, 97, 97, 97, 97, 1146, 1147, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 97, 97, 345, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 372, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 45, 45, 404, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 451, 452, 45, 45, 45, 67, 1683, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 490, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 1450, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 537, 538, 67, 67, 67, 67, 67, 506, 67, 67, 508, 67, 67, 511, 67, 67, 67, 67, 0, 1476, 0, 0, 0, 0, 0, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1484, 97, 97, 97, 97, 97, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1499, 97, 97, 97, 97, 97, 97, 97, 97, 97, 587, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 634, 635, 97, 97, 97, 97, 97, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 97, 97, 97, 369, 0, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 1001, 45, 45, 45, 45, 45, 45, 45, 45, 715, 45, 45, 45, 720, 45, 45, 45, 45, 45, 45, 45, 45, 728, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 840, 97, 97, 97, 97, 97, 1174, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 97, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 680, 45, 968, 45, 970, 45, 973, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 962, 45, 45, 45, 45, 45, 979, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 688, 45, 45, 45, 45, 45, 45, 45, 1007, 1008, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 1044, 67, 1046, 67, 1049, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 808, 67, 67, 0, 0, 0, 1102, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 97, 97, 97, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 1138, 97, 1140, 97, 1143, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 45, 1191, 45, 45, 45, 45, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 991, 45, 67, 67, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1048, 67, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 97, 1386, 45, 1387, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 455, 45, 457, 45, 45, 1424, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1433, 67, 1434, 67, 67, 67, 67, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 1593, 67, 67, 45, 45, 1805, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1814, 45, 45, 1816, 67, 67, 67, 67, 1820, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1829, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 821, 67, 67, 67, 37689, 544, 67, 1831, 97, 97, 97, 97, 1835, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1850, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 961, 45, 45, 45, 45, 965, 45, 967, 1907, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1920, 0, 1936, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 28672, 97, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2054, 97, 97, 291, 97, 97, 97, 97, 97, 97, 320, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 926, 1179, 0, 45, 377, 45, 45, 45, 381, 45, 45, 392, 45, 45, 396, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 45, 45, 45, 67, 67, 67, 67, 463, 67, 67, 67, 467, 67, 67, 478, 67, 67, 482, 67, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 1472, 67, 502, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1460, 67, 97, 97, 97, 97, 560, 97, 97, 97, 564, 97, 97, 575, 97, 97, 579, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 930, 97, 599, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 872, 97, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1758, 0, 362, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 934, 45, 45, 45, 164, 168, 174, 178, 45, 45, 45, 45, 45, 194, 45, 45, 45, 165, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 45, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1060, 67, 67, 67, 67, 67, 67, 1052, 1053, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1063, 97, 1157, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1167, 97, 97, 97, 97, 97, 1379, 97, 97, 97, 0, 0, 0, 45, 1383, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 1812, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1471, 67, 45, 1402, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 67, 1462, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 1517, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 1636, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 1705, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1842, 0, 0, 1779, 97, 97, 97, 1782, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1789, 97, 97, 0, 0, 0, 97, 1847, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 45, 737, 738, 67, 740, 67, 741, 67, 743, 67, 67, 67, 67, 67, 67, 1968, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 2062, 97, 45, 67, 0, 97, 45, 67, 67, 97, 97, 2001, 97, 0, 0, 2004, 97, 97, 0, 97, 97, 97, 97, 1797, 97, 97, 97, 97, 97, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 292, 97, 97, 97, 97, 311, 315, 321, 325, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1330, 97, 97, 1333, 1334, 97, 341, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 363, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 416, 45, 376, 45, 45, 45, 45, 382, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 45, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 414, 45, 45, 45, 418, 67, 67, 67, 462, 67, 67, 67, 67, 468, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 1604, 67, 67, 67, 67, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 1067, 67, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 274, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 504, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 517, 519, 541, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 554, 97, 97, 97, 559, 97, 97, 97, 97, 565, 97, 97, 97, 97, 97, 97, 97, 1718, 0, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 906, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 597, 97, 97, 97, 97, 97, 1520, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 1656, 45, 45, 45, 97, 97, 601, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 614, 616, 638, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 661, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1815, 45, 67, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 678, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 977, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 697, 67, 67, 748, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1274, 67, 67, 67, 67, 67, 67, 67, 67, 765, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 780, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1777, 67, 97, 97, 97, 97, 97, 97, 846, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 97, 1742, 45, 45, 45, 45, 45, 45, 45, 1747, 97, 97, 97, 863, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 1178, 925, 0, 1179, 0, 97, 97, 97, 878, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 954, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 963, 45, 45, 966, 45, 45, 157, 45, 45, 171, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 1022, 67, 67, 1026, 67, 67, 67, 1030, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 1605, 67, 67, 67, 1608, 67, 67, 67, 1039, 67, 67, 1042, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 67, 0, 1100, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 97, 97, 97, 97, 1116, 97, 97, 1120, 97, 97, 97, 1124, 97, 97, 97, 97, 97, 97, 562, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1133, 97, 97, 1136, 97, 97, 97, 97, 97, 97, 97, 97, 915, 917, 97, 97, 97, 97, 97, 0, 97, 1170, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1993, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 1278, 67, 0, 0, 0, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1189, 1204, 45, 45, 45, 1207, 45, 45, 1209, 45, 1210, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 45, 689, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 805, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1249, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1300, 0, 0, 0, 0, 0, 1267, 67, 67, 1269, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 97, 1349, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 97, 0, 1980, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 677, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 953, 67, 1437, 67, 1440, 67, 67, 67, 67, 1445, 67, 67, 67, 1448, 67, 67, 67, 67, 67, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 67, 67, 67, 1473, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1320, 0, 834, 97, 97, 97, 97, 1490, 97, 1493, 97, 97, 97, 97, 1498, 97, 97, 97, 1501, 97, 97, 97, 0, 97, 1638, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 916, 97, 97, 97, 97, 97, 97, 0, 1528, 97, 97, 97, 0, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1932, 0, 0, 1555, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1567, 45, 45, 158, 45, 45, 172, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 67, 212, 67, 67, 67, 67, 231, 235, 241, 245, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 472, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1651, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 45, 45, 67, 1704, 67, 1706, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1841, 97, 0, 1844, 97, 97, 97, 97, 1716, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1385, 1748, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1757, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 97, 97, 1780, 97, 97, 97, 0, 0, 1786, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1730, 0, 97, 97, 97, 97, 97, 1736, 97, 1738, 67, 97, 97, 97, 97, 97, 97, 0, 1838, 97, 97, 97, 97, 97, 0, 0, 97, 1729, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 1165, 97, 97, 97, 45, 1950, 45, 45, 45, 45, 45, 45, 45, 45, 1958, 67, 67, 67, 1962, 67, 67, 67, 67, 67, 1246, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1710, 97, 97, 97, 1999, 67, 97, 97, 97, 97, 0, 2003, 97, 97, 97, 0, 97, 97, 2008, 2009, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 2052, 67, 2053, 0, 0, 0, 0, 925, 41606, 0, 0, 930, 0, 45, 45, 45, 45, 45, 45, 1392, 45, 1394, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 1565, 45, 45, 45, 1568, 0, 97, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 28672, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 679, 45, 45, 67, 67, 266, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 346, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 362, 0, 364, 0, 367, 41098, 369, 140, 371, 45, 45, 45, 379, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 449, 45, 45, 45, 45, 45, 67, 67, 542, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 97, 0, 1794, 1795, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 97, 639, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 45, 731, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 251, 67, 67, 67, 67, 67, 798, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1073, 67, 67, 67, 860, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 873, 0, 0, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 921, 97, 0, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1250, 67, 67, 1253, 0, 0, 1312, 0, 0, 0, 1318, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 97, 1155, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1141, 97, 97, 67, 67, 1439, 67, 1441, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 67, 97, 97, 1492, 97, 1494, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 97, 67, 67, 67, 2037, 67, 97, 0, 0, 97, 97, 97, 2043, 97, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 232, 67, 67, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1975, 0, 0, 97, 874, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1142, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 65, 86, 117, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 63, 84, 115, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 61, 82, 113, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 59, 80, 111, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 57, 78, 109, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 55, 76, 107, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 53, 74, 105, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 51, 72, 103, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 49, 70, 101, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 47, 68, 99, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 45, 67, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 213085, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 0, 0, 44, 0, 0, 32863, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 41, 41, 41, 0, 0, 1138688, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 89, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 127, 127, 127, 127, 102432, 67, 262, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 342, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 360, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 45, 45, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1292, 67, 67, 1294, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1615, 97, 97, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 66, 87, 118, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 64, 85, 116, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 62, 83, 114, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 60, 81, 112, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 58, 79, 110, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 56, 77, 108, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 54, 75, 106, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 52, 73, 104, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 50, 71, 102, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 48, 69, 100, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 46, 67, 98, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 233472, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 69724, 53264, 18, 18, 49172, 0, 57366, 262144, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 45, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 28, 139621, 359, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1389, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 45, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1449, 67, 67, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1154, 97, 0, 0, 0, 0, 925, 41606, 927, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 67, 67, 45, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 951, 45, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 45, 0, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1488, 67, 67, 267, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 347, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 361, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 734, 45, 45, 45, 67, 67, 67, 67, 67, 742, 67, 67, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1214, 45, 45, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1361, 97, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 45, 45, 0, 0, 0, 0, 2220032, 0, 0, 1130496, 0, 0, 0, 0, 2170880, 2171020, 2170880, 2170880, 18, 0, 0, 131072, 0, 0, 0, 90112, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1485, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1390, 45, 1393, 45, 45, 45, 45, 1398, 45, 45, 45, 2170880, 2171167, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2721252, 2744320, 2170880, 2170880, 2170880, 2834432, 2840040, 2170880, 2908160, 2170880, 2170880, 2936832, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3014656, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 0, 2220032, 0, 0, 0, 1142784, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3215360, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 543, 0, 545, 0, 0, 2183168, 0, 0, 831, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 2170880, 2170880, 3092480, 2170880, 2170880, 3125248, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 0, 0, 0, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 0, 0, 0, 65820, 65820, 0, 287, 97, 97, 97, 97, 97, 1783, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1791, 0, 0, 546, 70179, 0, 0, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 97, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 0, 0, 147456, 0, 0, 0, 0, 925, 41606, 0, 928, 0, 0, 45, 45, 45, 45, 45, 45, 998, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 1564, 45, 45, 45, 45, 0, 2158592, 2158592, 0, 0, 0, 0, 2232320, 2232320, 2232320, 0, 2240512, 2240512, 2240512, 2240512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640 ]; JSONiqTokenizer.EXPECTED = [ 291, 300, 304, 341, 315, 309, 305, 295, 319, 323, 327, 329, 296, 333, 337, 339, 342, 346, 350, 294, 356, 360, 312, 367, 352, 371, 363, 375, 379, 383, 387, 391, 395, 726, 399, 405, 518, 684, 405, 405, 405, 405, 808, 405, 405, 405, 512, 405, 405, 405, 431, 405, 405, 406, 405, 405, 404, 405, 405, 405, 405, 405, 405, 405, 908, 631, 410, 415, 405, 414, 419, 608, 405, 429, 602, 405, 435, 443, 405, 441, 641, 478, 405, 447, 451, 450, 456, 643, 461, 460, 762, 679, 465, 469, 741, 473, 477, 482, 486, 492, 932, 931, 523, 498, 504, 720, 405, 510, 596, 405, 516, 941, 580, 522, 929, 527, 590, 589, 897, 939, 534, 538, 547, 551, 555, 559, 563, 567, 571, 969, 575, 708, 690, 689, 579, 584, 634, 405, 594, 731, 405, 600, 882, 405, 606, 895, 786, 452, 612, 405, 615, 620, 876, 624, 628, 638, 647, 651, 655, 659, 663, 667, 676, 683, 688, 695, 694, 791, 405, 699, 437, 405, 706, 714, 405, 712, 825, 870, 405, 718, 724, 769, 768, 823, 730, 735, 745, 751, 422, 755, 759, 425, 766, 902, 810, 587, 775, 888, 887, 405, 773, 992, 405, 779, 962, 405, 785, 781, 986, 790, 795, 797, 506, 500, 499, 801, 805, 814, 820, 829, 833, 837, 841, 845, 849, 853, 857, 861, 616, 865, 869, 868, 488, 405, 874, 816, 405, 880, 738, 405, 886, 892, 543, 405, 901, 906, 913, 912, 918, 494, 541, 922, 926, 936, 945, 949, 953, 957, 530, 966, 973, 960, 702, 701, 405, 979, 981, 405, 985, 747, 405, 990, 998, 914, 405, 996, 1004, 672, 975, 974, 1014, 1002, 1008, 670, 1012, 405, 405, 405, 405, 405, 401, 1018, 1022, 1026, 1106, 1071, 1111, 1111, 1111, 1082, 1145, 1030, 1101, 1034, 1038, 1106, 1106, 1106, 1106, 1046, 1206, 1052, 1106, 1072, 1111, 1111, 1042, 1134, 1065, 1111, 1112, 1056, 1160, 1207, 1062, 1204, 1208, 1069, 1106, 1106, 1106, 1076, 1111, 1207, 1161, 1122, 1205, 1064, 1094, 1106, 1106, 1107, 1111, 1111, 1111, 1078, 1086, 1207, 1092, 1098, 1046, 1058, 1106, 1106, 1110, 1111, 1111, 1116, 1120, 1161, 1126, 1202, 1104, 1106, 1145, 1146, 1129, 1138, 1088, 1151, 1048, 1157, 1153, 1132, 1141, 1165, 1107, 1111, 1172, 1179, 1109, 1183, 1175, 1143, 1147, 1187, 1108, 1191, 1195, 1144, 1199, 1168, 1212, 1216, 1220, 1224, 1228, 1232, 1236, 1557, 1247, 1241, 1241, 1038, 1434, 1241, 1241, 1241, 1241, 1254, 1275, 1617, 1241, 1280, 1287, 1241, 1241, 1241, 1287, 1241, 2114, 1291, 1241, 1243, 1241, 2049, 1824, 2094, 2095, 1520, 1309, 1241, 1241, 1302, 1241, 1321, 1311, 1241, 1241, 1313, 1778, 1325, 1336, 1241, 1241, 1325, 1330, 1353, 1241, 1241, 1695, 1354, 1241, 1241, 1241, 1294, 1686, 1331, 1241, 1696, 1368, 1241, 1338, 1370, 1241, 1392, 1399, 1364, 2017, 1406, 2016, 1405, 1716, 1406, 1407, 1422, 1417, 1421, 1241, 1241, 1241, 1349, 1426, 1241, 1774, 1756, 1241, 1773, 1241, 1241, 1345, 1964, 1812, 1432, 1241, 1241, 1345, 1993, 1459, 1241, 1241, 1241, 1395, 1848, 1767, 1465, 1241, 1241, 1394, 1847, 1242, 1477, 1241, 1241, 1428, 1241, 1445, 1492, 1241, 1241, 1438, 1241, 1499, 1241, 1241, 1241, 1455, 1241, 1818, 1448, 1241, 1250, 1241, 2026, 1623, 1449, 1241, 1612, 1616, 1241, 1614, 1241, 1257, 1241, 1241, 1985, 1292, 1586, 1512, 1241, 1517, 2050, 1526, 1674, 1519, 1524, 1647, 2051, 1532, 1537, 1551, 1544, 1550, 1555, 1561, 1571, 1578, 1584, 1590, 1591, 1653, 1595, 1602, 1606, 1610, 1634, 1628, 1640, 1633, 1645, 1241, 1241, 1241, 1469, 1241, 1970, 1651, 1241, 1270, 1241, 1241, 1819, 1449, 1241, 1293, 1664, 1241, 1241, 1481, 1485, 1574, 1672, 1241, 1241, 1513, 1317, 1487, 1684, 1241, 1241, 1533, 1299, 1694, 1241, 1241, 1295, 1241, 1241, 1241, 1546, 1700, 1241, 1241, 1707, 1241, 1713, 1241, 1849, 1715, 1241, 1720, 1241, 1276, 1267, 1241, 1241, 2107, 1657, 1864, 1241, 1881, 1241, 1326, 1292, 1241, 1685, 1358, 1724, 1338, 1241, 1363, 1362, 1342, 1340, 1361, 1339, 1833, 1372, 1360, 1833, 1833, 1342, 1343, 1835, 1341, 1731, 1738, 1344, 1241, 1745, 1241, 1379, 1241, 1241, 2092, 1241, 1388, 1761, 1754, 1241, 1386, 1241, 1400, 1760, 1241, 1241, 1241, 1598, 1734, 1241, 1241, 1241, 1635, 1645, 1241, 1780, 1766, 1241, 1241, 1332, 1771, 1241, 1241, 1629, 2079, 1241, 1242, 1784, 1241, 1241, 1680, 1639, 2063, 1790, 1241, 1241, 1741, 1241, 1241, 1800, 1241, 1241, 1762, 1473, 1241, 1806, 1241, 1241, 1786, 1240, 1709, 1241, 1241, 1241, 1668, 1811, 1241, 1940, 1241, 1401, 1974, 1241, 1408, 1413, 1382, 1241, 1816, 1241, 1241, 1802, 2086, 1811, 1241, 1817, 1945, 1823, 2095, 2095, 2047, 2094, 2046, 2080, 1241, 1409, 1312, 1376, 2096, 2048, 1241, 1241, 1807, 1241, 1241, 1241, 2035, 1241, 1241, 1828, 1241, 2057, 2061, 1241, 1241, 1843, 1241, 2059, 1241, 1241, 1241, 1690, 1847, 1241, 1241, 1241, 1703, 2102, 1848, 1241, 1241, 1853, 1292, 1848, 1241, 2016, 1857, 1241, 2002, 1868, 1241, 1436, 1241, 1241, 1271, 1305, 1241, 1874, 1241, 1241, 1884, 2037, 1892, 1241, 1890, 1241, 1461, 1241, 1241, 1795, 1241, 1241, 1891, 1241, 1878, 1241, 1888, 1241, 1888, 1905, 1896, 2087, 1912, 1903, 1241, 1911, 1906, 1916, 1905, 2027, 1863, 1925, 2088, 1859, 1861, 1922, 1927, 1931, 1935, 1494, 1241, 1241, 1918, 1907, 1939, 1917, 1944, 1949, 1241, 1241, 1451, 1955, 1241, 1241, 1241, 1796, 1727, 2061, 1241, 1241, 1899, 1241, 1660, 1968, 1241, 1241, 1951, 1678, 1978, 1241, 1241, 1241, 1839, 1241, 1241, 1984, 1982, 1241, 1488, 1241, 1241, 1624, 1450, 1989, 1241, 1241, 1241, 1870, 1995, 1292, 1241, 1241, 1958, 1261, 1241, 1996, 1241, 1241, 1241, 2039, 2008, 1241, 1241, 1750, 2000, 1241, 1256, 2001, 1960, 1241, 1564, 1241, 1504, 1241, 1241, 1442, 1241, 1241, 1564, 1528, 1263, 1241, 1508, 1241, 1241, 1468, 1498, 2006, 1540, 2015, 1539, 2014, 1748, 2013, 1539, 1831, 2014, 2012, 1500, 1567, 2022, 2021, 1241, 1580, 1241, 1241, 2033, 2037, 1791, 2045, 2031, 1241, 1621, 1241, 1641, 2044, 1241, 1241, 1241, 2093, 1241, 1241, 2055, 1241, 1241, 2067, 1241, 1283, 1241, 1241, 1241, 2101, 2071, 1241, 1241, 1241, 2073, 1848, 2040, 1241, 1241, 1241, 2077, 1241, 1241, 2106, 1241, 1241, 2084, 1241, 2111, 1241, 1241, 1381, 1380, 1241, 1241, 1241, 2100, 1241, 2129, 2118, 2122, 2126, 2197, 2133, 3010, 2825, 2145, 2698, 2156, 2226, 2160, 2161, 2165, 2174, 2293, 2194, 2630, 2201, 2203, 2152, 3019, 2226, 2263, 2209, 2213, 2218, 2269, 2292, 2269, 2269, 2184, 2226, 2238, 2148, 2151, 3017, 2245, 2214, 2269, 2269, 2185, 2226, 2292, 2269, 2291, 2269, 2269, 2269, 2292, 2205, 3019, 2226, 2226, 2160, 2160, 2160, 2261, 2160, 2160, 2160, 2262, 2276, 2160, 2160, 2277, 2216, 2283, 2216, 2269, 2269, 2268, 2269, 2267, 2269, 2269, 2269, 2271, 2568, 2292, 2269, 2293, 2269, 2182, 2190, 2269, 2186, 2226, 2226, 2226, 2226, 2227, 2160, 2160, 2160, 2160, 2263, 2160, 2275, 2277, 2282, 2215, 2217, 2269, 2269, 2291, 2269, 2269, 2293, 2291, 2269, 2220, 2269, 2295, 2294, 2269, 2269, 2305, 2233, 2262, 2278, 2218, 2269, 2234, 2226, 2226, 2228, 2160, 2160, 2160, 2289, 2220, 2294, 2294, 2269, 2269, 2304, 2269, 2160, 2160, 2287, 2269, 2269, 2305, 2269, 2269, 2312, 2269, 2269, 2225, 2226, 2160, 2287, 2289, 2219, 2304, 2295, 2314, 2234, 2226, 2314, 2269, 2226, 2226, 2160, 2288, 2219, 2222, 2304, 2296, 2269, 2224, 2160, 2160, 2269, 2302, 2294, 2314, 2224, 2226, 2288, 2220, 2294, 2269, 2290, 2269, 2269, 2293, 2269, 2269, 2269, 2269, 2270, 2221, 2313, 2225, 2227, 2160, 2300, 2269, 2225, 2261, 2309, 2234, 2229, 2223, 2318, 2318, 2318, 2328, 2336, 2340, 2344, 2350, 2637, 2712, 2358, 2362, 2372, 2135, 2378, 2398, 2135, 2135, 2135, 2135, 2136, 2417, 2241, 2135, 2378, 2135, 2135, 2980, 2984, 2135, 3006, 2135, 2135, 2135, 2945, 2931, 2425, 2400, 2135, 2135, 2135, 2954, 2135, 2481, 2433, 2135, 2135, 2988, 2824, 2135, 2135, 2482, 2434, 2135, 2135, 2440, 2445, 2452, 2135, 2135, 2998, 3002, 2961, 2441, 2446, 2453, 2463, 2974, 2135, 2135, 2135, 2140, 2642, 2709, 2459, 2470, 2465, 2135, 2135, 3005, 2135, 2135, 2987, 2823, 2458, 2469, 2464, 2975, 2135, 2135, 2135, 2353, 2488, 2447, 2324, 2974, 2135, 2409, 2459, 2448, 2135, 2961, 2487, 2446, 2476, 2323, 2973, 2135, 2135, 2135, 2354, 2476, 2974, 2135, 2135, 2135, 2957, 2135, 2135, 2960, 2135, 2135, 2135, 2363, 2409, 2459, 2474, 2465, 2487, 2571, 2973, 2135, 2135, 2168, 2973, 2135, 2135, 2135, 2959, 2135, 2135, 2135, 2506, 2135, 2957, 2488, 2170, 2135, 2135, 2135, 2960, 2135, 2818, 2493, 2135, 2135, 3033, 2135, 2135, 2135, 2934, 2819, 2494, 2135, 2135, 2135, 2976, 2780, 2499, 2135, 2135, 2135, 3000, 2968, 2135, 2935, 2135, 2135, 2135, 2364, 2507, 2135, 2135, 2934, 2135, 2135, 2780, 2492, 2507, 2135, 2135, 2506, 2780, 2135, 2135, 2782, 2780, 2135, 2782, 2135, 2783, 2374, 2514, 2135, 2135, 2135, 3007, 2530, 2974, 2135, 2135, 2135, 3008, 2135, 2135, 2134, 2135, 2526, 2531, 2975, 2135, 2135, 3042, 2581, 2575, 2956, 2135, 2135, 2135, 2394, 2135, 2508, 2535, 2840, 2844, 2495, 2135, 2135, 2136, 2684, 2537, 2842, 2846, 2135, 2136, 2561, 2581, 2551, 2536, 2841, 2845, 2975, 3043, 2582, 2843, 2555, 2135, 3040, 3044, 2538, 2844, 2975, 2135, 2135, 2253, 2644, 2672, 2542, 2554, 2135, 2135, 2346, 2873, 2551, 2555, 2135, 2135, 2135, 2381, 2559, 2565, 2538, 2553, 2135, 2560, 2914, 2576, 2590, 2135, 2135, 2135, 2408, 2136, 2596, 2624, 2135, 2135, 2135, 2409, 2135, 2618, 2597, 3008, 2135, 2135, 2380, 2956, 2601, 2135, 2135, 2135, 2410, 2620, 2624, 2135, 2136, 2383, 2135, 2135, 2783, 2623, 2135, 2135, 2393, 2888, 2136, 2621, 3008, 2135, 2618, 2618, 2622, 2135, 2135, 2405, 2414, 2619, 2384, 2624, 2135, 2136, 2950, 2135, 2138, 2135, 2139, 2135, 2604, 2623, 2135, 2140, 2878, 2665, 2957, 2622, 2135, 2135, 2428, 2762, 2606, 2612, 2135, 2135, 2501, 2586, 2604, 3038, 2135, 2604, 3036, 2387, 2958, 2386, 2135, 2141, 2135, 2421, 2387, 2385, 2135, 2385, 2384, 2384, 2135, 2386, 2628, 2384, 2135, 2135, 2501, 2596, 2591, 2135, 2135, 2135, 2400, 2135, 2634, 2135, 2135, 2559, 2580, 2575, 2648, 2135, 2135, 2135, 2429, 2649, 2135, 2135, 2135, 2435, 2654, 2658, 2135, 2135, 2135, 2436, 2649, 2178, 2659, 2135, 2135, 2595, 2601, 2669, 2677, 2135, 2135, 2616, 2957, 2879, 2665, 2691, 2135, 2363, 2367, 2900, 2878, 2664, 2690, 2975, 2877, 2643, 2670, 2974, 2671, 2975, 2135, 2135, 2619, 2608, 2669, 2673, 2135, 2135, 2653, 2177, 2672, 2135, 2135, 2135, 2486, 2168, 2251, 2255, 2695, 2974, 2709, 2135, 2135, 2135, 2487, 2169, 2399, 2716, 2975, 2135, 2363, 2770, 2776, 2640, 2717, 2135, 2135, 2729, 2135, 2135, 2641, 2718, 2135, 2135, 2135, 2505, 2135, 2640, 2257, 2974, 2135, 2727, 2975, 2135, 2365, 2332, 2895, 2957, 2135, 2959, 2135, 2365, 2749, 2754, 2959, 2958, 2958, 2135, 2380, 2793, 2799, 2135, 2735, 2738, 2135, 2381, 2135, 2135, 2940, 2974, 2135, 2744, 2135, 2135, 2739, 2519, 2976, 2745, 2135, 2135, 2135, 2509, 2755, 2135, 2135, 2135, 2510, 2772, 2778, 2135, 2135, 2740, 2520, 2135, 2771, 2777, 2135, 2135, 2759, 2750, 2792, 2798, 2135, 2135, 2781, 2392, 2779, 2135, 2135, 2135, 2521, 2135, 2679, 2248, 2135, 2135, 2681, 2480, 2135, 2135, 2786, 3000, 2135, 2679, 2683, 2135, 2135, 2416, 2135, 2135, 2135, 2525, 2135, 2730, 2135, 2135, 2135, 2560, 2581, 2135, 2805, 2135, 2135, 2804, 2962, 2832, 2974, 2135, 2382, 2135, 2135, 2958, 2135, 2135, 2960, 2135, 2829, 2833, 2975, 2961, 2965, 2969, 2973, 2968, 2972, 2135, 2135, 2135, 2641, 2135, 2515, 2966, 2970, 2851, 2478, 2135, 2135, 2808, 2135, 2809, 2135, 2135, 2135, 2722, 2852, 2479, 2135, 2135, 2815, 2135, 2135, 2766, 2853, 2480, 2135, 2857, 2479, 2135, 2388, 2723, 2135, 2364, 2331, 2894, 2858, 2480, 2135, 2135, 2850, 2478, 2135, 2135, 2135, 2806, 2864, 2135, 2399, 2256, 2974, 2865, 2135, 2135, 2862, 2135, 2135, 2135, 2685, 2807, 2865, 2135, 2135, 2807, 2863, 2135, 2135, 2135, 2686, 2884, 2807, 2135, 2809, 2807, 2135, 2135, 2807, 2806, 2705, 2810, 2808, 2700, 2869, 2702, 2702, 2702, 2704, 2883, 2135, 2135, 2135, 2730, 2884, 2135, 2135, 2135, 2731, 2321, 2546, 2135, 2135, 2876, 2255, 2889, 2322, 2547, 2135, 2401, 2135, 2135, 2135, 2949, 2367, 2893, 2544, 2973, 2906, 2973, 2135, 2135, 2877, 2663, 2368, 2901, 2907, 2974, 2366, 2899, 2905, 2972, 2920, 2974, 2135, 2135, 2911, 2900, 2920, 2363, 2913, 2918, 2465, 2941, 2975, 2135, 2135, 2924, 2928, 2974, 2945, 2931, 2135, 2135, 2135, 2765, 2136, 2955, 2135, 2135, 2939, 2931, 2380, 2135, 2135, 2380, 2135, 2135, 2135, 2780, 2507, 2137, 2135, 2137, 2135, 2139, 2135, 2806, 2810, 2135, 2135, 2135, 2992, 2135, 2135, 2962, 2966, 2970, 2974, 2135, 2135, 2787, 3014, 2135, 2521, 2993, 2135, 2135, 2135, 2803, 2135, 2135, 2135, 2618, 2607, 2997, 3001, 2135, 2135, 2963, 2967, 2971, 2975, 2135, 2135, 2791, 2797, 2135, 3009, 2999, 3003, 2787, 3001, 2135, 2135, 2964, 2968, 2785, 2999, 3003, 2135, 2135, 2135, 2804, 2785, 2999, 3004, 2135, 2135, 2135, 2807, 2135, 2135, 3023, 2135, 2135, 2135, 2811, 2135, 2135, 3027, 2135, 2135, 2135, 2837, 2968, 3028, 2135, 2135, 2135, 2875, 2135, 2784, 3029, 2135, 2408, 2457, 2446, 0, 14, 0, -2120220672, 1610612736, -2074083328, -2002780160, -2111830528, 1073872896, 1342177280, 1075807216, 4096, 16384, 2048, 8192, 0, 8192, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, -2145386496, 8388608, 1073741824, 0, 0x80000000, 0x80000000, 2097152, 2097152, 2097152, 536870912, 0, 0, 134217728, 33554432, 1536, 268435456, 268435456, 268435456, 268435456, 128, 256, 32, 0, 65536, 131072, 524288, 16777216, 268435456, 0x80000000, 1572864, 1835008, 640, 32768, 65536, 262144, 1048576, 2097152, 196608, 196800, 196608, 196608, 0, 131072, 131072, 131072, 196608, 196624, 196608, 196624, 196608, 196608, 128, 4096, 16384, 16384, 2048, 0, 4, 0, 0, 0x80000000, 2097152, 0, 1024, 32, 32, 0, 65536, 1572864, 1048576, 32768, 32768, 32768, 32768, 196608, 196608, 196608, 64, 64, 196608, 196608, 131072, 131072, 131072, 131072, 268435456, 268435456, 64, 196736, 196608, 196608, 196608, 131072, 196608, 196608, 16384, 4, 4, 4, 2, 32, 32, 65536, 1048576, 12582912, 1073741824, 0, 0, 2, 8, 16, 96, 2048, 32768, 0, 0, 131072, 268435456, 268435456, 268435456, 256, 256, 196608, 196672, 196608, 196608, 196608, 196608, 4, 0, 256, 256, 256, 256, 32, 32, 32768, 32, 32, 32, 32, 32768, 268435456, 268435456, 268435456, 196608, 196608, 196608, 196624, 196608, 196608, 196608, 16, 16, 16, 268435456, 196608, 64, 64, 64, 196608, 196608, 196608, 196672, 268435456, 64, 64, 196608, 196608, 16, 196608, 196608, 196608, 268435456, 64, 196608, 131072, 262144, 4194304, 25165824, 33554432, 134217728, 268435456, 268435456, 196608, 262152, 8, 256, 512, 3072, 16384, 200, -1073741816, 8392713, 40, 8392718, 520, 807404072, 40, 520, 100663304, 0, 0, -540651761, -540651761, 257589048, 0, 262144, 0, 0, 3, 8, 256, 0, 4, 6, 4100, 8388612, 0, 0, 0, 3, 4, 8, 256, 512, 1024, 0, 2097152, 0, 0, -537854471, -537854471, 0, 100663296, 0, 0, 1, 2, 0, 0, 0, 16384, 0, 0, 0, 96, 14336, 0, 0, 0, 7, 8, 234881024, 0, 0, 0, 8, 0, 0, 0, 0, 262144, 0, 0, 16, 64, 384, 512, 0, 1, 1, 0, 12582912, 0, 0, 0, 0, 33554432, 67108864, -606084144, -606084144, -606084138, 0, 0, 28, 32, 768, 1966080, -608174080, 0, 0, 0, 14, 35056, 16, 64, 896, 24576, 98304, 98304, 131072, 262144, 524288, 1048576, 4194304, 25165824, 1048576, 62914560, 134217728, -805306368, 0, 384, 512, 16384, 65536, 131072, 262144, 29360128, 33554432, 134217728, 268435456, 1073741824, 0x80000000, 262144, 524288, 1048576, 29360128, 33554432, 524288, 1048576, 16777216, 33554432, 134217728, 268435456, 1073741824, 0, 0, 0, 123856, 1966080, 0, 64, 384, 16384, 65536, 131072, 16384, 65536, 524288, 268435456, 0x80000000, 0, 0, 524288, 0x80000000, 0, 0, 1, 16, 0, 256, 524288, 0, 0, 0, 25, 96, 128, -537854471, 0, 0, 0, 32, 7404800, -545259520, 0, 0, 0, 60, 0, 249, 64768, 1048576, 6291456, 6291456, 25165824, 100663296, 402653184, 1073741824, 96, 128, 1280, 2048, 4096, 57344, 6291456, 57344, 6291456, 8388608, 16777216, 33554432, 201326592, 1342177280, 0x80000000, 0, 57344, 6291456, 8388608, 100663296, 134217728, 0x80000000, 0, 0, 0, 1, 8, 16, 64, 128, 64, 128, 256, 1024, 131072, 131072, 131072, 262144, 524288, 16777216, 57344, 6291456, 8388608, 67108864, 134217728, 64, 256, 1024, 2048, 4096, 57344, 64, 256, 0, 24576, 32768, 6291456, 67108864, 134217728, 0, 1, 64, 256, 24576, 32768, 4194304, 32768, 4194304, 67108864, 0, 0, 64, 256, 0, 0, 24576, 32768, 0, 16384, 4194304, 67108864, 64, 16384, 0, 0, 1, 64, 256, 16384, 4194304, 67108864, 0, 0, 0, 16384, 0, 16384, 16384, 0, -470447874, -470447874, -470447874, 0, 0, 128, 0, 0, 8, 96, 2048, 32768, 262144, 8388608, 35056, 1376256, -471859200, 0, 0, 14, 16, 224, 2048, 32768, 2097152, 4194304, 8388608, -486539264, 0, 96, 128, 2048, 32768, 262144, 2097152, 262144, 2097152, 8388608, 33554432, 536870912, 1073741824, 0x80000000, 0, 1610612736, 0x80000000, 0, 0, 1, 524288, 1048576, 12582912, 0, 0, 0, 151311, 264503296, 2097152, 8388608, 33554432, 1610612736, 0x80000000, 262144, 8388608, 33554432, 536870912, 67108864, 4194304, 0, 4194304, 0, 4194304, 4194304, 0, 0, 524288, 8388608, 536870912, 1073741824, 0x80000000, 1, 4097, 8388609, 96, 2048, 32768, 1073741824, 0x80000000, 0, 96, 2048, 0x80000000, 0, 0, 96, 2048, 0, 0, 1, 12582912, 0, 0, 0, 0, 1641895695, 1641895695, 0, 0, 0, 249, 7404800, 15, 87808, 1835008, 1639972864, 0, 768, 5120, 16384, 65536, 1835008, 1835008, 12582912, 16777216, 1610612736, 0, 3, 4, 8, 768, 4096, 65536, 0, 0, 256, 512, 786432, 8, 256, 512, 4096, 16384, 1835008, 16384, 1835008, 12582912, 1610612736, 0, 0, 0, 256, 0, 0, 0, 4, 8, 16, 32, 1, 2, 8, 256, 16384, 524288, 16384, 524288, 1048576, 12582912, 1610612736, 0, 0, 0, 8388608, 0, 0, 0, 524288, 4194304, 0, 0, 0, 8388608, -548662288, -548662288, -548662288, 0, 0, 256, 16384, 65536, 520093696, -1073741824, 0, 0, 0, 16777216, 0, 16, 32, 960, 4096, 4980736, 520093696, 1073741824, 0, 32, 896, 4096, 57344, 1048576, 6291456, 8388608, 16777216, 100663296, 134217728, 268435456, 0x80000000, 0, 512, 786432, 4194304, 33554432, 134217728, 268435456, 0, 786432, 4194304, 134217728, 268435456, 0, 524288, 4194304, 268435456, 0, 0, 0, 0, 0, 4194304, 4194304, -540651761, 0, 0, 0, 2, 4, 8, 16, 96, 128, 264503296, -805306368, 0, 0, 0, 8, 256, 512, 19456, 131072, 3072, 16384, 131072, 262144, 8388608, 16777216, 512, 1024, 2048, 16384, 131072, 262144, 131072, 262144, 8388608, 33554432, 201326592, 268435456, 0, 3, 4, 256, 1024, 2048, 57344, 16384, 131072, 8388608, 33554432, 134217728, 268435456, 0, 3, 256, 1024, 16384, 131072, 33554432, 134217728, 1073741824, 0x80000000, 0, 0, 256, 524288, 0x80000000, 0, 3, 256, 33554432, 134217728, 1073741824, 0, 1, 2, 33554432, 1, 2, 134217728, 1073741824, 0, 1, 2, 134217728, 0, 0, 0, 64, 0, 0, 0, 16, 32, 896, 4096, 786432, 4194304, 16777216, 33554432, 201326592, 268435456, 1073741824, 0x80000000, 0, 0, 0, 15, 0, 4980736, 4980736, 4980736, 70460, 70460, 3478332, 0, 0, 1008, 4984832, 520093696, 60, 4864, 65536, 0, 0, 0, 12, 16, 32, 256, 512, 4096, 65536, 0, 0, 0, 67108864, 0, 0, 0, 12, 0, 256, 512, 65536, 0, 0, 1024, 512, 131072, 131072, 4, 16, 32, 65536, 0, 4, 16, 32, 0, 0, 0, 4, 16, 0, 0, 16384, 67108864, 0, 0, 1, 24, 96, 128, 256, 1024 ]; JSONiqTokenizer.TOKEN = [ "(0)", "JSONChar", "JSONCharRef", "JSONPredefinedCharRef", "ModuleDecl", "Annotation", "OptionDecl", "Operator", "Variable", "Tag", "EndTag", "PragmaContents", "DirCommentContents", "DirPIContents", "CDataSectionContents", "AttrTest", "Wildcard", "EQName", "IntegerLiteral", "DecimalLiteral", "DoubleLiteral", "PredefinedEntityRef", "'\"\"'", "EscapeApos", "AposChar", "ElementContentChar", "QuotAttrContentChar", "AposAttrContentChar", "NCName", "QName", "S", "CharRef", "CommentContents", "DocTag", "DocCommentContents", "EOF", "'!'", "'\"'", "'#'", "'#)'", "'$$'", "''''", "'('", "'(#'", "'(:'", "'(:~'", "')'", "'*'", "'*'", "','", "'-->'", "'.'", "'/'", "'/>'", "':'", "':)'", "';'", "''), token: xmlcomment, next: function(stack){ stack.pop(); } } ], CData: [ { name: 'CDataSectionContents', token: cdata }, { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } } ], PI: [ { name: 'DirPIContents', token: pi }, { name: n('?'), token: pi }, { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } } ], AposString: [ { name: n('\'\''), token: 'string', next: function(stack){ stack.pop(); } }, { name: 'PredefinedEntityRef', token: 'constant.language.escape' }, { name: 'CharRef', token: 'constant.language.escape' }, { name: 'EscapeApos', token: 'constant.language.escape' }, { name: 'AposChar', token: 'string' } ], QuotString: [ { name: n('"'), token: 'string', next: function(stack){ stack.pop(); } }, { name: 'JSONPredefinedCharRef', token: 'constant.language.escape' }, { name: 'JSONCharRef', token: 'constant.language.escape' }, { name: 'JSONChar', token: 'string' } ] }; exports.JSONiqLexer = function(){ return new Lexer(JSONiqTokenizer, Rules); }; }, {"./JSONiqTokenizer":1,"./lexer":3}], 3:[function(_dereq_,module,exports){ 'use strict'; var TokenHandler = function(code) { var input = code; this.tokens = []; this.reset = function() { input = input; this.tokens = []; }; this.startNonterminal = function() {}; this.endNonterminal = function() {}; this.terminal = function(name, begin, end) { this.tokens.push({ name: name, value: input.substring(begin, end) }); }; this.whitespace = function(begin, end) { this.tokens.push({ name: 'WS', value: input.substring(begin, end) }); }; }; exports.Lexer = function(Tokenizer, Rules) { this.tokens = []; this.getLineTokens = function(line, state) { state = (state === 'start' || !state) ? '["start"]' : state; var stack = JSON.parse(state); var h = new TokenHandler(line); var tokenizer = new Tokenizer(line, h); var tokens = []; while(true) { var currentState = stack[stack.length - 1]; try { h.tokens = []; tokenizer['parse_' + currentState](); var info = null; if(h.tokens.length > 1 && h.tokens[0].name === 'WS') { tokens.push({ type: 'text', value: h.tokens[0].value }); h.tokens.splice(0, 1); } var token = h.tokens[0]; var rules = Rules[currentState]; for(var k = 0; k < rules.length; k++) { var rule = Rules[currentState][k]; if((typeof(rule.name) === 'function' && rule.name(token)) || rule.name === token.name) { info = rule; break; } } if(token.name === 'EOF') { break; } if(token.value === '') { throw 'Encountered empty string lexical rule.'; } tokens.push({ type: info === null ? 'text' : (typeof(info.token) === 'function' ? info.token(token.value) : info.token), value: token.value }); if(info && info.next) { info.next(stack); } } catch(e) { if(e instanceof tokenizer.ParseException) { var index = 0; for(var i=0; i < tokens.length; i++) { index += tokens[i].value.length; } tokens.push({ type: 'text', value: line.substring(index) }); return { tokens: tokens, state: JSON.stringify(['start']) }; } else { throw e; } } } return { tokens: tokens, state: JSON.stringify(stack) }; }; }; }, {}]},{},[2]) (2) }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === "') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken(); var atCursor = false; var state = JSON.parse(state).pop(); if ((token && token.value === '>') || state !== "StartTag") return; if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){ do { token = iterator.stepBackward(); } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text'))); } else { atCursor = true; } var previous = iterator.stepBackward(); if (!token || !hasType(token, 'meta.tag') || (previous !== null && previous.value.match('/'))) { return } var tag = token.value.substring(1); if (atCursor){ var tag = tag.substring(0, position.column - token.start); } return { text: '>' + '', selection: [1, 1] } } }); } oop.inherits(XQueryBehaviour, Behaviour); exports.XQueryBehaviour = XQueryBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/jsoniq",["require","exports","module","ace/worker/worker_client","ace/lib/oop","ace/mode/text","ace/mode/text_highlight_rules","ace/mode/xquery/jsoniq_lexer","ace/range","ace/mode/behaviour/xquery","ace/mode/folding/cstyle","ace/anchor"], function(require, exports, module) { "use strict"; var WorkerClient = require("../worker/worker_client").WorkerClient; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JSONiqLexer = require("./xquery/jsoniq_lexer").JSONiqLexer; var Range = require("../range").Range; var XQueryBehaviour = require("./behaviour/xquery").XQueryBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Anchor = require("../anchor").Anchor; var Mode = function() { this.$tokenizer = new JSONiqLexer(); this.$behaviour = new XQueryBehaviour(); this.foldingRules = new CStyleFoldMode(); this.$highlightRules = new TextHighlightRules(); }; oop.inherits(Mode, TextMode); (function() { this.completer = { getCompletions: function(editor, session, pos, prefix, callback) { if (!session.$worker) return callback(); session.$worker.emit("complete", { data: { pos: pos, prefix: prefix } }); session.$worker.on("complete", function(e){ callback(null, e.data); }); } }; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var match = line.match(/\s*(?:then|else|return|[{\(]|<\w+>)\s*$/); if (match) indent += tab; return indent; }; this.checkOutdent = function(state, line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*[\}\)]/.test(input); }; this.autoOutdent = function(state, doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*[\}\)])/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.toggleCommentLines = function(state, doc, startRow, endRow) { var i, line; var outdent = true; var re = /^\s*\(:(.*):\)/; for (i=startRow; i<= endRow; i++) { if (!re.test(doc.getLine(i))) { outdent = false; break; } } var range = new Range(0, 0, 0, 0); for (i=startRow; i<= endRow; i++) { line = doc.getLine(i); range.start.row = i; range.end.row = i; range.end.column = line.length; doc.replace(range, outdent ? line.match(re)[1] : "(:" + line + ":)"); } }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/xquery_worker", "XQueryWorker"); var that = this; worker.attachToDocument(session.getDocument()); worker.on("ok", function(e) { session.clearAnnotations(); }); worker.on("markers", function(e) { session.clearAnnotations(); that.addMarkers(e.data, session); }); return worker; }; this.removeMarkers = function(session) { var markers = session.getMarkers(false); for (var id in markers) { if (markers[id].clazz.indexOf('language_highlight_') === 0) { session.removeMarker(id); } } for (var i = 0; i < session.markerAnchors.length; i++) { session.markerAnchors[i].detach(); } session.markerAnchors = []; }; this.addMarkers = function(annos, mySession) { var _self = this; if (!mySession.markerAnchors) mySession.markerAnchors = []; this.removeMarkers(mySession); mySession.languageAnnos = []; annos.forEach(function(anno) { var anchor = new Anchor(mySession.getDocument(), anno.pos.sl, anno.pos.sc || 0); mySession.markerAnchors.push(anchor); var markerId; var colDiff = anno.pos.ec - anno.pos.sc; var rowDiff = anno.pos.el - anno.pos.sl; var gutterAnno = { guttertext: anno.message, type: anno.level || "warning", text: anno.message }; function updateFloat(single) { if (markerId) mySession.removeMarker(markerId); gutterAnno.row = anchor.row; if (anno.pos.sc !== undefined && anno.pos.ec !== undefined) { var range = new Range(anno.pos.sl, anno.pos.sc, anno.pos.el, anno.pos.ec); markerId = mySession.addMarker(range, "language_highlight_" + (anno.type ? anno.type : "default")); } if (single) mySession.setAnnotations(mySession.languageAnnos); } updateFloat(); anchor.on("change", function() { updateFloat(true); }); if (anno.message) mySession.languageAnnos.push(gutterAnno); }); mySession.setAnnotations(mySession.languageAnnos); }; this.$id = "ace/mode/jsoniq"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-jsp.js ================================================ ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/java_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaHighlightRules = function() { var keywords = ( "abstract|continue|for|new|switch|" + "assert|default|goto|package|synchronized|" + "boolean|do|if|private|this|" + "break|double|implements|protected|throw|" + "byte|else|import|public|throws|" + "case|enum|instanceof|return|transient|" + "catch|extends|int|short|try|" + "char|final|interface|static|void|" + "class|finally|long|strictfp|volatile|" + "const|float|native|super|while" ); var buildinConstants = ("null|Infinity|NaN|undefined"); var langClasses = ( "AbstractMethodError|AssertionError|ClassCircularityError|"+ "ClassFormatError|Deprecated|EnumConstantNotPresentException|"+ "ExceptionInInitializerError|IllegalAccessError|"+ "IllegalThreadStateException|InstantiationError|InternalError|"+ "NegativeArraySizeException|NoSuchFieldError|Override|Process|"+ "ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|"+ "SuppressWarnings|TypeNotPresentException|UnknownError|"+ "UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|"+ "InstantiationException|IndexOutOfBoundsException|"+ "ArrayIndexOutOfBoundsException|CloneNotSupportedException|"+ "NoSuchFieldException|IllegalArgumentException|NumberFormatException|"+ "SecurityException|Void|InheritableThreadLocal|IllegalStateException|"+ "InterruptedException|NoSuchMethodException|IllegalAccessException|"+ "UnsupportedOperationException|Enum|StrictMath|Package|Compiler|"+ "Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|"+ "NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|"+ "NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|"+ "Character|Boolean|StackTraceElement|Appendable|StringBuffer|"+ "Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|"+ "StackOverflowError|OutOfMemoryError|VirtualMachineError|"+ "ArrayStoreException|ClassCastException|LinkageError|"+ "NoClassDefFoundError|ClassNotFoundException|RuntimeException|"+ "Exception|ThreadDeath|Error|Throwable|System|ClassLoader|"+ "Cloneable|Class|CharSequence|Comparable|String|Object" ); var keywordMapper = this.createKeywordMapper({ "variable.language": "this", "keyword": keywords, "constant.language": buildinConstants, "support.function": langClasses }, "identifier"); this.$rules = { "start" : [ { token : "comment", regex : "\\/\\/.*$" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" }, { token : "lparen", regex : "[[({]" }, { token : "rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(JavaHighlightRules, TextHighlightRules); exports.JavaHighlightRules = JavaHighlightRules; }); ace.define("ace/mode/jsp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules","ace/mode/java_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var JavaHighlightRules = require("./java_highlight_rules").JavaHighlightRules; var JspHighlightRules = function() { HtmlHighlightRules.call(this); var builtinVariables = 'request|response|out|session|' + 'application|config|pageContext|page|Exception'; var keywords = 'page|include|taglib'; var startRules = [ { token : "comment", regex : "<%--", push : "jsp-dcomment" }, { token : "meta.tag", // jsp open tag regex : "<%@?|<%=?|]+>", push : "jsp-start" } ]; var endRules = [ { token : "meta.tag", // jsp close tag regex : "%>|<\\/jsp:[^>]+>", next : "pop" }, { token: "variable.language", regex : builtinVariables }, { token: "keyword", regex : keywords } ]; for (var key in this.$rules) this.$rules[key].unshift.apply(this.$rules[key], startRules); this.embedRules(JavaHighlightRules, "jsp-", endRules, ["start"]); this.addRules({ "jsp-dcomment" : [{ token : "comment", regex : ".*?--%>", next : "pop" }] }); this.normalizeRules(); }; oop.inherits(JspHighlightRules, HtmlHighlightRules); exports.JspHighlightRules = JspHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/jsp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/jsp_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JspHighlightRules = require("./jsp_highlight_rules").JspHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JspHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.$id = "ace/mode/jsp"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-jsx.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/jsx_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { var oop = require("../lib/oop"); var lang = require("../lib/lang"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JsxHighlightRules = function() { var keywords = lang.arrayToMap( ("break|do|instanceof|typeof|case|else|new|var|catch|finally|return|void|continue|for|switch|default|while|function|this|" + "if|throw|" + "delete|in|try|" + "class|extends|super|import|from|into|implements|interface|static|mixin|override|abstract|final|" + "number|int|string|boolean|variant|" + "log|assert").split("|") ); var buildinConstants = lang.arrayToMap( ("null|true|false|NaN|Infinity|__FILE__|__LINE__|undefined").split("|") ); var reserved = lang.arrayToMap( ("debugger|with|" + "const|export|" + "let|private|public|yield|protected|" + "extern|native|as|operator|__fake__|__readonly__").split("|") ); var identifierRe = "[a-zA-Z_][a-zA-Z0-9_]*\\b"; this.$rules = { "start" : [ { token : "comment", regex : "\\/\\/.*$" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : [ "storage.type", "text", "entity.name.function" ], regex : "(function)(\\s+)(" + identifierRe + ")" }, { token : function(value) { if (value == "this") return "variable.language"; else if (value == "function") return "storage.type"; else if (keywords.hasOwnProperty(value) || reserved.hasOwnProperty(value)) return "keyword"; else if (buildinConstants.hasOwnProperty(value)) return "constant.language"; else if (/^_?[A-Z][a-zA-Z0-9_]*$/.test(value)) return "language.support.class"; else return "identifier"; }, regex : identifierRe }, { token : "keyword.operator", regex : "!|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\." }, { token : "paren.lparen", regex : "[[({<]" }, { token : "paren.rparen", regex : "[\\])}>]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(JsxHighlightRules, TextHighlightRules); exports.JsxHighlightRules = JsxHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/jsx",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/jsx_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JsxHighlightRules = require("./jsx_highlight_rules").JsxHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; function Mode() { this.HighlightRules = JsxHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); } oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/jsx"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-julia.js ================================================ ace.define("ace/mode/julia_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JuliaHighlightRules = function() { this.$rules = { start: [ { include: '#function_decl' }, { include: '#function_call' }, { include: '#type_decl' }, { include: '#keyword' }, { include: '#operator' }, { include: '#number' }, { include: '#string' }, { include: '#comment' } ], '#bracket': [ { token: 'keyword.bracket.julia', regex: '\\(|\\)|\\[|\\]|\\{|\\}|,' } ], '#comment': [ { token: [ 'punctuation.definition.comment.julia', 'comment.line.number-sign.julia' ], regex: '(#)(?!\\{)(.*$)'} ], '#function_call': [ { token: [ 'support.function.julia', 'text' ], regex: '([a-zA-Z0-9_]+!?)([\\w\\xff-\\u218e\\u2455-\\uffff]*\\()'} ], '#function_decl': [ { token: [ 'keyword.other.julia', 'meta.function.julia', 'entity.name.function.julia', 'meta.function.julia','text' ], regex: '(function|macro)(\\s*)([a-zA-Z0-9_\\{]+!?)([\\w\\xff-\\u218e\\u2455-\\uffff]*)([(\\\\{])'} ], '#keyword': [ { token: 'keyword.other.julia', regex: '\\b(?:function|type|immutable|macro|quote|abstract|bitstype|typealias|module|baremodule|new)\\b' }, { token: 'keyword.control.julia', regex: '\\b(?:if|else|elseif|while|for|in|begin|let|end|do|try|catch|finally|return|break|continue)\\b' }, { token: 'storage.modifier.variable.julia', regex: '\\b(?:global|local|const|export|import|importall|using)\\b' }, { token: 'variable.macro.julia', regex: '@[\\w\\xff-\\u218e\\u2455-\\uffff]+\\b' } ], '#number': [ { token: 'constant.numeric.julia', regex: '\\b0(?:x|X)[0-9a-fA-F]*|(?:\\b[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]*)?(?:im)?|\\bInf(?:32)?\\b|\\bNaN(?:32)?\\b|\\btrue\\b|\\bfalse\\b' } ], '#operator': [ { token: 'keyword.operator.update.julia', regex: '=|:=|\\+=|-=|\\*=|/=|//=|\\.//=|\\.\\*=|\\\\=|\\.\\\\=|^=|\\.^=|%=|\\|=|&=|\\$=|<<=|>>=' }, { token: 'keyword.operator.ternary.julia', regex: '\\?|:' }, { token: 'keyword.operator.boolean.julia', regex: '\\|\\||&&|!' }, { token: 'keyword.operator.arrow.julia', regex: '->|<-|-->' }, { token: 'keyword.operator.relation.julia', regex: '>|<|>=|<=|==|!=|\\.>|\\.<|\\.>=|\\.>=|\\.==|\\.!=|\\.=|\\.!|<:|:>' }, { token: 'keyword.operator.range.julia', regex: ':' }, { token: 'keyword.operator.shift.julia', regex: '<<|>>' }, { token: 'keyword.operator.bitwise.julia', regex: '\\||\\&|~' }, { token: 'keyword.operator.arithmetic.julia', regex: '\\+|-|\\*|\\.\\*|/|\\./|//|\\.//|%|\\.%|\\\\|\\.\\\\|\\^|\\.\\^' }, { token: 'keyword.operator.isa.julia', regex: '::' }, { token: 'keyword.operator.dots.julia', regex: '\\.(?=[a-zA-Z])|\\.\\.+' }, { token: 'keyword.operator.interpolation.julia', regex: '\\$#?(?=.)' }, { token: [ 'variable', 'keyword.operator.transposed-variable.julia' ], regex: '([\\w\\xff-\\u218e\\u2455-\\uffff]+)((?:\'|\\.\')*\\.?\')' }, { token: 'text', regex: '\\[|\\('}, { token: [ 'text', 'keyword.operator.transposed-matrix.julia' ], regex: "([\\]\\)])((?:'|\\.')*\\.?')"} ], '#string': [ { token: 'punctuation.definition.string.begin.julia', regex: '\'', push: [ { token: 'punctuation.definition.string.end.julia', regex: '\'', next: 'pop' }, { include: '#string_escaped_char' }, { defaultToken: 'string.quoted.single.julia' } ] }, { token: 'punctuation.definition.string.begin.julia', regex: '"', push: [ { token: 'punctuation.definition.string.end.julia', regex: '"', next: 'pop' }, { include: '#string_escaped_char' }, { defaultToken: 'string.quoted.double.julia' } ] }, { token: 'punctuation.definition.string.begin.julia', regex: '\\b[\\w\\xff-\\u218e\\u2455-\\uffff]+"', push: [ { token: 'punctuation.definition.string.end.julia', regex: '"[\\w\\xff-\\u218e\\u2455-\\uffff]*', next: 'pop' }, { include: '#string_custom_escaped_char' }, { defaultToken: 'string.quoted.custom-double.julia' } ] }, { token: 'punctuation.definition.string.begin.julia', regex: '`', push: [ { token: 'punctuation.definition.string.end.julia', regex: '`', next: 'pop' }, { include: '#string_escaped_char' }, { defaultToken: 'string.quoted.backtick.julia' } ] } ], '#string_custom_escaped_char': [ { token: 'constant.character.escape.julia', regex: '\\\\"' } ], '#string_escaped_char': [ { token: 'constant.character.escape.julia', regex: '\\\\(?:\\\\|[0-3]\\d{,2}|[4-7]\\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8}|.)' } ], '#type_decl': [ { token: [ 'keyword.control.type.julia', 'meta.type.julia', 'entity.name.type.julia', 'entity.other.inherited-class.julia', 'punctuation.separator.inheritance.julia', 'entity.other.inherited-class.julia' ], regex: '(type|immutable)(\\s+)([a-zA-Z0-9_]+)(?:(\\s*)(<:)(\\s*[.a-zA-Z0-9_:]+))?' }, { token: [ 'other.typed-variable.julia', 'support.type.julia' ], regex: '([a-zA-Z0-9_]+)(::[a-zA-Z0-9_{}]+)' } ] } this.normalizeRules(); }; JuliaHighlightRules.metaData = { fileTypes: [ 'jl' ], firstLineMatch: '^#!.*\\bjulia\\s*$', foldingStartMarker: '^\\s*(?:if|while|for|begin|function|macro|module|baremodule|type|immutable|let)\\b(?!.*\\bend\\b).*$', foldingStopMarker: '^\\s*(?:end)\\b.*$', name: 'Julia', scopeName: 'source.julia' } oop.inherits(JuliaHighlightRules, TextHighlightRules); exports.JuliaHighlightRules = JuliaHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/julia",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/julia_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JuliaHighlightRules = require("./julia_highlight_rules").JuliaHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JuliaHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.blockComment = ""; this.$id = "ace/mode/julia"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-latex.js ================================================ ace.define("ace/mode/latex_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var LatexHighlightRules = function() { this.$rules = { "start" : [{ token : "comment", regex : "%.*$" }, { token : ["keyword", "lparen", "variable.parameter", "rparen", "lparen", "storage.type", "rparen"], regex : "(\\\\(?:documentclass|usepackage|input))(?:(\\[)([^\\]]*)(\\]))?({)([^}]*)(})" }, { token : ["keyword","lparen", "variable.parameter", "rparen"], regex : "(\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?" }, { token : ["storage.type", "lparen", "variable.parameter", "rparen"], regex : "(\\\\(?:begin|end))({)(\\w*)(})" }, { token : "storage.type", regex : "\\\\[a-zA-Z]+" }, { token : "lparen", regex : "[[({]" }, { token : "rparen", regex : "[\\])}]" }, { token : "constant.character.escape", regex : "\\\\[^a-zA-Z]?" }, { token : "string", regex : "\\${1,2}", next : "equation" }], "equation" : [{ token : "comment", regex : "%.*$" }, { token : "string", regex : "\\${1,2}", next : "start" }, { token : "constant.character.escape", regex : "\\\\(?:[^a-zA-Z]|[a-zA-Z]+)" }, { token : "error", regex : "^\\s*$", next : "start" }, { defaultToken : "string" }] }; }; oop.inherits(LatexHighlightRules, TextHighlightRules); exports.LatexHighlightRules = LatexHighlightRules; }); ace.define("ace/mode/folding/latex",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var TokenIterator = require("../../token_iterator").TokenIterator; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /^\s*\\(begin)|(section|subsection|paragraph)\b|{\s*$/; this.foldingStopMarker = /^\s*\\(end)\b|^\s*}/; this.getFoldWidgetRange = function(session, foldStyle, row) { var line = session.doc.getLine(row); var match = this.foldingStartMarker.exec(line); if (match) { if (match[1]) return this.latexBlock(session, row, match[0].length - 1); if (match[2]) return this.latexSection(session, row, match[0].length - 1); return this.openingBracketBlock(session, "{", row, match.index); } var match = this.foldingStopMarker.exec(line); if (match) { if (match[1]) return this.latexBlock(session, row, match[0].length - 1); return this.closingBracketBlock(session, "}", row, match.index + match[0].length); } }; this.latexBlock = function(session, row, column) { var keywords = { "\\begin": 1, "\\end": -1 }; var stream = new TokenIterator(session, row, column); var token = stream.getCurrentToken(); if (!token || !(token.type == "storage.type" || token.type == "constant.character.escape")) return; var val = token.value; var dir = keywords[val]; var getType = function() { var token = stream.stepForward(); var type = token.type == "lparen" ?stream.stepForward().value : ""; if (dir === -1) { stream.stepBackward(); if (type) stream.stepBackward(); } return type; }; var stack = [getType()]; var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length; var startRow = row; stream.step = dir === -1 ? stream.stepBackward : stream.stepForward; while(token = stream.step()) { if (!token || !(token.type == "storage.type" || token.type == "constant.character.escape")) continue; var level = keywords[token.value]; if (!level) continue; var type = getType(); if (level === dir) stack.unshift(type); else if (stack.shift() !== type || !stack.length) break; } if (stack.length) return; var row = stream.getCurrentTokenRow(); if (dir === -1) return new Range(row, session.getLine(row).length, startRow, startColumn); stream.stepBackward(); return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn()); }; this.latexSection = function(session, row, column) { var keywords = ["\\subsection", "\\section", "\\begin", "\\end", "\\paragraph"]; var stream = new TokenIterator(session, row, column); var token = stream.getCurrentToken(); if (!token || token.type != "storage.type") return; var startLevel = keywords.indexOf(token.value); var stackDepth = 0 var endRow = row; while(token = stream.stepForward()) { if (token.type !== "storage.type") continue; var level = keywords.indexOf(token.value); if (level >= 2) { if (!stackDepth) endRow = stream.getCurrentTokenRow() - 1; stackDepth += level == 2 ? 1 : - 1; if (stackDepth < 0) break } else if (level >= startLevel) break; } if (!stackDepth) endRow = stream.getCurrentTokenRow() - 1; while (endRow > row && !/\S/.test(session.getLine(endRow))) endRow--; return new Range( row, session.getLine(row).length, endRow, session.getLine(endRow).length ); }; }).call(FoldMode.prototype); }); ace.define("ace/mode/latex",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/latex_highlight_rules","ace/mode/folding/latex","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var LatexHighlightRules = require("./latex_highlight_rules").LatexHighlightRules; var LatexFoldMode = require("./folding/latex").FoldMode; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = LatexHighlightRules; this.foldingRules = new LatexFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.type = "text"; this.lineCommentStart = "%"; this.$id = "ace/mode/latex"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-less.js ================================================ ace.define("ace/mode/less_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var LessHighlightRules = function() { var properties = lang.arrayToMap( (function () { var browserPrefix = ("-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-").split("|"); var prefixProperties = ("appearance|background-clip|background-inline-policy|background-origin|" + "background-size|binding|border-bottom-colors|border-left-colors|" + "border-right-colors|border-top-colors|border-end|border-end-color|" + "border-end-style|border-end-width|border-image|border-start|" + "border-start-color|border-start-style|border-start-width|box-align|" + "box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|" + "box-pack|box-sizing|column-count|column-gap|column-width|column-rule|" + "column-rule-width|column-rule-style|column-rule-color|float-edge|" + "font-feature-settings|font-language-override|force-broken-image-icon|" + "image-region|margin-end|margin-start|opacity|outline|outline-color|" + "outline-offset|outline-radius|outline-radius-bottomleft|" + "outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|" + "outline-style|outline-width|padding-end|padding-start|stack-sizing|" + "tab-size|text-blink|text-decoration-color|text-decoration-line|" + "text-decoration-style|transform|transform-origin|transition|" + "transition-delay|transition-duration|transition-property|" + "transition-timing-function|user-focus|user-input|user-modify|user-select|" + "window-shadow|border-radius").split("|"); var properties = ("azimuth|background-attachment|background-color|background-image|" + "background-position|background-repeat|background|border-bottom-color|" + "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" + "border-color|border-left-color|border-left-style|border-left-width|" + "border-left|border-right-color|border-right-style|border-right-width|" + "border-right|border-spacing|border-style|border-top-color|" + "border-top-style|border-top-width|border-top|border-width|border|" + "bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|" + "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" + "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" + "font-stretch|font-style|font-variant|font-weight|font|height|left|" + "letter-spacing|line-height|list-style-image|list-style-position|" + "list-style-type|list-style|margin-bottom|margin-left|margin-right|" + "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" + "min-width|opacity|orphans|outline-color|" + "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" + "padding-left|padding-right|padding-top|padding|page-break-after|" + "page-break-before|page-break-inside|page|pause-after|pause-before|" + "pause|pitch-range|pitch|play-during|position|quotes|richness|right|" + "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" + "stress|table-layout|text-align|text-decoration|text-indent|" + "text-shadow|text-transform|top|unicode-bidi|vertical-align|" + "visibility|voice-family|volume|white-space|widows|width|word-spacing|" + "z-index").split("|"); var ret = []; for (var i=0, ln=browserPrefix.length; i|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" }, { caseInsensitive: true } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ] }; }; oop.inherits(LessHighlightRules, TextHighlightRules); exports.LessHighlightRules = LessHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/less",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/less_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var LessHighlightRules = require("./less_highlight_rules").LessHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = LessHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/less"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-liquid.js ================================================ ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/liquid_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/html_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var LiquidHighlightRules = function() { HtmlHighlightRules.call(this); var functions = ( "date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|" + "escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|" + "truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split" ); var keywords = ( "capture|endcapture|case|endcase|when|comment|endcomment|" + "cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|" + "style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow" ); var builtinVariables = 'forloop|tablerowloop'; var definitions = ("assign"); var keywordMapper = this.createKeywordMapper({ "variable.language": builtinVariables, "keyword": keywords, "support.function": functions, "keyword.definition": definitions }, "identifier"); for (var rule in this.$rules) { this.$rules[rule].unshift({ token : "variable", regex : "{%", push : "liquid-start" }, { token : "variable", regex : "{{", push : "liquid-start" }); } this.addRules({ "liquid-start" : [{ token: "variable", regex: "}}", next: "pop" }, { token: "variable", regex: "%}", next: "pop" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "\/|\\*|\\-|\\+|=|!=|\\?\\:" }, { token : "paren.lparen", regex : /[\[\({]/ }, { token : "paren.rparen", regex : /[\])}]/ }, { token : "text", regex : "\\s+" }] }); this.normalizeRules(); }; oop.inherits(LiquidHighlightRules, TextHighlightRules); exports.LiquidHighlightRules = LiquidHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/liquid",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/liquid_highlight_rules","ace/mode/matching_brace_outdent","ace/range"], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var LiquidHighlightRules = require("./liquid_highlight_rules").LiquidHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = LiquidHighlightRules; this.$outdent = new MatchingBraceOutdent(); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/liquid"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-lisp.js ================================================ ace.define("ace/mode/lisp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var LispHighlightRules = function() { var keywordControl = "case|do|let|loop|if|else|when"; var keywordOperator = "eq|neq|and|or"; var constantLanguage = "null|nil"; var supportFunctions = "cons|car|cdr|cond|lambda|format|setq|setf|quote|eval|append|list|listp|memberp|t|load|progn"; var keywordMapper = this.createKeywordMapper({ "keyword.control": keywordControl, "keyword.operator": keywordOperator, "constant.language": constantLanguage, "support.function": supportFunctions }, "identifier", true); this.$rules = { "start": [ { token : "comment", regex : ";.*$" }, { token: ["storage.type.function-type.lisp", "text", "entity.name.function.lisp"], regex: "(?:\\b(?:(defun|defmethod|defmacro))\\b)(\\s+)((?:\\w|\\-|\\!|\\?)*)" }, { token: ["punctuation.definition.constant.character.lisp", "constant.character.lisp"], regex: "(#)((?:\\w|[\\\\+-=<>'\"&#])+)" }, { token: ["punctuation.definition.variable.lisp", "variable.other.global.lisp", "punctuation.definition.variable.lisp"], regex: "(\\*)(\\S*)(\\*)" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "string", regex : '"(?=.)', next : "qqstring" } ], "qqstring": [ { token: "constant.character.escape.lisp", regex: "\\\\." }, { token : "string", regex : '[^"\\\\]+' }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "start" } ] } }; oop.inherits(LispHighlightRules, TextHighlightRules); exports.LispHighlightRules = LispHighlightRules; }); ace.define("ace/mode/lisp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/lisp_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var LispHighlightRules = require("./lisp_highlight_rules").LispHighlightRules; var Mode = function() { this.HighlightRules = LispHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = ";"; this.$id = "ace/mode/lisp"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-livescript.js ================================================ ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/livescript",["require","exports","module","ace/tokenizer","ace/mode/matching_brace_outdent","ace/range","ace/mode/text"], function(require, exports, module){ var identifier, LiveScriptMode, keywordend, stringfill; identifier = '(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*'; exports.Mode = LiveScriptMode = (function(superclass){ var indenter, prototype = extend$((import$(LiveScriptMode, superclass).displayName = 'LiveScriptMode', LiveScriptMode), superclass).prototype, constructor = LiveScriptMode; function LiveScriptMode(){ var that; this.$tokenizer = new (require('../tokenizer')).Tokenizer(LiveScriptMode.Rules); if (that = require('../mode/matching_brace_outdent')) { this.$outdent = new that.MatchingBraceOutdent; } this.$id = "ace/mode/livescript"; } indenter = RegExp('(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*' + identifier + ')?))\\s*$'); prototype.getNextLineIndent = function(state, line, tab){ var indent, tokens; indent = this.$getIndent(line); tokens = this.$tokenizer.getLineTokens(line, state).tokens; if (!(tokens.length && tokens[tokens.length - 1].type === 'comment')) { if (state === 'start' && indenter.test(line)) { indent += tab; } } return indent; }; prototype.toggleCommentLines = function(state, doc, startRow, endRow){ var comment, range, i$, i, out, line; comment = /^(\s*)#/; range = new (require('../range')).Range(0, 0, 0, 0); for (i$ = startRow; i$ <= endRow; ++i$) { i = i$; if (out = comment.test(line = doc.getLine(i))) { line = line.replace(comment, '$1'); } else { line = line.replace(/^\s*/, '$&#'); } range.end.row = range.start.row = i; range.end.column = line.length + 1; doc.replace(range, line); } return 1 - out * 2; }; prototype.checkOutdent = function(state, line, input){ var ref$; return (ref$ = this.$outdent) != null ? ref$.checkOutdent(line, input) : void 8; }; prototype.autoOutdent = function(state, doc, row){ var ref$; return (ref$ = this.$outdent) != null ? ref$.autoOutdent(doc, row) : void 8; }; return LiveScriptMode; }(require('../mode/text').Mode)); keywordend = '(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))'; stringfill = { token: 'string', regex: '.+' }; LiveScriptMode.Rules = { start: [ { token: 'keyword', regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend }, { token: 'constant.language', regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend }, { token: 'invalid.illegal', regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend }, { token: 'language.support.class', regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend }, { token: 'language.support.function', regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend }, { token: 'variable.language', regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend }, { token: 'identifier', regex: identifier + '\\s*:(?![:=])' }, { token: 'variable', regex: identifier }, { token: 'keyword.operator', regex: '(?:\\.{3}|\\s+\\?)' }, { token: 'keyword.variable', regex: '(?:@+|::|\\.\\.)', next: 'key' }, { token: 'keyword.operator', regex: '\\.\\s*', next: 'key' }, { token: 'string', regex: '\\\\\\S[^\\s,;)}\\]]*' }, { token: 'string.doc', regex: '\'\'\'', next: 'qdoc' }, { token: 'string.doc', regex: '"""', next: 'qqdoc' }, { token: 'string', regex: '\'', next: 'qstring' }, { token: 'string', regex: '"', next: 'qqstring' }, { token: 'string', regex: '`', next: 'js' }, { token: 'string', regex: '<\\[', next: 'words' }, { token: 'string.regex', regex: '//', next: 'heregex' }, { token: 'comment.doc', regex: '/\\*', next: 'comment' }, { token: 'comment', regex: '#.*' }, { token: 'string.regex', regex: '\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}', next: 'key' }, { token: 'constant.numeric', regex: '(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)' }, { token: 'lparen', regex: '[({[]' }, { token: 'rparen', regex: '[)}\\]]', next: 'key' }, { token: 'keyword.operator', regex: '\\S+' }, { token: 'text', regex: '\\s+' } ], heregex: [ { token: 'string.regex', regex: '.*?//[gimy$?]{0,4}', next: 'start' }, { token: 'string.regex', regex: '\\s*#{' }, { token: 'comment.regex', regex: '\\s+(?:#.*)?' }, { token: 'string.regex', regex: '\\S+' } ], key: [ { token: 'keyword.operator', regex: '[.?@!]+' }, { token: 'identifier', regex: identifier, next: 'start' }, { token: 'text', regex: '.', next: 'start' } ], comment: [ { token: 'comment.doc', regex: '.*?\\*/', next: 'start' }, { token: 'comment.doc', regex: '.+' } ], qdoc: [ { token: 'string', regex: ".*?'''", next: 'key' }, stringfill ], qqdoc: [ { token: 'string', regex: '.*?"""', next: 'key' }, stringfill ], qstring: [ { token: 'string', regex: '[^\\\\\']*(?:\\\\.[^\\\\\']*)*\'', next: 'key' }, stringfill ], qqstring: [ { token: 'string', regex: '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"', next: 'key' }, stringfill ], js: [ { token: 'string', regex: '[^\\\\`]*(?:\\\\.[^\\\\`]*)*`', next: 'key' }, stringfill ], words: [ { token: 'string', regex: '.*?\\]>', next: 'key' }, stringfill ] }; function extend$(sub, sup){ function fun(){} fun.prototype = (sub.superclass = sup).prototype; (sub.prototype = new fun).constructor = sub; if (typeof sup.extended == 'function') sup.extended(sub); return sub; } function import$(obj, src){ var own = {}.hasOwnProperty; for (var key in src) if (own.call(src, key)) obj[key] = src[key]; return obj; } }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-logiql.js ================================================ ace.define("ace/mode/logiql_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var LogiQLHighlightRules = function() { this.$rules = { start: [ { token: 'comment.block', regex: '/\\*', push: [ { token: 'comment.block', regex: '\\*/', next: 'pop' }, { defaultToken: 'comment.block' } ], }, { token: 'comment.single', regex: '//.*', }, { token: 'constant.numeric', regex: '\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?[fd]?', }, { token: 'string', regex: '"', push: [ { token: 'string', regex: '"', next: 'pop' }, { defaultToken: 'string' } ], }, { token: 'constant.language', regex: '\\b(true|false)\\b', }, { token: 'entity.name.type.logicblox', regex: '`[a-zA-Z_:]+(\\d|\\a)*\\b', }, { token: 'keyword.start', regex: '->', comment: 'Constraint' }, { token: 'keyword.start', regex: '-->', comment: 'Level 1 Constraint'}, { token: 'keyword.start', regex: '<-', comment: 'Rule' }, { token: 'keyword.start', regex: '<--', comment: 'Level 1 Rule' }, { token: 'keyword.end', regex: '\\.', comment: 'Terminator' }, { token: 'keyword.other', regex: '!', comment: 'Negation' }, { token: 'keyword.other', regex: ',', comment: 'Conjunction' }, { token: 'keyword.other', regex: ';', comment: 'Disjunction' }, { token: 'keyword.operator', regex: '<=|>=|!=|<|>', comment: 'Equality'}, { token: 'keyword.other', regex: '@', comment: 'Equality' }, { token: 'keyword.operator', regex: '\\+|-|\\*|/', comment: 'Arithmetic operations'}, { token: 'keyword', regex: '::', comment: 'Colon colon' }, { token: 'support.function', regex: '\\b(agg\\s*<<)', push: [ { include: '$self' }, { token: 'support.function', regex: '>>', next: 'pop' } ], }, { token: 'storage.modifier', regex: '\\b(lang:[\\w:]*)', }, { token: [ 'storage.type', 'text' ], regex: '(export|sealed|clauses|block|alias|alias_all)(\\s*\\()(?=`)', }, { token: 'entity.name', regex: '[a-zA-Z_][a-zA-Z_0-9:]*(@prev|@init|@final)?(?=(\\(|\\[))', }, { token: 'variable.parameter', regex: '([a-zA-Z][a-zA-Z_0-9]*|_)\\s*(?=(,|\\.|<-|->|\\)|\\]|=))', } ] } this.normalizeRules(); }; oop.inherits(LogiQLHighlightRules, TextHighlightRules); exports.LogiQLHighlightRules = LogiQLHighlightRules; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/logiql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/logiql_highlight_rules","ace/mode/folding/coffee","ace/token_iterator","ace/range","ace/mode/behaviour/cstyle","ace/mode/matching_brace_outdent"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var LogiQLHighlightRules = require("./logiql_highlight_rules").LogiQLHighlightRules; var FoldMode = require("./folding/coffee").FoldMode; var TokenIterator = require("../token_iterator").TokenIterator; var Range = require("../range").Range; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Mode = function() { this.HighlightRules = LogiQLHighlightRules; this.foldingRules = new FoldMode(); this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (/comment|string/.test(endState)) return indent; if (tokens.length && tokens[tokens.length - 1].type == "comment.single") return indent; var match = line.match(); if (/(-->|<--|<-|->|{)\s*$/.test(line)) indent += tab; return indent; }; this.checkOutdent = function(state, line, input) { if (this.$outdent.checkOutdent(line, input)) return true; if (input !== "\n" && input !== "\r\n") return false; if (!/^\s+/.test(line)) return false; return true; }; this.autoOutdent = function(state, doc, row) { if (this.$outdent.autoOutdent(doc, row)) return; var prevLine = doc.getLine(row); var match = prevLine.match(/^\s+/); var column = prevLine.lastIndexOf(".") + 1; if (!match || !row || !column) return 0; var line = doc.getLine(row + 1); var startRange = this.getMatching(doc, {row: row, column: column}); if (!startRange || startRange.start.row == row) return 0; column = match[0].length; var indent = this.$getIndent(doc.getLine(startRange.start.row)); doc.replace(new Range(row + 1, 0, row + 1, column), indent); }; this.getMatching = function(session, row, column) { if (row == undefined) row = session.selection.lead if (typeof row == "object") { column = row.column; row = row.row; } var startToken = session.getTokenAt(row, column); var KW_START = "keyword.start", KW_END = "keyword.end"; var tok; if (!startToken) return; if (startToken.type == KW_START) { var it = new TokenIterator(session, row, column); it.step = it.stepForward; } else if (startToken.type == KW_END) { var it = new TokenIterator(session, row, column); it.step = it.stepBackward; } else return; while (tok = it.step()) { if (tok.type == KW_START || tok.type == KW_END) break; } if (!tok || tok.type == startToken.type) return; var col = it.getCurrentTokenColumn(); var row = it.getCurrentTokenRow(); return new Range(row, col, row, col + tok.value.length); }; this.$id = "ace/mode/logiql"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-lsl.js ================================================ ace.define("ace/mode/lsl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; oop.inherits(LSLHighlightRules, TextHighlightRules); function LSLHighlightRules() { var keywordMapper = this.createKeywordMapper({ "constant.language.float.lsl" : "DEG_TO_RAD|PI|PI_BY_TWO|RAD_TO_DEG|SQRT2|TWO_PI", "constant.language.integer.lsl": "ACTIVE|AGENT|AGENT_ALWAYS_RUN|AGENT_ATTACHMENTS|AGENT_AUTOPILOT|AGENT_AWAY|AGENT_BUSY|AGENT_BY_LEGACY_NAME|AGENT_BY_USERNAME|AGENT_CROUCHING|AGENT_FLYING|AGENT_IN_AIR|AGENT_LIST_PARCEL|AGENT_LIST_PARCEL_OWNER|AGENT_LIST_REGION|AGENT_MOUSELOOK|AGENT_ON_OBJECT|AGENT_SCRIPTED|AGENT_SITTING|AGENT_TYPING|AGENT_WALKING|ALL_SIDES|ANIM_ON|ATTACH_AVATAR_CENTER|ATTACH_BACK|ATTACH_BELLY|ATTACH_CHEST|ATTACH_CHIN|ATTACH_HEAD|ATTACH_HUD_BOTTOM|ATTACH_HUD_BOTTOM_LEFT|ATTACH_HUD_BOTTOM_RIGHT|ATTACH_HUD_CENTER_1|ATTACH_HUD_CENTER_2|ATTACH_HUD_TOP_CENTER|ATTACH_HUD_TOP_LEFT|ATTACH_HUD_TOP_RIGHT|ATTACH_LEAR|ATTACH_LEFT_PEC|ATTACH_LEYE|ATTACH_LFOOT|ATTACH_LHAND|ATTACH_LHIP|ATTACH_LLARM|ATTACH_LLLEG|ATTACH_LSHOULDER|ATTACH_LUARM|ATTACH_LULEG|ATTACH_MOUTH|ATTACH_NECK|ATTACH_NOSE|ATTACH_PELVIS|ATTACH_REAR|ATTACH_REYE|ATTACH_RFOOT|ATTACH_RHAND|ATTACH_RHIP|ATTACH_RIGHT_PEC|ATTACH_RLARM|ATTACH_RLLEG|ATTACH_RSHOULDER|ATTACH_RUARM|ATTACH_RULEG|AVOID_CHARACTERS|AVOID_DYNAMIC_OBSTACLES|AVOID_NONE|CAMERA_ACTIVE|CAMERA_BEHINDNESS_ANGLE|CAMERA_BEHINDNESS_LAG|CAMERA_DISTANCE|CAMERA_FOCUS|CAMERA_FOCUS_LAG|CAMERA_FOCUS_LOCKED|CAMERA_FOCUS_OFFSET|CAMERA_FOCUS_THRESHOLD|CAMERA_PITCH|CAMERA_POSITION|CAMERA_POSITION_LAG|CAMERA_POSITION_LOCKED|CAMERA_POSITION_THRESHOLD|CHANGED_ALLOWED_DROP|CHANGED_COLOR|CHANGED_INVENTORY|CHANGED_LINK|CHANGED_MEDIA|CHANGED_OWNER|CHANGED_REGION|CHANGED_REGION_START|CHANGED_SCALE|CHANGED_SHAPE|CHANGED_TELEPORT|CHANGED_TEXTURE|CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES|CHARACTER_AVOIDANCE_MODE|CHARACTER_CMD_JUMP|CHARACTER_CMD_SMOOTH_STOP|CHARACTER_CMD_STOP|CHARACTER_DESIRED_SPEED|CHARACTER_DESIRED_TURN_SPEED|CHARACTER_LENGTH|CHARACTER_MAX_ACCEL|CHARACTER_MAX_DECEL|CHARACTER_MAX_SPEED|CHARACTER_MAX_TURN_RADIUS|CHARACTER_ORIENTATION|CHARACTER_RADIUS|CHARACTER_STAY_WITHIN_PARCEL|CHARACTER_TYPE|CHARACTER_TYPE_A|CHARACTER_TYPE_B|CHARACTER_TYPE_C|CHARACTER_TYPE_D|CHARACTER_TYPE_NONE|CLICK_ACTION_BUY|CLICK_ACTION_NONE|CLICK_ACTION_OPEN|CLICK_ACTION_OPEN_MEDIA|CLICK_ACTION_PAY|CLICK_ACTION_PLAY|CLICK_ACTION_SIT|CLICK_ACTION_TOUCH|CONTENT_TYPE_ATOM|CONTENT_TYPE_FORM|CONTENT_TYPE_HTML|CONTENT_TYPE_JSON|CONTENT_TYPE_LLSD|CONTENT_TYPE_RSS|CONTENT_TYPE_TEXT|CONTENT_TYPE_XHTML|CONTENT_TYPE_XML|CONTROL_BACK|CONTROL_DOWN|CONTROL_FWD|CONTROL_LBUTTON|CONTROL_LEFT|CONTROL_ML_LBUTTON|CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|CONTROL_UP|DATA_BORN|DATA_NAME|DATA_ONLINE|DATA_PAYINFO|DATA_SIM_POS|DATA_SIM_RATING|DATA_SIM_STATUS|DEBUG_CHANNEL|DENSITY|ERR_GENERIC|ERR_MALFORMED_PARAMS|ERR_PARCEL_PERMISSIONS|ERR_RUNTIME_PERMISSIONS|ERR_THROTTLED|ESTATE_ACCESS_ALLOWED_AGENT_ADD|ESTATE_ACCESS_ALLOWED_AGENT_REMOVE|ESTATE_ACCESS_ALLOWED_GROUP_ADD|ESTATE_ACCESS_ALLOWED_GROUP_REMOVE|ESTATE_ACCESS_BANNED_AGENT_ADD|ESTATE_ACCESS_BANNED_AGENT_REMOVE|FALSE|FORCE_DIRECT_PATH|FRICTION|GCNP_RADIUS|GCNP_STATIC|GRAVITY_MULTIPLIER|HORIZONTAL|HTTP_BODY_MAXLENGTH|HTTP_BODY_TRUNCATED|HTTP_CUSTOM_HEADER|HTTP_METHOD|HTTP_MIMETYPE|HTTP_PRAGMA_NO_CACHE|HTTP_VERBOSE_THROTTLE|HTTP_VERIFY_CERT|INVENTORY_ALL|INVENTORY_ANIMATION|INVENTORY_BODYPART|INVENTORY_CLOTHING|INVENTORY_GESTURE|INVENTORY_LANDMARK|INVENTORY_NONE|INVENTORY_NOTECARD|INVENTORY_OBJECT|INVENTORY_SCRIPT|INVENTORY_SOUND|INVENTORY_TEXTURE|JSON_APPEND|KFM_CMD_PAUSE|KFM_CMD_PLAY|KFM_CMD_SET_MODE|KFM_CMD_STOP|KFM_COMMAND|KFM_DATA|KFM_FORWARD|KFM_LOOP|KFM_MODE|KFM_PING_PONG|KFM_REVERSE|KFM_ROTATION|KFM_TRANSLATION|LAND_LEVEL|LAND_LOWER|LAND_NOISE|LAND_RAISE|LAND_REVERT|LAND_SMOOTH|LINK_ALL_CHILDREN|LINK_ALL_OTHERS|LINK_ROOT|LINK_SET|LINK_THIS|LIST_STAT_GEOMETRIC_MEAN|LIST_STAT_MAX|LIST_STAT_MEAN|LIST_STAT_MEDIAN|LIST_STAT_MIN|LIST_STAT_NUM_COUNT|LIST_STAT_RANGE|LIST_STAT_STD_DEV|LIST_STAT_SUM|LIST_STAT_SUM_SQUARES|LOOP|MASK_BASE|MASK_EVERYONE|MASK_GROUP|MASK_NEXT|MASK_OWNER|OBJECT_ATTACHED_POINT|OBJECT_CHARACTER_TIME|OBJECT_CREATOR|OBJECT_DESC|OBJECT_GROUP|OBJECT_NAME|OBJECT_OWNER|OBJECT_PATHFINDING_TYPE|OBJECT_PHANTOM|OBJECT_PHYSICS|OBJECT_PHYSICS_COST|OBJECT_POS|OBJECT_PRIM_EQUIVALENCE|OBJECT_RENDER_WEIGHT|OBJECT_RETURN_PARCEL|OBJECT_RETURN_PARCEL_OWNER|OBJECT_RETURN_REGION|OBJECT_ROOT|OBJECT_ROT|OBJECT_RUNNING_SCRIPT_COUNT|OBJECT_SCRIPT_MEMORY|OBJECT_SCRIPT_TIME|OBJECT_SERVER_COST|OBJECT_STREAMING_COST|OBJECT_TEMP_ON_REZ|OBJECT_TOTAL_SCRIPT_COUNT|OBJECT_UNKNOWN_DETAIL|OBJECT_VELOCITY|OPT_AVATAR|OPT_CHARACTER|OPT_EXCLUSION_VOLUME|OPT_LEGACY_LINKSET|OPT_MATERIAL_VOLUME|OPT_OTHER|OPT_STATIC_OBSTACLE|OPT_WALKABLE|PARCEL_COUNT_GROUP|PARCEL_COUNT_OTHER|PARCEL_COUNT_OWNER|PARCEL_COUNT_SELECTED|PARCEL_COUNT_TEMP|PARCEL_COUNT_TOTAL|PARCEL_DETAILS_AREA|PARCEL_DETAILS_DESC|PARCEL_DETAILS_GROUP|PARCEL_DETAILS_ID|PARCEL_DETAILS_NAME|PARCEL_DETAILS_OWNER|PARCEL_DETAILS_SEE_AVATARS|PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS|PARCEL_FLAG_ALLOW_CREATE_OBJECTS|PARCEL_FLAG_ALLOW_DAMAGE|PARCEL_FLAG_ALLOW_FLY|PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_GROUP_SCRIPTS|PARCEL_FLAG_ALLOW_LANDMARK|PARCEL_FLAG_ALLOW_SCRIPTS|PARCEL_FLAG_ALLOW_TERRAFORM|PARCEL_FLAG_LOCAL_SOUND_ONLY|PARCEL_FLAG_RESTRICT_PUSHOBJECT|PARCEL_FLAG_USE_ACCESS_GROUP|PARCEL_FLAG_USE_ACCESS_LIST|PARCEL_FLAG_USE_BAN_LIST|PARCEL_FLAG_USE_LAND_PASS_LIST|PARCEL_MEDIA_COMMAND_AGENT|PARCEL_MEDIA_COMMAND_AUTO_ALIGN|PARCEL_MEDIA_COMMAND_DESC|PARCEL_MEDIA_COMMAND_LOOP|PARCEL_MEDIA_COMMAND_LOOP_SET|PARCEL_MEDIA_COMMAND_PAUSE|PARCEL_MEDIA_COMMAND_PLAY|PARCEL_MEDIA_COMMAND_SIZE|PARCEL_MEDIA_COMMAND_STOP|PARCEL_MEDIA_COMMAND_TEXTURE|PARCEL_MEDIA_COMMAND_TIME|PARCEL_MEDIA_COMMAND_TYPE|PARCEL_MEDIA_COMMAND_UNLOAD|PARCEL_MEDIA_COMMAND_URL|PASSIVE|PATROL_PAUSE_AT_WAYPOINTS|PAYMENT_INFO_ON_FILE|PAYMENT_INFO_USED|PAY_DEFAULT|PAY_HIDE|PERMISSION_ATTACH|PERMISSION_CHANGE_LINKS|PERMISSION_CONTROL_CAMERA|PERMISSION_DEBIT|PERMISSION_OVERRIDE_ANIMATIONS|PERMISSION_RETURN_OBJECTS|PERMISSION_SILENT_ESTATE_MANAGEMENT|PERMISSION_TAKE_CONTROLS|PERMISSION_TELEPORT|PERMISSION_TRACK_CAMERA|PERMISSION_TRIGGER_ANIMATION|PERM_ALL|PERM_COPY|PERM_MODIFY|PERM_MOVE|PERM_TRANSFER|PING_PONG|PRIM_ALPHA_MODE|PRIM_ALPHA_MODE_BLEND|PRIM_ALPHA_MODE_EMISSIVE|PRIM_ALPHA_MODE_MASK|PRIM_ALPHA_MODE_NONE|PRIM_BUMP_BARK|PRIM_BUMP_BLOBS|PRIM_BUMP_BRICKS|PRIM_BUMP_BRIGHT|PRIM_BUMP_CHECKER|PRIM_BUMP_CONCRETE|PRIM_BUMP_DARK|PRIM_BUMP_DISKS|PRIM_BUMP_GRAVEL|PRIM_BUMP_LARGETILE|PRIM_BUMP_NONE|PRIM_BUMP_SHINY|PRIM_BUMP_SIDING|PRIM_BUMP_STONE|PRIM_BUMP_STUCCO|PRIM_BUMP_SUCTION|PRIM_BUMP_TILE|PRIM_BUMP_WEAVE|PRIM_BUMP_WOOD|PRIM_COLOR|PRIM_DESC|PRIM_FLEXIBLE|PRIM_FULLBRIGHT|PRIM_GLOW|PRIM_HOLE_CIRCLE|PRIM_HOLE_DEFAULT|PRIM_HOLE_SQUARE|PRIM_HOLE_TRIANGLE|PRIM_LINK_TARGET|PRIM_MATERIAL|PRIM_MATERIAL_FLESH|PRIM_MATERIAL_GLASS|PRIM_MATERIAL_METAL|PRIM_MATERIAL_PLASTIC|PRIM_MATERIAL_RUBBER|PRIM_MATERIAL_STONE|PRIM_MATERIAL_WOOD|PRIM_MEDIA_ALT_IMAGE_ENABLE|PRIM_MEDIA_AUTO_LOOP|PRIM_MEDIA_AUTO_PLAY|PRIM_MEDIA_AUTO_SCALE|PRIM_MEDIA_AUTO_ZOOM|PRIM_MEDIA_CONTROLS|PRIM_MEDIA_CONTROLS_MINI|PRIM_MEDIA_CONTROLS_STANDARD|PRIM_MEDIA_CURRENT_URL|PRIM_MEDIA_FIRST_CLICK_INTERACT|PRIM_MEDIA_HEIGHT_PIXELS|PRIM_MEDIA_HOME_URL|PRIM_MEDIA_MAX_HEIGHT_PIXELS|PRIM_MEDIA_MAX_URL_LENGTH|PRIM_MEDIA_MAX_WHITELIST_COUNT|PRIM_MEDIA_MAX_WHITELIST_SIZE|PRIM_MEDIA_MAX_WIDTH_PIXELS|PRIM_MEDIA_PARAM_MAX|PRIM_MEDIA_PERMS_CONTROL|PRIM_MEDIA_PERMS_INTERACT|PRIM_MEDIA_PERM_ANYONE|PRIM_MEDIA_PERM_GROUP|PRIM_MEDIA_PERM_NONE|PRIM_MEDIA_PERM_OWNER|PRIM_MEDIA_WHITELIST|PRIM_MEDIA_WHITELIST_ENABLE|PRIM_MEDIA_WIDTH_PIXELS|PRIM_NAME|PRIM_NORMAL|PRIM_OMEGA|PRIM_PHANTOM|PRIM_PHYSICS|PRIM_PHYSICS_SHAPE_CONVEX|PRIM_PHYSICS_SHAPE_NONE|PRIM_PHYSICS_SHAPE_PRIM|PRIM_PHYSICS_SHAPE_TYPE|PRIM_POINT_LIGHT|PRIM_POSITION|PRIM_POS_LOCAL|PRIM_ROTATION|PRIM_ROT_LOCAL|PRIM_SCULPT_FLAG_INVERT|PRIM_SCULPT_FLAG_MIRROR|PRIM_SCULPT_TYPE_CYLINDER|PRIM_SCULPT_TYPE_MASK|PRIM_SCULPT_TYPE_PLANE|PRIM_SCULPT_TYPE_SPHERE|PRIM_SCULPT_TYPE_TORUS|PRIM_SHINY_HIGH|PRIM_SHINY_LOW|PRIM_SHINY_MEDIUM|PRIM_SHINY_NONE|PRIM_SIZE|PRIM_SLICE|PRIM_SPECULAR|PRIM_TEMP_ON_REZ|PRIM_TEXGEN|PRIM_TEXGEN_DEFAULT|PRIM_TEXGEN_PLANAR|PRIM_TEXT|PRIM_TEXTURE|PRIM_TYPE|PRIM_TYPE_BOX|PRIM_TYPE_CYLINDER|PRIM_TYPE_PRISM|PRIM_TYPE_RING|PRIM_TYPE_SCULPT|PRIM_TYPE_SPHERE|PRIM_TYPE_TORUS|PRIM_TYPE_TUBE|PROFILE_NONE|PROFILE_SCRIPT_MEMORY|PSYS_PART_BF_DEST_COLOR|PSYS_PART_BF_ONE|PSYS_PART_BF_ONE_MINUS_DEST_COLOR|PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA|PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR|PSYS_PART_BF_SOURCE_ALPHA|PSYS_PART_BF_SOURCE_COLOR|PSYS_PART_BF_ZERO|PSYS_PART_BLEND_FUNC_DEST|PSYS_PART_BLEND_FUNC_SOURCE|PSYS_PART_BOUNCE_MASK|PSYS_PART_EMISSIVE_MASK|PSYS_PART_END_ALPHA|PSYS_PART_END_COLOR|PSYS_PART_END_GLOW|PSYS_PART_END_SCALE|PSYS_PART_FLAGS|PSYS_PART_FOLLOW_SRC_MASK|PSYS_PART_FOLLOW_VELOCITY_MASK|PSYS_PART_INTERP_COLOR_MASK|PSYS_PART_INTERP_SCALE_MASK|PSYS_PART_MAX_AGE|PSYS_PART_RIBBON_MASK|PSYS_PART_START_ALPHA|PSYS_PART_START_COLOR|PSYS_PART_START_GLOW|PSYS_PART_START_SCALE|PSYS_PART_TARGET_LINEAR_MASK|PSYS_PART_TARGET_POS_MASK|PSYS_PART_WIND_MASK|PSYS_SRC_ACCEL|PSYS_SRC_ANGLE_BEGIN|PSYS_SRC_ANGLE_END|PSYS_SRC_BURST_PART_COUNT|PSYS_SRC_BURST_RADIUS|PSYS_SRC_BURST_RATE|PSYS_SRC_BURST_SPEED_MAX|PSYS_SRC_BURST_SPEED_MIN|PSYS_SRC_MAX_AGE|PSYS_SRC_OMEGA|PSYS_SRC_PATTERN|PSYS_SRC_PATTERN_ANGLE|PSYS_SRC_PATTERN_ANGLE_CONE|PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY|PSYS_SRC_PATTERN_DROP|PSYS_SRC_PATTERN_EXPLODE|PSYS_SRC_TARGET_KEY|PSYS_SRC_TEXTURE|PUBLIC_CHANNEL|PURSUIT_FUZZ_FACTOR|PURSUIT_GOAL_TOLERANCE|PURSUIT_INTERCEPT|PURSUIT_OFFSET|PU_EVADE_HIDDEN|PU_EVADE_SPOTTED|PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED|PU_FAILURE_INVALID_GOAL|PU_FAILURE_INVALID_START|PU_FAILURE_NO_NAVMESH|PU_FAILURE_NO_VALID_DESTINATION|PU_FAILURE_OTHER|PU_FAILURE_PARCEL_UNREACHABLE|PU_FAILURE_TARGET_GONE|PU_FAILURE_UNREACHABLE|PU_GOAL_REACHED|PU_SLOWDOWN_DISTANCE_REACHED|RCERR_CAST_TIME_EXCEEDED|RCERR_SIM_PERF_LOW|RCERR_UNKNOWN|RC_DATA_FLAGS|RC_DETECT_PHANTOM|RC_GET_LINK_NUM|RC_GET_NORMAL|RC_GET_ROOT_KEY|RC_MAX_HITS|RC_REJECT_AGENTS|RC_REJECT_LAND|RC_REJECT_NONPHYSICAL|RC_REJECT_PHYSICAL|RC_REJECT_TYPES|REGION_FLAG_ALLOW_DAMAGE|REGION_FLAG_ALLOW_DIRECT_TELEPORT|REGION_FLAG_BLOCK_FLY|REGION_FLAG_BLOCK_TERRAFORM|REGION_FLAG_DISABLE_COLLISIONS|REGION_FLAG_DISABLE_PHYSICS|REGION_FLAG_FIXED_SUN|REGION_FLAG_RESTRICT_PUSHOBJECT|REGION_FLAG_SANDBOX|REMOTE_DATA_CHANNEL|REMOTE_DATA_REPLY|REMOTE_DATA_REQUEST|REQUIRE_LINE_OF_SIGHT|RESTITUTION|REVERSE|ROTATE|SCALE|SCRIPTED|SIM_STAT_PCT_CHARS_STEPPED|SMOOTH|STATUS_BLOCK_GRAB|STATUS_BLOCK_GRAB_OBJECT|STATUS_BOUNDS_ERROR|STATUS_CAST_SHADOWS|STATUS_DIE_AT_EDGE|STATUS_INTERNAL_ERROR|STATUS_MALFORMED_PARAMS|STATUS_NOT_FOUND|STATUS_NOT_SUPPORTED|STATUS_OK|STATUS_PHANTOM|STATUS_PHYSICS|STATUS_RETURN_AT_EDGE|STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_Z|STATUS_SANDBOX|STATUS_TYPE_MISMATCH|STATUS_WHITELIST_FAILED|STRING_TRIM|STRING_TRIM_HEAD|STRING_TRIM_TAIL|TOUCH_INVALID_FACE|TRAVERSAL_TYPE|TRAVERSAL_TYPE_FAST|TRAVERSAL_TYPE_NONE|TRAVERSAL_TYPE_SLOW|TRUE|TYPE_FLOAT|TYPE_INTEGER|TYPE_INVALID|TYPE_KEY|TYPE_ROTATION|TYPE_STRING|TYPE_VECTOR|VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY|VEHICLE_ANGULAR_DEFLECTION_TIMESCALE|VEHICLE_ANGULAR_FRICTION_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DIRECTION|VEHICLE_ANGULAR_MOTOR_TIMESCALE|VEHICLE_BANKING_EFFICIENCY|VEHICLE_BANKING_MIX|VEHICLE_BANKING_TIMESCALE|VEHICLE_BUOYANCY|VEHICLE_FLAG_CAMERA_DECOUPLED|VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT|VEHICLE_FLAG_HOVER_TERRAIN_ONLY|VEHICLE_FLAG_HOVER_UP_ONLY|VEHICLE_FLAG_HOVER_WATER_ONLY|VEHICLE_FLAG_LIMIT_MOTOR_UP|VEHICLE_FLAG_LIMIT_ROLL_ONLY|VEHICLE_FLAG_MOUSELOOK_BANK|VEHICLE_FLAG_MOUSELOOK_STEER|VEHICLE_FLAG_NO_DEFLECTION_UP|VEHICLE_HOVER_EFFICIENCY|VEHICLE_HOVER_HEIGHT|VEHICLE_HOVER_TIMESCALE|VEHICLE_LINEAR_DEFLECTION_EFFICIENCY|VEHICLE_LINEAR_DEFLECTION_TIMESCALE|VEHICLE_LINEAR_FRICTION_TIMESCALE|VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE|VEHICLE_LINEAR_MOTOR_DIRECTION|VEHICLE_LINEAR_MOTOR_OFFSET|VEHICLE_LINEAR_MOTOR_TIMESCALE|VEHICLE_REFERENCE_FRAME|VEHICLE_TYPE_AIRPLANE|VEHICLE_TYPE_BALLOON|VEHICLE_TYPE_BOAT|VEHICLE_TYPE_CAR|VEHICLE_TYPE_NONE|VEHICLE_TYPE_SLED|VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY|VEHICLE_VERTICAL_ATTRACTION_TIMESCALE|VERTICAL|WANDER_PAUSE_AT_WAYPOINTS|XP_ERROR_EXPERIENCES_DISABLED|XP_ERROR_EXPERIENCE_DISABLED|XP_ERROR_EXPERIENCE_SUSPENDED|XP_ERROR_INVALID_EXPERIENCE|XP_ERROR_INVALID_PARAMETERS|XP_ERROR_KEY_NOT_FOUND|XP_ERROR_MATURITY_EXCEEDED|XP_ERROR_NONE|XP_ERROR_NOT_FOUND|XP_ERROR_NOT_PERMITTED|XP_ERROR_NO_EXPERIENCE|XP_ERROR_QUOTA_EXCEEDED|XP_ERROR_RETRY_UPDATE|XP_ERROR_STORAGE_EXCEPTION|XP_ERROR_STORE_DISABLED|XP_ERROR_THROTTLED|XP_ERROR_UNKNOWN_ERROR", "constant.language.integer.boolean.lsl" : "FALSE|TRUE", "constant.language.quaternion.lsl" : "ZERO_ROTATION", "constant.language.string.lsl" : "EOF|JSON_ARRAY|JSON_DELETE|JSON_FALSE|JSON_INVALID|JSON_NULL|JSON_NUMBER|JSON_OBJECT|JSON_STRING|JSON_TRUE|NULL_KEY|TEXTURE_BLANK|TEXTURE_DEFAULT|TEXTURE_MEDIA|TEXTURE_PLYWOOD|TEXTURE_TRANSPARENT|URL_REQUEST_DENIED|URL_REQUEST_GRANTED", "constant.language.vector.lsl" : "TOUCH_INVALID_TEXCOORD|TOUCH_INVALID_VECTOR|ZERO_VECTOR", "invalid.broken.lsl": "LAND_LARGE_BRUSH|LAND_MEDIUM_BRUSH|LAND_SMALL_BRUSH", "invalid.deprecated.lsl" : "ATTACH_LPEC|ATTACH_RPEC|DATA_RATING|OBJECT_ATTACHMENT_GEOMETRY_BYTES|OBJECT_ATTACHMENT_SURFACE_AREA|PRIM_CAST_SHADOWS|PRIM_MATERIAL_LIGHT|PRIM_TYPE_LEGACY|PSYS_SRC_INNERANGLE|PSYS_SRC_OUTERANGLE|VEHICLE_FLAG_NO_FLY_UP|llClearExperiencePermissions|llCloud|llGetExperienceList|llMakeExplosion|llMakeFire|llMakeFountain|llMakeSmoke|llRemoteDataSetRegion|llSound|llSoundPreload|llXorBase64Strings|llXorBase64StringsCorrect", "invalid.illegal.lsl": "event", "invalid.unimplemented.lsl": "CHARACTER_MAX_ANGULAR_ACCEL|CHARACTER_MAX_ANGULAR_SPEED|CHARACTER_TURN_SPEED_MULTIPLIER|PERMISSION_CHANGE_JOINTS|PERMISSION_CHANGE_PERMISSIONS|PERMISSION_RELEASE_OWNERSHIP|PERMISSION_REMAP_CONTROLS|PRIM_PHYSICS_MATERIAL|PSYS_SRC_OBJ_REL_MASK|llCollisionSprite|llPointAt|llRefreshPrimURL|llReleaseCamera|llRemoteLoadScript|llSetPrimURL|llStopPointAt|llTakeCamera", "reserved.godmode.lsl": "llGodLikeRezObject|llSetInventoryPermMask|llSetObjectPermMask", "reserved.log.lsl" : "print", "keyword.control.lsl" : "do|else|for|if|jump|return|while", "storage.type.lsl" : "float|integer|key|list|quaternion|rotation|string|vector", "support.function.lsl": "llAbs|llAcos|llAddToLandBanList|llAddToLandPassList|llAdjustSoundVolume|llAgentInExperience|llAllowInventoryDrop|llAngleBetween|llApplyImpulse|llApplyRotationalImpulse|llAsin|llAtan2|llAttachToAvatar|llAttachToAvatarTemp|llAvatarOnLinkSitTarget|llAvatarOnSitTarget|llAxes2Rot|llAxisAngle2Rot|llBase64ToInteger|llBase64ToString|llBreakAllLinks|llBreakLink|llCSV2List|llCastRay|llCeil|llClearCameraParams|llClearLinkMedia|llClearPrimMedia|llCloseRemoteDataChannel|llCollisionFilter|llCollisionSound|llCos|llCreateCharacter|llCreateKeyValue|llCreateLink|llDataSizeKeyValue|llDeleteCharacter|llDeleteKeyValue|llDeleteSubList|llDeleteSubString|llDetachFromAvatar|llDetectedGrab|llDetectedGroup|llDetectedKey|llDetectedLinkNumber|llDetectedName|llDetectedOwner|llDetectedPos|llDetectedRot|llDetectedTouchBinormal|llDetectedTouchFace|llDetectedTouchNormal|llDetectedTouchPos|llDetectedTouchST|llDetectedTouchUV|llDetectedType|llDetectedVel|llDialog|llDie|llDumpList2String|llEdgeOfWorld|llEjectFromLand|llEmail|llEscapeURL|llEuler2Rot|llEvade|llExecCharacterCmd|llFabs|llFleeFrom|llFloor|llForceMouselook|llFrand|llGenerateKey|llGetAccel|llGetAgentInfo|llGetAgentLanguage|llGetAgentList|llGetAgentSize|llGetAlpha|llGetAndResetTime|llGetAnimation|llGetAnimationList|llGetAnimationOverride|llGetAttached|llGetBoundingBox|llGetCameraPos|llGetCameraRot|llGetCenterOfMass|llGetClosestNavPoint|llGetColor|llGetCreator|llGetDate|llGetDisplayName|llGetEnergy|llGetEnv|llGetExperienceDetails|llGetExperienceErrorMessage|llGetForce|llGetFreeMemory|llGetFreeURLs|llGetGMTclock|llGetGeometricCenter|llGetHTTPHeader|llGetInventoryCreator|llGetInventoryKey|llGetInventoryName|llGetInventoryNumber|llGetInventoryPermMask|llGetInventoryType|llGetKey|llGetLandOwnerAt|llGetLinkKey|llGetLinkMedia|llGetLinkName|llGetLinkNumber|llGetLinkNumberOfSides|llGetLinkPrimitiveParams|llGetListEntryType|llGetListLength|llGetLocalPos|llGetLocalRot|llGetMass|llGetMassMKS|llGetMaxScaleFactor|llGetMemoryLimit|llGetMinScaleFactor|llGetNextEmail|llGetNotecardLine|llGetNumberOfNotecardLines|llGetNumberOfPrims|llGetNumberOfSides|llGetObjectDesc|llGetObjectDetails|llGetObjectMass|llGetObjectName|llGetObjectPermMask|llGetObjectPrimCount|llGetOmega|llGetOwner|llGetOwnerKey|llGetParcelDetails|llGetParcelFlags|llGetParcelMaxPrims|llGetParcelMusicURL|llGetParcelPrimCount|llGetParcelPrimOwners|llGetPermissions|llGetPermissionsKey|llGetPhysicsMaterial|llGetPos|llGetPrimMediaParams|llGetPrimitiveParams|llGetRegionAgentCount|llGetRegionCorner|llGetRegionFPS|llGetRegionFlags|llGetRegionName|llGetRegionTimeDilation|llGetRootPosition|llGetRootRotation|llGetRot|llGetSPMaxMemory|llGetScale|llGetScriptName|llGetScriptState|llGetSimStats|llGetSimulatorHostname|llGetStartParameter|llGetStaticPath|llGetStatus|llGetSubString|llGetSunDirection|llGetTexture|llGetTextureOffset|llGetTextureRot|llGetTextureScale|llGetTime|llGetTimeOfDay|llGetTimestamp|llGetTorque|llGetUnixTime|llGetUsedMemory|llGetUsername|llGetVel|llGetWallclock|llGiveInventory|llGiveInventoryList|llGiveMoney|llGround|llGroundContour|llGroundNormal|llGroundRepel|llGroundSlope|llHTTPRequest|llHTTPResponse|llInsertString|llInstantMessage|llIntegerToBase64|llJson2List|llJsonGetValue|llJsonSetValue|llJsonValueType|llKey2Name|llKeyCountKeyValue|llKeysKeyValue|llLinkParticleSystem|llLinkSitTarget|llList2CSV|llList2Float|llList2Integer|llList2Json|llList2Key|llList2List|llList2ListStrided|llList2Rot|llList2String|llList2Vector|llListFindList|llListInsertList|llListRandomize|llListReplaceList|llListSort|llListStatistics|llListen|llListenControl|llListenRemove|llLoadURL|llLog|llLog10|llLookAt|llLoopSound|llLoopSoundMaster|llLoopSoundSlave|llMD5String|llManageEstateAccess|llMapDestination|llMessageLinked|llMinEventDelay|llModPow|llModifyLand|llMoveToTarget|llNavigateTo|llOffsetTexture|llOpenRemoteDataChannel|llOverMyLand|llOwnerSay|llParcelMediaCommandList|llParcelMediaQuery|llParseString2List|llParseStringKeepNulls|llParticleSystem|llPassCollisions|llPassTouches|llPatrolPoints|llPlaySound|llPlaySoundSlave|llPow|llPreloadSound|llPursue|llPushObject|llReadKeyValue|llRegionSay|llRegionSayTo|llReleaseControls|llReleaseURL|llRemoteDataReply|llRemoteLoadScriptPin|llRemoveFromLandBanList|llRemoveFromLandPassList|llRemoveInventory|llRemoveVehicleFlags|llRequestAgentData|llRequestDisplayName|llRequestExperiencePermissions|llRequestInventoryData|llRequestPermissions|llRequestSecureURL|llRequestSimulatorData|llRequestURL|llRequestUsername|llResetAnimationOverride|llResetLandBanList|llResetLandPassList|llResetOtherScript|llResetScript|llResetTime|llReturnObjectsByID|llReturnObjectsByOwner|llRezAtRoot|llRezObject|llRot2Angle|llRot2Axis|llRot2Euler|llRot2Fwd|llRot2Left|llRot2Up|llRotBetween|llRotLookAt|llRotTarget|llRotTargetRemove|llRotateTexture|llRound|llSHA1String|llSameGroup|llSay|llScaleByFactor|llScaleTexture|llScriptDanger|llScriptProfiler|llSendRemoteData|llSensor|llSensorRemove|llSensorRepeat|llSetAlpha|llSetAngularVelocity|llSetAnimationOverride|llSetBuoyancy|llSetCameraAtOffset|llSetCameraEyeOffset|llSetCameraParams|llSetClickAction|llSetColor|llSetContentType|llSetDamage|llSetForce|llSetForceAndTorque|llSetHoverHeight|llSetKeyframedMotion|llSetLinkAlpha|llSetLinkCamera|llSetLinkColor|llSetLinkMedia|llSetLinkPrimitiveParams|llSetLinkPrimitiveParamsFast|llSetLinkTexture|llSetLinkTextureAnim|llSetLocalRot|llSetMemoryLimit|llSetObjectDesc|llSetObjectName|llSetParcelMusicURL|llSetPayPrice|llSetPhysicsMaterial|llSetPos|llSetPrimMediaParams|llSetPrimitiveParams|llSetRegionPos|llSetRemoteScriptAccessPin|llSetRot|llSetScale|llSetScriptState|llSetSitText|llSetSoundQueueing|llSetSoundRadius|llSetStatus|llSetText|llSetTexture|llSetTextureAnim|llSetTimerEvent|llSetTorque|llSetTouchText|llSetVehicleFlags|llSetVehicleFloatParam|llSetVehicleRotationParam|llSetVehicleType|llSetVehicleVectorParam|llSetVelocity|llShout|llSin|llSitTarget|llSleep|llSqrt|llStartAnimation|llStopAnimation|llStopHover|llStopLookAt|llStopMoveToTarget|llStopSound|llStringLength|llStringToBase64|llStringTrim|llSubStringIndex|llTakeControls|llTan|llTarget|llTargetOmega|llTargetRemove|llTeleportAgent|llTeleportAgentGlobalCoords|llTeleportAgentHome|llTextBox|llToLower|llToUpper|llTransferLindenDollars|llTriggerSound|llTriggerSoundLimited|llUnSit|llUnescapeURL|llUpdateCharacter|llUpdateKeyValue|llVecDist|llVecMag|llVecNorm|llVolumeDetect|llWanderWithin|llWater|llWhisper|llWind|llXorBase64", "support.function.event.lsl" : "at_rot_target|at_target|attach|changed|collision|collision_end|collision_start|control|dataserver|email|experience_permissions|experience_permissions_denied|http_request|http_response|land_collision|land_collision_end|land_collision_start|link_message|listen|money|moving_end|moving_start|no_sensor|not_at_rot_target|not_at_target|object_rez|on_rez|path_update|remote_data|run_time_permissions|sensor|state_entry|state_exit|timer|touch|touch_end|touch_start|transaction_result" }, "identifier"); this.$rules = { "start" : [ { token : "comment.line.double-slash.lsl", regex : "\\/\\/.*$" }, { token : "comment.block.begin.lsl", regex : "\\/\\*", next : "comment" }, { token : "string.quoted.double.lsl", start : '"', end : '"', next : [{ token : "constant.character.escape.lsl", regex : /\\[tn"\\]/ }] }, { token : "constant.numeric.lsl", regex : "(0[xX][0-9a-fA-F]+|[+-]?[0-9]+(?:(?:\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?)?)\\b" }, { token : "entity.name.state.lsl", regex : "\\b((state)\\s+[A-Za-z_]\\w*|default)\\b" }, { token : keywordMapper, regex : "\\b[a-zA-Z_][a-zA-Z0-9_]*\\b" }, { token : "support.function.user-defined.lsl", regex : /\b([a-zA-Z_]\w*)(?=\(.*?\))/ }, { token : "keyword.operator.lsl", regex : "\\+\\+|\\-\\-|<<|>>|&&?|\\|\\|?|\\^|~|[!%<>=*+\\-\\/]=?" }, { token : "invalid.illegal.keyword.operator.lsl", regex : ":=?" }, { token : "punctuation.operator.lsl", regex : "\\,|\\;" }, { token : "paren.lparen.lsl", regex : "[\\[\\(\\{]" }, { token : "paren.rparen.lsl", regex : "[\\]\\)\\}]" }, { token : "text.lsl", regex : "\\s+" } ], "comment" : [ { token : "comment.block.end.lsl", regex : "\\*\\/", next : "start" }, { token : "comment.block.lsl", regex : ".+" } ] }; this.normalizeRules(); } exports.LSLHighlightRules = LSLHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/lsl",["require","exports","module","ace/mode/lsl_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/text","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/lib/oop"], function(require, exports, module) { "use strict"; var Rules = require("./lsl_highlight_rules").LSLHighlightRules; var Outdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var TextMode = require("./text").Mode; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var oop = require("../lib/oop"); var Mode = function() { this.HighlightRules = Rules; this.$outdent = new Outdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = ["//"]; this.blockComment = { start: "/*", end: "*/" }; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type === "comment.block.lsl") { return indent; } if (state === "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/lsl"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-lua.js ================================================ ace.define("ace/mode/lua_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var LuaHighlightRules = function() { var keywords = ( "break|do|else|elseif|end|for|function|if|in|local|repeat|"+ "return|then|until|while|or|and|not" ); var builtinConstants = ("true|false|nil|_G|_VERSION"); var functions = ( "string|xpcall|package|tostring|print|os|unpack|require|"+ "getfenv|setmetatable|next|assert|tonumber|io|rawequal|"+ "collectgarbage|getmetatable|module|rawset|math|debug|"+ "pcall|table|newproxy|type|coroutine|_G|select|gcinfo|"+ "pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|"+ "load|error|loadfile|"+ "sub|upper|len|gfind|rep|find|match|char|dump|gmatch|"+ "reverse|byte|format|gsub|lower|preload|loadlib|loaded|"+ "loaders|cpath|config|path|seeall|exit|setlocale|date|"+ "getenv|difftime|remove|time|clock|tmpname|rename|execute|"+ "lines|write|close|flush|open|output|type|read|stderr|"+ "stdin|input|stdout|popen|tmpfile|log|max|acos|huge|"+ "ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|"+ "frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|"+ "atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|"+ "gethook|setmetatable|setlocal|traceback|setfenv|getinfo|"+ "setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|"+ "foreachi|maxn|foreach|concat|sort|remove|resume|yield|"+ "status|wrap|create|running|"+ "__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|"+ "__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber" ); var stdLibaries = ("string|package|os|io|math|debug|table|coroutine"); var futureReserved = ""; var deprecatedIn5152 = ("setn|foreach|foreachi|gcinfo|log10|maxn"); var keywordMapper = this.createKeywordMapper({ "keyword": keywords, "support.function": functions, "invalid.deprecated": deprecatedIn5152, "constant.library": stdLibaries, "constant.language": builtinConstants, "invalid.illegal": futureReserved, "variable.language": "self" }, "identifier"); var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))"; var hexInteger = "(?:0[xX][\\dA-Fa-f]+)"; var integer = "(?:" + decimalInteger + "|" + hexInteger + ")"; var fraction = "(?:\\.\\d+)"; var intPart = "(?:\\d+)"; var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))"; var floatNumber = "(?:" + pointFloat + ")"; this.$rules = { "start" : [{ stateName: "bracketedComment", onMatch : function(value, currentState, stack){ stack.unshift(this.next, value.length - 2, currentState); return "comment"; }, regex : /\-\-\[=*\[/, next : [ { onMatch : function(value, currentState, stack) { if (value.length == stack[1]) { stack.shift(); stack.shift(); this.next = stack.shift(); } else { this.next = ""; } return "comment"; }, regex : /\]=*\]/, next : "start" }, { defaultToken : "comment" } ] }, { token : "comment", regex : "\\-\\-.*$" }, { stateName: "bracketedString", onMatch : function(value, currentState, stack){ stack.unshift(this.next, value.length, currentState); return "comment"; }, regex : /\[=*\[/, next : [ { onMatch : function(value, currentState, stack) { if (value.length == stack[1]) { stack.shift(); stack.shift(); this.next = stack.shift(); } else { this.next = ""; } return "comment"; }, regex : /\]=*\]/, next : "start" }, { defaultToken : "comment" } ] }, { token : "string", // " string regex : '"(?:[^\\\\]|\\\\.)*?"' }, { token : "string", // ' string regex : "'(?:[^\\\\]|\\\\.)*?'" }, { token : "constant.numeric", // float regex : floatNumber }, { token : "constant.numeric", // integer regex : integer + "\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\*|\\/|%|\\#|\\^|~|<|>|<=|=>|==|~=|=|\\:|\\.\\.\\.|\\.\\." }, { token : "paren.lparen", regex : "[\\[\\(\\{]" }, { token : "paren.rparen", regex : "[\\]\\)\\}]" }, { token : "text", regex : "\\s+|\\w+" } ] }; this.normalizeRules(); } oop.inherits(LuaHighlightRules, TextHighlightRules); exports.LuaHighlightRules = LuaHighlightRules; }); ace.define("ace/mode/folding/lua",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var TokenIterator = require("../../token_iterator").TokenIterator; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /\b(function|then|do|repeat)\b|{\s*$|(\[=*\[)/; this.foldingStopMarker = /\bend\b|^\s*}|\]=*\]/; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var isStart = this.foldingStartMarker.test(line); var isEnd = this.foldingStopMarker.test(line); if (isStart && !isEnd) { var match = line.match(this.foldingStartMarker); if (match[1] == "then" && /\belseif\b/.test(line)) return; if (match[1]) { if (session.getTokenAt(row, match.index + 1).type === "keyword") return "start"; } else if (match[2]) { var type = session.bgTokenizer.getState(row) || ""; if (type[0] == "bracketedComment" || type[0] == "bracketedString") return "start"; } else { return "start"; } } if (foldStyle != "markbeginend" || !isEnd || isStart && isEnd) return ""; var match = line.match(this.foldingStopMarker); if (match[0] === "end") { if (session.getTokenAt(row, match.index + 1).type === "keyword") return "end"; } else if (match[0][0] === "]") { var type = session.bgTokenizer.getState(row - 1) || ""; if (type[0] == "bracketedComment" || type[0] == "bracketedString") return "end"; } else return "end"; }; this.getFoldWidgetRange = function(session, foldStyle, row) { var line = session.doc.getLine(row); var match = this.foldingStartMarker.exec(line); if (match) { if (match[1]) return this.luaBlock(session, row, match.index + 1); if (match[2]) return session.getCommentFoldRange(row, match.index + 1); return this.openingBracketBlock(session, "{", row, match.index); } var match = this.foldingStopMarker.exec(line); if (match) { if (match[0] === "end") { if (session.getTokenAt(row, match.index + 1).type === "keyword") return this.luaBlock(session, row, match.index + 1); } if (match[0][0] === "]") return session.getCommentFoldRange(row, match.index + 1); return this.closingBracketBlock(session, "}", row, match.index + match[0].length); } }; this.luaBlock = function(session, row, column) { var stream = new TokenIterator(session, row, column); var indentKeywords = { "function": 1, "do": 1, "then": 1, "elseif": -1, "end": -1, "repeat": 1, "until": -1 }; var token = stream.getCurrentToken(); if (!token || token.type != "keyword") return; var val = token.value; var stack = [val]; var dir = indentKeywords[val]; if (!dir) return; var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length; var startRow = row; stream.step = dir === -1 ? stream.stepBackward : stream.stepForward; while(token = stream.step()) { if (token.type !== "keyword") continue; var level = dir * indentKeywords[token.value]; if (level > 0) { stack.unshift(token.value); } else if (level <= 0) { stack.shift(); if (!stack.length && token.value != "elseif") break; if (level === 0) stack.unshift(token.value); } } var row = stream.getCurrentTokenRow(); if (dir === -1) return new Range(row, session.getLine(row).length, startRow, startColumn); else return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn()); }; }).call(FoldMode.prototype); }); ace.define("ace/mode/lua",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/lua_highlight_rules","ace/mode/folding/lua","ace/range","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var LuaHighlightRules = require("./lua_highlight_rules").LuaHighlightRules; var LuaFoldMode = require("./folding/lua").FoldMode; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var Mode = function() { this.HighlightRules = LuaHighlightRules; this.foldingRules = new LuaFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "--"; this.blockComment = {start: "--[", end: "]--"}; var indentKeywords = { "function": 1, "then": 1, "do": 1, "else": 1, "elseif": 1, "repeat": 1, "end": -1, "until": -1 }; var outdentKeywords = [ "else", "elseif", "end", "until" ]; function getNetIndentLevel(tokens) { var level = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (token.type == "keyword") { if (token.value in indentKeywords) { level += indentKeywords[token.value]; } } else if (token.type == "paren.lparen") { level ++; } else if (token.type == "paren.rparen") { level --; } } if (level < 0) { return -1; } else if (level > 0) { return 1; } else { return 0; } } this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var level = 0; var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (state == "start") { level = getNetIndentLevel(tokens); } if (level > 0) { return indent + tab; } else if (level < 0 && indent.substr(indent.length - tab.length) == tab) { if (!this.checkOutdent(state, line, "\n")) { return indent.substr(0, indent.length - tab.length); } } return indent; }; this.checkOutdent = function(state, line, input) { if (input != "\n" && input != "\r" && input != "\r\n") return false; if (line.match(/^\s*[\)\}\]]$/)) return true; var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens; if (!tokens || !tokens.length) return false; return (tokens[0].type == "keyword" && outdentKeywords.indexOf(tokens[0].value) != -1); }; this.autoOutdent = function(state, session, row) { var prevLine = session.getLine(row - 1); var prevIndent = this.$getIndent(prevLine).length; var prevTokens = this.getTokenizer().getLineTokens(prevLine, "start").tokens; var tabLength = session.getTabString().length; var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens); var curIndent = this.$getIndent(session.getLine(row)).length; if (curIndent < expectedIndent) { return; } session.outdentRows(new Range(row, 0, row + 2, 0)); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/lua_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("error", function(e) { session.setAnnotations([e.data]); }); worker.on("ok", function(e) { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/lua"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-luapage.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/lua_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var LuaHighlightRules = function() { var keywords = ( "break|do|else|elseif|end|for|function|if|in|local|repeat|"+ "return|then|until|while|or|and|not" ); var builtinConstants = ("true|false|nil|_G|_VERSION"); var functions = ( "string|xpcall|package|tostring|print|os|unpack|require|"+ "getfenv|setmetatable|next|assert|tonumber|io|rawequal|"+ "collectgarbage|getmetatable|module|rawset|math|debug|"+ "pcall|table|newproxy|type|coroutine|_G|select|gcinfo|"+ "pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|"+ "load|error|loadfile|"+ "sub|upper|len|gfind|rep|find|match|char|dump|gmatch|"+ "reverse|byte|format|gsub|lower|preload|loadlib|loaded|"+ "loaders|cpath|config|path|seeall|exit|setlocale|date|"+ "getenv|difftime|remove|time|clock|tmpname|rename|execute|"+ "lines|write|close|flush|open|output|type|read|stderr|"+ "stdin|input|stdout|popen|tmpfile|log|max|acos|huge|"+ "ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|"+ "frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|"+ "atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|"+ "gethook|setmetatable|setlocal|traceback|setfenv|getinfo|"+ "setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|"+ "foreachi|maxn|foreach|concat|sort|remove|resume|yield|"+ "status|wrap|create|running|"+ "__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|"+ "__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber" ); var stdLibaries = ("string|package|os|io|math|debug|table|coroutine"); var futureReserved = ""; var deprecatedIn5152 = ("setn|foreach|foreachi|gcinfo|log10|maxn"); var keywordMapper = this.createKeywordMapper({ "keyword": keywords, "support.function": functions, "invalid.deprecated": deprecatedIn5152, "constant.library": stdLibaries, "constant.language": builtinConstants, "invalid.illegal": futureReserved, "variable.language": "self" }, "identifier"); var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))"; var hexInteger = "(?:0[xX][\\dA-Fa-f]+)"; var integer = "(?:" + decimalInteger + "|" + hexInteger + ")"; var fraction = "(?:\\.\\d+)"; var intPart = "(?:\\d+)"; var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))"; var floatNumber = "(?:" + pointFloat + ")"; this.$rules = { "start" : [{ stateName: "bracketedComment", onMatch : function(value, currentState, stack){ stack.unshift(this.next, value.length - 2, currentState); return "comment"; }, regex : /\-\-\[=*\[/, next : [ { onMatch : function(value, currentState, stack) { if (value.length == stack[1]) { stack.shift(); stack.shift(); this.next = stack.shift(); } else { this.next = ""; } return "comment"; }, regex : /\]=*\]/, next : "start" }, { defaultToken : "comment" } ] }, { token : "comment", regex : "\\-\\-.*$" }, { stateName: "bracketedString", onMatch : function(value, currentState, stack){ stack.unshift(this.next, value.length, currentState); return "comment"; }, regex : /\[=*\[/, next : [ { onMatch : function(value, currentState, stack) { if (value.length == stack[1]) { stack.shift(); stack.shift(); this.next = stack.shift(); } else { this.next = ""; } return "comment"; }, regex : /\]=*\]/, next : "start" }, { defaultToken : "comment" } ] }, { token : "string", // " string regex : '"(?:[^\\\\]|\\\\.)*?"' }, { token : "string", // ' string regex : "'(?:[^\\\\]|\\\\.)*?'" }, { token : "constant.numeric", // float regex : floatNumber }, { token : "constant.numeric", // integer regex : integer + "\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\*|\\/|%|\\#|\\^|~|<|>|<=|=>|==|~=|=|\\:|\\.\\.\\.|\\.\\." }, { token : "paren.lparen", regex : "[\\[\\(\\{]" }, { token : "paren.rparen", regex : "[\\]\\)\\}]" }, { token : "text", regex : "\\s+|\\w+" } ] }; this.normalizeRules(); } oop.inherits(LuaHighlightRules, TextHighlightRules); exports.LuaHighlightRules = LuaHighlightRules; }); ace.define("ace/mode/folding/lua",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var TokenIterator = require("../../token_iterator").TokenIterator; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /\b(function|then|do|repeat)\b|{\s*$|(\[=*\[)/; this.foldingStopMarker = /\bend\b|^\s*}|\]=*\]/; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var isStart = this.foldingStartMarker.test(line); var isEnd = this.foldingStopMarker.test(line); if (isStart && !isEnd) { var match = line.match(this.foldingStartMarker); if (match[1] == "then" && /\belseif\b/.test(line)) return; if (match[1]) { if (session.getTokenAt(row, match.index + 1).type === "keyword") return "start"; } else if (match[2]) { var type = session.bgTokenizer.getState(row) || ""; if (type[0] == "bracketedComment" || type[0] == "bracketedString") return "start"; } else { return "start"; } } if (foldStyle != "markbeginend" || !isEnd || isStart && isEnd) return ""; var match = line.match(this.foldingStopMarker); if (match[0] === "end") { if (session.getTokenAt(row, match.index + 1).type === "keyword") return "end"; } else if (match[0][0] === "]") { var type = session.bgTokenizer.getState(row - 1) || ""; if (type[0] == "bracketedComment" || type[0] == "bracketedString") return "end"; } else return "end"; }; this.getFoldWidgetRange = function(session, foldStyle, row) { var line = session.doc.getLine(row); var match = this.foldingStartMarker.exec(line); if (match) { if (match[1]) return this.luaBlock(session, row, match.index + 1); if (match[2]) return session.getCommentFoldRange(row, match.index + 1); return this.openingBracketBlock(session, "{", row, match.index); } var match = this.foldingStopMarker.exec(line); if (match) { if (match[0] === "end") { if (session.getTokenAt(row, match.index + 1).type === "keyword") return this.luaBlock(session, row, match.index + 1); } if (match[0][0] === "]") return session.getCommentFoldRange(row, match.index + 1); return this.closingBracketBlock(session, "}", row, match.index + match[0].length); } }; this.luaBlock = function(session, row, column) { var stream = new TokenIterator(session, row, column); var indentKeywords = { "function": 1, "do": 1, "then": 1, "elseif": -1, "end": -1, "repeat": 1, "until": -1 }; var token = stream.getCurrentToken(); if (!token || token.type != "keyword") return; var val = token.value; var stack = [val]; var dir = indentKeywords[val]; if (!dir) return; var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length; var startRow = row; stream.step = dir === -1 ? stream.stepBackward : stream.stepForward; while(token = stream.step()) { if (token.type !== "keyword") continue; var level = dir * indentKeywords[token.value]; if (level > 0) { stack.unshift(token.value); } else if (level <= 0) { stack.shift(); if (!stack.length && token.value != "elseif") break; if (level === 0) stack.unshift(token.value); } } var row = stream.getCurrentTokenRow(); if (dir === -1) return new Range(row, session.getLine(row).length, startRow, startColumn); else return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn()); }; }).call(FoldMode.prototype); }); ace.define("ace/mode/lua",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/lua_highlight_rules","ace/mode/folding/lua","ace/range","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var LuaHighlightRules = require("./lua_highlight_rules").LuaHighlightRules; var LuaFoldMode = require("./folding/lua").FoldMode; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var Mode = function() { this.HighlightRules = LuaHighlightRules; this.foldingRules = new LuaFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "--"; this.blockComment = {start: "--[", end: "]--"}; var indentKeywords = { "function": 1, "then": 1, "do": 1, "else": 1, "elseif": 1, "repeat": 1, "end": -1, "until": -1 }; var outdentKeywords = [ "else", "elseif", "end", "until" ]; function getNetIndentLevel(tokens) { var level = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (token.type == "keyword") { if (token.value in indentKeywords) { level += indentKeywords[token.value]; } } else if (token.type == "paren.lparen") { level ++; } else if (token.type == "paren.rparen") { level --; } } if (level < 0) { return -1; } else if (level > 0) { return 1; } else { return 0; } } this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var level = 0; var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (state == "start") { level = getNetIndentLevel(tokens); } if (level > 0) { return indent + tab; } else if (level < 0 && indent.substr(indent.length - tab.length) == tab) { if (!this.checkOutdent(state, line, "\n")) { return indent.substr(0, indent.length - tab.length); } } return indent; }; this.checkOutdent = function(state, line, input) { if (input != "\n" && input != "\r" && input != "\r\n") return false; if (line.match(/^\s*[\)\}\]]$/)) return true; var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens; if (!tokens || !tokens.length) return false; return (tokens[0].type == "keyword" && outdentKeywords.indexOf(tokens[0].value) != -1); }; this.autoOutdent = function(state, session, row) { var prevLine = session.getLine(row - 1); var prevIndent = this.$getIndent(prevLine).length; var prevTokens = this.getTokenizer().getLineTokens(prevLine, "start").tokens; var tabLength = session.getTabString().length; var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens); var curIndent = this.$getIndent(session.getLine(row)).length; if (curIndent < expectedIndent) { return; } session.outdentRows(new Range(row, 0, row + 2, 0)); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/lua_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("error", function(e) { session.setAnnotations([e.data]); }); worker.on("ok", function(e) { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/lua"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/luapage_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules","ace/mode/lua_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var LuaHighlightRules = require("./lua_highlight_rules").LuaHighlightRules; var LuaPageHighlightRules = function() { HtmlHighlightRules.call(this); var startRules = [ { token: "keyword", regex: "<\\%\\=?", push: "lua-start" }, { token: "keyword", regex: "<\\?lua\\=?", push: "lua-start" } ]; var endRules = [ { token: "keyword", regex: "\\%>", next: "pop" }, { token: "keyword", regex: "\\?>", next: "pop" } ]; this.embedRules(LuaHighlightRules, "lua-", endRules, ["start"]); for (var key in this.$rules) this.$rules[key].unshift.apply(this.$rules[key], startRules); this.normalizeRules(); }; oop.inherits(LuaPageHighlightRules, HtmlHighlightRules); exports.LuaPageHighlightRules = LuaPageHighlightRules; }); ace.define("ace/mode/luapage",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/lua","ace/mode/luapage_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlMode = require("./html").Mode; var LuaMode = require("./lua").Mode; var LuaPageHighlightRules = require("./luapage_highlight_rules").LuaPageHighlightRules; var Mode = function() { HtmlMode.call(this); this.HighlightRules = LuaPageHighlightRules; this.createModeDelegates({ "lua-": LuaMode }); }; oop.inherits(Mode, HtmlMode); (function() { this.$id = "ace/mode/luapage"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-lucene.js ================================================ ace.define("ace/mode/lucene_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var LuceneHighlightRules = function() { this.$rules = { "start" : [ { token : "constant.character.negation", regex : "[\\-]" }, { token : "constant.character.interro", regex : "[\\?]" }, { token : "constant.character.asterisk", regex : "[\\*]" }, { token: 'constant.character.proximity', regex: '~[0-9]+\\b' }, { token : 'keyword.operator', regex: '(?:AND|OR|NOT)\\b' }, { token : "paren.lparen", regex : "[\\(]" }, { token : "paren.rparen", regex : "[\\)]" }, { token : "keyword", regex : "[\\S]+:" }, { token : "string", // " string regex : '".*?"' }, { token : "text", regex : "\\s+" } ] }; }; oop.inherits(LuceneHighlightRules, TextHighlightRules); exports.LuceneHighlightRules = LuceneHighlightRules; }); ace.define("ace/mode/lucene",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/lucene_highlight_rules"], function(require, exports, module) { 'use strict'; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var LuceneHighlightRules = require("./lucene_highlight_rules").LuceneHighlightRules; var Mode = function() { this.HighlightRules = LuceneHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.$id = "ace/mode/lucene"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-makefile.js ================================================ ace.define("ace/mode/sh_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var reservedKeywords = exports.reservedKeywords = ( '!|{|}|case|do|done|elif|else|'+ 'esac|fi|for|if|in|then|until|while|'+ '&|;|export|local|read|typeset|unset|'+ 'elif|select|set' ); var languageConstructs = exports.languageConstructs = ( '[|]|alias|bg|bind|break|builtin|'+ 'cd|command|compgen|complete|continue|'+ 'dirs|disown|echo|enable|eval|exec|'+ 'exit|fc|fg|getopts|hash|help|history|'+ 'jobs|kill|let|logout|popd|printf|pushd|'+ 'pwd|return|set|shift|shopt|source|'+ 'suspend|test|times|trap|type|ulimit|'+ 'umask|unalias|wait' ); var ShHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "keyword": reservedKeywords, "support.function.builtin": languageConstructs, "invalid.deprecated": "debugger" }, "identifier"); var integer = "(?:(?:[1-9]\\d*)|(?:0))"; var fraction = "(?:\\.\\d+)"; var intPart = "(?:\\d+)"; var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))"; var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + ")"; var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")"; var fileDescriptor = "(?:&" + intPart + ")"; var variableName = "[a-zA-Z_][a-zA-Z0-9_]*"; var variable = "(?:(?:\\$" + variableName + ")|(?:" + variableName + "=))"; var builtinVariable = "(?:\\$(?:SHLVL|\\$|\\!|\\?))"; var func = "(?:" + variableName + "\\s*\\(\\))"; this.$rules = { "start" : [{ token : "constant", regex : /\\./ }, { token : ["text", "comment"], regex : /(^|\s)(#.*)$/ }, { token : "string", regex : '"', push : [{ token : "constant.language.escape", regex : /\\(?:[$abeEfnrtv\\'"]|x[a-fA-F\d]{1,2}|u[a-fA-F\d]{4}([a-fA-F\d]{4})?|c.|\d{1,3})/ }, { token : "constant", regex : /\$\w+/ }, { token : "string", regex : '"', next: "pop" }, { defaultToken: "string" }] }, { regex : "<<<", token : "keyword.operator" }, { stateName: "heredoc", regex : "(<<)(\\s*)(['\"`]?)([\\w\\-]+)(['\"`]?)", onMatch : function(value, currentState, stack) { var next = value[2] == '-' ? "indentedHeredoc" : "heredoc"; var tokens = value.split(this.splitRegex); stack.push(next, tokens[4]); return [ {type:"constant", value: tokens[1]}, {type:"text", value: tokens[2]}, {type:"string", value: tokens[3]}, {type:"support.class", value: tokens[4]}, {type:"string", value: tokens[5]} ]; }, rules: { heredoc: [{ onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }], indentedHeredoc: [{ token: "string", regex: "^\t+" }, { onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }] } }, { regex : "$", token : "empty", next : function(currentState, stack) { if (stack[0] === "heredoc" || stack[0] === "indentedHeredoc") return stack[0]; return currentState; } }, { token : "variable.language", regex : builtinVariable }, { token : "variable", regex : variable }, { token : "support.function", regex : func }, { token : "support.function", regex : fileDescriptor }, { token : "string", // ' string start : "'", end : "'" }, { token : "constant.numeric", // float regex : floatNumber }, { token : "constant.numeric", // integer regex : integer + "\\b" }, { token : keywordMapper, regex : "[a-zA-Z_][a-zA-Z0-9_]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!=" }, { token : "paren.lparen", regex : "[\\[\\(\\{]" }, { token : "paren.rparen", regex : "[\\]\\)\\}]" } ] }; this.normalizeRules(); }; oop.inherits(ShHighlightRules, TextHighlightRules); exports.ShHighlightRules = ShHighlightRules; }); ace.define("ace/mode/makefile_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/sh_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ShHighlightFile = require("./sh_highlight_rules"); var MakefileHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "keyword": ShHighlightFile.reservedKeywords, "support.function.builtin": ShHighlightFile.languageConstructs, "invalid.deprecated": "debugger" }, "string"); this.$rules = { "start": [ { token: "string.interpolated.backtick.makefile", regex: "`", next: "shell-start" }, { token: "punctuation.definition.comment.makefile", regex: /#(?=.)/, next: "comment" }, { token: [ "keyword.control.makefile"], regex: "^(?:\\s*\\b)(\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\b)" }, {// ^([^\t ]+(\s[^\t ]+)*:(?!\=))\s*.* token: ["entity.name.function.makefile", "text"], regex: "^([^\\t ]+(?:\\s[^\\t ]+)*:)(\\s*.*)" } ], "comment": [ { token : "punctuation.definition.comment.makefile", regex : /.+\\/ }, { token : "punctuation.definition.comment.makefile", regex : ".+", next : "start" } ], "shell-start": [ { token: keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token: "string", regex : "\\w+" }, { token : "string.interpolated.backtick.makefile", regex : "`", next : "start" } ] } }; oop.inherits(MakefileHighlightRules, TextHighlightRules); exports.MakefileHighlightRules = MakefileHighlightRules; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/makefile",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/makefile_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var MakefileHighlightRules = require("./makefile_highlight_rules").MakefileHighlightRules; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = MakefileHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.$indentWithTabs = true; this.$id = "ace/mode/makefile"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-markdown.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var XmlFoldMode = require("./folding/xml").FoldMode; var Mode = function() { this.HighlightRules = XmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.foldingRules = new XmlFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.voidElements = lang.arrayToMap([]); this.blockComment = {start: ""}; this.$id = "ace/mode/xml"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(defaultMode, subModes) { this.defaultMode = defaultMode; this.subModes = subModes; }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.$getMode = function(state) { if (typeof state != "string") state = state[0]; for (var key in this.subModes) { if (state.indexOf(key) === 0) return this.subModes[key]; } return null; }; this.$tryMode = function(state, session, foldStyle, row) { var mode = this.$getMode(state); return (mode ? mode.getFoldWidget(session, foldStyle, row) : ""); }; this.getFoldWidget = function(session, foldStyle, row) { return ( this.$tryMode(session.getState(row-1), session, foldStyle, row) || this.$tryMode(session.getState(row), session, foldStyle, row) || this.defaultMode.getFoldWidget(session, foldStyle, row) ); }; this.getFoldWidgetRange = function(session, foldStyle, row) { var mode = this.$getMode(session.getState(row-1)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.$getMode(session.getState(row)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.defaultMode; return mode.getFoldWidgetRange(session, foldStyle, row); }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/markdown_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules","ace/mode/html_highlight_rules","ace/mode/css_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var escaped = function(ch) { return "(?:[^" + lang.escapeRegExp(ch) + "\\\\]|\\\\.)*"; } function github_embed(tag, prefix) { return { // Github style block token : "support.function", regex : "^\\s*```" + tag + "\\s*$", push : prefix + "start" }; } var MarkdownHighlightRules = function() { HtmlHighlightRules.call(this); this.$rules["start"].unshift({ token : "empty_line", regex : '^$', next: "allowBlock" }, { // h1 token: "markup.heading.1", regex: "^=+(?=\\s*$)" }, { // h2 token: "markup.heading.2", regex: "^\\-+(?=\\s*$)" }, { token : function(value) { return "markup.heading." + value.length; }, regex : /^#{1,6}(?=\s*[^ #]|\s+#.)/, next : "header" }, github_embed("(?:javascript|js)", "jscode-"), github_embed("xml", "xmlcode-"), github_embed("html", "htmlcode-"), github_embed("css", "csscode-"), { // Github style block token : "support.function", regex : "^\\s*```\\s*\\S*(?:{.*?\\})?\\s*$", next : "githubblock" }, { // block quote token : "string.blockquote", regex : "^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+", next : "blockquote" }, { // HR * - _ token : "constant", regex : "^ {0,2}(?:(?: ?\\* ?){3,}|(?: ?\\- ?){3,}|(?: ?\\_ ?){3,})\\s*$", next: "allowBlock" }, { // list token : "markup.list", regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+", next : "listblock-start" }, { include : "basic" }); this.addRules({ "basic" : [{ token : "constant.language.escape", regex : /\\[\\`*_{}\[\]()#+\-.!]/ }, { // code span ` token : "support.function", regex : "(`+)(.*?[^`])(\\1)" }, { // reference token : ["text", "constant", "text", "url", "string", "text"], regex : "^([ ]{0,3}\\[)([^\\]]+)(\\]:\\s*)([^ ]+)(\\s*(?:[\"][^\"]+[\"])?(\\s*))$" }, { // link by reference token : ["text", "string", "text", "constant", "text"], regex : "(\\[)(" + escaped("]") + ")(\\]\s*\\[)("+ escaped("]") + ")(\\])" }, { // link by url token : ["text", "string", "text", "markup.underline", "string", "text"], regex : "(\\[)(" + // [ escaped("]") + // link text ")(\\]\\()"+ // ]( '((?:[^\\)\\s\\\\]|\\\\.|\\s(?=[^"]))*)' + // href '(\\s*"' + escaped('"') + '"\\s*)?' + // "title" "(\\))" // ) }, { // strong ** __ token : "string.strong", regex : "([*]{2}|[_]{2}(?=\\S))(.*?\\S[*_]*)(\\1)" }, { // emphasis * _ token : "string.emphasis", regex : "([*]|[_](?=\\S))(.*?\\S[*_]*)(\\1)" }, { // token : ["text", "url", "text"], regex : "(<)("+ "(?:https?|ftp|dict):[^'\">\\s]+"+ "|"+ "(?:mailto:)?[-.\\w]+\\@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+"+ ")(>)" }], "allowBlock": [ {token : "support.function", regex : "^ {4}.+", next : "allowBlock"}, {token : "empty", regex : "", next : "start"} ], "header" : [{ regex: "$", next : "start" }, { include: "basic" }, { defaultToken : "heading" } ], "listblock-start" : [{ token : "support.variable", regex : /(?:\[[ x]\])?/, next : "listblock" }], "listblock" : [ { // Lists only escape on completely blank lines. token : "empty_line", regex : "^$", next : "start" }, { // list token : "markup.list", regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+", next : "listblock-start" }, { include : "basic", noEscape: true }, { // Github style block token : "support.function", regex : "^\\s*```\\s*[a-zA-Z]*(?:{.*?\\})?\\s*$", next : "githubblock" }, { defaultToken : "list" //do not use markup.list to allow stling leading `*` differntly } ], "blockquote" : [ { // Blockquotes only escape on blank lines. token : "empty_line", regex : "^\\s*$", next : "start" }, { // block quote token : "string.blockquote", regex : "^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+", next : "blockquote" }, { include : "basic", noEscape: true }, { defaultToken : "string.blockquote" } ], "githubblock" : [ { token : "support.function", regex : "^\\s*```", next : "start" }, { token : "support.function", regex : ".+" } ] }); this.embedRules(JavaScriptHighlightRules, "jscode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.embedRules(HtmlHighlightRules, "htmlcode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.embedRules(CssHighlightRules, "csscode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.embedRules(XmlHighlightRules, "xmlcode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.normalizeRules(); }; oop.inherits(MarkdownHighlightRules, TextHighlightRules); exports.MarkdownHighlightRules = MarkdownHighlightRules; }); ace.define("ace/mode/folding/markdown",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /^(?:[=-]+\s*$|#{1,6} |`{3})/; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (!this.foldingStartMarker.test(line)) return ""; if (line[0] == "`") { if (session.bgTokenizer.getState(row) == "start") return "end"; return "start"; } return "start"; }; this.getFoldWidgetRange = function(session, foldStyle, row) { var line = session.getLine(row); var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; if (!line.match(this.foldingStartMarker)) return; if (line[0] == "`") { if (session.bgTokenizer.getState(row) !== "start") { while (++row < maxRow) { line = session.getLine(row); if (line[0] == "`" & line.substring(0, 3) == "```") break; } return new Range(startRow, startColumn, row, 0); } else { while (row -- > 0) { line = session.getLine(row); if (line[0] == "`" & line.substring(0, 3) == "```") break; } return new Range(row, line.length, startRow, 0); } } var token; function isHeading(row) { token = session.getTokens(row)[0]; return token && token.type.lastIndexOf(heading, 0) === 0; } var heading = "markup.heading"; function getLevel() { var ch = token.value[0]; if (ch == "=") return 6; if (ch == "-") return 5; return 7 - token.value.search(/[^#]/); } if (isHeading(row)) { var startHeadingLevel = getLevel(); while (++row < maxRow) { if (!isHeading(row)) continue; var level = getLevel(); if (level >= startHeadingLevel) break; } endRow = row - (!token || ["=", "-"].indexOf(token.value[0]) == -1 ? 1 : 2); if (endRow > startRow) { while (endRow > startRow && /^\s*$/.test(session.getLine(endRow))) endRow--; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/markdown",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/xml","ace/mode/html","ace/mode/markdown_highlight_rules","ace/mode/folding/markdown"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var XmlMode = require("./xml").Mode; var HtmlMode = require("./html").Mode; var MarkdownHighlightRules = require("./markdown_highlight_rules").MarkdownHighlightRules; var MarkdownFoldMode = require("./folding/markdown").FoldMode; var Mode = function() { this.HighlightRules = MarkdownHighlightRules; this.createModeDelegates({ "js-": JavaScriptMode, "xml-": XmlMode, "html-": HtmlMode }); this.foldingRules = new MarkdownFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.type = "text"; this.blockComment = {start: ""}; this.getNextLineIndent = function(state, line, tab) { if (state == "listblock") { var match = /^(\s*)(?:([-+*])|(\d+)\.)(\s+)/.exec(line); if (!match) return ""; var marker = match[2]; if (!marker) marker = parseInt(match[3], 10) + 1 + "."; return match[1] + marker + match[4]; } else { return this.$getIndent(line); } }; this.$id = "ace/mode/markdown"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-mask.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/markdown_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules","ace/mode/html_highlight_rules","ace/mode/css_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var escaped = function(ch) { return "(?:[^" + lang.escapeRegExp(ch) + "\\\\]|\\\\.)*"; } function github_embed(tag, prefix) { return { // Github style block token : "support.function", regex : "^\\s*```" + tag + "\\s*$", push : prefix + "start" }; } var MarkdownHighlightRules = function() { HtmlHighlightRules.call(this); this.$rules["start"].unshift({ token : "empty_line", regex : '^$', next: "allowBlock" }, { // h1 token: "markup.heading.1", regex: "^=+(?=\\s*$)" }, { // h2 token: "markup.heading.2", regex: "^\\-+(?=\\s*$)" }, { token : function(value) { return "markup.heading." + value.length; }, regex : /^#{1,6}(?=\s*[^ #]|\s+#.)/, next : "header" }, github_embed("(?:javascript|js)", "jscode-"), github_embed("xml", "xmlcode-"), github_embed("html", "htmlcode-"), github_embed("css", "csscode-"), { // Github style block token : "support.function", regex : "^\\s*```\\s*\\S*(?:{.*?\\})?\\s*$", next : "githubblock" }, { // block quote token : "string.blockquote", regex : "^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+", next : "blockquote" }, { // HR * - _ token : "constant", regex : "^ {0,2}(?:(?: ?\\* ?){3,}|(?: ?\\- ?){3,}|(?: ?\\_ ?){3,})\\s*$", next: "allowBlock" }, { // list token : "markup.list", regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+", next : "listblock-start" }, { include : "basic" }); this.addRules({ "basic" : [{ token : "constant.language.escape", regex : /\\[\\`*_{}\[\]()#+\-.!]/ }, { // code span ` token : "support.function", regex : "(`+)(.*?[^`])(\\1)" }, { // reference token : ["text", "constant", "text", "url", "string", "text"], regex : "^([ ]{0,3}\\[)([^\\]]+)(\\]:\\s*)([^ ]+)(\\s*(?:[\"][^\"]+[\"])?(\\s*))$" }, { // link by reference token : ["text", "string", "text", "constant", "text"], regex : "(\\[)(" + escaped("]") + ")(\\]\s*\\[)("+ escaped("]") + ")(\\])" }, { // link by url token : ["text", "string", "text", "markup.underline", "string", "text"], regex : "(\\[)(" + // [ escaped("]") + // link text ")(\\]\\()"+ // ]( '((?:[^\\)\\s\\\\]|\\\\.|\\s(?=[^"]))*)' + // href '(\\s*"' + escaped('"') + '"\\s*)?' + // "title" "(\\))" // ) }, { // strong ** __ token : "string.strong", regex : "([*]{2}|[_]{2}(?=\\S))(.*?\\S[*_]*)(\\1)" }, { // emphasis * _ token : "string.emphasis", regex : "([*]|[_](?=\\S))(.*?\\S[*_]*)(\\1)" }, { // token : ["text", "url", "text"], regex : "(<)("+ "(?:https?|ftp|dict):[^'\">\\s]+"+ "|"+ "(?:mailto:)?[-.\\w]+\\@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+"+ ")(>)" }], "allowBlock": [ {token : "support.function", regex : "^ {4}.+", next : "allowBlock"}, {token : "empty", regex : "", next : "start"} ], "header" : [{ regex: "$", next : "start" }, { include: "basic" }, { defaultToken : "heading" } ], "listblock-start" : [{ token : "support.variable", regex : /(?:\[[ x]\])?/, next : "listblock" }], "listblock" : [ { // Lists only escape on completely blank lines. token : "empty_line", regex : "^$", next : "start" }, { // list token : "markup.list", regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+", next : "listblock-start" }, { include : "basic", noEscape: true }, { // Github style block token : "support.function", regex : "^\\s*```\\s*[a-zA-Z]*(?:{.*?\\})?\\s*$", next : "githubblock" }, { defaultToken : "list" //do not use markup.list to allow stling leading `*` differntly } ], "blockquote" : [ { // Blockquotes only escape on blank lines. token : "empty_line", regex : "^\\s*$", next : "start" }, { // block quote token : "string.blockquote", regex : "^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+", next : "blockquote" }, { include : "basic", noEscape: true }, { defaultToken : "string.blockquote" } ], "githubblock" : [ { token : "support.function", regex : "^\\s*```", next : "start" }, { token : "support.function", regex : ".+" } ] }); this.embedRules(JavaScriptHighlightRules, "jscode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.embedRules(HtmlHighlightRules, "htmlcode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.embedRules(CssHighlightRules, "csscode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.embedRules(XmlHighlightRules, "xmlcode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.normalizeRules(); }; oop.inherits(MarkdownHighlightRules, TextHighlightRules); exports.MarkdownHighlightRules = MarkdownHighlightRules; }); ace.define("ace/mode/mask_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/css_highlight_rules","ace/mode/markdown_highlight_rules","ace/mode/html_highlight_rules"], function(require, exports, module) { "use strict"; exports.MaskHighlightRules = MaskHighlightRules; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextRules = require("./text_highlight_rules").TextHighlightRules; var JSRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var CssRules = require("./css_highlight_rules").CssHighlightRules; var MDRules = require("./markdown_highlight_rules").MarkdownHighlightRules; var HTMLRules = require("./html_highlight_rules").HtmlHighlightRules; var token_TAG = "keyword.support.constant.language", token_COMPO = "support.function.markup.bold", token_KEYWORD = "keyword", token_LANG = "constant.language", token_UTIL = "keyword.control.markup.italic", token_ATTR = "support.variable.class", token_PUNKT = "keyword.operator", token_ITALIC = "markup.italic", token_BOLD = "markup.bold", token_LPARE = "paren.lparen", token_RPARE = "paren.rparen"; var const_FUNCTIONS, const_KEYWORDS, const_CONST, const_TAGS; (function(){ const_FUNCTIONS = lang.arrayToMap( ("log").split("|") ); const_CONST = lang.arrayToMap( (":dualbind|:bind|:import|slot|event|style|html|markdown|md").split("|") ); const_KEYWORDS = lang.arrayToMap( ("debugger|define|var|if|each|for|of|else|switch|case|with|visible|+if|+each|+for|+switch|+with|+visible|include|import").split("|") ); const_TAGS = lang.arrayToMap( ("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|" + "big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|" + "command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|" + "figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|" + "header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|" + "link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|" + "option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|" + "small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|" + "textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp").split("|") ); }()); function MaskHighlightRules () { this.$rules = { "start" : [ Token("comment", "\\/\\/.*$"), Token("comment", "\\/\\*", [ Token("comment", ".*?\\*\\/", "start"), Token("comment", ".+") ]), Blocks.string("'''"), Blocks.string('"""'), Blocks.string('"'), Blocks.string("'"), Blocks.syntax(/(markdown|md)\b/, "md-multiline", "multiline"), Blocks.syntax(/html\b/, "html-multiline", "multiline"), Blocks.syntax(/(slot|event)\b/, "js-block", "block"), Blocks.syntax(/style\b/, "css-block", "block"), Blocks.syntax(/var\b/, "js-statement", "attr"), Blocks.tag(), Token(token_LPARE, "[[({>]"), Token(token_RPARE, "[\\])};]", "start"), { caseInsensitive: true } ] }; var rules = this; addJavaScript("interpolation", /\]/, token_RPARE + "." + token_ITALIC); addJavaScript("statement", /\)|}|;/); addJavaScript("block", /\}/); addCss(); addMarkdown(); addHtml(); function addJavaScript(name, escape, closeType) { var prfx = "js-" + name + "-", rootTokens = name === "block" ? ["start"] : ["start", "no_regex"]; add( JSRules , prfx , escape , rootTokens , closeType ); } function addCss() { add(CssRules, "css-block-", /\}/); } function addMarkdown() { add(MDRules, "md-multiline-", /("""|''')/, []); } function addHtml() { add(HTMLRules, "html-multiline-", /("""|''')/); } function add(Rules, strPrfx, rgxEnd, rootTokens, closeType) { var next = "pop"; var tokens = rootTokens || [ "start" ]; if (tokens.length === 0) { tokens = null; } if (/block|multiline/.test(strPrfx)) { next = strPrfx + "end"; rules.$rules[next] = [ Token("empty", "", "start") ]; } rules.embedRules( Rules , strPrfx , [ Token(closeType || token_RPARE, rgxEnd, next) ] , tokens , tokens == null ? true : false ); } this.normalizeRules(); } oop.inherits(MaskHighlightRules, TextRules); var Blocks = { string: function(str, next){ var token = Token( "string.start" , str , [ Token(token_LPARE + "." + token_ITALIC, /~\[/, Blocks.interpolation()), Token("string.end", str, "pop"), { defaultToken: "string" } ] , next ); if (str.length === 1){ var escaped = Token("string.escape", "\\\\" + str); token.push.unshift(escaped); } return token; }, interpolation: function(){ return [ Token(token_UTIL, /\s*\w*\s*:/), "js-interpolation-start" ]; }, tagHead: function (rgx) { return Token(token_ATTR, rgx, [ Token(token_ATTR, /[\w\-_]+/), Token(token_LPARE + "." + token_ITALIC, /~\[/, Blocks.interpolation()), Blocks.goUp() ]); }, tag: function () { return { token: 'tag', onMatch : function(value) { if (void 0 !== const_KEYWORDS[value]) return token_KEYWORD; if (void 0 !== const_CONST[value]) return token_LANG; if (void 0 !== const_FUNCTIONS[value]) return "support.function"; if (void 0 !== const_TAGS[value.toLowerCase()]) return token_TAG; return token_COMPO; }, regex : /([@\w\-_:+]+)|((^|\s)(?=\s*(\.|#)))/, push: [ Blocks.tagHead(/\./) , Blocks.tagHead(/\#/) , Blocks.expression(), Blocks.attribute(), Token(token_LPARE, /[;>{]/, "pop") ] }; }, syntax: function(rgx, next, type){ return { token: token_LANG, regex : rgx, push: ({ "attr": [ next + "-start", Token(token_PUNKT, /;/, "start") ], "multiline": [ Blocks.tagHead(/\./) , Blocks.tagHead(/\#/) , Blocks.attribute(), Blocks.expression(), Token(token_LPARE, /[>\{]/), Token(token_PUNKT, /;/, "start"), Token(token_LPARE, /'''|"""/, [ next + "-start" ]) ], "block": [ Blocks.tagHead(/\./) , Blocks.tagHead(/\#/) , Blocks.attribute(), Blocks.expression(), Token(token_LPARE, /\{/, [ next + "-start" ]) ] })[type] }; }, attribute: function(){ return Token(function(value){ return /^x\-/.test(value) ? token_ATTR + "." + token_BOLD : token_ATTR; }, /[\w_-]+/, [ Token(token_PUNKT, /\s*=\s*/, [ Blocks.string('"'), Blocks.string("'"), Blocks.word(), Blocks.goUp() ]), Blocks.goUp() ]); }, expression: function(){ return Token(token_LPARE, /\(/, [ "js-statement-start" ]); }, word: function(){ return Token("string", /[\w-_]+/); }, goUp: function(){ return Token("text", "", "pop"); }, goStart: function(){ return Token("text", "", "start"); } }; function Token(token, rgx, mix) { var push, next, onMatch; if (arguments.length === 4) { push = mix; next = arguments[3]; } else if (typeof mix === "string") { next = mix; } else { push = mix; } if (typeof token === "function") { onMatch = token; token = "empty"; } return { token: token, regex: rgx, push: push, next: next, onMatch: onMatch }; } }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/mask",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/mask_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var MaskHighlightRules = require("./mask_highlight_rules").MaskHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = MaskHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/mask"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-matlab.js ================================================ ace.define("ace/mode/matlab_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var MatlabHighlightRules = function() { var keywords = ( "break|case|catch|classdef|continue|else|elseif|end|for|function|global|if|otherwise|parfor|persistent|return|spmd|switch|try|while" ); var builtinConstants = ( "true|false|inf|Inf|nan|NaN|eps|pi|ans|nargin|nargout|varargin|varargout" ); var builtinFunctions = ( "abs|accumarray|acos(?:d|h)?|acot(?:d|h)?|acsc(?:d|h)?|actxcontrol(?:list|select)?|actxGetRunningServer|actxserver|addlistener|addpath|addpref|addtodate|"+ "airy|align|alim|all|allchild|alpha|alphamap|amd|ancestor|and|angle|annotation|any|area|arrayfun|asec(?:d|h)?|asin(?:d|h)?|assert|assignin|atan(?:2|d|h)?|" + "audiodevinfo|audioplayer|audiorecorder|aufinfo|auread|autumn|auwrite|avifile|aviinfo|aviread|axes|axis|balance|bar(?:3|3h|h)?|base2dec|beep|BeginInvoke|bench|"+ "bessel(?:h|i|j|k|y)|beta|betainc|betaincinv|betaln|bicg|bicgstab|bicgstabl|bin2dec|bitand|bitcmp|bitget|bitmax|bitnot|bitor|bitset|bitshift|bitxor|blanks|blkdiag|"+ "bone|box|brighten|brush|bsxfun|builddocsearchdb|builtin|bvp4c|bvp5c|bvpget|bvpinit|bvpset|bvpxtend|calendar|calllib|callSoapService|camdolly|cameratoolbar|camlight|"+ "camlookat|camorbit|campan|campos|camproj|camroll|camtarget|camup|camva|camzoom|cart2pol|cart2sph|cast|cat|caxis|cd|cdf2rdf|cdfepoch|cdfinfo|cdflib(?:\.(?:close|closeVar|"+ "computeEpoch|computeEpoch16|create|createAttr|createVar|delete|deleteAttr|deleteAttrEntry|deleteAttrgEntry|deleteVar|deleteVarRecords|epoch16Breakdown|epochBreakdown|getAttrEntry|"+ "getAttrgEntry|getAttrMaxEntry|getAttrMaxgEntry|getAttrName|getAttrNum|getAttrScope|getCacheSize|getChecksum|getCompression|getCompressionCacheSize|getConstantNames|"+ "getConstantValue|getCopyright|getFileBackward|getFormat|getLibraryCopyright|getLibraryVersion|getMajority|getName|getNumAttrEntries|getNumAttrgEntries|getNumAttributes|"+ "getNumgAttributes|getReadOnlyMode|getStageCacheSize|getValidate|getVarAllocRecords|getVarBlockingFactor|getVarCacheSize|getVarCompression|getVarData|getVarMaxAllocRecNum|"+ "getVarMaxWrittenRecNum|getVarName|getVarNum|getVarNumRecsWritten|getVarPadValue|getVarRecordData|getVarReservePercent|getVarsMaxWrittenRecNum|getVarSparseRecords|getVersion|"+ "hyperGetVarData|hyperPutVarData|inquire|inquireAttr|inquireAttrEntry|inquireAttrgEntry|inquireVar|open|putAttrEntry|putAttrgEntry|putVarData|putVarRecordData|renameAttr|"+ "renameVar|setCacheSize|setChecksum|setCompression|setCompressionCacheSize|setFileBackward|setFormat|setMajority|setReadOnlyMode|setStageCacheSize|setValidate|"+ "setVarAllocBlockRecords|setVarBlockingFactor|setVarCacheSize|setVarCompression|setVarInitialRecs|setVarPadValue|SetVarReservePercent|setVarsCacheSize|setVarSparseRecords))?|"+ "cdfread|cdfwrite|ceil|cell2mat|cell2struct|celldisp|cellfun|cellplot|cellstr|cgs|checkcode|checkin|checkout|chol|cholinc|cholupdate|circshift|cla|clabel|class|clc|clear|"+ "clearvars|clf|clipboard|clock|close|closereq|cmopts|cmpermute|cmunique|colamd|colon|colorbar|colordef|colormap|colormapeditor|colperm|Combine|comet|comet3|commandhistory|"+ "commandwindow|compan|compass|complex|computer|cond|condeig|condest|coneplot|conj|containers\.Map|contour(?:3|c|f|slice)?|contrast|conv|conv2|convhull|convhulln|convn|cool|"+ "copper|copyfile|copyobj|corrcoef|cos(?:d|h)?|cot(?:d|h)?|cov|cplxpair|cputime|createClassFromWsdl|createSoapMessage|cross|csc(?:d|h)?|csvread|csvwrite|ctranspose|cumprod|"+ "cumsum|cumtrapz|curl|customverctrl|cylinder|daqread|daspect|datacursormode|datatipinfo|date|datenum|datestr|datetick|datevec|dbclear|dbcont|dbdown|dblquad|dbmex|dbquit|"+ "dbstack|dbstatus|dbstep|dbstop|dbtype|dbup|dde23|ddeget|ddesd|ddeset|deal|deblank|dec2base|dec2bin|dec2hex|decic|deconv|del2|delaunay|delaunay3|delaunayn|DelaunayTri|delete|"+ "demo|depdir|depfun|det|detrend|deval|diag|dialog|diary|diff|diffuse|dir|disp|display|dither|divergence|dlmread|dlmwrite|dmperm|doc|docsearch|dos|dot|dragrect|drawnow|dsearch|"+ "dsearchn|dynamicprops|echo|echodemo|edit|eig|eigs|ellipj|ellipke|ellipsoid|empty|enableNETfromNetworkDrive|enableservice|EndInvoke|enumeration|eomday|eq|erf|erfc|erfcinv|"+ "erfcx|erfinv|error|errorbar|errordlg|etime|etree|etreeplot|eval|evalc|evalin|event\.(?:EventData|listener|PropertyEvent|proplistener)|exifread|exist|exit|exp|expint|expm|"+ "expm1|export2wsdlg|eye|ezcontour|ezcontourf|ezmesh|ezmeshc|ezplot|ezplot3|ezpolar|ezsurf|ezsurfc|factor|factorial|fclose|feather|feature|feof|ferror|feval|fft|fft2|fftn|"+ "fftshift|fftw|fgetl|fgets|fieldnames|figure|figurepalette|fileattrib|filebrowser|filemarker|fileparts|fileread|filesep|fill|fill3|filter|filter2|find|findall|findfigs|"+ "findobj|findstr|finish|fitsdisp|fitsinfo|fitsread|fitswrite|fix|flag|flipdim|fliplr|flipud|floor|flow|fminbnd|fminsearch|fopen|format|fplot|fprintf|frame2im|fread|freqspace|"+ "frewind|fscanf|fseek|ftell|FTP|full|fullfile|func2str|functions|funm|fwrite|fzero|gallery|gamma|gammainc|gammaincinv|gammaln|gca|gcbf|gcbo|gcd|gcf|gco|ge|genpath|genvarname|"+ "get|getappdata|getenv|getfield|getframe|getpixelposition|getpref|ginput|gmres|gplot|grabcode|gradient|gray|graymon|grid|griddata(?:3|n)?|griddedInterpolant|gsvd|gt|gtext|"+ "guidata|guide|guihandles|gunzip|gzip|h5create|h5disp|h5info|h5read|h5readatt|h5write|h5writeatt|hadamard|handle|hankel|hdf|hdf5|hdf5info|hdf5read|hdf5write|hdfinfo|"+ "hdfread|hdftool|help|helpbrowser|helpdesk|helpdlg|helpwin|hess|hex2dec|hex2num|hgexport|hggroup|hgload|hgsave|hgsetget|hgtransform|hidden|hilb|hist|histc|hold|home|horzcat|"+ "hostid|hot|hsv|hsv2rgb|hypot|ichol|idivide|ifft|ifft2|ifftn|ifftshift|ilu|im2frame|im2java|imag|image|imagesc|imapprox|imfinfo|imformats|import|importdata|imread|imwrite|"+ "ind2rgb|ind2sub|inferiorto|info|inline|inmem|inpolygon|input|inputdlg|inputname|inputParser|inspect|instrcallback|instrfind|instrfindall|int2str|integral(?:2|3)?|interp(?:1|"+ "1q|2|3|ft|n)|interpstreamspeed|intersect|intmax|intmin|inv|invhilb|ipermute|isa|isappdata|iscell|iscellstr|ischar|iscolumn|isdir|isempty|isequal|isequaln|isequalwithequalnans|"+ "isfield|isfinite|isfloat|isglobal|ishandle|ishghandle|ishold|isinf|isinteger|isjava|iskeyword|isletter|islogical|ismac|ismatrix|ismember|ismethod|isnan|isnumeric|isobject|"+ "isocaps|isocolors|isonormals|isosurface|ispc|ispref|isprime|isprop|isreal|isrow|isscalar|issorted|isspace|issparse|isstr|isstrprop|isstruct|isstudent|isunix|isvarname|"+ "isvector|javaaddpath|javaArray|javachk|javaclasspath|javacomponent|javaMethod|javaMethodEDT|javaObject|javaObjectEDT|javarmpath|jet|keyboard|kron|lasterr|lasterror|"+ "lastwarn|lcm|ldivide|ldl|le|legend|legendre|length|libfunctions|libfunctionsview|libisloaded|libpointer|libstruct|license|light|lightangle|lighting|lin2mu|line|lines|"+ "linkaxes|linkdata|linkprop|linsolve|linspace|listdlg|listfonts|load|loadlibrary|loadobj|log|log10|log1p|log2|loglog|logm|logspace|lookfor|lower|ls|lscov|lsqnonneg|lsqr|"+ "lt|lu|luinc|magic|makehgtform|mat2cell|mat2str|material|matfile|matlab\.io\.MatFile|matlab\.mixin\.(?:Copyable|Heterogeneous(?:\.getDefaultScalarElement)?)|matlabrc|"+ "matlabroot|max|maxNumCompThreads|mean|median|membrane|memmapfile|memory|menu|mesh|meshc|meshgrid|meshz|meta\.(?:class(?:\.fromName)?|DynamicProperty|EnumeratedValue|event|"+ "MetaData|method|package(?:\.(?:fromName|getAllPackages))?|property)|metaclass|methods|methodsview|mex(?:\.getCompilerConfigurations)?|MException|mexext|mfilename|min|minres|"+ "minus|mislocked|mkdir|mkpp|mldivide|mlint|mlintrpt|mlock|mmfileinfo|mmreader|mod|mode|more|move|movefile|movegui|movie|movie2avi|mpower|mrdivide|msgbox|mtimes|mu2lin|"+ "multibandread|multibandwrite|munlock|namelengthmax|nargchk|narginchk|nargoutchk|native2unicode|nccreate|ncdisp|nchoosek|ncinfo|ncread|ncreadatt|ncwrite|ncwriteatt|"+ "ncwriteschema|ndgrid|ndims|ne|NET(?:\.(?:addAssembly|Assembly|convertArray|createArray|createGeneric|disableAutoRelease|enableAutoRelease|GenericClass|invokeGenericMethod|"+ "NetException|setStaticProperty))?|netcdf\.(?:abort|close|copyAtt|create|defDim|defGrp|defVar|defVarChunking|defVarDeflate|defVarFill|defVarFletcher32|delAtt|endDef|getAtt|"+ "getChunkCache|getConstant|getConstantNames|getVar|inq|inqAtt|inqAttID|inqAttName|inqDim|inqDimID|inqDimIDs|inqFormat|inqGrpName|inqGrpNameFull|inqGrpParent|inqGrps|"+ "inqLibVers|inqNcid|inqUnlimDims|inqVar|inqVarChunking|inqVarDeflate|inqVarFill|inqVarFletcher32|inqVarID|inqVarIDs|open|putAtt|putVar|reDef|renameAtt|renameDim|renameVar|"+ "setChunkCache|setDefaultFormat|setFill|sync)|newplot|nextpow2|nnz|noanimate|nonzeros|norm|normest|not|notebook|now|nthroot|null|num2cell|num2hex|num2str|numel|nzmax|"+ "ode(?:113|15i|15s|23|23s|23t|23tb|45)|odeget|odeset|odextend|onCleanup|ones|open|openfig|opengl|openvar|optimget|optimset|or|ordeig|orderfields|ordqz|ordschur|orient|"+ "orth|pack|padecoef|pagesetupdlg|pan|pareto|parseSoapResponse|pascal|patch|path|path2rc|pathsep|pathtool|pause|pbaspect|pcg|pchip|pcode|pcolor|pdepe|pdeval|peaks|perl|perms|"+ "permute|pie|pink|pinv|planerot|playshow|plot|plot3|plotbrowser|plotedit|plotmatrix|plottools|plotyy|plus|pol2cart|polar|poly|polyarea|polyder|polyeig|polyfit|polyint|polyval|"+ "polyvalm|pow2|power|ppval|prefdir|preferences|primes|print|printdlg|printopt|printpreview|prod|profile|profsave|propedit|propertyeditor|psi|publish|PutCharArray|PutFullMatrix|"+ "PutWorkspaceData|pwd|qhull|qmr|qr|qrdelete|qrinsert|qrupdate|quad|quad2d|quadgk|quadl|quadv|questdlg|quit|quiver|quiver3|qz|rand|randi|randn|randperm|RandStream(?:\.(?:create|"+ "getDefaultStream|getGlobalStream|list|setDefaultStream|setGlobalStream))?|rank|rat|rats|rbbox|rcond|rdivide|readasync|real|reallog|realmax|realmin|realpow|realsqrt|record|"+ "rectangle|rectint|recycle|reducepatch|reducevolume|refresh|refreshdata|regexp|regexpi|regexprep|regexptranslate|rehash|rem|Remove|RemoveAll|repmat|reset|reshape|residue|"+ "restoredefaultpath|rethrow|rgb2hsv|rgb2ind|rgbplot|ribbon|rmappdata|rmdir|rmfield|rmpath|rmpref|rng|roots|rose|rosser|rot90|rotate|rotate3d|round|rref|rsf2csf|run|save|saveas|"+ "saveobj|savepath|scatter|scatter3|schur|sec|secd|sech|selectmoveresize|semilogx|semilogy|sendmail|serial|set|setappdata|setdiff|setenv|setfield|setpixelposition|setpref|setstr|"+ "setxor|shading|shg|shiftdim|showplottool|shrinkfaces|sign|sin(?:d|h)?|size|slice|smooth3|snapnow|sort|sortrows|sound|soundsc|spalloc|spaugment|spconvert|spdiags|specular|speye|"+ "spfun|sph2cart|sphere|spinmap|spline|spones|spparms|sprand|sprandn|sprandsym|sprank|spring|sprintf|spy|sqrt|sqrtm|squeeze|ss2tf|sscanf|stairs|startup|std|stem|stem3|stopasync|"+ "str2double|str2func|str2mat|str2num|strcat|strcmp|strcmpi|stream2|stream3|streamline|streamparticles|streamribbon|streamslice|streamtube|strfind|strjust|strmatch|strncmp|"+ "strncmpi|strread|strrep|strtok|strtrim|struct2cell|structfun|strvcat|sub2ind|subplot|subsasgn|subsindex|subspace|subsref|substruct|subvolume|sum|summer|superclasses|superiorto|"+ "support|surf|surf2patch|surface|surfc|surfl|surfnorm|svd|svds|swapbytes|symamd|symbfact|symmlq|symrcm|symvar|system|tan(?:d|h)?|tar|tempdir|tempname|tetramesh|texlabel|text|"+ "textread|textscan|textwrap|tfqmr|throw|tic|Tiff(?:\.(?:getTagNames|getVersion))?|timer|timerfind|timerfindall|times|timeseries|title|toc|todatenum|toeplitz|toolboxdir|trace|"+ "transpose|trapz|treelayout|treeplot|tril|trimesh|triplequad|triplot|TriRep|TriScatteredInterp|trisurf|triu|tscollection|tsearch|tsearchn|tstool|type|typecast|uibuttongroup|"+ "uicontextmenu|uicontrol|uigetdir|uigetfile|uigetpref|uiimport|uimenu|uiopen|uipanel|uipushtool|uiputfile|uiresume|uisave|uisetcolor|uisetfont|uisetpref|uistack|uitable|"+ "uitoggletool|uitoolbar|uiwait|uminus|undocheckout|unicode2native|union|unique|unix|unloadlibrary|unmesh|unmkpp|untar|unwrap|unzip|uplus|upper|urlread|urlwrite|usejava|"+ "userpath|validateattributes|validatestring|vander|var|vectorize|ver|verctrl|verLessThan|version|vertcat|VideoReader(?:\.isPlatformSupported)?|VideoWriter(?:\.getProfiles)?|"+ "view|viewmtx|visdiff|volumebounds|voronoi|voronoin|wait|waitbar|waitfor|waitforbuttonpress|warndlg|warning|waterfall|wavfinfo|wavplay|wavread|wavrecord|wavwrite|web|weekday|"+ "what|whatsnew|which|whitebg|who|whos|wilkinson|winopen|winqueryreg|winter|wk1finfo|wk1read|wk1write|workspace|xlabel|xlim|xlsfinfo|xlsread|xlswrite|xmlread|xmlwrite|xor|xslt|"+ "ylabel|ylim|zeros|zip|zlabel|zlim|zoom|addedvarplot|andrewsplot|anova(?:1|2|n)|ansaribradley|aoctool|barttest|bbdesign|beta(?:cdf|fit|inv|like|pdf|rnd|stat)|bino(?:cdf|fit|inv|"+ "pdf|rnd|stat)|biplot|bootci|bootstrp|boxplot|candexch|candgen|canoncorr|capability|capaplot|caseread|casewrite|categorical|ccdesign|cdfplot|chi2(?:cdf|gof|inv|pdf|rnd|stat)|"+ "cholcov|Classification(?:BaggedEnsemble|Discriminant(?:\.(?:fit|make|template))?|Ensemble|KNN(?:\.(?:fit|template))?|PartitionedEnsemble|PartitionedModel|Tree(?:\.(?:fit|"+ "template))?)|classify|classregtree|cluster|clusterdata|cmdscale|combnk|Compact(?:Classification(?:Discriminant|Ensemble|Tree)|Regression(?:Ensemble|Tree)|TreeBagger)|confusionmat|"+ "controlchart|controlrules|cophenet|copula(?:cdf|fit|param|pdf|rnd|stat)|cordexch|corr|corrcov|coxphfit|createns|crosstab|crossval|cvpartition|datasample|dataset|daugment|dcovary|"+ "dendrogram|dfittool|disttool|dummyvar|dwtest|ecdf|ecdfhist|ev(?:cdf|fit|inv|like|pdf|rnd|stat)|ExhaustiveSearcher|exp(?:cdf|fit|inv|like|pdf|rnd|stat)|factoran|fcdf|ff2n|finv|"+ "fitdist|fitensemble|fpdf|fracfact|fracfactgen|friedman|frnd|fstat|fsurfht|fullfact|gagerr|gam(?:cdf|fit|inv|like|pdf|rnd|stat)|GeneralizedLinearModel(?:\.fit)?|geo(?:cdf|inv|mean|"+ "pdf|rnd|stat)|gev(?:cdf|fit|inv|like|pdf|rnd|stat)|gline|glmfit|glmval|glyphplot|gmdistribution(?:\.fit)?|gname|gp(?:cdf|fit|inv|like|pdf|rnd|stat)|gplotmatrix|grp2idx|grpstats|"+ "gscatter|haltonset|harmmean|hist3|histfit|hmm(?:decode|estimate|generate|train|viterbi)|hougen|hyge(?:cdf|inv|pdf|rnd|stat)|icdf|inconsistent|interactionplot|invpred|iqr|iwishrnd|"+ "jackknife|jbtest|johnsrnd|KDTreeSearcher|kmeans|knnsearch|kruskalwallis|ksdensity|kstest|kstest2|kurtosis|lasso|lassoglm|lassoPlot|leverage|lhsdesign|lhsnorm|lillietest|"+ "LinearModel(?:\.fit)?|linhyptest|linkage|logn(?:cdf|fit|inv|like|pdf|rnd|stat)|lsline|mad|mahal|maineffectsplot|manova1|manovacluster|mdscale|mhsample|mle|mlecov|mnpdf|"+ "mnrfit|mnrnd|mnrval|moment|multcompare|multivarichart|mvn(?:cdf|pdf|rnd)|mvregress|mvregresslike|mvt(?:cdf|pdf|rnd)|NaiveBayes(?:\.fit)?|nan(?:cov|max|mean|median|min|std|"+ "sum|var)|nbin(?:cdf|fit|inv|pdf|rnd|stat)|ncf(?:cdf|inv|pdf|rnd|stat)|nct(?:cdf|inv|pdf|rnd|stat)|ncx2(?:cdf|inv|pdf|rnd|stat)|NeighborSearcher|nlinfit|nlintool|nlmefit|nlmefitsa|"+ "nlparci|nlpredci|nnmf|nominal|NonLinearModel(?:\.fit)?|norm(?:cdf|fit|inv|like|pdf|rnd|stat)|normplot|normspec|ordinal|outlierMeasure|parallelcoords|paretotails|partialcorr|"+ "pcacov|pcares|pdf|pdist|pdist2|pearsrnd|perfcurve|perms|piecewisedistribution|plsregress|poiss(?:cdf|fit|inv|pdf|rnd|tat)|polyconf|polytool|prctile|princomp|ProbDist(?:Kernel|"+ "Parametric|UnivKernel|UnivParam)?|probplot|procrustes|qqplot|qrandset|qrandstream|quantile|randg|random|randsample|randtool|range|rangesearch|ranksum|rayl(?:cdf|fit|inv|pdf|"+ "rnd|stat)|rcoplot|refcurve|refline|regress|Regression(?:BaggedEnsemble|Ensemble|PartitionedEnsemble|PartitionedModel|Tree(?:\.(?:fit|template))?)|regstats|relieff|ridge|"+ "robustdemo|robustfit|rotatefactors|rowexch|rsmdemo|rstool|runstest|sampsizepwr|scatterhist|sequentialfs|signrank|signtest|silhouette|skewness|slicesample|sobolset|squareform|"+ "statget|statset|stepwise|stepwisefit|surfht|tabulate|tblread|tblwrite|tcdf|tdfread|tiedrank|tinv|tpdf|TreeBagger|treedisp|treefit|treeprune|treetest|treeval|trimmean|trnd|tstat|"+ "ttest|ttest2|unid(?:cdf|inv|pdf|rnd|stat)|unif(?:cdf|inv|it|pdf|rnd|stat)|vartest(?:2|n)?|wbl(?:cdf|fit|inv|like|pdf|rnd|stat)|wblplot|wishrnd|x2fx|xptread|zscore|ztest"+ "adapthisteq|analyze75info|analyze75read|applycform|applylut|axes2pix|bestblk|blockproc|bwarea|bwareaopen|bwboundaries|bwconncomp|bwconvhull|bwdist|bwdistgeodesic|bweuler|"+ "bwhitmiss|bwlabel|bwlabeln|bwmorph|bwpack|bwperim|bwselect|bwtraceboundary|bwulterode|bwunpack|checkerboard|col2im|colfilt|conndef|convmtx2|corner|cornermetric|corr2|cp2tform|"+ "cpcorr|cpselect|cpstruct2pairs|dct2|dctmtx|deconvblind|deconvlucy|deconvreg|deconvwnr|decorrstretch|demosaic|dicom(?:anon|dict|info|lookup|read|uid|write)|edge|edgetaper|entropy|"+ "entropyfilt|fan2para|fanbeam|findbounds|fliptform|freqz2|fsamp2|fspecial|ftrans2|fwind1|fwind2|getheight|getimage|getimagemodel|getline|getneighbors|getnhood|getpts|"+ "getrangefromclass|getrect|getsequence|gray2ind|graycomatrix|graycoprops|graydist|grayslice|graythresh|hdrread|hdrwrite|histeq|hough|houghlines|houghpeaks|iccfind|iccread|"+ "iccroot|iccwrite|idct2|ifanbeam|im2bw|im2col|im2double|im2int16|im2java2d|im2single|im2uint16|im2uint8|imabsdiff|imadd|imadjust|ImageAdapter|imageinfo|imagemodel|imapplymatrix|"+ "imattributes|imbothat|imclearborder|imclose|imcolormaptool|imcomplement|imcontour|imcontrast|imcrop|imdilate|imdisplayrange|imdistline|imdivide|imellipse|imerode|imextendedmax|"+ "imextendedmin|imfill|imfilter|imfindcircles|imfreehand|imfuse|imgca|imgcf|imgetfile|imhandles|imhist|imhmax|imhmin|imimposemin|imlincomb|imline|immagbox|immovie|immultiply|imnoise|"+ "imopen|imoverview|imoverviewpanel|impixel|impixelinfo|impixelinfoval|impixelregion|impixelregionpanel|implay|impoint|impoly|impositionrect|improfile|imputfile|impyramid|"+ "imreconstruct|imrect|imregconfig|imregionalmax|imregionalmin|imregister|imresize|imroi|imrotate|imsave|imscrollpanel|imshow|imshowpair|imsubtract|imtool|imtophat|imtransform|"+ "imview|ind2gray|ind2rgb|interfileinfo|interfileread|intlut|ippl|iptaddcallback|iptcheckconn|iptcheckhandle|iptcheckinput|iptcheckmap|iptchecknargin|iptcheckstrs|iptdemos|iptgetapi|"+ "iptGetPointerBehavior|iptgetpref|ipticondir|iptnum2ordinal|iptPointerManager|iptprefs|iptremovecallback|iptSetPointerBehavior|iptsetpref|iptwindowalign|iradon|isbw|isflat|isgray|"+ "isicc|isind|isnitf|isrgb|isrset|lab2double|lab2uint16|lab2uint8|label2rgb|labelmatrix|makecform|makeConstrainToRectFcn|makehdr|makelut|makeresampler|maketform|mat2gray|mean2|"+ "medfilt2|montage|nitfinfo|nitfread|nlfilter|normxcorr2|ntsc2rgb|openrset|ordfilt2|otf2psf|padarray|para2fan|phantom|poly2mask|psf2otf|qtdecomp|qtgetblk|qtsetblk|radon|rangefilt|"+ "reflect|regionprops|registration\.metric\.(?:MattesMutualInformation|MeanSquares)|registration\.optimizer\.(?:OnePlusOneEvolutionary|RegularStepGradientDescent)|rgb2gray|"+ "rgb2ntsc|rgb2ycbcr|roicolor|roifill|roifilt2|roipoly|rsetwrite|std2|stdfilt|strel|stretchlim|subimage|tformarray|tformfwd|tforminv|tonemap|translate|truesize|uintlut|viscircles|"+ "warp|watershed|whitepoint|wiener2|xyz2double|xyz2uint16|ycbcr2rgb|bintprog|color|fgoalattain|fminbnd|fmincon|fminimax|fminsearch|fminunc|fseminf|fsolve|fzero|fzmult|gangstr|ktrlink|"+ "linprog|lsqcurvefit|lsqlin|lsqnonlin|lsqnonneg|optimget|optimset|optimtool|quadprog" ); var storageType = ( "cell|struct|char|double|single|logical|u?int(?:8|16|32|64)|sparse" ); var keywordMapper = this.createKeywordMapper({ "storage.type": storageType, "support.function": builtinFunctions, "keyword": keywords, "constant.language": builtinConstants }, "identifier", true); this.$rules = { start: [{ token : "string", regex : "'", stateName : "qstring", next : [{ token : "constant.language.escape", regex : "''" }, { token : "string", regex : "'|$", next : "start" }, { defaultToken: "string" }] }, { token : "text", regex : "\\s+" }, { regex: "", next: "noQstring" }], noQstring : [{ regex: "^\\s*%{\\s*$", token: "comment.start", push: "blockComment" }, { token : "comment", regex : "%[^\r\n]*" }, { token : "string", regex : '"', stateName : "qqstring", next : [{ token : "constant.language.escape", regex : /\\./ }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "start" }, { defaultToken: "string" }] }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\/|\\/\\/|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=", next: "start" }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\.", next: "start" }, { token : "paren.lparen", regex : "[({\\[]", next: "start" }, { token : "paren.rparen", regex : "[\\]})]" }, { token : "text", regex : "\\s+" }, { token : "text", regex : "$", next : "start" }], blockComment: [{ regex: "^\\s*%{\\s*$", token: "comment.start", push: "blockComment" }, { regex: "^\\s*%}\\s*$", token: "comment.end", next: "pop" }, { defaultToken: "comment" }], }; this.normalizeRules(); }; oop.inherits(MatlabHighlightRules, TextHighlightRules); exports.MatlabHighlightRules = MatlabHighlightRules; }); ace.define("ace/mode/matlab",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/matlab_highlight_rules","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var MatlabHighlightRules = require("./matlab_highlight_rules").MatlabHighlightRules; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = MatlabHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "%"; this.blockComment = {start: "%{", end: "%}"}; this.$id = "ace/mode/matlab"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-mel.js ================================================ ace.define("ace/mode/mel_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var MELHighlightRules = function() { this.$rules = { start: [ { caseInsensitive: true, token: 'storage.type.mel', regex: '\\b(matrix|string|vector|float|int|void)\\b' }, { caseInsensitive: true, token: 'support.function.mel', regex: '\\b((s(h(ow(ManipCtx|S(hadingGroupAttrEditor|electionInTitle)|H(idden|elp)|Window)|el(f(Button|TabLayout|Layout)|lField)|ading(GeometryRelCtx|Node|Connection|LightRelCtx))|y(s(tem|File)|mbol(Button|CheckBox))|nap(shot|Mode|2to2 |TogetherCtx|Key)|c(ulpt|ene(UIReplacement|Editor)|ale(BrushBrightness |Constraint|Key(Ctx)?)?|r(ipt(Node|Ctx|Table|edPanel(Type)?|Job|EditorInfo)|oll(Field|Layout))|mh)|t(itch(Surface(Points)?|AndExplodeShell )|a(ckTrace|rt(sWith |String ))|r(cmp|i(ng(ToStringArray |Array(Remove(Duplicates | )|C(ount |atenate )|ToString |Intersector))|p )|oke))|i(n(gleProfileBirailSurface)?|ze|gn|mplify)|o(u(nd(Control)?|rce)|ft(Mod(Ctx)?)?|rt)|u(perCtx|rface(S(haderList|ampler))?|b(st(itute(Geometry|AllString )?|ring)|d(M(irror|a(tchTopology|p(SewMove|Cut)))|iv(Crease|DisplaySmoothness)?|C(ollapse|leanTopology)|T(o(Blind|Poly)|ransferUVsToCache)|DuplicateAndConnect|EditUV|ListComponentConversion|AutoProjection)))|p(h(ere|rand)|otLight(PreviewPort)?|aceLocator|r(ing|eadSheetEditor))|e(t(s|MenuMode|Sta(te |rtupMessage|mpDensity )|NodeTypeFlag|ConstraintRestPosition |ToolTo|In(putDeviceMapping|finity)|D(ynamic|efaultShadingGroup|rivenKeyframe)|UITemplate|P(ar(ticleAttr|ent)|roject )|E(scapeCtx|dit(or|Ctx))|Key(Ctx|frame|Path)|F(ocus|luidAttr)|Attr(Mapping)?)|parator|ed|l(ect(Mode|ionConnection|Context|Type|edNodes|Pr(iority|ef)|Key(Ctx)?)?|LoadSettings)|archPathArray )|kin(Cluster|Percent)|q(uareSurface|rt)|w(itchTable|atchDisplayPort)|a(ve(Menu|Shelf|ToolSettings|I(nitialState|mage)|Pref(s|Objects)|Fluid|A(ttrPreset |llShelves))|mpleImage)|rtContext|mooth(step|Curve|TangentSurface))|h(sv_to_rgb|yp(ot|er(Graph|Shade|Panel))|i(tTest|de|lite)|ot(Box|key(Check)?)|ud(Button|Slider(Button)?)|e(lp(Line)?|adsUpDisplay|rmite)|wRe(nder(Load)?|flectionMap)|ard(enPointCurve|ware(RenderPanel)?))|n(o(nLinear|ise|de(Type|IconButton|Outliner|Preset)|rmal(ize |Constraint))|urbs(Boolean|S(elect|quare)|C(opyUVSet|ube)|To(Subdiv|Poly(gonsPref)?)|Plane|ViewDirectionVector )|ew(ton|PanelItems)|ame(space(Info)?|Command|Field))|c(h(oice|dir|eck(Box(Grp)?|DefaultRenderGlobals)|a(n(nelBox|geSubdiv(Region|ComponentDisplayLevel))|racter(Map|OutlineEditor)?))|y(cleCheck|linder)|tx(Completion|Traverse|EditMode|Abort)|irc(ularFillet|le)|o(s|n(str(uctionHistory|ain(Value)?)|nect(ionInfo|Control|Dynamic|Joint|Attr)|t(extInfo|rol)|dition|e|vert(SolidTx|Tessellation|Unit|FromOldLayers |Lightmap)|firmDialog)|py(SkinWeights|Key|Flexor|Array )|l(or(Slider(Grp|ButtonGrp)|Index(SliderGrp)?|Editor|AtPoint)?|umnLayout|lision)|arsenSubdivSelectionList|m(p(onentEditor|utePolysetVolume |actHairSystem )|mand(Port|Echo|Line)))|u(tKey|r(ve(MoveEPCtx|SketchCtx|CVCtx|Intersect|OnSurface|E(ditorCtx|PCtx)|AddPtCtx)?|rent(Ctx|Time(Ctx)?|Unit)))|p(GetSolverAttr|Button|S(olver(Types)?|e(t(SolverAttr|Edit)|am))|C(o(nstraint|llision)|ache)|Tool|P(anel|roperty))|eil|l(ip(Schedule(rOutliner)?|TrimBefore |Editor(CurrentTimeCtx)?)?|ose(Surface|Curve)|uster|ear(Cache)?|amp)|a(n(CreateManip|vas)|tch(Quiet)?|pitalizeString |mera(View)?)|r(oss(Product )?|eate(RenderLayer|MotionField |SubdivRegion|N(ode|ewShelf )|D(isplayLayer|rawCtx)|Editor))|md(Shell|FileOutput))|M(R(ender(ShadowData|Callback|Data|Util|View|Line(Array)?)|ampAttribute)|G(eometryData|lobal)|M(odelMessage|essage|a(nipData|t(erial|rix)))|BoundingBox|S(yntax|ceneMessage|t(atus|ring(Array)?)|imple|pace|elect(ion(Mask|List)|Info)|watchRender(Register|Base))|H(ardwareRenderer|WShaderSwatchGenerator)|NodeMessage|C(o(nditionMessage|lor(Array)?|m(putation|mand(Result|Message)))|ursor|loth(Material|S(ystem|olverRegister)|Con(straint|trol)|Triangle|Particle|Edge|Force)|allbackIdArray)|T(ypeId|ime(r(Message)?|Array)?|oolsInfo|esselationParams|r(imBoundaryArray|ansformationMatrix))|I(ntArray|t(Geometry|Mesh(Polygon|Edge|Vertex|FaceVertex)|S(urfaceCV|electionList)|CurveCV|Instancer|eratorType|D(ependency(Graph|Nodes)|ag)|Keyframe)|k(System|HandleGroup)|mage)|3dView|Object(SetMessage|Handle|Array)?|D(G(M(odifier|essage)|Context)|ynSwept(Triangle|Line)|istance|oubleArray|evice(State|Channel)|a(ta(Block|Handle)|g(M(odifier|essage)|Path(Array)?))|raw(Request(Queue)?|Info|Data|ProcedureBase))|U(serEventMessage|i(nt(Array|64Array)|Message))|P(o(int(Array)?|lyMessage)|lug(Array)?|rogressWindow|x(G(eometry(Iterator|Data)|lBuffer)|M(idiInputDevice|odelEditorCommand|anipContainer)|S(urfaceShape(UI)?|pringNode|electionContext)|HwShaderNode|Node|Co(ntext(Command)?|m(ponentShape|mand))|T(oolCommand|ransform(ationMatrix)?)|IkSolver(Node)?|3dModelView|ObjectSet|D(eformerNode|ata|ragAndDropBehavior)|PolyT(weakUVCommand|rg)|EmitterNode|F(i(eldNode|leTranslator)|luidEmitterNode)|LocatorNode))|E(ulerRotation|vent(Message)?)|ayatomr|Vector(Array)?|Quaternion|F(n(R(otateManip|eflectShader|adialField)|G(e(nericAttribute|ometry(Data|Filter))|ravityField)|M(otionPath|es(sageAttribute|h(Data)?)|a(nip3D|trix(Data|Attribute)))|B(l(innShader|endShapeDeformer)|ase)|S(caleManip|t(ateManip|ring(Data|ArrayData))|ingleIndexedComponent|ubd(Names|Data)?|p(hereData|otLight)|et|kinCluster)|HikEffector|N(on(ExtendedLight|AmbientLight)|u(rbs(Surface(Data)?|Curve(Data)?)|meric(Data|Attribute))|ewtonField)|C(haracter|ircleSweepManip|ompo(nent(ListData)?|undAttribute)|urveSegmentManip|lip|amera)|T(ypedAttribute|oggleManip|urbulenceField|r(ipleIndexedComponent|ansform))|I(ntArrayData|k(Solver|Handle|Joint|Effector))|D(ynSweptGeometryData|i(s(cManip|tanceManip)|rection(Manip|alLight))|ouble(IndexedComponent|ArrayData)|ependencyNode|a(ta|gNode)|ragField)|U(ni(tAttribute|formField)|Int64ArrayData)|P(hong(Shader|EShader)|oint(On(SurfaceManip|CurveManip)|Light|ArrayData)|fxGeometry|lugin(Data)?|arti(cleSystem|tion))|E(numAttribute|xpression)|V(o(lume(Light|AxisField)|rtexField)|ectorArrayData)|KeyframeDelta(Move|B(lockAddRemove|reakdown)|Scale|Tangent|InfType|Weighted|AddRemove)?|F(ield|luid|reePointTriadManip)|W(ireDeformer|eightGeometryFilter)|L(ight(DataAttribute)?|a(yeredShader|ttice(D(eformer|ata))?|mbertShader))|A(ni(sotropyShader|mCurve)|ttribute|irField|r(eaLight|rayAttrsData)|mbientLight))?|ile(IO|Object)|eedbackLine|loat(Matrix|Point(Array)?|Vector(Array)?|Array))|L(i(ghtLinks|brary)|ockMessage)|A(n(im(Message|C(ontrol|urveC(hange|lipboard(Item(Array)?)?))|Util)|gle)|ttribute(Spec(Array)?|Index)|r(rayData(Builder|Handle)|g(Database|Parser|List))))|t(hreePointArcCtx|ime(Control|Port|rX)|o(ol(Button|HasOptions|Collection|Dropped|PropertyWindow)|NativePath |upper|kenize(List )?|l(ower|erance)|rus|ggle(WindowVisibility|Axis)?)|u(rbulence|mble(Ctx)?)|ex(RotateContext|M(oveContext|anipContext)|t(ScrollList|Curves|ure(HairColor |DisplacePlane |PlacementContext|Window)|ToShelf |Field(Grp|ButtonGrp)?)?|S(caleContext|electContext|mudgeUVContext)|WinToolCtx)|woPointArcCtx|a(n(gentConstraint)?|bLayout)|r(im|unc(ate(HairCache|FluidCache))?|a(ns(formLimits|lator)|c(e|k(Ctx)?))))|i(s(olateSelect|Connected|True|Dirty|ParentOf |Valid(String |ObjectName |UiName )|AnimCurve )|n(s(tance(r)?|ert(Joint(Ctx)?|K(not(Surface|Curve)|eyCtx)))|heritTransform|t(S(crollBar|lider(Grp)?)|er(sect|nalVar|ToUI )|Field(Grp)?))|conText(Radio(Button|Collection)|Button|StaticLabel|CheckBox)|temFilter(Render|Type|Attr)?|prEngine|k(S(ystem(Info)?|olver|plineHandleCtx)|Handle(Ctx|DisplayScale)?|fkDisplayMethod)|m(portComposerCurves |fPlugins|age))|o(ceanNurbsPreviewPlane |utliner(Panel|Editor)|p(tion(Menu(Grp)?|Var)|en(GLExtension|MayaPref))|verrideModifier|ffset(Surface|Curve(OnSurface)?)|r(ientConstraint|bit(Ctx)?)|b(soleteProc |j(ect(Center|Type(UI)?|Layer )|Exists)))|d(yn(RelEd(itor|Panel)|Globals|C(ontrol|ache)|P(a(intEditor|rticleCtx)|ref)|Exp(ort|ression)|amicLoad)|i(s(connect(Joint|Attr)|tanceDim(Context|ension)|pla(y(RGBColor|S(tats|urface|moothness)|C(olor|ull)|Pref|LevelOfDetail|Affected)|cementToPoly)|kCache|able)|r(name |ect(ionalLight|KeyCtx)|map)|mWhen)|o(cServer|Blur|t(Product )?|ubleProfileBirailSurface|peSheetEditor|lly(Ctx)?)|uplicate(Surface|Curve)?|e(tach(Surface|Curve|DeviceAttr)|vice(Panel|Editor)|f(ine(DataServer|VirtualDevice)|ormer|ault(Navigation|LightListCheckBox))|l(ete(Sh(elfTab |adingGroupsAndMaterials )|U(nusedBrushes |I)|Attr)?|randstr)|g_to_rad)|agPose|r(opoffLocator|ag(gerContext)?)|g(timer|dirty|Info|eval))|CBG |u(serCtx|n(t(angleUV|rim)|i(t|form)|do(Info)?|loadPlugin|assignInputDevice|group)|iTemplate|p(dateAE |Axis)|v(Snapshot|Link))|joint(C(tx|luster)|DisplayScale|Lattice)?|p(sd(ChannelOutliner|TextureFile|E(ditTextureFile|xport))|close|i(c(ture|kWalk)|xelMove)|o(se|int(MatrixMult |C(onstraint|urveConstraint)|On(Surface|Curve)|Position|Light)|p(upMenu|en)|w|l(y(Reduce|GeoSampler|M(irrorFace|ove(UV|Edge|Vertex|Facet(UV)?)|erge(UV|Edge(Ctx)?|Vertex|Facet(Ctx)?)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|l(indData|endColor))|S(traightenUVBorder|oftEdge|u(perCtx|bdivide(Edge|Facet))|p(her(icalProjection|e)|lit(Ring|Ctx|Edge|Vertex)?)|e(tToFaceNormal|parate|wEdge|lect(Constraint(Monitor)?|EditCtx))|mooth)|Normal(izeUV|PerVertex)?|C(hipOff|ylind(er|ricalProjection)|o(ne|pyUV|l(or(BlindData|Set|PerVertex)|lapse(Edge|Facet)))|u(t(Ctx)?|be)|l(ipboard|oseBorder)|acheMonitor|rea(seEdge|teFacet(Ctx)?))|T(o(Subdiv|rus)|r(iangulate|ansfer))|In(stallAction|fo)|Options|D(uplicate(Edge|AndConnect)|el(Edge|Vertex|Facet))|U(nite|VSet)|P(yramid|oke|lan(e|arProjection)|r(ism|ojection))|E(ditUV|valuate|xtrude(Edge|Facet))|Qu(eryBlindData|ad)|F(orceUV|lip(UV|Edge))|WedgeFace|L(istComponentConversion|ayoutUV)|A(utoProjection|ppend(Vertex|FacetCtx)?|verage(Normal|Vertex)))|eVectorConstraint))|utenv|er(cent|formanceOptions)|fxstrokes|wd|l(uginInfo|a(y(b(last|ackOptions))?|n(e|arSrf)))|a(steKey|ne(l(History|Configuration)?|Layout)|thAnimation|irBlend|use|lettePort|r(ti(cle(RenderInfo|Instancer|Exists)?|tion)|ent(Constraint)?|am(Dim(Context|ension)|Locator)))|r(int|o(j(ect(ion(Manip|Context)|Curve|Tangent)|FileViewer)|pMo(dCtx|ve)|gress(Bar|Window)|mptDialog)|eloadRefEd))|e(n(codeString|d(sWith |String )|v|ableDevice)|dit(RenderLayer(Globals|Members)|or(Template)?|DisplayLayer(Globals|Members)|AttrLimits )|v(ent|al(Deferred|Echo)?)|quivalent(Tol | )|ffector|r(f|ror)|x(clusiveLightCheckBox|t(end(Surface|Curve)|rude)|ists|p(ortComposerCurves |ression(EditorListen)?)?|ec(uteForEachObject )?|actWorldBoundingBox)|mit(ter)?)|v(i(sor|ew(Set|HeadOn|2dToolCtx|C(lipPlane|amera)|Place|Fit|LookAt))|o(lumeAxis|rtex)|e(ctorize|rifyCmd )|alidateShelfName )|key(Tangent|frame(Region(MoveKeyCtx|S(caleKeyCtx|e(tKeyCtx|lectKeyCtx))|CurrentTimeCtx|TrackCtx|InsertKeyCtx|D(irectKeyCtx|ollyCtx))|Stats|Outliner)?)|qu(it|erySubdiv)|f(c(heck|lose)|i(nd(RelatedSkinCluster |MenuItem |er|Keyframe|AllIntersections )|tBspline|l(ter(StudioImport|Curve|Expand)?|e(BrowserDialog|test|Info|Dialog|Extension )?|letCurve)|rstParentOf )|o(ntDialog|pen|rmLayout)|print|eof|flush|write|l(o(or|w|at(S(crollBar|lider(Grp|ButtonGrp|2)?)|Eq |Field(Grp)?))|u(shUndo|id(CacheInfo|Emitter|VoxelInfo))|exor)|r(omNativePath |e(eFormFillet|wind|ad)|ameLayout)|get(word|line)|mod)|w(hatIs|i(ndow(Pref)?|re(Context)?)|orkspace|ebBrowser(Prefs)?|a(itCursor|rning)|ri(nkle(Context)?|teTake))|l(s(T(hroughFilter|ype )|UI)?|i(st(Relatives|MenuAnnotation |Sets|History|NodeTypes|C(onnections|ameras)|Transforms |InputDevice(s|Buttons|Axes)|erEditor|DeviceAttachments|Unselected |A(nimatable|ttr))|n(step|eIntersection )|ght(link|List(Panel|Editor)?))|o(ckNode|okThru|ft|ad(NewShelf |P(lugin|refObjects)|Fluid)|g)|a(ssoContext|y(out|er(Button|ed(ShaderPort|TexturePort)))|ttice(DeformKeyCtx)?|unch(ImageEditor)?))|a(ssign(Command|InputDevice)|n(notate|im(C(one|urveEditor)|Display|View)|gle(Between)?)|tt(ach(Surface|Curve|DeviceAttr)|r(ibute(Menu|Info|Exists|Query)|NavigationControlGrp|Co(ntrolGrp|lorSliderGrp|mpatibility)|PresetEditWin|EnumOptionMenu(Grp)?|Field(Grp|SliderGrp)))|i(r|mConstraint)|d(d(NewShelfTab|Dynamic|PP|Attr(ibuteEditorNodeHelp)?)|vanceToNextDrivenKey)|uto(Place|Keyframe)|pp(endStringArray|l(y(Take|AttrPreset)|icationName))|ffect(s|edNet)|l(i(as(Attr)?|gn(Surface|C(tx|urve))?)|lViewFit)|r(c(len|Len(DimContext|gthDimension))|t(BuildPaintMenu|Se(tPaintCtx|lectCtx)|3dPaintCtx|UserPaintCtx|PuttyCtx|FluidAttrCtx|Attr(SkinPaintCtx|Ctx|PaintVertexCtx))|rayMapper)|mbientLight|b(s|out))|r(igid(Body|Solver)|o(t(at(ionInterpolation|e))?|otOf |undConstantRadius|w(ColumnLayout|Layout)|ll(Ctx)?)|un(up|TimeCommand)|e(s(olutionNode|et(Tool|AE )|ampleFluid)|hash|n(der(GlobalsNode|Manip|ThumbnailUpdate|Info|er|Partition|QualityNode|Window(SelectContext|Editor)|LayerButton)?|ame(SelectionList |UI|Attr)?)|cord(Device|Attr)|target|order(Deformers)?|do|v(olve|erse(Surface|Curve))|quires|f(ineSubdivSelectionList|erence(Edit|Query)?|resh(AE )?)|loadImage|adTake|root|move(MultiInstance|Joint)|build(Surface|Curve))|a(n(d(state|omizeFollicles )?|geControl)|d(i(o(MenuItemCollection|Button(Grp)?|Collection)|al)|_to_deg)|mpColorPort)|gb_to_hsv)|g(o(toBindPose |al)|e(t(M(odifiers|ayaPanelTypes )|Classification|InputDeviceRange|pid|env|DefaultBrush|Pa(nel|rticleAttr)|F(ileList|luidAttr)|A(ttr|pplicationVersionAsFloat ))|ometryConstraint)|l(Render(Editor)?|obalStitch)|a(uss|mma)|r(id(Layout)?|oup(ObjectsByName )?|a(dientControl(NoAttr)?|ph(SelectContext|TrackCtx|DollyCtx)|vity|bColor))|match)|x(pmPicker|form|bmLangPathList )|m(i(n(imizeApp)?|rrorJoint)|o(del(CurrentTimeCtx|Panel|Editor)|use|v(In|e(IKtoFK |VertexAlongDirection|KeyCtx)?|Out))|u(te|ltiProfileBirailSurface)|e(ssageLine|nu(BarLayout|Item(ToShelf )?|Editor)?|mory)|a(nip(Rotate(Context|LimitsCtx)|Move(Context|LimitsCtx)|Scale(Context|LimitsCtx)|Options)|tch|ke(Roll |SingleSurface|TubeOn |Identity|Paintable|bot|Live)|rker|g|x))|b(in(Membership|d(Skin|Pose))|o(neLattice|undary|x(ZoomCtx|DollyCtx))|u(tton(Manip)?|ild(BookmarkMenu|KeyframeMenu)|fferCurve)|e(ssel|vel(Plus)?)|l(indDataType|end(Shape(Panel|Editor)?|2|TwoAttr))|a(sename(Ex | )|tchRender|ke(Results|Simulation|Clip|PartialHistory|FluidShading )))))\\b' }, { caseInsensitive: true, token: 'support.constant.mel', regex: '\\b(s(h(ellTessellate|a(d(ing(Map|Engine)|erGlow)|pe))|n(ow|apshot(Shape)?)|c(ulpt|aleConstraint|ript)|t(yleCurve|itch(Srf|AsNurbsShell)|u(cco|dioClearCoat)|encil|roke(Globals)?)|i(ngleShadingSwitch|mpleVolumeShader)|o(ftMod(Manip|Handle)?|lidFractal)|u(rface(Sha(der|pe)|Info|EdManip|VarGroup|Luminance)|b(Surface|d(M(odifier(UV|World)?|ap(SewMove|Cut|pingManip))|B(lindData|ase)|iv(ReverseFaces|SurfaceVarGroup|Co(llapse|mponentId)|To(Nurbs|Poly))?|HierBlind|CleanTopology|Tweak(UV)?|P(lanarProj|rojManip)|LayoutUV|A(ddTopology|utoProj))|Curve))|p(BirailSrf|otLight|ring)|e(tRange|lectionListOperator)|k(inCluster|etchPlane)|quareSrf|ampler(Info)?|m(ooth(Curve|TangentSrf)|ear))|h(svToRgb|yper(GraphInfo|View|Layout)|ik(Solver|Handle|Effector)|oldMatrix|eightField|w(Re(nderGlobals|flectionMap)|Shader)|a(ir(System|Constraint|TubeShader)|rd(enPoint|wareRenderGlobals)))|n(o(n(ExtendedLightShapeNode|Linear|AmbientLightShapeNode)|ise|rmalConstraint)|urbs(Surface|Curve|T(oSubdiv(Proc)?|essellate)|DimShape)|e(twork|wtonField))|c(h(o(ice|oser)|ecker|aracter(Map|Offset)?)|o(n(straint|tr(olPoint|ast)|dition)|py(ColorSet|UVSet))|urve(Range|Shape|Normalizer(Linear|Angle)?|In(tersect|fo)|VarGroup|From(Mesh(CoM|Edge)?|Su(rface(Bnd|CoS|Iso)?|bdiv(Edge|Face)?)))|l(ip(Scheduler|Library)|o(se(stPointOnSurface|Surface|Curve)|th|ud)|uster(Handle)?|amp)|amera(View)?|r(eate(BPManip|ColorSet|UVSet)|ater))|t(ime(ToUnitConversion|Function)?|oo(nLineAttributes|lDrawManip)|urbulenceField|ex(BaseDeformManip|ture(BakeSet|2d|ToGeom|3d|Env)|SmudgeUVManip|LatticeDeformManip)|weak|angentConstraint|r(i(pleShadingSwitch|m(WithBoundaries)?)|ansform(Geometry)?))|i(n(s(tancer|ertKnot(Surface|Curve))|tersectSurface)|k(RPsolver|MCsolver|S(ystem|olver|Csolver|plineSolver)|Handle|PASolver|Effector)|m(plicit(Box|Sphere|Cone)|agePlane))|o(cean(Shader)?|pticalFX|ffset(Surface|C(os|urve))|ldBlindDataBase|rient(Constraint|ationMarker)|bject(RenderFilter|MultiFilter|BinFilter|S(criptFilter|et)|NameFilter|TypeFilter|Filter|AttrFilter))|d(yn(Globals|Base)|i(s(tance(Between|DimShape)|pla(yLayer(Manager)?|cementShader)|kCache)|rect(ionalLight|edDisc)|mensionShape)|o(ubleShadingSwitch|f)|pBirailSrf|e(tach(Surface|Curve)|pendNode|f(orm(Bend|S(ine|quash)|Twist|ableShape|F(unc|lare)|Wave)|ault(RenderUtilityList|ShaderList|TextureList|LightList))|lete(Co(lorSet|mponent)|UVSet))|ag(Node|Pose)|r(opoffLocator|agField))|u(seBackground|n(trim|i(t(Conversion|ToTimeConversion)|formField)|known(Transform|Dag)?)|vChooser)|j(iggle|oint(Cluster|Ffd|Lattice)?)|p(sdFileTex|hong(E)?|o(s(tProcessList|itionMarker)|int(MatrixMult|Constraint|On(SurfaceInfo|CurveInfo)|Emitter|Light)|l(y(Reduce|M(irror|o(difier(UV|World)?|ve(UV|Edge|Vertex|Face(tUV)?))|erge(UV|Edge|Vert|Face)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|lindData|ase)|S(traightenUVBorder|oftEdge|ubd(Edge|Face)|p(h(ere|Proj)|lit(Ring|Edge|Vert)?)|e(parate|wEdge)|mooth(Proxy|Face)?)|Normal(izeUV|PerVertex)?|C(hipOff|yl(inder|Proj)|o(ne|pyUV|l(orPerVertex|lapse(Edge|F)))|u(t(Manip(Container)?)?|be)|loseBorder|rea(seEdge|t(or|eFace)))|T(o(Subdiv|rus)|weak(UV)?|r(iangulate|ansfer))|OptUvs|D(uplicateEdge|el(Edge|Vertex|Facet))|Unite|P(yramid|oke(Manip)?|lan(e|arProj)|r(i(sm|mitive)|oj))|Extrude(Edge|Vertex|Face)|VertexNormalManip|Quad|Flip(UV|Edge)|WedgeFace|LayoutUV|A(utoProj|ppend(Vertex)?|verageVertex))|eVectorConstraint))|fx(Geometry|Hair|Toon)|l(usMinusAverage|a(n(e|arTrimSurface)|ce(2dTexture|3dTexture)))|a(ssMatrix|irBlend|r(ti(cle(SamplerInfo|C(olorMapper|loud)|TranspMapper|IncandMapper|AgeMapper)?|tion)|ent(Constraint|Tessellate)|amDimension))|r(imitive|o(ject(ion|Curve|Tangent)|xyManager)))|e(n(tity|v(Ball|ironmentFog|S(phere|ky)|C(hrome|ube)|Fog))|x(t(end(Surface|Curve)|rude)|p(lodeNurbsShell|ression)))|v(iewManip|o(lume(Shader|Noise|Fog|Light|AxisField)|rtexField)|e(ctor(RenderGlobals|Product)|rtexBakeSet))|quadShadingSwitch|f(i(tBspline|eld|l(ter(Resample|Simplify|ClosestSample|Euler)?|e|letCurve))|o(urByFourMatrix|llicle)|urPointOn(MeshInfo|Subd)|f(BlendSrf(Obsolete)?|d|FilletSrf)|l(ow|uid(S(hape|liceManip)|Texture(2D|3D)|Emitter)|exorShape)|ra(ctal|meCache))|w(tAddMatrix|ire|ood|eightGeometryFilter|ater|rap)|l(ight(Info|Fog|Li(st|nker))?|o(cator|okAt|d(Group|Thresholds)|ft)|uminance|ea(stSquaresModifier|ther)|a(yered(Shader|Texture)|ttice|mbert))|a(n(notationShape|i(sotropic|m(Blend(InOut)?|C(urve(T(T|U|L|A)|U(T|U|L|A))?|lip)))|gleBetween)|tt(ach(Surface|Curve)|rHierarchyTest)|i(rField|mConstraint)|dd(Matrix|DoubleLinear)|udio|vg(SurfacePoints|NurbsSurfacePoints|Curves)|lign(Manip|Surface|Curve)|r(cLengthDimension|tAttrPaintTest|eaLight|rayMapper)|mbientLight|bstractBase(NurbsConversion|Create))|r(igid(Body|Solver|Constraint)|o(ck|undConstantRadius)|e(s(olution|ultCurve(TimeTo(Time|Unitless|Linear|Angular))?)|nder(Rect|Globals(List)?|Box|Sphere|Cone|Quality|L(ight|ayer(Manager)?))|cord|v(olve(dPrimitive)?|erse(Surface|Curve)?)|f(erence|lect)|map(Hsv|Color|Value)|build(Surface|Curve))|a(dialField|mp(Shader)?)|gbToHsv|bfSrf)|g(uide|eo(Connect(or|able)|metry(Shape|Constraint|VarGroup|Filter))|lobal(Stitch|CacheControl)|ammaCorrect|r(id|oup(Id|Parts)|a(nite|vityField)))|Fur(Globals|Description|Feedback|Attractors)|xformManip|m(o(tionPath|untain|vie)|u(te|lt(Matrix|i(plyDivide|listerLight)|DoubleLinear))|pBirailSrf|e(sh(VarGroup)?|ntalray(Texture|IblShape))|a(terialInfo|ke(Group|Nurb(sSquare|Sphere|C(ylinder|ircle|one|ube)|Torus|Plane)|CircularArc|T(hreePointCircularArc|extCurves|woPointCircularArc))|rble))|b(irailSrf|o(neLattice|olean|undary(Base)?)|u(lge|mp(2d|3d))|evel(Plus)?|l(in(n|dDataTemplate)|end(Shape|Color(s|Sets)|TwoAttr|Device|Weighted)?)|a(se(GeometryVarGroup|ShadingSwitch|Lattice)|keSet)|r(ownian|ush)))\\b' }, { caseInsensitive: true, token: 'keyword.control.mel', regex: '\\b(if|in|else|for|while|break|continue|case|default|do|switch|return|switch|case|source|catch|alias)\\b' }, { token: 'keyword.other.mel', regex: '\\b(global)\\b' }, { caseInsensitive: true, token: 'constant.language.mel', regex: '\\b(null|undefined)\\b' }, { token: 'constant.numeric.mel', regex: '\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\\b' }, { token: 'punctuation.definition.string.begin.mel', regex: '"', push: [ { token: 'constant.character.escape.mel', regex: '\\\\.' }, { token: 'punctuation.definition.string.end.mel', regex: '"', next: 'pop' }, { defaultToken: 'string.quoted.double.mel' } ] }, { token: [ 'variable.other.mel', 'punctuation.definition.variable.mel' ], regex: '(\\$)([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*?\\b)' }, { token: 'punctuation.definition.string.begin.mel', regex: '\'', push: [ { token: 'constant.character.escape.mel', regex: '\\\\.' }, { token: 'punctuation.definition.string.end.mel', regex: '\'', next: 'pop' }, { defaultToken: 'string.quoted.single.mel' } ] }, { token: 'constant.language.mel', regex: '\\b(false|true|yes|no|on|off)\\b' }, { token: 'punctuation.definition.comment.mel', regex: '/\\*', push: [ { token: 'punctuation.definition.comment.mel', regex: '\\*/', next: 'pop' }, { defaultToken: 'comment.block.mel' } ] }, { token: [ 'comment.line.double-slash.mel', 'punctuation.definition.comment.mel' ], regex: '(//)(.*$\\n?)' }, { caseInsensitive: true, token: 'keyword.operator.mel', regex: '\\b(instanceof)\\b' }, { token: 'keyword.operator.symbolic.mel', regex: '[-\\!\\%\\&\\*\\+\\=\\/\\?\\:]' }, { token: [ 'meta.preprocessor.mel', 'punctuation.definition.preprocessor.mel' ], regex: '(^[ \\t]*)((?:#)[a-zA-Z]+)' }, { token: [ 'meta.function.mel', 'keyword.other.mel', 'storage.type.mel', 'entity.name.function.mel', 'punctuation.section.function.mel' ], regex: '((?:global\\s*)?proc)\\s*(\\w+\\s*\\[?\\]?\\s+|\\s+)([A-Za-z_][A-Za-z0-9_\\.]*)(\\s*(\\())', push: [ { include: '$self' }, { token: 'punctuation.section.function.mel', regex: '\\)', next: 'pop' }, { defaultToken: 'meta.function.mel' } ] } ] } this.normalizeRules(); }; oop.inherits(MELHighlightRules, TextHighlightRules); exports.MELHighlightRules = MELHighlightRules; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/mel",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/mel_highlight_rules","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var MELHighlightRules = require("./mel_highlight_rules").MELHighlightRules; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = MELHighlightRules; this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/mel"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-mushcode.js ================================================ ace.define("ace/mode/mushcode_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var MushCodeRules = function() { var keywords = ( "@if|"+ "@ifelse|"+ "@switch|"+ "@halt|"+ "@dolist|"+ "@create|"+ "@scent|"+ "@sound|"+ "@touch|"+ "@ataste|"+ "@osound|"+ "@ahear|"+ "@aahear|"+ "@amhear|"+ "@otouch|"+ "@otaste|"+ "@drop|"+ "@odrop|"+ "@adrop|"+ "@dropfail|"+ "@odropfail|"+ "@smell|"+ "@oemit|"+ "@emit|"+ "@pemit|"+ "@parent|"+ "@clone|"+ "@taste|"+ "whisper|"+ "page|"+ "say|"+ "pose|"+ "semipose|"+ "teach|"+ "touch|"+ "taste|"+ "smell|"+ "listen|"+ "look|"+ "move|"+ "go|"+ "home|"+ "follow|"+ "unfollow|"+ "desert|"+ "dismiss|"+ "@tel" ); var builtinConstants = ( "=#0" ); var builtinFunctions = ( "default|"+ "edefault|"+ "eval|"+ "get_eval|"+ "get|"+ "grep|"+ "grepi|"+ "hasattr|"+ "hasattrp|"+ "hasattrval|"+ "hasattrpval|"+ "lattr|"+ "nattr|"+ "poss|"+ "udefault|"+ "ufun|"+ "u|"+ "v|"+ "uldefault|"+ "xget|"+ "zfun|"+ "band|"+ "bnand|"+ "bnot|"+ "bor|"+ "bxor|"+ "shl|"+ "shr|"+ "and|"+ "cand|"+ "cor|"+ "eq|"+ "gt|"+ "gte|"+ "lt|"+ "lte|"+ "nand|"+ "neq|"+ "nor|"+ "not|"+ "or|"+ "t|"+ "xor|"+ "con|"+ "entrances|"+ "exit|"+ "followers|"+ "home|"+ "lcon|"+ "lexits|"+ "loc|"+ "locate|"+ "lparent|"+ "lsearch|"+ "next|"+ "num|"+ "owner|"+ "parent|"+ "pmatch|"+ "rloc|"+ "rnum|"+ "room|"+ "where|"+ "zone|"+ "worn|"+ "held|"+ "carried|"+ "acos|"+ "asin|"+ "atan|"+ "ceil|"+ "cos|"+ "e|"+ "exp|"+ "fdiv|"+ "fmod|"+ "floor|"+ "log|"+ "ln|"+ "pi|"+ "power|"+ "round|"+ "sin|"+ "sqrt|"+ "tan|"+ "aposs|"+ "andflags|"+ "conn|"+ "commandssent|"+ "controls|"+ "doing|"+ "elock|"+ "findable|"+ "flags|"+ "fullname|"+ "hasflag|"+ "haspower|"+ "hastype|"+ "hidden|"+ "idle|"+ "isbaker|"+ "lock|"+ "lstats|"+ "money|"+ "who|"+ "name|"+ "nearby|"+ "obj|"+ "objflags|"+ "photo|"+ "poll|"+ "powers|"+ "pendingtext|"+ "receivedtext|"+ "restarts|"+ "restarttime|"+ "subj|"+ "shortestpath|"+ "tmoney|"+ "type|"+ "visible|"+ "cat|"+ "element|"+ "elements|"+ "extract|"+ "filter|"+ "filterbool|"+ "first|"+ "foreach|"+ "fold|"+ "grab|"+ "graball|"+ "index|"+ "insert|"+ "itemize|"+ "items|"+ "iter|"+ "last|"+ "ldelete|"+ "map|"+ "match|"+ "matchall|"+ "member|"+ "mix|"+ "munge|"+ "pick|"+ "remove|"+ "replace|"+ "rest|"+ "revwords|"+ "setdiff|"+ "setinter|"+ "setunion|"+ "shuffle|"+ "sort|"+ "sortby|"+ "splice|"+ "step|"+ "wordpos|"+ "words|"+ "add|"+ "lmath|"+ "max|"+ "mean|"+ "median|"+ "min|"+ "mul|"+ "percent|"+ "sign|"+ "stddev|"+ "sub|"+ "val|"+ "bound|"+ "abs|"+ "inc|"+ "dec|"+ "dist2d|"+ "dist3d|"+ "div|"+ "floordiv|"+ "mod|"+ "modulo|"+ "remainder|"+ "vadd|"+ "vdim|"+ "vdot|"+ "vmag|"+ "vmax|"+ "vmin|"+ "vmul|"+ "vsub|"+ "vunit|"+ "regedit|"+ "regeditall|"+ "regeditalli|"+ "regediti|"+ "regmatch|"+ "regmatchi|"+ "regrab|"+ "regraball|"+ "regraballi|"+ "regrabi|"+ "regrep|"+ "regrepi|"+ "after|"+ "alphamin|"+ "alphamax|"+ "art|"+ "before|"+ "brackets|"+ "capstr|"+ "case|"+ "caseall|"+ "center|"+ "containsfansi|"+ "comp|"+ "decompose|"+ "decrypt|"+ "delete|"+ "edit|"+ "encrypt|"+ "escape|"+ "if|"+ "ifelse|"+ "lcstr|"+ "left|"+ "lit|"+ "ljust|"+ "merge|"+ "mid|"+ "ostrlen|"+ "pos|"+ "repeat|"+ "reverse|"+ "right|"+ "rjust|"+ "scramble|"+ "secure|"+ "space|"+ "spellnum|"+ "squish|"+ "strcat|"+ "strmatch|"+ "strinsert|"+ "stripansi|"+ "stripfansi|"+ "strlen|"+ "switch|"+ "switchall|"+ "table|"+ "tr|"+ "trim|"+ "ucstr|"+ "unsafe|"+ "wrap|"+ "ctitle|"+ "cwho|"+ "channels|"+ "clock|"+ "cflags|"+ "ilev|"+ "itext|"+ "inum|"+ "convsecs|"+ "convutcsecs|"+ "convtime|"+ "ctime|"+ "etimefmt|"+ "isdaylight|"+ "mtime|"+ "secs|"+ "msecs|"+ "starttime|"+ "time|"+ "timefmt|"+ "timestring|"+ "utctime|"+ "atrlock|"+ "clone|"+ "create|"+ "cook|"+ "dig|"+ "emit|"+ "lemit|"+ "link|"+ "oemit|"+ "open|"+ "pemit|"+ "remit|"+ "set|"+ "tel|"+ "wipe|"+ "zemit|"+ "fbcreate|"+ "fbdestroy|"+ "fbwrite|"+ "fbclear|"+ "fbcopy|"+ "fbcopyto|"+ "fbclip|"+ "fbdump|"+ "fbflush|"+ "fbhset|"+ "fblist|"+ "fbstats|"+ "qentries|"+ "qentry|"+ "play|"+ "ansi|"+ "break|"+ "c|"+ "asc|"+ "die|"+ "isdbref|"+ "isint|"+ "isnum|"+ "isletters|"+ "linecoords|"+ "localize|"+ "lnum|"+ "nameshort|"+ "null|"+ "objeval|"+ "r|"+ "rand|"+ "s|"+ "setq|"+ "setr|"+ "soundex|"+ "soundslike|"+ "valid|"+ "vchart|"+ "vchart2|"+ "vlabel|"+ "@@|"+ "bakerdays|"+ "bodybuild|"+ "box|"+ "capall|"+ "catalog|"+ "children|"+ "ctrailer|"+ "darttime|"+ "debt|"+ "detailbar|"+ "exploredroom|"+ "fansitoansi|"+ "fansitoxansi|"+ "fullbar|"+ "halfbar|"+ "isdarted|"+ "isnewbie|"+ "isword|"+ "lambda|"+ "lobjects|"+ "lplayers|"+ "lthings|"+ "lvexits|"+ "lvobjects|"+ "lvplayers|"+ "lvthings|"+ "newswrap|"+ "numsuffix|"+ "playerson|"+ "playersthisweek|"+ "randomad|"+ "randword|"+ "realrandword|"+ "replacechr|"+ "second|"+ "splitamount|"+ "strlenall|"+ "text|"+ "third|"+ "tofansi|"+ "totalac|"+ "unique|"+ "getaddressroom|"+ "listpropertycomm|"+ "listpropertyres|"+ "lotowner|"+ "lotrating|"+ "lotratingcount|"+ "lotvalue|"+ "boughtproduct|"+ "companyabb|"+ "companyicon|"+ "companylist|"+ "companyname|"+ "companyowners|"+ "companyvalue|"+ "employees|"+ "invested|"+ "productlist|"+ "productname|"+ "productowners|"+ "productrating|"+ "productratingcount|"+ "productsoldat|"+ "producttype|"+ "ratedproduct|"+ "soldproduct|"+ "topproducts|"+ "totalspentonproduct|"+ "totalstock|"+ "transfermoney|"+ "uniquebuyercount|"+ "uniqueproductsbought|"+ "validcompany|"+ "deletepicture|"+ "fbsave|"+ "getpicturesecurity|"+ "haspicture|"+ "listpictures|"+ "picturesize|"+ "replacecolor|"+ "rgbtocolor|"+ "savepicture|"+ "setpicturesecurity|"+ "showpicture|"+ "piechart|"+ "piechartlabel|"+ "createmaze|"+ "drawmaze|"+ "drawwireframe" ); var keywordMapper = this.createKeywordMapper({ "invalid.deprecated": "debugger", "support.function": builtinFunctions, "constant.language": builtinConstants, "keyword": keywords }, "identifier"); var strPre = "(?:r|u|ur|R|U|UR|Ur|uR)?"; var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))"; var octInteger = "(?:0[oO]?[0-7]+)"; var hexInteger = "(?:0[xX][\\dA-Fa-f]+)"; var binInteger = "(?:0[bB][01]+)"; var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")"; var exponent = "(?:[eE][+-]?\\d+)"; var fraction = "(?:\\.\\d+)"; var intPart = "(?:\\d+)"; var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))"; var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + exponent + ")"; var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")"; this.$rules = { "start" : [ { token : "variable", // mush substitution register regex : "%[0-9]{1}" }, { token : "variable", // mush substitution register regex : "%q[0-9A-Za-z]{1}" }, { token : "variable", // mush special character register regex : "%[a-zA-Z]{1}" }, { token: "variable.language", regex: "%[a-z0-9-_]+" }, { token : "constant.numeric", // imaginary regex : "(?:" + floatNumber + "|\\d+)[jJ]\\b" }, { token : "constant.numeric", // float regex : floatNumber }, { token : "constant.numeric", // long integer regex : integer + "[lL]\\b" }, { token : "constant.numeric", // integer regex : integer + "\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|#|%|<<|>>|\\||\\^|~|<|>|<=|=>|==|!=|<>|=" }, { token : "paren.lparen", regex : "[\\[\\(\\{]" }, { token : "paren.rparen", regex : "[\\]\\)\\}]" }, { token : "text", regex : "\\s+" } ] }; }; oop.inherits(MushCodeRules, TextHighlightRules); exports.MushCodeRules = MushCodeRules; }); ace.define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(markers) { this.foldingStartMarker = new RegExp("([\\[{])(?:\\s*)$|(" + markers + ")(?:\\s*)(?:#.*)?$"); }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var line = session.getLine(row); var match = line.match(this.foldingStartMarker); if (match) { if (match[1]) return this.openingBracketBlock(session, match[1], row, match.index); if (match[2]) return this.indentationBlock(session, row, match.index + match[2].length); return this.indentationBlock(session, row); } } }).call(FoldMode.prototype); }); ace.define("ace/mode/mushcode",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/mushcode_highlight_rules","ace/mode/folding/pythonic","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var MushCodeRules = require("./mushcode_highlight_rules").MushCodeRules; var PythonFoldMode = require("./folding/pythonic").FoldMode; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = MushCodeRules; this.foldingRules = new PythonFoldMode("\\:"); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[\:]\s*$/); if (match) { indent += tab; } } return indent; }; var outdents = { "pass": 1, "return": 1, "raise": 1, "break": 1, "continue": 1 }; this.checkOutdent = function(state, line, input) { if (input !== "\r\n" && input !== "\r" && input !== "\n") return false; var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens; if (!tokens) return false; do { var last = tokens.pop(); } while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/)))); if (!last) return false; return (last.type == "keyword" && outdents[last.value]); }; this.autoOutdent = function(state, doc, row) { row += 1; var indent = this.$getIndent(doc.getLine(row)); var tab = doc.getTabString(); if (indent.slice(-tab.length) == tab) doc.remove(new Range(row, indent.length-tab.length, row, indent.length)); }; this.$id = "ace/mode/mushcode"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-mysql.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/mysql_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { var oop = require("../lib/oop"); var lang = require("../lib/lang"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var MysqlHighlightRules = function() { var mySqlKeywords = /*sql*/ "alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where" + "|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|coalesce|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat"; var builtins = "by|bool|boolean|bit|blob|decimal|double|enum|float|long|longblob|longtext|medium|mediumblob|mediumint|mediumtext|time|timestamp|tinyblob|tinyint|tinytext|text|bigint|int|int1|int2|int3|int4|int8|integer|float|float4|float8|double|char|varbinary|varchar|varcharacter|precision|date|datetime|year|unsigned|signed|numeric" var variable = "charset|clear|connect|edit|ego|exit|go|help|nopager|notee|nowarning|pager|print|prompt|quit|rehash|source|status|system|tee" var keywordMapper = this.createKeywordMapper({ "support.function": builtins, "keyword": mySqlKeywords, "constant": "false|true|null|unknown|date|time|timestamp|ODBCdotTable|zerolessFloat", "variable.language": variable }, "identifier", true); function string(rule) { var start = rule.start; var escapeSeq = rule.escape; return { token: "string.start", regex: start, next: [ {token: "constant.language.escape", regex: escapeSeq}, {token: "string.end", next: "start", regex: start}, {defaultToken: "string"} ] }; } this.$rules = { "start" : [ { token : "comment", regex : "(?:-- |#).*$" }, string({start: '"', escape: /\\[0'"bnrtZ\\%_]?/}), string({start: "'", escape: /\\[0'"bnrtZ\\%_]?/}), DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+|[xX]'[0-9a-fA-F]+'|0[bB][01]+|[bB]'[01]+'/ }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "constant.class", regex : "@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "constant.buildin", regex : "`[^`]*`" }, { token : "keyword.operator", regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=" }, { token : "paren.lparen", regex : "[\\(]" }, { token : "paren.rparen", regex : "[\\)]" }, { token : "text", regex : "\\s+" } ], "comment" : [ {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment"} ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); this.normalizeRules(); }; oop.inherits(MysqlHighlightRules, TextHighlightRules); exports.MysqlHighlightRules = MysqlHighlightRules; }); ace.define("ace/mode/mysql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/mysql_highlight_rules","ace/range"], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("../mode/text").Mode; var MysqlHighlightRules = require("./mysql_highlight_rules").MysqlHighlightRules; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = MysqlHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = ["--", "#"]; // todo space this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/mysql"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-nix.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var cFunctions = exports.cFunctions = "\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\b" var c_cppHighlightRules = function() { var keywordControls = ( "break|case|continue|default|do|else|for|goto|if|_Pragma|" + "return|switch|while|catch|operator|try|throw|using" ); var storageType = ( "asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|" + "_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|" + "class|wchar_t|template" ); var storageModifiers = ( "const|extern|register|restrict|static|volatile|inline|private|" + "protected|public|friend|explicit|virtual|export|mutable|typename|" + "constexpr|new|delete" ); var keywordOperators = ( "and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq" + "const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace" ); var builtinConstants = ( "NULL|true|false|TRUE|FALSE" ); var keywordMapper = this.$keywords = this.createKeywordMapper({ "keyword.control" : keywordControls, "storage.type" : storageType, "storage.modifier" : storageModifiers, "keyword.operator" : keywordOperators, "variable.language": "this", "constant.language": builtinConstants }, "identifier"); var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\d\\$_\u00a1-\uffff]*\\b"; this.$rules = { "start" : [ { token : "comment", regex : "//", next : "singleLineComment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '["].*\\\\$', next : "qqstring" }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "string", // multi line string start regex : "['].*\\\\$", next : "qstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "keyword", // pre-compiler directives regex : "#\\s*(?:include|import|pragma|line|define|undef|if|ifdef|else|elif|ifndef)\\b", next : "directive" }, { token : "keyword", // special case pre-compiler directive regex : "(?:#\\s*endif)\\b" }, { token : "support.function.C99.c", regex : cFunctions }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)" }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\." }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "singleLineComment" : [ { token : "comment", regex : /\\$/, next : "singleLineComment" }, { token : "comment", regex : /$/, next : "start" }, { defaultToken: "comment" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { defaultToken : "string" } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { defaultToken : "string" } ], "directive" : [ { token : "constant.other.multiline", regex : /\\/ }, { token : "constant.other.multiline", regex : /.*\\/ }, { token : "constant.other", regex : "\\s*<.+?>", next : "start" }, { token : "constant.other", // single line regex : '\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]', next : "start" }, { token : "constant.other", // single line regex : "\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']", next : "start" }, { token : "constant.other", regex : /[^\\\/]+/, next : "start" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(c_cppHighlightRules, TextHighlightRules); exports.c_cppHighlightRules = c_cppHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = c_cppHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/c_cpp"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/nix_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var NixHighlightRules = function() { var constantLanguage = "true|false"; var keywordControl = "with|import|if|else|then|inherit"; var keywordDeclaration = "let|in|rec"; var keywordMapper = this.createKeywordMapper({ "constant.language.nix": constantLanguage, "keyword.control.nix": keywordControl, "keyword.declaration.nix": keywordDeclaration }, "identifier"); this.$rules = { "start": [{ token: "comment", regex: /#.*$/ }, { token: "comment", regex: /\/\*/, next: "comment" }, { token: "constant", regex: "<[^>]+>" }, { regex: "(==|!=|<=?|>=?)", token: ["keyword.operator.comparison.nix"] }, { regex: "((?:[+*/%-]|\\~)=)", token: ["keyword.operator.assignment.arithmetic.nix"] }, { regex: "=", token: "keyword.operator.assignment.nix" }, { token: "string", regex: "''", next: "qqdoc" }, { token: "string", regex: "'", next: "qstring" }, { token: "string", regex: '"', push: "qqstring" }, { token: "constant.numeric", // hex regex: "0[xX][0-9a-fA-F]+\\b" }, { token: "constant.numeric", // float regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token: keywordMapper, regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { regex: "}", token: function(val, start, stack) { return stack[1] && stack[1].charAt(0) == "q" ? "constant.language.escape" : "text"; }, next: "pop" }], "comment": [{ token: "comment", // closing comment regex: ".*?\\*\\/", next: "start" }, { token: "comment", // comment spanning whole line regex: ".+" }], "qqdoc": [ { token: "constant.language.escape", regex: /\$\{/, push: "start" }, { token: "string", regex: "''", next: "pop" }, { defaultToken: "string" }], "qqstring": [ { token: "constant.language.escape", regex: /\$\{/, push: "start" }, { token: "string", regex: '"', next: "pop" }, { defaultToken: "string" }], "qstring": [ { token: "constant.language.escape", regex: /\$\{/, push: "start" }, { token: "string", regex: "'", next: "pop" }, { defaultToken: "string" }] }; this.normalizeRules(); }; oop.inherits(NixHighlightRules, TextHighlightRules); exports.NixHighlightRules = NixHighlightRules; }); ace.define("ace/mode/nix",["require","exports","module","ace/lib/oop","ace/mode/c_cpp","ace/mode/nix_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var CMode = require("./c_cpp").Mode; var NixHighlightRules = require("./nix_highlight_rules").NixHighlightRules; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { CMode.call(this); this.HighlightRules = NixHighlightRules; this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, CMode); (function() { this.lineCommentStart = "#"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/nix"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-objectivec.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var cFunctions = exports.cFunctions = "\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\b" var c_cppHighlightRules = function() { var keywordControls = ( "break|case|continue|default|do|else|for|goto|if|_Pragma|" + "return|switch|while|catch|operator|try|throw|using" ); var storageType = ( "asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|" + "_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|" + "class|wchar_t|template" ); var storageModifiers = ( "const|extern|register|restrict|static|volatile|inline|private|" + "protected|public|friend|explicit|virtual|export|mutable|typename|" + "constexpr|new|delete" ); var keywordOperators = ( "and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq" + "const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace" ); var builtinConstants = ( "NULL|true|false|TRUE|FALSE" ); var keywordMapper = this.$keywords = this.createKeywordMapper({ "keyword.control" : keywordControls, "storage.type" : storageType, "storage.modifier" : storageModifiers, "keyword.operator" : keywordOperators, "variable.language": "this", "constant.language": builtinConstants }, "identifier"); var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\d\\$_\u00a1-\uffff]*\\b"; this.$rules = { "start" : [ { token : "comment", regex : "//", next : "singleLineComment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '["].*\\\\$', next : "qqstring" }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "string", // multi line string start regex : "['].*\\\\$", next : "qstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "keyword", // pre-compiler directives regex : "#\\s*(?:include|import|pragma|line|define|undef|if|ifdef|else|elif|ifndef)\\b", next : "directive" }, { token : "keyword", // special case pre-compiler directive regex : "(?:#\\s*endif)\\b" }, { token : "support.function.C99.c", regex : cFunctions }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)" }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\." }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "singleLineComment" : [ { token : "comment", regex : /\\$/, next : "singleLineComment" }, { token : "comment", regex : /$/, next : "start" }, { defaultToken: "comment" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { defaultToken : "string" } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { defaultToken : "string" } ], "directive" : [ { token : "constant.other.multiline", regex : /\\/ }, { token : "constant.other.multiline", regex : /.*\\/ }, { token : "constant.other", regex : "\\s*<.+?>", next : "start" }, { token : "constant.other", // single line regex : '\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]', next : "start" }, { token : "constant.other", // single line regex : "\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']", next : "start" }, { token : "constant.other", regex : /[^\\\/]+/, next : "start" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(c_cppHighlightRules, TextHighlightRules); exports.c_cppHighlightRules = c_cppHighlightRules; }); ace.define("ace/mode/objectivec_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/c_cpp_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var C_Highlight_File = require("./c_cpp_highlight_rules"); var CHighlightRules = C_Highlight_File.c_cppHighlightRules; var ObjectiveCHighlightRules = function() { var escapedConstRe = "\\\\(?:[abefnrtv'\"?\\\\]|" + "[0-3]\\d{1,2}|" + "[4-7]\\d?|" + "222|" + "x[a-zA-Z0-9]+)"; var specialVariables = [{ regex: "\\b_cmd\\b", token: "variable.other.selector.objc" }, { regex: "\\b(?:self|super)\\b", token: "variable.language.objc" } ]; var cObj = new CHighlightRules(); var cRules = cObj.getRules(); this.$rules = { "start": [ { token : "comment", regex : "\\/\\/.*$" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token: [ "storage.type.objc", "punctuation.definition.storage.type.objc", "entity.name.type.objc", "text", "entity.other.inherited-class.objc" ], regex: "(@)(interface|protocol)(?!.+;)(\\s+[A-Za-z_][A-Za-z0-9_]*)(\\s*:\\s*)([A-Za-z]+)" }, { token: [ "storage.type.objc" ], regex: "(@end)" }, { token: [ "storage.type.objc", "entity.name.type.objc", "entity.other.inherited-class.objc" ], regex: "(@implementation)(\\s+[A-Za-z_][A-Za-z0-9_]*)(\\s*?::\\s*(?:[A-Za-z][A-Za-z0-9]*))?" }, { token: "string.begin.objc", regex: '@"', next: "constant_NSString" }, { token: "storage.type.objc", regex: "\\bid\\s*<", next: "protocol_list" }, { token: "keyword.control.macro.objc", regex: "\\bNS_DURING|NS_HANDLER|NS_ENDHANDLER\\b" }, { token: ["punctuation.definition.keyword.objc", "keyword.control.exception.objc"], regex: "(@)(try|catch|finally|throw)\\b" }, { token: ["punctuation.definition.keyword.objc", "keyword.other.objc"], regex: "(@)(defs|encode)\\b" }, { token: ["storage.type.id.objc", "text"], regex: "(\\bid\\b)(\\s|\\n)?" }, { token: "storage.type.objc", regex: "\\bIBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class\\b" }, { token: [ "punctuation.definition.storage.type.objc", "storage.type.objc"], regex: "(@)(class|protocol)\\b" }, { token: [ "punctuation.definition.storage.type.objc", "punctuation"], regex: "(@selector)(\\s*\\()", next: "selectors" }, { token: [ "punctuation.definition.storage.modifier.objc", "storage.modifier.objc"], regex: "(@)(synchronized|public|private|protected|package)\\b" }, { token: "constant.language.objc", regex: "\\bYES|NO|Nil|nil\\b" }, { token: "support.variable.foundation", regex: "\\bNSApp\\b" }, { token: [ "support.function.cocoa.leopard"], regex: "(?:\\b)(NS(?:Rect(?:ToCGRect|FromCGRect)|MakeCollectable|S(?:tringFromProtocol|ize(?:ToCGSize|FromCGSize))|Draw(?:NinePartImage|ThreePartImage)|P(?:oint(?:ToCGPoint|FromCGPoint)|rotocolFromString)|EventMaskFromType|Value))(?:\\b)" }, { token: ["support.function.cocoa"], regex: "(?:\\b)(NS(?:R(?:ound(?:DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(?:CriticalAlertPanel(?:RelativeToWindow)?|InformationalAlertPanel(?:RelativeToWindow)?|AlertPanel(?:RelativeToWindow)?)|e(?:set(?:MapTable|HashTable)|c(?:ycleZone|t(?:Clip(?:List)?|F(?:ill(?:UsingOperation|List(?:UsingOperation|With(?:Grays|Colors(?:UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(?:dPixel|l(?:MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(?:SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(?:s)?|WindowServerMemory|AlertPanel)|M(?:i(?:n(?:X|Y)|d(?:X|Y))|ouseInRect|a(?:p(?:Remove|Get|Member|Insert(?:IfAbsent|KnownAbsent)?)|ke(?:R(?:ect|ange)|Size|Point)|x(?:Range|X|Y)))|B(?:itsPer(?:SampleFromDepth|PixelFromDepth)|e(?:stDepth|ep|gin(?:CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(?:ho(?:uldRetainWithZone|w(?:sServicesMenuItem|AnimationEffect))|tringFrom(?:R(?:ect|ange)|MapTable|S(?:ize|elector)|HashTable|Class|Point)|izeFromString|e(?:t(?:ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(?:Big(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|Short|Host(?:ShortTo(?:Big|Little)|IntTo(?:Big|Little)|DoubleTo(?:Big|Little)|FloatTo(?:Big|Little)|Long(?:To(?:Big|Little)|LongTo(?:Big|Little)))|Int|Double|Float|L(?:ittle(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|ong(?:Long)?)))|H(?:ighlightRect|o(?:stByteOrder|meDirectory(?:ForUser)?)|eight|ash(?:Remove|Get|Insert(?:IfAbsent|KnownAbsent)?)|FSType(?:CodeFromFileType|OfFile))|N(?:umberOfColorComponents|ext(?:MapEnumeratorPair|HashEnumeratorItem))|C(?:o(?:n(?:tainsRect|vert(?:GlyphsToPackedGlyphs|Swapped(?:DoubleToHost|FloatToHost)|Host(?:DoubleToSwapped|FloatToSwapped)))|unt(?:MapTable|HashTable|Frames|Windows(?:ForContext)?)|py(?:M(?:emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(?:MapTables|HashTables))|lassFromString|reate(?:MapTable(?:WithZone)?|HashTable(?:WithZone)?|Zone|File(?:namePboardType|ContentsPboardType)))|TemporaryDirectory|I(?:s(?:ControllerMarker|EmptyRect|FreedObject)|n(?:setRect|crementExtraRefCount|te(?:r(?:sect(?:sRect|ionR(?:ect|ange))|faceStyleForKey)|gralRect)))|Zone(?:Realloc|Malloc|Name|Calloc|Fr(?:omPointer|ee))|O(?:penStepRootDirectory|ffsetRect)|D(?:i(?:sableScreenUpdates|videRect)|ottedFrameRect|e(?:c(?:imal(?:Round|Multiply|S(?:tring|ubtract)|Normalize|Co(?:py|mpa(?:ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(?:MemoryPages|Object))|raw(?:Gr(?:oove|ayBezel)|B(?:itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(?:hiteBezel|indowBackground)|LightBezel))|U(?:serName|n(?:ionR(?:ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(?:Bundle(?:Setup|Cleanup)|Setup(?:VirtualMachine)?|Needs(?:ToLoadClasses|VirtualMachine)|ClassesF(?:orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(?:oint(?:InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(?:n(?:d(?:MapTableEnumeration|HashTableEnumeration)|umerate(?:MapTable|HashTable)|ableScreenUpdates)|qual(?:R(?:ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(?:ileTypeForHFSTypeCode|ullUserName|r(?:ee(?:MapTable|HashTable)|ame(?:Rect(?:WithWidth(?:UsingOperation)?)?|Address)))|Wi(?:ndowList(?:ForContext)?|dth)|Lo(?:cationInRange|g(?:v|PageSize)?)|A(?:ccessibility(?:R(?:oleDescription(?:ForUIElement)?|aiseBadArgumentException)|Unignored(?:Children(?:ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(?:Main|Load)|vailableWindowDepths|ll(?:MapTable(?:Values|Keys)|HashTableObjects|ocate(?:MemoryPages|Collectable|Object)))))(?:\\b)" }, { token: ["support.class.cocoa.leopard"], regex: "(?:\\b)(NS(?:RuleEditor|G(?:arbageCollector|radient)|MapTable|HashTable|Co(?:ndition|llectionView(?:Item)?)|T(?:oolbarItemGroup|extInputClient|r(?:eeNode|ackingArea))|InvocationOperation|Operation(?:Queue)?|D(?:ictionaryController|ockTile)|P(?:ointer(?:Functions|Array)|athC(?:o(?:ntrol(?:Delegate)?|mponentCell)|ell(?:Delegate)?)|r(?:intPanelAccessorizing|edicateEditor(?:RowTemplate)?))|ViewController|FastEnumeration|Animat(?:ionContext|ablePropertyContainer)))(?:\\b)" }, { token: ["support.class.cocoa"], regex: "(?:\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\b)" }, { token: ["support.type.cocoa.leopard"], regex: "(?:\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\b)" }, { token: ["support.class.quartz"], regex: "(?:\\b)(C(?:I(?:Sampler|Co(?:ntext|lor)|Image(?:Accumulator)?|PlugIn(?:Registration)?|Vector|Kernel|Filter(?:Generator|Shape)?)|A(?:Renderer|MediaTiming(?:Function)?|BasicAnimation|ScrollLayer|Constraint(?:LayoutManager)?|T(?:iledLayer|extLayer|rans(?:ition|action))|OpenGLLayer|PropertyAnimation|KeyframeAnimation|Layer|A(?:nimation(?:Group)?|ction))))(?:\\b)" }, { token: ["support.type.quartz"], regex: "(?:\\b)(C(?:G(?:Float|Point|Size|Rect)|IFormat|AConstraintAttribute))(?:\\b)" }, { token: ["support.type.cocoa"], regex: "(?:\\b)(NS(?:R(?:ect(?:Edge)?|ange)|G(?:lyph(?:Relation|LayoutMode)?|radientType)|M(?:odalSession|a(?:trixMode|p(?:Table|Enumerator)))|B(?:itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(?:cr(?:oll(?:er(?:Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(?:Granularity|Direction|Affinity)|wapped(?:Double|Float)|aveOperationType)|Ha(?:sh(?:Table|Enumerator)|ndler(?:2)?)|C(?:o(?:ntrol(?:Size|Tint)|mp(?:ositingOperation|arisonResult))|ell(?:State|Type|ImagePosition|Attribute))|T(?:hreadPrivate|ypesetterGlyphInfo|i(?:ckMarkPosition|tlePosition|meInterval)|o(?:ol(?:TipTag|bar(?:SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(?:TabType|Alignment)|ab(?:State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(?:ContextAuxiliary|PixelFormatAuxiliary)|D(?:ocumentChangeType|atePickerElementFlags|ra(?:werState|gOperation))|UsableScrollerParts|P(?:oint|r(?:intingPageOrder|ogressIndicator(?:Style|Th(?:ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(?:nt(?:SymbolicTraits|TraitMask|Action)|cusRingType)|W(?:indow(?:OrderingMode|Depth)|orkspace(?:IconCreationOptions|LaunchOptions)|ritingDirection)|L(?:ineBreakMode|ayout(?:Status|Direction))|A(?:nimation(?:Progress|Effect)|ppl(?:ication(?:TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle)))(?:\\b)" }, { token: ["support.constant.cocoa"], regex: "(?:\\b)(NS(?:NotFound|Ordered(?:Ascending|Descending|Same)))(?:\\b)" }, { token: ["support.constant.notification.cocoa.leopard"], regex: "(?:\\b)(NS(?:MenuDidBeginTracking|ViewDidUpdateTrackingAreas)?Notification)(?:\\b)" }, { token: ["support.constant.notification.cocoa"], regex: "(?:\\b)(NS(?:Menu(?:Did(?:RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(?:ystemColorsDidChange|plitView(?:DidResizeSubviews|WillResizeSubviews))|C(?:o(?:nt(?:extHelpModeDid(?:Deactivate|Activate)|rolT(?:intDidChange|extDid(?:BeginEditing|Change|EndEditing)))|lor(?:PanelColorDidChange|ListDidChange)|mboBox(?:Selection(?:IsChanging|DidChange)|Will(?:Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(?:oolbar(?:DidRemoveItem|WillAddItem)|ext(?:Storage(?:DidProcessEditing|WillProcessEditing)|Did(?:BeginEditing|Change|EndEditing)|View(?:DidChange(?:Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)))|ImageRepRegistryDidChange|OutlineView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)|Item(?:Did(?:Collapse|Expand)|Will(?:Collapse|Expand)))|Drawer(?:Did(?:Close|Open)|Will(?:Close|Open))|PopUpButton(?:CellWillPopUp|WillPopUp)|View(?:GlobalFrameDidChange|BoundsDidChange|F(?:ocusDidChange|rameDidChange))|FontSetChanged|W(?:indow(?:Did(?:Resi(?:ze|gn(?:Main|Key))|M(?:iniaturize|ove)|Become(?:Main|Key)|ChangeScreen(?:|Profile)|Deminiaturize|Update|E(?:ndSheet|xpose))|Will(?:M(?:iniaturize|ove)|BeginSheet|Close))|orkspace(?:SessionDid(?:ResignActive|BecomeActive)|Did(?:Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(?:Sleep|Unmount|PowerOff|LaunchApplication)))|A(?:ntialiasThresholdChanged|ppl(?:ication(?:Did(?:ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(?:nhide|pdate)|FinishLaunching)|Will(?:ResignActive|BecomeActive|Hide|Terminate|U(?:nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification)(?:\\b)" }, { token: ["support.constant.cocoa.leopard"], regex: "(?:\\b)(NS(?:RuleEditor(?:RowType(?:Simple|Compound)|NestingMode(?:Si(?:ngle|mple)|Compound|List))|GradientDraws(?:BeforeStartingLocation|AfterEndingLocation)|M(?:inusSetExpressionType|a(?:chPortDeallocate(?:ReceiveRight|SendRight|None)|pTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality)))|B(?:oxCustom|undleExecutableArchitecture(?:X86|I386|PPC(?:64)?)|etweenPredicateOperatorType|ackgroundStyle(?:Raised|Dark|L(?:ight|owered)))|S(?:tring(?:DrawingTruncatesLastVisibleLine|EncodingConversion(?:ExternalRepresentation|AllowLossy))|ubqueryExpressionType|p(?:e(?:ech(?:SentenceBoundary|ImmediateBoundary|WordBoundary)|llingState(?:GrammarFlag|SpellingFlag))|litViewDividerStyleThi(?:n|ck))|e(?:rvice(?:RequestTimedOutError|M(?:iscellaneousError|alformedServiceDictionaryError)|InvalidPasteboardDataError|ErrorM(?:inimum|aximum)|Application(?:NotFoundError|LaunchFailedError))|gmentStyle(?:Round(?:Rect|ed)|SmallSquare|Capsule|Textured(?:Rounded|Square)|Automatic)))|H(?:UDWindowMask|ashTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality))|N(?:oModeColorPanel|etServiceNoAutoRename)|C(?:hangeRedone|o(?:ntainsPredicateOperatorType|l(?:orRenderingIntent(?:RelativeColorimetric|Saturation|Default|Perceptual|AbsoluteColorimetric)|lectorDisabledOption))|ellHit(?:None|ContentArea|TrackableArea|EditableTextArea))|T(?:imeZoneNameStyle(?:S(?:hort(?:Standard|DaylightSaving)|tandard)|DaylightSaving)|extFieldDatePickerStyle|ableViewSelectionHighlightStyle(?:Regular|SourceList)|racking(?:Mouse(?:Moved|EnteredAndExited)|CursorUpdate|InVisibleRect|EnabledDuringMouseDrag|A(?:ssumeInside|ctive(?:In(?:KeyWindow|ActiveApp)|WhenFirstResponder|Always))))|I(?:n(?:tersectSetExpressionType|dexedColorSpaceModel)|mageScale(?:None|Proportionally(?:Down|UpOrDown)|AxesIndependently))|Ope(?:nGLPFAAllowOfflineRenderers|rationQueue(?:DefaultMaxConcurrentOperationCount|Priority(?:High|Normal|Very(?:High|Low)|Low)))|D(?:iacriticInsensitiveSearch|ownloadsDirectory)|U(?:nionSetExpressionType|TF(?:16(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)|32(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)))|P(?:ointerFunctions(?:Ma(?:chVirtualMemory|llocMemory)|Str(?:ongMemory|uctPersonality)|C(?:StringPersonality|opyIn)|IntegerPersonality|ZeroingWeakMemory|O(?:paque(?:Memory|Personality)|bjectP(?:ointerPersonality|ersonality)))|at(?:hStyle(?:Standard|NavigationBar|PopUp)|ternColorSpaceModel)|rintPanelShows(?:Scaling|Copies|Orientation|P(?:a(?:perSize|ge(?:Range|SetupAccessory))|review)))|Executable(?:RuntimeMismatchError|NotLoadableError|ErrorM(?:inimum|aximum)|L(?:inkError|oadError)|ArchitectureMismatchError)|KeyValueObservingOption(?:Initial|Prior)|F(?:i(?:ndPanelSubstringMatchType(?:StartsWith|Contains|EndsWith|FullWord)|leRead(?:TooLargeError|UnknownStringEncodingError))|orcedOrderingSearch)|Wi(?:ndow(?:BackingLocation(?:MainMemory|Default|VideoMemory)|Sharing(?:Read(?:Only|Write)|None)|CollectionBehavior(?:MoveToActiveSpace|CanJoinAllSpaces|Default))|dthInsensitiveSearch)|AggregateExpressionType))(?:\\b)" }, { token: ["support.constant.cocoa"], regex: "(?:\\b)(NS(?:R(?:GB(?:ModeColorPanel|ColorSpaceModel)|ight(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey)|ound(?:RectBezelStyle|Bankers|ed(?:BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(?:CapStyle|JoinStyle))|un(?:StoppedResponse|ContinuesResponse|AbortedResponse)|e(?:s(?:izableWindowMask|et(?:CursorRectsRunLoopOrdering|FunctionKey))|ce(?:ssedBezelStyle|iver(?:sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(?:evancyLevelIndicatorStyle|ative(?:Before|After))|gular(?:SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(?:n(?:domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(?:ModeMatrix|Button)))|G(?:IFFileType|lyph(?:Below|Inscribe(?:B(?:elow|ase)|Over(?:strike|Below)|Above)|Layout(?:WithPrevious|A(?:tAPoint|gainstAPoint))|A(?:ttribute(?:BidiLevel|Soft|Inscribe|Elastic)|bove))|r(?:ooveBorder|eaterThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|a(?:y(?:ModeColorPanel|ColorSpaceModel)|dient(?:None|Con(?:cave(?:Strong|Weak)|vex(?:Strong|Weak)))|phiteControlTint)))|XML(?:N(?:o(?:tationDeclarationKind|de(?:CompactEmptyElement|IsCDATA|OptionsNone|Use(?:SingleQuotes|DoubleQuotes)|Pre(?:serve(?:NamespaceOrder|C(?:haracterReferences|DATA)|DTD|Prefixes|E(?:ntities|mptyElements)|Quotes|Whitespace|A(?:ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(?:ocument(?:X(?:MLKind|HTMLKind|Include)|HTMLKind|T(?:idy(?:XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(?:arser(?:GTRequiredError|XMLDeclNot(?:StartedError|FinishedError)|Mi(?:splaced(?:XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(?:StartedError|FinishedError))|S(?:t(?:andaloneValueError|ringNot(?:StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(?:MTOKENRequiredError|o(?:t(?:ationNot(?:StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(?:haracterRef(?:In(?:DTDError|PrologError|EpilogError)|AtEOFError)|o(?:nditionalSectionNot(?:StartedError|FinishedError)|mment(?:NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(?:ternalError|valid(?:HexCharacterRefError|C(?:haracter(?:RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(?:NameError|Error)))|OutOfMemoryError|D(?:ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(?:RI(?:RequiredError|FragmentError)|n(?:declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(?:CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(?:MissingSemiError|NoNameError|In(?:Internal(?:SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(?:ocessingInstructionNot(?:StartedError|FinishedError)|ematureDocumentEndError))|E(?:n(?:codingNotSupportedError|tity(?:Ref(?:In(?:DTDError|PrologError|EpilogError)|erence(?:MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(?:StartedError|FinishedError)|Is(?:ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(?:StartedError|FinishedError)|xt(?:ernalS(?:tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(?:iteralNot(?:StartedError|FinishedError)|T(?:RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(?:RedefinedError|HasNoValueError|Not(?:StartedError|FinishedError)|ListNot(?:StartedError|FinishedError)))|rocessingInstructionKind)|E(?:ntity(?:GeneralKind|DeclarationKind|UnparsedKind|P(?:ar(?:sedKind|ameterKind)|redefined))|lement(?:Declaration(?:MixedKind|UndefinedKind|E(?:lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(?:N(?:MToken(?:sKind|Kind)|otationKind)|CDATAKind|ID(?:Ref(?:sKind|Kind)|Kind)|DeclarationKind|En(?:tit(?:yKind|iesKind)|umerationKind)|Kind))|M(?:i(?:n(?:XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(?:nthCalendarUnit|deSwitchFunctionKey|use(?:Moved(?:Mask)?|E(?:ntered(?:Mask)?|ventSubtype|xited(?:Mask)?))|veToBezierPathElement|mentary(?:ChangeButton|Push(?:Button|InButton)|Light(?:Button)?))|enuFunctionKey|a(?:c(?:intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(?:XEdge|YEdge))|ACHOperatingSystem)|B(?:MPFileType|o(?:ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(?:Se(?:condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(?:zelBorder|velLineJoinStyle|low(?:Bottom|Top)|gin(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(?:spaceCharacter|tabTextMovement|ingStore(?:Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(?:owser(?:NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(?:h(?:ift(?:JISStringEncoding|KeyMask)|ow(?:ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(?:s(?:ReqFunctionKey|tem(?:D(?:omainMask|efined(?:Mask)?)|FunctionKey))|mbolStringEncoding)|c(?:a(?:nnedOption|le(?:None|ToFit|Proportionally))|r(?:oll(?:er(?:NoPart|Increment(?:Page|Line|Arrow)|Decrement(?:Page|Line|Arrow)|Knob(?:Slot)?|Arrows(?:M(?:inEnd|axEnd)|None|DefaultSetting))|Wheel(?:Mask)?|LockFunctionKey)|eenChangedEventType))|t(?:opFunctionKey|r(?:ingDrawing(?:OneShot|DisableScreenFontSubstitution|Uses(?:DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(?:Status(?:Reading|NotOpen|Closed|Open(?:ing)?|Error|Writing|AtEnd)|Event(?:Has(?:BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(?:ndEncountered|rrorOccurred)))))|i(?:ngle(?:DateMode|UnderlineStyle)|ze(?:DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(?:condCalendarUnit|lect(?:By(?:Character|Paragraph|Word)|i(?:ng(?:Next|Previous)|onAffinity(?:Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(?:Momentary|Select(?:One|Any)))|quareLineCapStyle|witchButton|ave(?:ToOperation|Op(?:tions(?:Yes|No|Ask)|eration)|AsOperation)|mall(?:SquareBezelStyle|C(?:ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(?:ighlightModeMatrix|SBModeColorPanel|o(?:ur(?:Minute(?:SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(?:Never|OnlyFromMainDocumentDomain|Always)|e(?:lp(?:ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(?:MonthDa(?:yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(?:o(?:n(?:StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(?:ification(?:SuspensionBehavior(?:Hold|Coalesce|D(?:eliverImmediately|rop))|NoCoalescing|CoalescingOn(?:Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(?:cr(?:iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(?:itle|opLevelContainersSpecifierError|abs(?:BezelBorder|NoBorder|LineBorder))|I(?:nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(?:ll(?:Glyph|CellType)|m(?:eric(?:Search|PadKeyMask)|berFormatter(?:Round(?:Half(?:Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(?:10|Default)|S(?:cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(?:ercentStyle|ad(?:Before(?:Suffix|Prefix)|After(?:Suffix|Prefix))))))|e(?:t(?:Services(?:BadArgumentError|NotFoundError|C(?:ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(?:StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(?:t(?:iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(?:hange(?:ReadOtherContents|GrayCell(?:Mask)?|BackgroundCell(?:Mask)?|Cleared|Done|Undone|Autosaved)|MYK(?:ModeColorPanel|ColorSpaceModel)|ircular(?:BezelStyle|Slider)|o(?:n(?:stantValueExpressionType|t(?:inuousCapacityLevelIndicatorStyle|entsCellMask|ain(?:sComparison|erSpecifierError)|rol(?:Glyph|KeyMask))|densedFontMask)|lor(?:Panel(?:RGBModeMask|GrayModeMask|HSBModeMask|C(?:MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(?:p(?:osite(?:XOR|Source(?:In|O(?:ut|ver)|Atop)|Highlight|C(?:opy|lear)|Destination(?:In|O(?:ut|ver)|Atop)|Plus(?:Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(?:stom(?:SelectorPredicateOperatorType|PaletteModeColorPanel)|r(?:sor(?:Update(?:Mask)?|PointingDevice)|veToBezierPathElement))|e(?:nterT(?:extAlignment|abStopType)|ll(?:State|H(?:ighlighted|as(?:Image(?:Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(?:Bordered|InsetButton)|Disabled|Editable|LightsBy(?:Gray|Background|Contents)|AllowsMixedState))|l(?:ipPagination|o(?:s(?:ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(?:ControlTint|DisplayFunctionKey|LineFunctionKey))|a(?:seInsensitive(?:Search|PredicateOption)|n(?:notCreateScriptCommandError|cel(?:Button|TextMovement))|chesDirectory|lculation(?:NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(?:itical(?:Request|AlertStyle)|ayonModeColorPanel))|T(?:hick(?:SquareBezelStyle|erSquareBezelStyle)|ypesetter(?:Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(?:ineBreakAction|atestBehavior))|i(?:ckMark(?:Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(?:olbarItemVisibilityPriority(?:Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(?:Compression(?:N(?:one|EXT)|CCITTFAX(?:3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(?:rminate(?:Now|Cancel|Later)|xt(?:Read(?:InapplicableDocumentTypeError|WriteErrorM(?:inimum|aximum))|Block(?:M(?:i(?:nimum(?:Height|Width)|ddleAlignment)|a(?:rgin|ximum(?:Height|Width)))|B(?:o(?:ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(?:ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(?:Characters|Attributes)|CellType|ured(?:RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(?:FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(?:RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(?:Character|TextMovement|le(?:tP(?:oint(?:Mask|EventSubtype)?|roximity(?:Mask|EventSubtype)?)|Column(?:NoResizing|UserResizingMask|AutoresizingMask)|View(?:ReverseSequentialColumnAutoresizingStyle|GridNone|S(?:olid(?:HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(?:n(?:sert(?:CharFunctionKey|FunctionKey|LineFunctionKey)|t(?:Type|ernalS(?:criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(?:Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(?:2022JPStringEncoding|Latin(?:1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(?:R(?:ight|ep(?:MatchesDevice|LoadStatus(?:ReadingHeader|Completed|InvalidData|Un(?:expectedEOF|knownType)|WillNeedAllData)))|Below|C(?:ellType|ache(?:BySize|Never|Default|Always))|Interpolation(?:High|None|Default|Low)|O(?:nly|verlaps)|Frame(?:Gr(?:oove|ayBezel)|Button|None|Photo)|L(?:oadStatus(?:ReadError|C(?:ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(?:lign(?:Right|Bottom(?:Right|Left)?|Center|Top(?:Right|Left)?|Left)|bove)))|O(?:n(?:State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|TextMovement)|SF1OperatingSystem|pe(?:n(?:GL(?:GO(?:Re(?:setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(?:R(?:obust|endererID)|M(?:inimumPolicy|ulti(?:sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(?:creenMask|te(?:ncilSize|reo)|ingleRenderer|upersample|ample(?:s|Buffers|Alpha))|NoRecovery|C(?:o(?:lor(?:Size|Float)|mpliant)|losestPolicy)|OffScreen|D(?:oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(?:cc(?:umSize|elerated)|ux(?:Buffers|DepthStencil)|l(?:phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(?:criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(?:B(?:itfield|oolType)|S(?:hortType|tr(?:ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(?:Type|longType)|ArrayType))|D(?:i(?:s(?:c(?:losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(?:Selection|PredicateModifier))|o(?:c(?:ModalWindowMask|ument(?:Directory|ationDirectory))|ubleType|wn(?:TextMovement|ArrowFunctionKey))|e(?:s(?:cendingPageOrder|ktopDirectory)|cimalTabStopType|v(?:ice(?:NColorSpaceModel|IndependentModifierFlagsMask)|eloper(?:Directory|ApplicationDirectory))|fault(?:ControlTint|TokenStyle)|lete(?:Char(?:acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(?:yCalendarUnit|teFormatter(?:MediumStyle|Behavior(?:10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(?:wer(?:Clos(?:ingState|edState)|Open(?:ingState|State))|gOperation(?:Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(?:ser(?:CancelledError|D(?:irectory|omainMask)|FunctionKey)|RL(?:Handle(?:NotLoaded|Load(?:Succeeded|InProgress|Failed))|CredentialPersistence(?:None|Permanent|ForSession))|n(?:scaledWindowMask|cachedRead|i(?:codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(?:o(?:CloseGroupingRunLoopOrdering|FunctionKey)|e(?:finedDateComponent|rline(?:Style(?:Single|None|Thick|Double)|Pattern(?:Solid|D(?:ot|ash(?:Dot(?:Dot)?)?)))))|known(?:ColorSpaceModel|P(?:ointingDevice|ageOrder)|KeyS(?:criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(?:dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(?:ustifiedTextAlignment|PEG(?:2000FileType|FileType)|apaneseEUC(?:GlyphPacking|StringEncoding))|P(?:o(?:s(?:t(?:Now|erFontMask|WhenIdle|ASAP)|iti(?:on(?:Replace|Be(?:fore|ginning)|End|After)|ve(?:IntType|DoubleType|FloatType)))|pUp(?:NoArrow|ArrowAt(?:Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(?:InCell(?:Mask)?|OnPushOffButton)|e(?:n(?:TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(?:Mask)?)|P(?:S(?:caleField|tatus(?:Title|Field)|aveButton)|N(?:ote(?:Title|Field)|ame(?:Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(?:a(?:perFeedButton|ge(?:Range(?:To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(?:useFunctionKey|ragraphSeparatorCharacter|ge(?:DownFunctionKey|UpFunctionKey))|r(?:int(?:ing(?:ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(?:NotFound|OK|Error)|FunctionKey)|o(?:p(?:ertyList(?:XMLFormat|MutableContainers(?:AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(?:BarStyle|SpinningStyle|Preferred(?:SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(?:ssedTab|vFunctionKey))|L(?:HeightForm|CancelButton|TitleField|ImageButton|O(?:KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(?:n(?:terCharacter|d(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|v(?:e(?:nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(?:Comparison|PredicateOperatorType)|ra(?:serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(?:clude(?:10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(?:i(?:ew(?:M(?:in(?:XMargin|YMargin)|ax(?:XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(?:lidationErrorM(?:inimum|aximum)|riableExpressionType))|Key(?:SpecifierEvaluationScriptError|Down(?:Mask)?|Up(?:Mask)?|PathExpressionType|Value(?:MinusSetMutation|SetSetMutation|Change(?:Re(?:placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(?:New|Old)|UnionSetMutation|ValidationError))|QTMovie(?:NormalPlayback|Looping(?:BackAndForthPlayback|Playback))|F(?:1(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(?:nd(?:PanelAction(?:Replace(?:A(?:ndFind|ll(?:InSelection)?))?|S(?:howFindPanel|e(?:tFindString|lectAll(?:InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(?:Read(?:No(?:SuchFileError|PermissionError)|CorruptFileError|In(?:validFileNameError|applicableStringEncodingError)|Un(?:supportedSchemeError|knownError))|HandlingPanel(?:CancelButton|OKButton)|NoSuchFileError|ErrorM(?:inimum|aximum)|Write(?:NoPermissionError|In(?:validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(?:supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(?:nt(?:Mo(?:noSpaceTrait|dernSerifsClass)|BoldTrait|S(?:ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(?:o(?:ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(?:ntegerAdvancementsRenderingMode|talicTrait)|O(?:ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(?:nknownClass|IOptimizedTrait)|Panel(?:S(?:hadowEffectModeMask|t(?:andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(?:ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(?:amilyClassMask|reeformSerifsClass)|Antialiased(?:RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(?:Below|Type(?:None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(?:attingError(?:M(?:inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(?:ExpressionType|KeyMask)|3(?:1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(?:RevertButton|S(?:ize(?:Title|Field)|etButton)|CurrentField|Preview(?:Button|Field))|l(?:oat(?:ingPointSamplesBitmapFormat|Type)|agsChanged(?:Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(?:heelModeColorPanel|indow(?:s(?:NTOperatingSystem|CP125(?:1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(?:InterfaceStyle|OperatingSystem))|M(?:iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(?:NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(?:ctivation|ddingToRecents)|A(?:sync|nd(?:Hide(?:Others)?|Print)|llowingClassicStartup))|eek(?:day(?:CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(?:ntsBidiLevels|rningAlertStyle)|r(?:itingDirection(?:RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(?:i(?:stModeMatrix|ne(?:Moves(?:Right|Down|Up|Left)|B(?:order|reakBy(?:C(?:harWrapping|lipping)|Truncating(?:Middle|Head|Tail)|WordWrapping))|S(?:eparatorCharacter|weep(?:Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(?:ssThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey))|a(?:yout(?:RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(?:sc(?:iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(?:y(?:Type|PredicateModifier|EventMask)|choredSearch|imation(?:Blocking|Nonblocking(?:Threaded)?|E(?:ffect(?:DisappearingItemDefault|Poof)|ase(?:In(?:Out)?|Out))|Linear)|dPredicateType)|t(?:Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(?:obe(?:GB1CharacterCollection|CNS1CharacterCollection|Japan(?:1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(?:saveOperation|Pagination)|pp(?:lication(?:SupportDirectory|D(?:irectory|e(?:fined(?:Mask)?|legateReply(?:Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(?:Mask)?)|l(?:ternateKeyMask|pha(?:ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(?:SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(?:ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(?:sWrongScriptError|EvaluationScriptError)|bove(?:Bottom|Top)|WTEventType)))(?:\\b)" }, { token: "support.function.C99.c", regex: C_Highlight_File.cFunctions }, { token : cObj.getKeywords(), regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token: "punctuation.section.scope.begin.objc", regex: "\\[", next: "bracketed_content" }, { token: "meta.function.objc", regex: "^(?:-|\\+)\\s*" } ], "constant_NSString": [ { token: "constant.character.escape.objc", regex: escapedConstRe }, { token: "invalid.illegal.unknown-escape.objc", regex: "\\\\." }, { token: "string", regex: '[^"\\\\]+' }, { token: "punctuation.definition.string.end", regex: "\"", next: "start" } ], "protocol_list": [ { token: "punctuation.section.scope.end.objc", regex: ">", next: "start" }, { token: "support.other.protocol.objc", regex: "\bNS(?:GlyphStorage|M(?:utableCopying|enuItem)|C(?:hangeSpelling|o(?:ding|pying|lorPicking(?:Custom|Default)))|T(?:oolbarItemValidations|ext(?:Input|AttachmentCell))|I(?:nputServ(?:iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(?:CTypeSerializationCallBack|ect)|D(?:ecimalNumberBehaviors|raggingInfo)|U(?:serInterfaceValidations|RL(?:HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(?:ToobarItem|UserInterfaceItem)|Locking)\b" } ], "selectors": [ { token: "support.function.any-method.name-of-parameter.objc", regex: "\\b(?:[a-zA-Z_:][\\w]*)+" }, { token: "punctuation", regex: "\\)", next: "start" } ], "bracketed_content": [ { token: "punctuation.section.scope.end.objc", regex: "\]", next: "start" }, { token: ["support.function.any-method.objc"], regex: "(?:predicateWithFormat:| NSPredicate predicateWithFormat:)", next: "start" }, { token: "support.function.any-method.objc", regex: "\\w+(?::|(?=\]))", next: "start" } ], "bracketed_strings": [ { token: "punctuation.section.scope.end.objc", regex: "\]", next: "start" }, { token: "keyword.operator.logical.predicate.cocoa", regex: "\\b(?:AND|OR|NOT|IN)\\b" }, { token: ["invalid.illegal.unknown-method.objc", "punctuation.separator.arguments.objc"], regex: "\\b(\w+)(:)" }, { regex: "\\b(?:ALL|ANY|SOME|NONE)\\b", token: "constant.language.predicate.cocoa" }, { regex: "\\b(?:NULL|NIL|SELF|TRUE|YES|FALSE|NO|FIRST|LAST|SIZE)\\b", token: "constant.language.predicate.cocoa" }, { regex: "\\b(?:MATCHES|CONTAINS|BEGINSWITH|ENDSWITH|BETWEEN)\\b", token: "keyword.operator.comparison.predicate.cocoa" }, { regex: "\\bC(?:ASEINSENSITIVE|I)\\b", token: "keyword.other.modifier.predicate.cocoa" }, { regex: "\\b(?:ANYKEY|SUBQUERY|CAST|TRUEPREDICATE|FALSEPREDICATE)\\b", token: "keyword.other.predicate.cocoa" }, { regex: escapedConstRe, token: "constant.character.escape.objc" }, { regex: "\\\\.", token: "invalid.illegal.unknown-escape.objc" }, { token: "string", regex: '[^"\\\\]' }, { token: "punctuation.definition.string.end.objc", regex: "\"", next: "predicates" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "methods" : [ { token : "meta.function.objc", regex : "(?=\\{|#)|;", next : "start" } ] } for (var r in cRules) { if (this.$rules[r]) { if (this.$rules[r].push) this.$rules[r].push.apply(this.$rules[r], cRules[r]); } else { this.$rules[r] = cRules[r]; } } this.$rules.bracketed_content = this.$rules.bracketed_content.concat( this.$rules.start, specialVariables ); this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(ObjectiveCHighlightRules, CHighlightRules); exports.ObjectiveCHighlightRules = ObjectiveCHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/objectivec",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/objectivec_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var ObjectiveCHighlightRules = require("./objectivec_highlight_rules").ObjectiveCHighlightRules; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = ObjectiveCHighlightRules; this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/objectivec"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-ocaml.js ================================================ ace.define("ace/mode/ocaml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var OcamlHighlightRules = function() { var keywords = ( "and|as|assert|begin|class|constraint|do|done|downto|else|end|" + "exception|external|for|fun|function|functor|if|in|include|" + "inherit|initializer|lazy|let|match|method|module|mutable|new|" + "object|of|open|or|private|rec|sig|struct|then|to|try|type|val|" + "virtual|when|while|with" ); var builtinConstants = ("true|false"); var builtinFunctions = ( "abs|abs_big_int|abs_float|abs_num|abstract_tag|accept|access|acos|add|" + "add_available_units|add_big_int|add_buffer|add_channel|add_char|" + "add_initializer|add_int_big_int|add_interfaces|add_num|add_string|" + "add_substitute|add_substring|alarm|allocated_bytes|allow_only|" + "allow_unsafe_modules|always|append|appname_get|appname_set|" + "approx_num_exp|approx_num_fix|arg|argv|arith_status|array|" + "array1_of_genarray|array2_of_genarray|array3_of_genarray|asin|asr|" + "assoc|assq|at_exit|atan|atan2|auto_synchronize|background|basename|" + "beginning_of_input|big_int_of_int|big_int_of_num|big_int_of_string|bind|" + "bind_class|bind_tag|bits|bits_of_float|black|blit|blit_image|blue|bool|" + "bool_of_string|bounded_full_split|bounded_split|bounded_split_delim|" + "bprintf|break|broadcast|bscanf|button_down|c_layout|capitalize|cardinal|" + "cardinal|catch|catch_break|ceil|ceiling_num|channel|char|char_of_int|" + "chdir|check|check_suffix|chmod|choose|chop_extension|chop_suffix|chown|" + "chown|chr|chroot|classify_float|clear|clear_available_units|" + "clear_close_on_exec|clear_graph|clear_nonblock|clear_parser|" + "close|close|closeTk|close_box|close_graph|close_in|close_in_noerr|" + "close_out|close_out_noerr|close_process|close_process|" + "close_process_full|close_process_in|close_process_out|close_subwindow|" + "close_tag|close_tbox|closedir|closedir|closure_tag|code|combine|" + "combine|combine|command|compact|compare|compare_big_int|compare_num|" + "complex32|complex64|concat|conj|connect|contains|contains_from|contents|" + "copy|cos|cosh|count|count|counters|create|create_alarm|create_image|" + "create_matrix|create_matrix|create_matrix|create_object|" + "create_object_and_run_initializers|create_object_opt|create_process|" + "create_process|create_process_env|create_process_env|create_table|" + "current|current_dir_name|current_point|current_x|current_y|curveto|" + "custom_tag|cyan|data_size|decr|decr_num|default_available_units|delay|" + "delete_alarm|descr_of_in_channel|descr_of_out_channel|destroy|diff|dim|" + "dim1|dim2|dim3|dims|dirname|display_mode|div|div_big_int|div_num|" + "double_array_tag|double_tag|draw_arc|draw_char|draw_circle|draw_ellipse|" + "draw_image|draw_poly|draw_poly_line|draw_rect|draw_segments|draw_string|" + "dummy_pos|dummy_table|dump_image|dup|dup2|elements|empty|end_of_input|" + "environment|eprintf|epsilon_float|eq_big_int|eq_num|equal|err_formatter|" + "error_message|escaped|establish_server|executable_name|execv|execve|execvp|" + "execvpe|exists|exists2|exit|exp|failwith|fast_sort|fchmod|fchown|field|" + "file|file_exists|fill|fill_arc|fill_circle|fill_ellipse|fill_poly|fill_rect|" + "filter|final_tag|finalise|find|find_all|first_chars|firstkey|flatten|" + "float|float32|float64|float_of_big_int|float_of_bits|float_of_int|" + "float_of_num|float_of_string|floor|floor_num|flush|flush_all|flush_input|" + "flush_str_formatter|fold|fold_left|fold_left2|fold_right|fold_right2|" + "for_all|for_all2|force|force_newline|force_val|foreground|fork|" + "format_of_string|formatter_of_buffer|formatter_of_out_channel|" + "fortran_layout|forward_tag|fprintf|frexp|from|from_channel|from_file|" + "from_file_bin|from_function|from_string|fscanf|fst|fstat|ftruncate|" + "full_init|full_major|full_split|gcd_big_int|ge_big_int|ge_num|" + "genarray_of_array1|genarray_of_array2|genarray_of_array3|get|" + "get_all_formatter_output_functions|get_approx_printing|get_copy|" + "get_ellipsis_text|get_error_when_null_denominator|get_floating_precision|" + "get_formatter_output_functions|get_formatter_tag_functions|get_image|" + "get_margin|get_mark_tags|get_max_boxes|get_max_indent|get_method|" + "get_method_label|get_normalize_ratio|get_normalize_ratio_when_printing|" + "get_print_tags|get_state|get_variable|getcwd|getegid|getegid|getenv|" + "getenv|getenv|geteuid|geteuid|getgid|getgid|getgrgid|getgrgid|getgrnam|" + "getgrnam|getgroups|gethostbyaddr|gethostbyname|gethostname|getitimer|" + "getlogin|getpeername|getpid|getppid|getprotobyname|getprotobynumber|" + "getpwnam|getpwuid|getservbyname|getservbyport|getsockname|getsockopt|" + "getsockopt_float|getsockopt_int|getsockopt_optint|gettimeofday|getuid|" + "global_replace|global_substitute|gmtime|green|grid|group_beginning|" + "group_end|gt_big_int|gt_num|guard|handle_unix_error|hash|hash_param|" + "hd|header_size|i|id|ignore|in_channel_length|in_channel_of_descr|incr|" + "incr_num|index|index_from|inet_addr_any|inet_addr_of_string|infinity|" + "infix_tag|init|init_class|input|input_binary_int|input_byte|input_char|" + "input_line|input_value|int|int16_signed|int16_unsigned|int32|int64|" + "int8_signed|int8_unsigned|int_of_big_int|int_of_char|int_of_float|" + "int_of_num|int_of_string|integer_num|inter|interactive|inv|invalid_arg|" + "is_block|is_empty|is_implicit|is_int|is_int_big_int|is_integer_num|" + "is_relative|iter|iter2|iteri|join|junk|key_pressed|kill|kind|kprintf|" + "kscanf|land|last_chars|layout|lazy_from_fun|lazy_from_val|lazy_is_val|" + "lazy_tag|ldexp|le_big_int|le_num|length|lexeme|lexeme_char|lexeme_end|" + "lexeme_end_p|lexeme_start|lexeme_start_p|lineto|link|list|listen|lnot|" + "loadfile|loadfile_private|localtime|lock|lockf|log|log10|logand|lognot|" + "logor|logxor|lor|lower_window|lowercase|lseek|lsl|lsr|lstat|lt_big_int|" + "lt_num|lxor|magenta|magic|mainLoop|major|major_slice|make|make_formatter|" + "make_image|make_lexer|make_matrix|make_self_init|map|map2|map_file|mapi|" + "marshal|match_beginning|match_end|matched_group|matched_string|max|" + "max_array_length|max_big_int|max_elt|max_float|max_int|max_num|" + "max_string_length|mem|mem_assoc|mem_assq|memq|merge|min|min_big_int|" + "min_elt|min_float|min_int|min_num|minor|minus_big_int|minus_num|" + "minus_one|mkdir|mkfifo|mktime|mod|mod_big_int|mod_float|mod_num|modf|" + "mouse_pos|moveto|mul|mult_big_int|mult_int_big_int|mult_num|nan|narrow|" + "nat_of_num|nativeint|neg|neg_infinity|new_block|new_channel|new_method|" + "new_variable|next|nextkey|nice|nice|no_scan_tag|norm|norm2|not|npeek|" + "nth|nth_dim|num_digits_big_int|num_dims|num_of_big_int|num_of_int|" + "num_of_nat|num_of_ratio|num_of_string|O|obj|object_tag|ocaml_version|" + "of_array|of_channel|of_float|of_int|of_int32|of_list|of_nativeint|" + "of_string|one|openTk|open_box|open_connection|open_graph|open_hbox|" + "open_hovbox|open_hvbox|open_in|open_in_bin|open_in_gen|open_out|" + "open_out_bin|open_out_gen|open_process|open_process_full|open_process_in|" + "open_process_out|open_subwindow|open_tag|open_tbox|open_temp_file|" + "open_vbox|opendbm|opendir|openfile|or|os_type|out_channel_length|" + "out_channel_of_descr|output|output_binary_int|output_buffer|output_byte|" + "output_char|output_string|output_value|over_max_boxes|pack|params|" + "parent_dir_name|parse|parse_argv|partition|pause|peek|pipe|pixels|" + "place|plot|plots|point_color|polar|poll|pop|pos_in|pos_out|pow|" + "power_big_int_positive_big_int|power_big_int_positive_int|" + "power_int_positive_big_int|power_int_positive_int|power_num|" + "pp_close_box|pp_close_tag|pp_close_tbox|pp_force_newline|" + "pp_get_all_formatter_output_functions|pp_get_ellipsis_text|" + "pp_get_formatter_output_functions|pp_get_formatter_tag_functions|" + "pp_get_margin|pp_get_mark_tags|pp_get_max_boxes|pp_get_max_indent|" + "pp_get_print_tags|pp_open_box|pp_open_hbox|pp_open_hovbox|pp_open_hvbox|" + "pp_open_tag|pp_open_tbox|pp_open_vbox|pp_over_max_boxes|pp_print_as|" + "pp_print_bool|pp_print_break|pp_print_char|pp_print_cut|pp_print_float|" + "pp_print_flush|pp_print_if_newline|pp_print_int|pp_print_newline|" + "pp_print_space|pp_print_string|pp_print_tab|pp_print_tbreak|" + "pp_set_all_formatter_output_functions|pp_set_ellipsis_text|" + "pp_set_formatter_out_channel|pp_set_formatter_output_functions|" + "pp_set_formatter_tag_functions|pp_set_margin|pp_set_mark_tags|" + "pp_set_max_boxes|pp_set_max_indent|pp_set_print_tags|pp_set_tab|" + "pp_set_tags|pred|pred_big_int|pred_num|prerr_char|prerr_endline|" + "prerr_float|prerr_int|prerr_newline|prerr_string|print|print_as|" + "print_bool|print_break|print_char|print_cut|print_endline|print_float|" + "print_flush|print_if_newline|print_int|print_newline|print_space|" + "print_stat|print_string|print_tab|print_tbreak|printf|prohibit|" + "public_method_label|push|putenv|quo_num|quomod_big_int|quote|raise|" + "raise_window|ratio_of_num|rcontains_from|read|read_float|read_int|" + "read_key|read_line|readdir|readdir|readlink|really_input|receive|recv|" + "recvfrom|red|ref|regexp|regexp_case_fold|regexp_string|" + "regexp_string_case_fold|register|register_exception|rem|remember_mode|" + "remove|remove_assoc|remove_assq|rename|replace|replace_first|" + "replace_matched|repr|reset|reshape|reshape_1|reshape_2|reshape_3|rev|" + "rev_append|rev_map|rev_map2|rewinddir|rgb|rhs_end|rhs_end_pos|rhs_start|" + "rhs_start_pos|rindex|rindex_from|rlineto|rmdir|rmoveto|round_num|" + "run_initializers|run_initializers_opt|scanf|search_backward|" + "search_forward|seek_in|seek_out|select|self|self_init|send|sendto|set|" + "set_all_formatter_output_functions|set_approx_printing|" + "set_binary_mode_in|set_binary_mode_out|set_close_on_exec|" + "set_close_on_exec|set_color|set_ellipsis_text|" + "set_error_when_null_denominator|set_field|set_floating_precision|" + "set_font|set_formatter_out_channel|set_formatter_output_functions|" + "set_formatter_tag_functions|set_line_width|set_margin|set_mark_tags|" + "set_max_boxes|set_max_indent|set_method|set_nonblock|set_nonblock|" + "set_normalize_ratio|set_normalize_ratio_when_printing|set_print_tags|" + "set_signal|set_state|set_tab|set_tag|set_tags|set_text_size|" + "set_window_title|setgid|setgid|setitimer|setitimer|setsid|setsid|" + "setsockopt|setsockopt|setsockopt_float|setsockopt_float|setsockopt_int|" + "setsockopt_int|setsockopt_optint|setsockopt_optint|setuid|setuid|" + "shift_left|shift_left|shift_left|shift_right|shift_right|shift_right|" + "shift_right_logical|shift_right_logical|shift_right_logical|show_buckets|" + "shutdown|shutdown|shutdown_connection|shutdown_connection|sigabrt|" + "sigalrm|sigchld|sigcont|sigfpe|sighup|sigill|sigint|sigkill|sign_big_int|" + "sign_num|signal|signal|sigpending|sigpending|sigpipe|sigprocmask|" + "sigprocmask|sigprof|sigquit|sigsegv|sigstop|sigsuspend|sigsuspend|" + "sigterm|sigtstp|sigttin|sigttou|sigusr1|sigusr2|sigvtalrm|sin|singleton|" + "sinh|size|size|size_x|size_y|sleep|sleep|sleep|slice_left|slice_left|" + "slice_left_1|slice_left_2|slice_right|slice_right|slice_right_1|" + "slice_right_2|snd|socket|socket|socket|socketpair|socketpair|sort|sound|" + "split|split_delim|sprintf|sprintf|sqrt|sqrt|sqrt_big_int|square_big_int|" + "square_num|sscanf|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|" + "stable_sort|stat|stat|stat|stat|stat|stats|stats|std_formatter|stdbuf|" + "stderr|stderr|stderr|stdib|stdin|stdin|stdin|stdout|stdout|stdout|" + "str_formatter|string|string_after|string_before|string_match|" + "string_of_big_int|string_of_bool|string_of_float|string_of_format|" + "string_of_inet_addr|string_of_inet_addr|string_of_int|string_of_num|" + "string_partial_match|string_tag|sub|sub|sub_big_int|sub_left|sub_num|" + "sub_right|subset|subset|substitute_first|substring|succ|succ|" + "succ|succ|succ_big_int|succ_num|symbol_end|symbol_end_pos|symbol_start|" + "symbol_start_pos|symlink|symlink|sync|synchronize|system|system|system|" + "tag|take|tan|tanh|tcdrain|tcdrain|tcflow|tcflow|tcflush|tcflush|" + "tcgetattr|tcgetattr|tcsendbreak|tcsendbreak|tcsetattr|tcsetattr|" + "temp_file|text_size|time|time|time|timed_read|timed_write|times|times|" + "tl|tl|tl|to_buffer|to_channel|to_float|to_hex|to_int|to_int32|to_list|" + "to_list|to_list|to_nativeint|to_string|to_string|to_string|to_string|" + "to_string|top|top|total_size|transfer|transp|truncate|truncate|truncate|" + "truncate|truncate|truncate|try_lock|umask|umask|uncapitalize|uncapitalize|" + "uncapitalize|union|union|unit_big_int|unlink|unlink|unlock|unmarshal|" + "unsafe_blit|unsafe_fill|unsafe_get|unsafe_get|unsafe_set|unsafe_set|" + "update|uppercase|uppercase|uppercase|uppercase|usage|utimes|utimes|wait|" + "wait|wait|wait|wait_next_event|wait_pid|wait_read|wait_signal|" + "wait_timed_read|wait_timed_write|wait_write|waitpid|white|" + "widen|window_id|word_size|wrap|wrap_abort|write|yellow|yield|zero|zero_big_int|" + "Arg|Arith_status|Array|Array1|Array2|Array3|ArrayLabels|Big_int|Bigarray|" + "Buffer|Callback|CamlinternalOO|Char|Complex|Condition|Dbm|Digest|Dynlink|" + "Event|Filename|Format|Gc|Genarray|Genlex|Graphics|GraphicsX11|Hashtbl|" + "Int32|Int64|LargeFile|Lazy|Lexing|List|ListLabels|Make|Map|Marshal|" + "MoreLabels|Mutex|Nativeint|Num|Obj|Oo|Parsing|Pervasives|Printexc|" + "Printf|Queue|Random|Scanf|Scanning|Set|Sort|Stack|State|StdLabels|Str|" + "Stream|String|StringLabels|Sys|Thread|ThreadUnix|Tk|Unix|UnixLabels|Weak" ); var keywordMapper = this.createKeywordMapper({ "variable.language": "this", "keyword": keywords, "constant.language": builtinConstants, "support.function": builtinFunctions }, "identifier"); var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))"; var octInteger = "(?:0[oO]?[0-7]+)"; var hexInteger = "(?:0[xX][\\dA-Fa-f]+)"; var binInteger = "(?:0[bB][01]+)"; var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")"; var exponent = "(?:[eE][+-]?\\d+)"; var fraction = "(?:\\.\\d+)"; var intPart = "(?:\\d+)"; var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))"; var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + exponent + ")"; var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")"; this.$rules = { "start" : [ { token : "comment", regex : '\\(\\*.*?\\*\\)\\s*?$' }, { token : "comment", regex : '\\(\\*.*', next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single char regex : "'.'" }, { token : "string", // " string regex : '"', next : "qstring" }, { token : "constant.numeric", // imaginary regex : "(?:" + floatNumber + "|\\d+)[jJ]\\b" }, { token : "constant.numeric", // float regex : floatNumber }, { token : "constant.numeric", // integer regex : integer + "\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "\\+\\.|\\-\\.|\\*\\.|\\/\\.|#|;;|\\+|\\-|\\*|\\*\\*\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|<-|=" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\)", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "qstring" : [ { token : "string", regex : '"', next : "start" }, { token : "string", regex : '.+' } ] }; }; oop.inherits(OcamlHighlightRules, TextHighlightRules); exports.OcamlHighlightRules = OcamlHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/ocaml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/ocaml_highlight_rules","ace/mode/matching_brace_outdent","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var OcamlHighlightRules = require("./ocaml_highlight_rules").OcamlHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = OcamlHighlightRules; this.$outdent = new MatchingBraceOutdent(); }; oop.inherits(Mode, TextMode); var indenter = /(?:[({[=:]|[-=]>|\b(?:else|try|with))\s*$/; (function() { this.toggleCommentLines = function(state, doc, startRow, endRow) { var i, line; var outdent = true; var re = /^\s*\(\*(.*)\*\)/; for (i=startRow; i<= endRow; i++) { if (!re.test(doc.getLine(i))) { outdent = false; break; } } var range = new Range(0, 0, 0, 0); for (i=startRow; i<= endRow; i++) { line = doc.getLine(i); range.start.row = i; range.end.row = i; range.end.column = line.length; doc.replace(range, outdent ? line.match(re)[1] : "(*" + line + "*)"); } }; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') && state === 'start' && indenter.test(line)) indent += tab; return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/ocaml"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-pascal.js ================================================ ace.define("ace/mode/pascal_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var PascalHighlightRules = function() { this.$rules = { start: [ { caseInsensitive: true, token: 'keyword.control.pascal', regex: '\\b(?:(absolute|abstract|all|and|and_then|array|as|asm|attribute|begin|bindable|case|class|const|constructor|destructor|div|do|do|else|end|except|export|exports|external|far|file|finalization|finally|for|forward|goto|if|implementation|import|in|inherited|initialization|interface|interrupt|is|label|library|mod|module|name|near|nil|not|object|of|only|operator|or|or_else|otherwise|packed|pow|private|program|property|protected|public|published|qualified|record|repeat|resident|restricted|segment|set|shl|shr|then|to|try|type|unit|until|uses|value|var|view|virtual|while|with|xor))\\b' }, { caseInsensitive: true, token: [ 'variable.pascal', "text", 'storage.type.prototype.pascal', 'entity.name.function.prototype.pascal' ], regex: '\\b(function|procedure)(\\s+)(\\w+)(\\.\\w+)?(?=(?:\\(.*?\\))?;\\s*(?:attribute|forward|external))' }, { caseInsensitive: true, token: [ 'variable.pascal', "text", 'storage.type.function.pascal', 'entity.name.function.pascal' ], regex: '\\b(function|procedure)(\\s+)(\\w+)(\\.\\w+)?' }, { token: 'constant.numeric.pascal', regex: '\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b' }, { token: 'punctuation.definition.comment.pascal', regex: '--.*$', push_: [ { token: 'comment.line.double-dash.pascal.one', regex: '$', next: 'pop' }, { defaultToken: 'comment.line.double-dash.pascal.one' } ] }, { token: 'punctuation.definition.comment.pascal', regex: '//.*$', push_: [ { token: 'comment.line.double-slash.pascal.two', regex: '$', next: 'pop' }, { defaultToken: 'comment.line.double-slash.pascal.two' } ] }, { token: 'punctuation.definition.comment.pascal', regex: '\\(\\*', push: [ { token: 'punctuation.definition.comment.pascal', regex: '\\*\\)', next: 'pop' }, { defaultToken: 'comment.block.pascal.one' } ] }, { token: 'punctuation.definition.comment.pascal', regex: '\\{', push: [ { token: 'punctuation.definition.comment.pascal', regex: '\\}', next: 'pop' }, { defaultToken: 'comment.block.pascal.two' } ] }, { token: 'punctuation.definition.string.begin.pascal', regex: '"', push: [ { token: 'constant.character.escape.pascal', regex: '\\\\.' }, { token: 'punctuation.definition.string.end.pascal', regex: '"', next: 'pop' }, { defaultToken: 'string.quoted.double.pascal' } ], }, { token: 'punctuation.definition.string.begin.pascal', regex: '\'', push: [ { token: 'constant.character.escape.apostrophe.pascal', regex: '\'\'' }, { token: 'punctuation.definition.string.end.pascal', regex: '\'', next: 'pop' }, { defaultToken: 'string.quoted.single.pascal' } ] }, { token: 'keyword.operator', regex: '[+\\-;,/*%]|:=|=' } ] } this.normalizeRules(); }; oop.inherits(PascalHighlightRules, TextHighlightRules); exports.PascalHighlightRules = PascalHighlightRules; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/pascal",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/pascal_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var PascalHighlightRules = require("./pascal_highlight_rules").PascalHighlightRules; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = PascalHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = ["--", "//"]; this.blockComment = [ {start: "(*", end: "*)"}, {start: "{", end: "}"} ]; this.$id = "ace/mode/pascal"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-perl.js ================================================ ace.define("ace/mode/perl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var PerlHighlightRules = function() { var keywords = ( "base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|" + "no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars" ); var buildinConstants = ("ARGV|ENV|INC|SIG"); var builtinFunctions = ( "getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|" + "gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|" + "getpeername|setpriority|getprotoent|setprotoent|getpriority|" + "endprotoent|getservent|setservent|endservent|sethostent|socketpair|" + "getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|" + "localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|" + "closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|" + "shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|" + "dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|" + "setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|" + "lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|" + "waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|" + "chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|" + "unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|" + "length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|" + "undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|" + "sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|" + "BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|" + "join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|" + "keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|" + "eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|" + "map|die|uc|lc|do" ); var keywordMapper = this.createKeywordMapper({ "keyword": keywords, "constant.language": buildinConstants, "support.function": builtinFunctions }, "identifier"); this.$rules = { "start" : [ { token : "comment.doc", regex : "^=(?:begin|item)\\b", next : "block_comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '["].*\\\\$', next : "qqstring" }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "string", // multi line string start regex : "['].*\\\\$", next : "qstring" }, { token : "constant.numeric", // hex regex : "0x[0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "%#|\\$#|\\.\\.\\.|\\|\\|=|>>=|<<=|<=>|&&=|=>|!~|\\^=|&=|\\|=|\\.=|x=|%=|\\/=|\\*=|\\-=|\\+=|=~|\\*\\*|\\-\\-|\\.\\.|\\|\\||&&|\\+\\+|\\->|!=|==|>=|<=|>>|<<|,|=|\\?\\:|\\^|\\||x|%|\\/|\\*|<|&|\\\\|~|!|>|\\.|\\-|\\+|\\-C|\\-b|\\-S|\\-u|\\-t|\\-p|\\-l|\\-d|\\-f|\\-g|\\-s|\\-z|\\-k|\\-e|\\-O|\\-T|\\-B|\\-M|\\-A|\\-X|\\-W|\\-c|\\-R|\\-o|\\-x|\\-w|\\-r|\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)" }, { token : "comment", regex : "#.*$" }, { token : "lparen", regex : "[[({]" }, { token : "rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { token : "string", regex : '.+' } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { token : "string", regex : '.+' } ], "block_comment": [ { token: "comment.doc", regex: "^=cut\\b", next: "start" }, { defaultToken: "comment.doc" } ] }; }; oop.inherits(PerlHighlightRules, TextHighlightRules); exports.PerlHighlightRules = PerlHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/perl",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/perl_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var PerlHighlightRules = require("./perl_highlight_rules").PerlHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = PerlHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.foldingRules = new CStyleFoldMode({start: "^=(begin|item)\\b", end: "^=(cut)\\b"}); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.blockComment = [ {start: "=begin", end: "=cut"}, {start: "=item", end: "=cut"} ]; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[\:]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/perl"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-pgsql.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/perl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var PerlHighlightRules = function() { var keywords = ( "base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|" + "no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars" ); var buildinConstants = ("ARGV|ENV|INC|SIG"); var builtinFunctions = ( "getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|" + "gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|" + "getpeername|setpriority|getprotoent|setprotoent|getpriority|" + "endprotoent|getservent|setservent|endservent|sethostent|socketpair|" + "getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|" + "localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|" + "closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|" + "shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|" + "dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|" + "setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|" + "lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|" + "waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|" + "chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|" + "unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|" + "length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|" + "undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|" + "sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|" + "BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|" + "join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|" + "keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|" + "eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|" + "map|die|uc|lc|do" ); var keywordMapper = this.createKeywordMapper({ "keyword": keywords, "constant.language": buildinConstants, "support.function": builtinFunctions }, "identifier"); this.$rules = { "start" : [ { token : "comment.doc", regex : "^=(?:begin|item)\\b", next : "block_comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '["].*\\\\$', next : "qqstring" }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "string", // multi line string start regex : "['].*\\\\$", next : "qstring" }, { token : "constant.numeric", // hex regex : "0x[0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "%#|\\$#|\\.\\.\\.|\\|\\|=|>>=|<<=|<=>|&&=|=>|!~|\\^=|&=|\\|=|\\.=|x=|%=|\\/=|\\*=|\\-=|\\+=|=~|\\*\\*|\\-\\-|\\.\\.|\\|\\||&&|\\+\\+|\\->|!=|==|>=|<=|>>|<<|,|=|\\?\\:|\\^|\\||x|%|\\/|\\*|<|&|\\\\|~|!|>|\\.|\\-|\\+|\\-C|\\-b|\\-S|\\-u|\\-t|\\-p|\\-l|\\-d|\\-f|\\-g|\\-s|\\-z|\\-k|\\-e|\\-O|\\-T|\\-B|\\-M|\\-A|\\-X|\\-W|\\-c|\\-R|\\-o|\\-x|\\-w|\\-r|\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)" }, { token : "comment", regex : "#.*$" }, { token : "lparen", regex : "[[({]" }, { token : "rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { token : "string", regex : '.+' } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { token : "string", regex : '.+' } ], "block_comment": [ { token: "comment.doc", regex: "^=cut\\b", next: "start" }, { defaultToken: "comment.doc" } ] }; }; oop.inherits(PerlHighlightRules, TextHighlightRules); exports.PerlHighlightRules = PerlHighlightRules; }); ace.define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var PythonHighlightRules = function() { var keywords = ( "and|as|assert|break|class|continue|def|del|elif|else|except|exec|" + "finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|" + "raise|return|try|while|with|yield" ); var builtinConstants = ( "True|False|None|NotImplemented|Ellipsis|__debug__" ); var builtinFunctions = ( "abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|" + "eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|" + "binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|" + "float|list|raw_input|unichr|callable|format|locals|reduce|unicode|" + "chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|" + "cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|" + "__import__|complex|hash|min|set|apply|delattr|help|next|setattr|" + "buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern" ); var keywordMapper = this.createKeywordMapper({ "invalid.deprecated": "debugger", "support.function": builtinFunctions, "constant.language": builtinConstants, "keyword": keywords }, "identifier"); var strPre = "(?:r|u|ur|R|U|UR|Ur|uR)?"; var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))"; var octInteger = "(?:0[oO]?[0-7]+)"; var hexInteger = "(?:0[xX][\\dA-Fa-f]+)"; var binInteger = "(?:0[bB][01]+)"; var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")"; var exponent = "(?:[eE][+-]?\\d+)"; var fraction = "(?:\\.\\d+)"; var intPart = "(?:\\d+)"; var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))"; var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + exponent + ")"; var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")"; var stringEscape = "\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})"; this.$rules = { "start" : [ { token : "comment", regex : "#.*$" }, { token : "string", // multi line """ string start regex : strPre + '"{3}', next : "qqstring3" }, { token : "string", // " string regex : strPre + '"(?=.)', next : "qqstring" }, { token : "string", // multi line ''' string start regex : strPre + "'{3}", next : "qstring3" }, { token : "string", // ' string regex : strPre + "'(?=.)", next : "qstring" }, { token : "constant.numeric", // imaginary regex : "(?:" + floatNumber + "|\\d+)[jJ]\\b" }, { token : "constant.numeric", // float regex : floatNumber }, { token : "constant.numeric", // long integer regex : integer + "[lL]\\b" }, { token : "constant.numeric", // integer regex : integer + "\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|=" }, { token : "paren.lparen", regex : "[\\[\\(\\{]" }, { token : "paren.rparen", regex : "[\\]\\)\\}]" }, { token : "text", regex : "\\s+" } ], "qqstring3" : [ { token : "constant.language.escape", regex : stringEscape }, { token : "string", // multi line """ string end regex : '"{3}', next : "start" }, { defaultToken : "string" } ], "qstring3" : [ { token : "constant.language.escape", regex : stringEscape }, { token : "string", // multi line ''' string end regex : "'{3}", next : "start" }, { defaultToken : "string" } ], "qqstring" : [{ token : "constant.language.escape", regex : stringEscape }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "start" }, { defaultToken: "string" }], "qstring" : [{ token : "constant.language.escape", regex : stringEscape }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "start" }, { defaultToken: "string" }] }; }; oop.inherits(PythonHighlightRules, TextHighlightRules); exports.PythonHighlightRules = PythonHighlightRules; }); ace.define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JsonHighlightRules = function() { this.$rules = { "start" : [ { token : "variable", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)' }, { token : "string", // single line regex : '"', next : "string" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : "invalid.illegal", // single quoted strings are not allowed regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "invalid.illegal", // comments are not allowed regex : "\\/\\/.*$" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "string" : [ { token : "constant.language.escape", regex : /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/ }, { token : "string", regex : '[^"\\\\]+' }, { token : "string", regex : '"', next : "start" }, { token : "string", regex : "", next : "start" } ] }; }; oop.inherits(JsonHighlightRules, TextHighlightRules); exports.JsonHighlightRules = JsonHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/pgsql_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules","ace/mode/perl_highlight_rules","ace/mode/python_highlight_rules","ace/mode/json_highlight_rules","ace/mode/javascript_highlight_rules"], function(require, exports, module) { var oop = require("../lib/oop"); var lang = require("../lib/lang"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var PerlHighlightRules = require("./perl_highlight_rules").PerlHighlightRules; var PythonHighlightRules = require("./python_highlight_rules").PythonHighlightRules; var JsonHighlightRules = require("./json_highlight_rules").JsonHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var PgsqlHighlightRules = function() { var keywords = ( "abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|" + "analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|anyrange|array|as|asc|" + "assertion|assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|" + "bigint|binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|" + "catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|" + "cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|" + "configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|" + "create|cross|cstring|csv|current|current_catalog|current_date|current_role|" + "current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|" + "date|daterange|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|" + "definer|delete|delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|" + "domain|double|drop|each|else|enable|encoding|encrypted|end|enum|escape|event|event_trigger|" + "except|exclude|excluding|exclusive|execute|exists|explain|extension|external|extract|false|" + "family|fdw_handler|fetch|first|float|float4|float8|following|for|force|foreign|forward|" + "freeze|from|full|function|functions|global|grant|granted|greatest|group|gtsvector|handler|" + "having|header|hold|hour|identity|if|ilike|immediate|immutable|implicit|in|including|" + "increment|index|indexes|inet|inherit|inherits|initially|inline|inner|inout|input|" + "insensitive|insert|instead|int|int2|int2vector|int4|int4range|int8|int8range|integer|" + "internal|intersect|interval|into|invoker|is|isnull|isolation|join|json|key|label|language|" + "language_handler|large|last|lateral|lc_collate|lc_ctype|leading|leakproof|least|left|level|" + "like|limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|" + "mapping|match|materialized|maxvalue|minute|minvalue|mode|money|month|move|name|names|" + "national|natural|nchar|next|no|none|not|nothing|notify|notnull|nowait|null|nullif|nulls|" + "numeric|numrange|object|of|off|offset|oid|oids|oidvector|on|only|opaque|operator|option|" + "options|or|order|out|outer|over|overlaps|overlay|owned|owner|parser|partial|partition|passing|" + "password|path|pg_attribute|pg_auth_members|pg_authid|pg_class|pg_database|pg_node_tree|" + "pg_proc|pg_type|placing|plans|point|polygon|position|preceding|precision|prepare|prepared|" + "preserve|primary|prior|privileges|procedural|procedure|program|quote|range|read|real|" + "reassign|recheck|record|recursive|ref|refcursor|references|refresh|regclass|regconfig|" + "regdictionary|regoper|regoperator|regproc|regprocedure|regtype|reindex|relative|release|" + "reltime|rename|repeatable|replace|replica|reset|restart|restrict|returning|returns|revoke|" + "right|role|rollback|row|rows|rule|savepoint|schema|scroll|search|second|security|select|" + "sequence|sequences|serializable|server|session|session_user|set|setof|share|show|similar|" + "simple|smallint|smgr|snapshot|some|stable|standalone|start|statement|statistics|stdin|" + "stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|tablespace|temp|" + "template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|tinterval|to|trailing|" + "transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsrange|tstzrange|tsvector|" + "txid_snapshot|type|types|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|" + "unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|" + "varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|" + "with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|" + "xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone" ); var builtinFunctions = ( "RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|" + "RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|" + "RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|" + "RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|" + "abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|acldefault|" + "aclexplode|aclinsert|aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|" + "anyarray_in|anyarray_out|anyarray_recv|anyarray_send|anyelement_in|anyelement_out|" + "anyenum_in|anyenum_out|anynonarray_in|anynonarray_out|anyrange_in|anyrange_out|" + "anytextcat|area|areajoinsel|areasel|array_agg|array_agg_finalfn|array_agg_transfn|" + "array_append|array_cat|array_dims|array_eq|array_fill|array_ge|array_gt|array_in|" + "array_larger|array_le|array_length|array_lower|array_lt|array_ndims|array_ne|array_out|" + "array_prepend|array_recv|array_remove|array_replace|array_send|array_smaller|" + "array_to_json|array_to_string|array_typanalyze|array_upper|arraycontained|" + "arraycontains|arraycontjoinsel|arraycontsel|arrayoverlap|ascii|ascii_to_mic|" + "ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|big5_to_utf8|bit_and|bit_in|" + "bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|bitcmp|biteq|bitge|bitgt|bitle|" + "bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|bittypmodin|bittypmodout|bitxor|bool|" + "bool_and|bool_or|booland_statefunc|booleq|boolge|boolgt|boolin|boolle|boollt|boolne|" + "boolor_statefunc|boolout|boolrecv|boolsend|box|box_above|box_above_eq|box_add|box_below|" + "box_below_eq|box_center|box_contain|box_contain_pt|box_contained|box_distance|box_div|" + "box_eq|box_ge|box_gt|box_in|box_intersect|box_le|box_left|box_lt|box_mul|box_out|" + "box_overabove|box_overbelow|box_overlap|box_overleft|box_overright|box_recv|box_right|" + "box_same|box_send|box_sub|bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|" + "bpchar_pattern_le|bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|" + "bpchargt|bpchariclike|bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|" + "bpcharlike|bpcharlt|bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|" + "bpcharregexne|bpcharsend|bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|" + "btarraycmp|btbeginscan|btboolcmp|btbpchar_pattern_cmp|btbuild|btbuildempty|" + "btbulkdelete|btcanreturn|btcharcmp|btcostestimate|btendscan|btfloat48cmp|btfloat4cmp|" + "btfloat4sortsupport|btfloat84cmp|btfloat8cmp|btfloat8sortsupport|btgetbitmap|" + "btgettuple|btinsert|btint24cmp|btint28cmp|btint2cmp|btint2sortsupport|btint42cmp|" + "btint48cmp|btint4cmp|btint4sortsupport|btint82cmp|btint84cmp|btint8cmp|" + "btint8sortsupport|btmarkpos|btnamecmp|btnamesortsupport|btoidcmp|btoidsortsupport|" + "btoidvectorcmp|btoptions|btrecordcmp|btreltimecmp|btrescan|btrestrpos|btrim|" + "bttext_pattern_cmp|bttextcmp|bttidcmp|bttintervalcmp|btvacuumcleanup|" + "bytea_string_agg_finalfn|bytea_string_agg_transfn|byteacat|byteacmp|byteaeq|byteage|" + "byteagt|byteain|byteale|bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|" + "cash_cmp|cash_div_cash|cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|" + "cash_ge|cash_gt|cash_in|cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|" + "cash_mul_int2|cash_mul_int4|cash_ne|cash_out|cash_pl|cash_recv|cash_send|cash_words|" + "cashlarger|cashsmaller|cbrt|ceil|ceiling|center|char|char_length|character_length|chareq|" + "charge|chargt|charin|charle|charlt|charne|charout|charrecv|charsend|chr|cideq|cidin|cidout|" + "cidr|cidr_in|cidr_out|cidr_recv|cidr_send|cidrecv|cidsend|circle|circle_above|" + "circle_add_pt|circle_below|circle_center|circle_contain|circle_contain_pt|" + "circle_contained|circle_distance|circle_div_pt|circle_eq|circle_ge|circle_gt|circle_in|" + "circle_le|circle_left|circle_lt|circle_mul_pt|circle_ne|circle_out|circle_overabove|" + "circle_overbelow|circle_overlap|circle_overleft|circle_overright|circle_recv|" + "circle_right|circle_same|circle_send|circle_sub_pt|clock_timestamp|close_lb|close_ls|" + "close_lseg|close_pb|close_pl|close_ps|close_sb|close_sl|col_description|concat|concat_ws|" + "contjoinsel|contsel|convert|convert_from|convert_to|corr|cos|cot|count|covar_pop|" + "covar_samp|cstring_in|cstring_out|cstring_recv|cstring_send|cume_dist|current_database|" + "current_query|current_schema|current_schemas|current_setting|current_user|currtid|" + "currtid2|currval|cursor_to_xml|cursor_to_xmlschema|database_to_xml|" + "database_to_xml_and_xmlschema|database_to_xmlschema|date|date_cmp|date_cmp_timestamp|" + "date_cmp_timestamptz|date_eq|date_eq_timestamp|date_eq_timestamptz|date_ge|" + "date_ge_timestamp|date_ge_timestamptz|date_gt|date_gt_timestamp|date_gt_timestamptz|" + "date_in|date_larger|date_le|date_le_timestamp|date_le_timestamptz|date_lt|" + "date_lt_timestamp|date_lt_timestamptz|date_mi|date_mi_interval|date_mii|date_ne|" + "date_ne_timestamp|date_ne_timestamptz|date_out|date_part|date_pl_interval|date_pli|" + "date_recv|date_send|date_smaller|date_sortsupport|date_trunc|daterange|" + "daterange_canonical|daterange_subdiff|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|" + "dense_rank|dexp|diagonal|diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|" + "dist_pc|dist_pl|dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|" + "dpow|dround|dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|" + "dsynonym_init|dsynonym_lexize|dtrunc|elem_contained_by_range|encode|enum_cmp|enum_eq|" + "enum_first|enum_ge|enum_gt|enum_in|enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|" + "enum_range|enum_recv|enum_send|enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|" + "euc_cn_to_utf8|euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|" + "euc_jp_to_sjis|euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|" + "euc_tw_to_mic|euc_tw_to_utf8|event_trigger_in|event_trigger_out|every|exp|factorial|" + "family|fdw_handler_in|fdw_handler_out|first_value|float4|float48div|float48eq|float48ge|" + "float48gt|float48le|float48lt|float48mi|float48mul|float48ne|float48pl|float4_accum|" + "float4abs|float4div|float4eq|float4ge|float4gt|float4in|float4larger|float4le|float4lt|" + "float4mi|float4mul|float4ne|float4out|float4pl|float4recv|float4send|float4smaller|" + "float4um|float4up|float8|float84div|float84eq|float84ge|float84gt|float84le|float84lt|" + "float84mi|float84mul|float84ne|float84pl|float8_accum|float8_avg|float8_corr|" + "float8_covar_pop|float8_covar_samp|float8_regr_accum|float8_regr_avgx|" + "float8_regr_avgy|float8_regr_intercept|float8_regr_r2|float8_regr_slope|" + "float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|float8_stddev_samp|" + "float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|float8ge|float8gt|float8in|" + "float8larger|float8le|float8lt|float8mi|float8mul|float8ne|float8out|float8pl|float8recv|" + "float8send|float8smaller|float8um|float8up|floor|flt4_mul_cash|flt8_mul_cash|" + "fmgr_c_validator|fmgr_internal_validator|fmgr_sql_validator|format|format_type|" + "gb18030_to_utf8|gbk_to_utf8|generate_series|generate_subscripts|get_bit|get_byte|" + "get_current_ts_config|getdatabaseencoding|getpgusername|gin_cmp_prefix|" + "gin_cmp_tslexeme|gin_extract_tsquery|gin_extract_tsvector|gin_tsquery_consistent|" + "ginarrayconsistent|ginarrayextract|ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|" + "gincostestimate|ginendscan|gingetbitmap|gininsert|ginmarkpos|ginoptions|" + "ginqueryarrayextract|ginrescan|ginrestrpos|ginvacuumcleanup|gist_box_compress|" + "gist_box_consistent|gist_box_decompress|gist_box_penalty|gist_box_picksplit|" + "gist_box_same|gist_box_union|gist_circle_compress|gist_circle_consistent|" + "gist_point_compress|gist_point_consistent|gist_point_distance|gist_poly_compress|" + "gist_poly_consistent|gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|" + "gistcostestimate|gistendscan|gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|" + "gistoptions|gistrescan|gistrestrpos|gistvacuumcleanup|gtsquery_compress|" + "gtsquery_consistent|gtsquery_decompress|gtsquery_penalty|gtsquery_picksplit|" + "gtsquery_same|gtsquery_union|gtsvector_compress|gtsvector_consistent|" + "gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|gtsvector_same|" + "gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|" + "has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|" + "has_function_privilege|has_language_privilege|has_schema_privilege|" + "has_sequence_privilege|has_server_privilege|has_table_privilege|" + "has_tablespace_privilege|has_type_privilege|hash_aclitem|hash_array|hash_numeric|" + "hash_range|hashbeginscan|hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|" + "hashcostestimate|hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|" + "hashinet|hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|" + "hashname|hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|" + "hashvacuumcleanup|hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|" + "icnlikejoinsel|icnlikesel|icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|" + "inet_client_addr|inet_client_port|inet_in|inet_out|inet_recv|inet_send|" + "inet_server_addr|inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|" + "initcap|int2|int24div|int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|" + "int24pl|int28div|int28eq|int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|" + "int2_accum|int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|" + "int2gt|int2in|int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|" + "int2pl|int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|" + "int2vectorin|int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|" + "int42ge|int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|" + "int48gt|int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|" + "int4_mul_cash|int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|" + "int4larger|int4le|int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|" + "int4range|int4range_canonical|int4range_subdiff|int4recv|int4send|int4shl|int4shr|" + "int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|int82le|int82lt|" + "int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|int84lt|int84mi|" + "int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|int8abs|int8and|" + "int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|int8inc_float8_float8|int8larger|" + "int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|int8or|int8out|int8pl|int8pl_inet|" + "int8range|int8range_canonical|int8range_subdiff|int8recv|int8send|int8shl|int8shr|" + "int8smaller|int8um|int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|" + "internal_out|interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|" + "interval_ge|interval_gt|interval_hash|interval_in|interval_larger|interval_le|" + "interval_lt|interval_mi|interval_mul|interval_ne|interval_out|interval_pl|" + "interval_pl_date|interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|" + "interval_pl_timetz|interval_recv|interval_send|interval_smaller|interval_transform|" + "interval_um|intervaltypmodin|intervaltypmodout|intinterval|isclosed|isempty|isfinite|" + "ishorizontal|iso8859_1_to_utf8|iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|" + "iso_to_win866|isopen|isparallel|isperp|isvertical|johab_to_utf8|json_agg|" + "json_agg_finalfn|json_agg_transfn|json_array_element|json_array_element_text|" + "json_array_elements|json_array_length|json_each|json_each_text|json_extract_path|" + "json_extract_path_op|json_extract_path_text|json_extract_path_text_op|json_in|" + "json_object_field|json_object_field_text|json_object_keys|json_out|" + "json_populate_record|json_populate_recordset|json_recv|json_send|justify_days|" + "justify_hours|justify_interval|koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|" + "koi8r_to_win1251|koi8r_to_win866|koi8u_to_utf8|lag|language_handler_in|" + "language_handler_out|last_value|lastval|latin1_to_mic|latin2_to_mic|latin2_to_win1250|" + "latin3_to_mic|latin4_to_mic|lead|left|length|like|like_escape|likejoinsel|likesel|line|" + "line_distance|line_eq|line_horizontal|line_in|line_interpt|line_intersect|line_out|" + "line_parallel|line_perp|line_recv|line_send|line_vertical|ln|lo_close|lo_creat|lo_create|" + "lo_export|lo_import|lo_lseek|lo_lseek64|lo_open|lo_tell|lo_tell64|lo_truncate|" + "lo_truncate64|lo_unlink|log|loread|lower|lower_inc|lower_inf|lowrite|lpad|lseg|lseg_center|" + "lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|" + "lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|" + "lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_and|macaddr_cmp|macaddr_eq|macaddr_ge|" + "macaddr_gt|macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_not|macaddr_or|" + "macaddr_out|macaddr_recv|macaddr_send|makeaclitem|masklen|max|md5|mic_to_ascii|" + "mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|" + "mic_to_koi8r|mic_to_latin1|mic_to_latin2|mic_to_latin3|mic_to_latin4|mic_to_sjis|" + "mic_to_win1250|mic_to_win1251|mic_to_win866|min|mktinterval|mod|money|mul_d_interval|" + "name|nameeq|namege|namegt|nameiclike|nameicnlike|nameicregexeq|nameicregexne|namein|" + "namele|namelike|namelt|namene|namenlike|nameout|namerecv|nameregexeq|nameregexne|namesend|" + "neqjoinsel|neqsel|netmask|network|network_cmp|network_eq|network_ge|network_gt|" + "network_le|network_lt|network_ne|network_sub|network_subeq|network_sup|network_supeq|" + "nextval|nlikejoinsel|nlikesel|notlike|now|npoints|nth_value|ntile|numeric_abs|" + "numeric_accum|numeric_add|numeric_avg|numeric_avg_accum|numeric_cmp|numeric_div|" + "numeric_div_trunc|numeric_eq|numeric_exp|numeric_fac|numeric_ge|numeric_gt|numeric_in|" + "numeric_inc|numeric_larger|numeric_le|numeric_ln|numeric_log|numeric_lt|numeric_mod|" + "numeric_mul|numeric_ne|numeric_out|numeric_power|numeric_recv|numeric_send|" + "numeric_smaller|numeric_sqrt|numeric_stddev_pop|numeric_stddev_samp|numeric_sub|" + "numeric_transform|numeric_uminus|numeric_uplus|numeric_var_pop|numeric_var_samp|" + "numerictypmodin|numerictypmodout|numnode|numrange|numrange_subdiff|obj_description|" + "octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|oidrecv|oidsend|" + "oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|oidvectorlt|" + "oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|on_pl|" + "on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|path_add_pt|" + "path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|path_length|" + "path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|path_out|" + "path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|" + "pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|" + "pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|" + "pg_available_extension_versions|pg_available_extensions|pg_backend_pid|" + "pg_backup_start_time|pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|" + "pg_collation_for|pg_collation_is_visible|pg_column_is_updatable|pg_column_size|" + "pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|" + "pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|" + "pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|" + "pg_event_trigger_dropped_objects|pg_export_snapshot|pg_extension_config_dump|" + "pg_extension_update_paths|pg_function_is_visible|pg_get_constraintdef|pg_get_expr|" + "pg_get_function_arguments|pg_get_function_identity_arguments|" + "pg_get_function_result|pg_get_functiondef|pg_get_indexdef|pg_get_keywords|" + "pg_get_multixact_members|pg_get_ruledef|pg_get_serial_sequence|pg_get_triggerdef|" + "pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_identify_object|pg_indexes_size|" + "pg_is_in_backup|pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|" + "pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|" + "pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|" + "pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|" + "pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|" + "pg_opfamily_is_visible|pg_options_to_table|pg_postmaster_start_time|" + "pg_prepared_statement|pg_prepared_xact|pg_read_binary_file|pg_read_file|" + "pg_relation_filenode|pg_relation_filepath|pg_relation_is_updatable|pg_relation_size|" + "pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|pg_show_all_settings|" + "pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|pg_stat_file|" + "pg_stat_get_activity|pg_stat_get_analyze_count|pg_stat_get_autoanalyze_count|" + "pg_stat_get_autovacuum_count|pg_stat_get_backend_activity|" + "pg_stat_get_backend_activity_start|pg_stat_get_backend_client_addr|" + "pg_stat_get_backend_client_port|pg_stat_get_backend_dbid|pg_stat_get_backend_idset|" + "pg_stat_get_backend_pid|pg_stat_get_backend_start|pg_stat_get_backend_userid|" + "pg_stat_get_backend_waiting|pg_stat_get_backend_xact_start|" + "pg_stat_get_bgwriter_buf_written_checkpoints|" + "pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|" + "pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|" + "pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|" + "pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|" + "pg_stat_get_buf_written_backend|pg_stat_get_checkpoint_sync_time|" + "pg_stat_get_checkpoint_write_time|pg_stat_get_db_blk_read_time|" + "pg_stat_get_db_blk_write_time|pg_stat_get_db_blocks_fetched|" + "pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|" + "pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|" + "pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|" + "pg_stat_get_db_conflict_tablespace|pg_stat_get_db_deadlocks|" + "pg_stat_get_db_numbackends|pg_stat_get_db_stat_reset_time|" + "pg_stat_get_db_temp_bytes|pg_stat_get_db_temp_files|pg_stat_get_db_tuples_deleted|" + "pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|" + "pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|" + "pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|" + "pg_stat_get_function_calls|pg_stat_get_function_self_time|" + "pg_stat_get_function_total_time|pg_stat_get_last_analyze_time|" + "pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|" + "pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|" + "pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|" + "pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|" + "pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|" + "pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|" + "pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|" + "pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_total_time|" + "pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|" + "pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|" + "pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|" + "pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|" + "pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|" + "pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|" + "pg_tablespace_databases|pg_tablespace_location|pg_tablespace_size|" + "pg_terminate_backend|pg_timezone_abbrevs|pg_timezone_names|pg_total_relation_size|" + "pg_trigger_depth|pg_try_advisory_lock|pg_try_advisory_lock_shared|" + "pg_try_advisory_xact_lock|pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|" + "pg_ts_dict_is_visible|pg_ts_parser_is_visible|pg_ts_template_is_visible|" + "pg_type_is_visible|pg_typeof|pg_xlog_location_diff|pg_xlog_replay_pause|" + "pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|pi|plainto_tsquery|" + "plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|point|point_above|" + "point_add|point_below|point_distance|point_div|point_eq|point_horiz|point_in|point_left|" + "point_mul|point_ne|point_out|point_recv|point_right|point_send|point_sub|point_vert|" + "poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|poly_contained|" + "poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|poly_overbelow|" + "poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|poly_same|poly_send|" + "polygon|popen|position|positionjoinsel|positionsel|postgresql_fdw_validator|pow|power|" + "prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|prsd_start|pt_contained_circle|" + "pt_contained_poly|query_to_xml|query_to_xml_and_xmlschema|query_to_xmlschema|" + "querytree|quote_ident|quote_literal|quote_nullable|radians|radius|random|range_adjacent|" + "range_after|range_before|range_cmp|range_contained_by|range_contains|" + "range_contains_elem|range_eq|range_ge|range_gist_compress|range_gist_consistent|" + "range_gist_decompress|range_gist_penalty|range_gist_picksplit|range_gist_same|" + "range_gist_union|range_gt|range_in|range_intersect|range_le|range_lt|range_minus|" + "range_ne|range_out|range_overlaps|range_overleft|range_overright|range_recv|range_send|" + "range_typanalyze|range_union|rangesel|rank|record_eq|record_ge|record_gt|record_in|" + "record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|" + "regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|" + "regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|" + "regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|" + "regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|" + "regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|" + "regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|" + "regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|" + "regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|" + "reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|" + "reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|row_to_json|rpad|" + "rtrim|scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|" + "schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|" + "set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|" + "shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|" + "similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|" + "smgrout|spg_kd_choose|spg_kd_config|spg_kd_inner_consistent|spg_kd_picksplit|" + "spg_quad_choose|spg_quad_config|spg_quad_inner_consistent|spg_quad_leaf_consistent|" + "spg_quad_picksplit|spg_range_quad_choose|spg_range_quad_config|" + "spg_range_quad_inner_consistent|spg_range_quad_leaf_consistent|" + "spg_range_quad_picksplit|spg_text_choose|spg_text_config|spg_text_inner_consistent|" + "spg_text_leaf_consistent|spg_text_picksplit|spgbeginscan|spgbuild|spgbuildempty|" + "spgbulkdelete|spgcanreturn|spgcostestimate|spgendscan|spggetbitmap|spggettuple|" + "spginsert|spgmarkpos|spgoptions|spgrescan|spgrestrpos|spgvacuumcleanup|split_part|sqrt|" + "statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|string_agg_finalfn|" + "string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|" + "suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|" + "table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|" + "text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|" + "texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|" + "textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|" + "thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|" + "tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|" + "time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|" + "time_smaller|time_transform|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|" + "timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|" + "timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|" + "timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|" + "timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|" + "timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|" + "timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|" + "timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|" + "timestamp_sortsupport|timestamp_transform|timestamptypmodin|timestamptypmodout|" + "timestamptz_cmp|timestamptz_cmp_date|timestamptz_cmp_timestamp|timestamptz_eq|" + "timestamptz_eq_date|timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|" + "timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|" + "timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|" + "timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|" + "timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|" + "timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|" + "timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|" + "timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|" + "timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|" + "timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|" + "timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|" + "tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|" + "tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|" + "tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|" + "tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|" + "to_json|to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|" + "trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|" + "ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|" + "ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|" + "tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|" + "tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsrange|" + "tsrange_subdiff|tstzrange|tstzrange_subdiff|tsvector_cmp|tsvector_concat|tsvector_eq|" + "tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|tsvector_ne|tsvector_update_trigger|" + "tsvector_update_trigger_column|tsvectorin|tsvectorout|tsvectorrecv|tsvectorsend|" + "txid_current|txid_current_snapshot|txid_snapshot_in|txid_snapshot_out|" + "txid_snapshot_recv|txid_snapshot_send|txid_snapshot_xip|txid_snapshot_xmax|" + "txid_snapshot_xmin|txid_visible_in_snapshot|uhc_to_utf8|unique_key_recheck|unknownin|" + "unknownout|unknownrecv|unknownsend|unnest|upper|upper_inc|upper_inf|utf8_to_ascii|" + "utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|utf8_to_euc_kr|" + "utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|utf8_to_iso8859_1|" + "utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|utf8_to_sjis|" + "utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|uuid_le|" + "uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|varbit_out|" + "varbit_recv|varbit_send|varbit_transform|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|" + "varbitlt|varbitne|varbittypmodin|varbittypmodout|varchar_transform|varcharin|" + "varcharout|varcharrecv|varcharsend|varchartypmodin|varchartypmodout|variance|version|" + "void_in|void_out|void_recv|void_send|width|width_bucket|win1250_to_latin2|" + "win1250_to_mic|win1251_to_iso|win1251_to_koi8r|win1251_to_mic|win1251_to_win866|" + "win866_to_iso|win866_to_koi8r|win866_to_mic|win866_to_win1251|win_to_utf8|xideq|" + "xideqint4|xidin|xidout|xidrecv|xidsend|xml|xml_in|xml_is_well_formed|" + "xml_is_well_formed_content|xml_is_well_formed_document|xml_out|xml_recv|xml_send|" + "xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|xpath_exists" ); var keywordMapper = this.createKeywordMapper({ "support.function": builtinFunctions, "keyword": keywords }, "identifier", true); var sqlRules = [{ token : "string", // single line string -- assume dollar strings if multi-line for now regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "variable.language", // pg identifier regex : '".*?"' }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : keywordMapper, regex : "[a-zA-Z_][a-zA-Z0-9_$]*\\b" // TODO - Unicode in identifiers }, { token : "keyword.operator", regex : "!|!!|!~|!~\\*|!~~|!~~\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\&|\\&\\&|\\&<|\\&<\\||\\&>|\\*|\\+|" + "\\-|/|<|<#>|<\\->|<<|<<=|<<\\||<=|<>|<\\?>|<@|<\\^|=|>|>=|>>|>>=|>\\^|\\?#|\\?\\-|\\?\\-\\||" + "\\?\\||\\?\\|\\||@|@\\-@|@>|@@|@@@|\\^|\\||\\|\\&>|\\|/|\\|>>|\\|\\||\\|\\|/|~|~\\*|~<=~|~<~|" + "~=|~>=~|~>~|~~|~~\\*" }, { token : "paren.lparen", regex : "[\\(]" }, { token : "paren.rparen", regex : "[\\)]" }, { token : "text", regex : "\\s+" } ]; this.$rules = { "start" : [{ token : "comment", regex : "--.*$" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi-line comment regex : "\\/\\*", next : "comment" },{ token : "keyword.statementBegin", regex : "^[a-zA-Z]+", // Could enumerate starting keywords but this allows things to work when new statements are added. next : "statement" },{ token : "support.buildin", // psql directive regex : "^\\\\[\\S]+.*$" } ], "statement" : [{ token : "comment", regex : "--.*$" }, { token : "comment", // multi-line comment regex : "\\/\\*", next : "commentStatement" }, { token : "statementEnd", regex : ";", next : "start" }, { token : "string", regex : "\\$perl\\$", next : "perl-start" }, { token : "string", regex : "\\$python\\$", next : "python-start" }, { token : "string", regex : "\\$json\\$", next : "json-start" }, { token : "string", regex : "\\$(js|javascript)\\$", next : "javascript-start" }, { token : "string", regex : "\\$[\\w_0-9]*\\$$", // dollar quote at the end of a line next : "dollarSql" }, { token : "string", regex : "\\$[\\w_0-9]*\\$", next : "dollarStatementString" } ].concat(sqlRules), "dollarSql" : [{ token : "comment", regex : "--.*$" }, { token : "comment", // multi-line comment regex : "\\/\\*", next : "commentDollarSql" }, { token : "string", // end quoting with dollar at the start of a line regex : "^\\$[\\w_0-9]*\\$", next : "statement" }, { token : "string", regex : "\\$[\\w_0-9]*\\$", next : "dollarSqlString" } ].concat(sqlRules), "comment" : [{ token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "commentStatement" : [{ token : "comment", // closing comment regex : ".*?\\*\\/", next : "statement" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "commentDollarSql" : [{ token : "comment", // closing comment regex : ".*?\\*\\/", next : "dollarSql" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "dollarStatementString" : [{ token : "string", // closing dollarstring regex : ".*?\\$[\\w_0-9]*\\$", next : "statement" }, { token : "string", // dollarstring spanning whole line regex : ".+" } ], "dollarSqlString" : [{ token : "string", // closing dollarstring regex : ".*?\\$[\\w_0-9]*\\$", next : "dollarSql" }, { token : "string", // dollarstring spanning whole line regex : ".+" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); this.embedRules(PerlHighlightRules, "perl-", [{token : "string", regex : "\\$perl\\$", next : "statement"}]); this.embedRules(PythonHighlightRules, "python-", [{token : "string", regex : "\\$python\\$", next : "statement"}]); this.embedRules(JsonHighlightRules, "json-", [{token : "string", regex : "\\$json\\$", next : "statement"}]); this.embedRules(JavaScriptHighlightRules, "javascript-", [{token : "string", regex : "\\$(js|javascript)\\$", next : "statement"}]); }; oop.inherits(PgsqlHighlightRules, TextHighlightRules); exports.PgsqlHighlightRules = PgsqlHighlightRules; }); ace.define("ace/mode/pgsql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/pgsql_highlight_rules","ace/range"], function(require, exports, module) { var oop = require("../lib/oop"); var TextMode = require("../mode/text").Mode; var PgsqlHighlightRules = require("./pgsql_highlight_rules").PgsqlHighlightRules; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = PgsqlHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "--"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { if (state == "start" || state == "keyword.statementEnd") { return ""; } else { return this.$getIndent(line); // Keep whatever indent the previous line has } } this.$id = "ace/mode/pgsql"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-php.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/php_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules","ace/mode/html_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var PhpLangHighlightRules = function() { var docComment = DocCommentHighlightRules; var builtinFunctions = lang.arrayToMap( ('abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|' + 'aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|' + 'apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|' + 'apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|' + 'apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|' + 'apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|' + 'apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|' + 'apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|' + 'array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|' + 'array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|' + 'array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|' + 'array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|' + 'array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|' + 'array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|' + 'atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|' + 'bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|' + 'bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|' + 'bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|' + 'bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|' + 'bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|' + 'cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|' + 'cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|' + 'cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|' + 'cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|' + 'cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|' + 'cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|' + 'cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|' + 'cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|' + 'cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|' + 'cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|' + 'cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|' + 'cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|' + 'cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|' + 'cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|' + 'cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|' + 'cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|' + 'cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|' + 'cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|' + 'cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|' + 'cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|' + 'cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|' + 'cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|' + 'cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|' + 'cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|' + 'cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|' + 'cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|' + 'cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|' + 'cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|' + 'chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|' + 'class_parents|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|' + 'classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|' + 'com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|' + 'com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|' + 'convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|' + 'counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|' + 'crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|' + 'ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|' + 'cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|' + 'cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|' + 'cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|' + 'cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|' + 'cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|' + 'cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|' + 'cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|' + 'cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|' + 'cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|' + 'cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|' + 'cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|' + 'curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|' + 'curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|' + 'curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|' + 'date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|' + 'date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|' + 'date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|' + 'dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|' + 'db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|' + 'db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|' + 'db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|' + 'db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|' + 'db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|' + 'db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|' + 'dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|' + 'dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|' + 'dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|' + 'dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|' + 'dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|' + 'dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|' + 'dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|' + 'dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|' + 'dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|' + 'define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|' + 'dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|' + 'dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|' + 'domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|' + 'domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|' + 'domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|' + 'domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|' + 'domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|' + 'domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|' + 'domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|' + 'domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|' + 'domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|' + 'domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|' + 'domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|' + 'domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|' + 'domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|' + 'domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|' + 'domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|' + 'domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|' + 'domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|' + 'enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|' + 'enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|' + 'enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|' + 'enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|' + 'eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|' + 'event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|' + 'event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|' + 'event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|' + 'event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|' + 'expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|' + 'fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|' + 'fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|' + 'fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|' + 'fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|' + 'fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|' + 'fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|' + 'fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|' + 'fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|' + 'fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|' + 'fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|' + 'fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|' + 'fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|' + 'fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|' + 'file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|' + 'filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|' + 'filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|' + 'finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|' + 'forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|' + 'ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|' + 'ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|' + 'ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|' + 'func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|' + 'gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|' + 'geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|' + 'geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|' + 'get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|' + 'get_declared_interfaces|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|' + 'get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|' + 'get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|' + 'getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|' + 'gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|' + 'getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|' + 'getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|' + 'gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|' + 'gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|' + 'gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|' + 'gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|' + 'gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|' + 'gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|' + 'gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|' + 'grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|' + 'gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|' + 'gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|' + 'gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|' + 'gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|' + 'gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|' + 'gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|' + 'gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|' + 'gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|' + 'gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|' + 'gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|' + 'halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|' + 'haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|' + 'harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|' + 'harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|' + 'harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|' + 'harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|' + 'harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|' + 'harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|' + 'harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|' + 'harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|' + 'haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|' + 'harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|' + 'harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|' + 'haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|' + 'haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|' + 'harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|' + 'harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|' + 'harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|' + 'harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|' + 'harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|' + 'harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|' + 'harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|' + 'harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|' + 'harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|' + 'harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|' + 'harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|' + 'harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|' + 'harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|' + 'harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|' + 'hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|' + 'header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|' + 'html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|' + 'http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|' + 'http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|' + 'http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|' + 'http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|' + 'http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|' + 'http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|' + 'http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|' + 'http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|' + 'httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|' + 'httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|' + 'httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|' + 'httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|' + 'httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|' + 'httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|' + 'httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|' + 'httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|' + 'httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|' + 'httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|' + 'httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|' + 'httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|' + 'httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|' + 'httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|' + 'httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|' + 'httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|' + 'httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|' + 'httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|' + 'httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|' + 'httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|' + 'httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|' + 'httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|' + 'httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|' + 'httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|' + 'httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|' + 'httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|' + 'httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|' + 'httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|' + 'httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|' + 'hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|' + 'hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|' + 'hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|' + 'hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|' + 'hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|' + 'hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|' + 'hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|' + 'hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|' + 'hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|' + 'hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|' + 'hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|' + 'hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|' + 'hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|' + 'hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|' + 'ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|' + 'ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|' + 'ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|' + 'ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|' + 'ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|' + 'ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|' + 'ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|' + 'iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|' + 'id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|' + 'idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|' + 'ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|' + 'ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|' + 'ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|' + 'ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|' + 'iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|' + 'iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|' + 'iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|' + 'imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|' + 'imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|' + 'imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|' + 'imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|' + 'imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|' + 'imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|' + 'imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|' + 'imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|' + 'imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|' + 'imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|' + 'imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|' + 'imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|' + 'imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|' + 'imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|' + 'imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|' + 'imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|' + 'imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|' + 'imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|' + 'imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|' + 'imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|' + 'imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|' + 'imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|' + 'imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|' + 'imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|' + 'imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|' + 'imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|' + 'imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|' + 'imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|' + 'imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|' + 'imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|' + 'imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|' + 'imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|' + 'imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|' + 'imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|' + 'imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|' + 'imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|' + 'imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|' + 'imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|' + 'imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|' + 'imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|' + 'imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|' + 'imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|' + 'imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|' + 'imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|' + 'imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|' + 'imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|' + 'imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|' + 'imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|' + 'imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|' + 'imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|' + 'imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|' + 'imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|' + 'imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|' + 'imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|' + 'imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|' + 'imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|' + 'imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|' + 'imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|' + 'imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|' + 'imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|' + 'imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|' + 'imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|' + 'imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|' + 'imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|' + 'imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|' + 'imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|' + 'imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|' + 'imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|' + 'imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|' + 'imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|' + 'imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|' + 'imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|' + 'imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|' + 'imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|' + 'imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|' + 'imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|' + 'imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|' + 'imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|' + 'imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|' + 'imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|' + 'imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|' + 'imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|' + 'imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|' + 'imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|' + 'imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|' + 'imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|' + 'imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|' + 'imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|' + 'imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|' + 'imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|' + 'imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|' + 'imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|' + 'imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|' + 'imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|' + 'imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|' + 'imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|' + 'imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|' + 'imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|' + 'imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|' + 'imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|' + 'imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|' + 'imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|' + 'imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|' + 'imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|' + 'imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|' + 'imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|' + 'imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|' + 'imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|' + 'imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|' + 'imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|' + 'include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|' + 'ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|' + 'ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|' + 'ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|' + 'ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|' + 'ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|' + 'inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|' + 'intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|' + 'is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|' + 'is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|' + 'iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|' + 'iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|' + 'jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|' + 'json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|' + 'kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|' + 'kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|' + 'ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|' + 'ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|' + 'ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|' + 'ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|' + 'ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|' + 'libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|' + 'limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|' + 'lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|' + 'm_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|' + 'm_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|' + 'm_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|' + 'm_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|' + 'mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|' + 'mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|' + 'mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|' + 'maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|' + 'maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|' + 'maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|' + 'maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|' + 'maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|' + 'maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|' + 'maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|' + 'maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|' + 'maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|' + 'maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|' + 'maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|' + 'maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|' + 'maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|' + 'maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|' + 'maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|' + 'mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|' + 'mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|' + 'mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|' + 'mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|' + 'mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|' + 'mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|' + 'mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|' + 'mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|' + 'mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|' + 'mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|' + 'mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|' + 'mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|' + 'mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|' + 'mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|' + 'mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|' + 'ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|' + 'mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|' + 'mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|' + 'mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|' + 'mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|' + 'mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|' + 'msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|' + 'msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|' + 'msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|' + 'msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|' + 'msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|' + 'msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|' + 'msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|' + 'mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|' + 'mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|' + 'mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|' + 'mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|' + 'mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|' + 'mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|' + 'mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|' + 'mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|' + 'mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|' + 'mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|' + 'mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_bind_param|' + 'mysqli_bind_result|mysqli_client_encoding|mysqli_connect|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|' + 'mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_get_metadata|' + 'mysqli_master_query|mysqli_param_count|mysqli_report|mysqli_result|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|' + 'mysqli_send_long_data|mysqli_send_query|mysqli_set_opt|mysqli_slave_query|mysqli_stmt|mysqli_warning|mysqlnd_ms_get_stats|' + 'mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|' + 'mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|' + 'ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|' + 'ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|' + 'ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|' + 'ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|' + 'ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|' + 'ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|' + 'ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|' + 'ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|' + 'ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|' + 'ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|' + 'ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|' + 'ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|' + 'ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|' + 'ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|' + 'ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|' + 'ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|' + 'ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|' + 'ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|' + 'ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|' + 'ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|' + 'ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|' + 'ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|' + 'newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|' + 'newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|' + 'newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|' + 'newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|' + 'newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|' + 'newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|' + 'newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|' + 'newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|' + 'newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|' + 'newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|' + 'newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|' + 'newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|' + 'newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|' + 'newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|' + 'newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|' + 'newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|' + 'newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|' + 'newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|' + 'newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|' + 'notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|' + 'notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|' + 'numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|' + 'ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|' + 'ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|' + 'oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|' + 'oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|' + 'oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|' + 'oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|' + 'oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|' + 'oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|' + 'oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|' + 'oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|' + 'oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|' + 'ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|' + 'ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|' + 'ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|' + 'ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|' + 'ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|' + 'octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|' + 'odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|' + 'odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|' + 'odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|' + 'odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|' + 'odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|' + 'openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|' + 'openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|' + 'openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|' + 'openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|' + 'openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|' + 'openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|' + 'openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|' + 'openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|' + 'openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|' + 'openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|' + 'openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|' + 'outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|' + 'ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|' + 'ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|' + 'ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|' + 'parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|' + 'pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|' + 'pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|' + 'pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|' + 'pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|' + 'pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|' + 'pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|' + 'pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|' + 'pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|' + 'pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|' + 'pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|' + 'pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|' + 'pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|' + 'pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|' + 'pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|' + 'pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|' + 'pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|' + 'pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|' + 'pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|' + 'pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|' + 'pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|' + 'pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|' + 'pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|' + 'pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|' + 'pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|' + 'pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|' + 'pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|' + 'pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|' + 'pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|' + 'pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|' + 'pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|' + 'pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|' + 'pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|' + 'pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|' + 'pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|' + 'pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|' + 'php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|' + 'png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|' + 'posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|' + 'posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|' + 'posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|' + 'preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|' + 'printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|' + 'printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|' + 'printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|' + 'printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|' + 'printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|' + 'ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|' + 'ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|' + 'ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|' + 'ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|' + 'ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|' + 'ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|' + 'ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|' + 'ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|' + 'ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|' + 'pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|' + 'pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|' + 'pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|' + 'px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|' + 'px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|' + 'px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|' + 'radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|' + 'radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|' + 'radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|' + 'radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|' + 'rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|' + 'readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|' + 'readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|' + 'readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|' + 'recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|' + 'recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|' + 'reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|' + 'regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|' + 'resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|' + 'rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|' + 'rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|' + 'runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|' + 'runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|' + 'runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|' + 'runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|' + 'samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|' + 'samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|' + 'sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|' + 'sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|' + 'sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|' + 'sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|' + 'sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|' + 'sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|' + 'sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|' + 'sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|' + 'sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|' + 'sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|' + 'sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|' + 'sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|' + 'sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|' + 'sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|' + 'sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|' + 'sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|' + 'sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|' + 'sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|' + 'sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|' + 'sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|' + 'session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|' + 'session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|' + 'session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|' + 'session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|' + 'set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|' + 'setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|' + 'shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|' + 'similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|' + 'snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|' + 'snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|' + 'snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|' + 'soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|' + 'socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|' + 'socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|' + 'socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|' + 'solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|' + 'solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|' + 'solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|' + 'spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|' + 'splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|' + 'splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|' + 'sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|' + 'sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|' + 'sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|' + 'sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|' + 'sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|' + 'sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|' + 'ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|' + 'ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|' + 'ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|' + 'ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|' + 'stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|' + 'stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|' + 'stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|' + 'stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|' + 'stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|' + 'stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|' + 'stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|' + 'stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|' + 'stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|' + 'stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|' + 'stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|' + 'stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|' + 'str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|' + 'stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|' + 'stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|' + 'stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|' + 'stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|' + 'stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|' + 'stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|' + 'stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|' + 'stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|' + 'stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|' + 'strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|' + 'svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|' + 'svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|' + 'svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|' + 'svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|' + 'svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|' + 'svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|' + 'swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|' + 'swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|' + 'swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|' + 'swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|' + 'swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|' + 'swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|' + 'swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|' + 'swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|' + 'swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|' + 'swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|' + 'swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|' + 'swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|' + 'swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|' + 'sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|' + 'sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|' + 'sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|' + 'sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|' + 'tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|' + 'tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|' + 'time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|' + 'timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|' + 'tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|transliterator|traversable|trigger_error|trim|uasort|ucfirst|' + 'ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|' + 'udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|' + 'udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|' + 'uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|' + 'urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|' + 'variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|' + 'variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|' + 'variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|' + 'vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|' + 'vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|' + 'vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|' + 'w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|' + 'wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|' + 'win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|' + 'win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|' + 'wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|' + 'wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|' + 'wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|' + 'wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|' + 'xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|' + 'xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|' + 'xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|' + 'xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|' + 'xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|' + 'xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|' + 'xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|' + 'xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|' + 'xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|' + 'xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|' + 'xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|' + 'xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|' + 'xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|' + 'xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|' + 'xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|' + 'xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|' + 'xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|' + 'xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|' + 'xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|' + 'xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|' + 'xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|' + 'xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|' + 'yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|' + 'yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|' + 'yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|' + 'yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|' + 'zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|' + 'ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|' + 'ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|' + 'ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|' + 'ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|' + 'ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|' + 'ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type').split('|') ); var keywords = lang.arrayToMap( ('abstract|and|array|as|break|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|' + 'endswitch|endwhile|extends|final|for|foreach|function|global|goto|if|implements|interface|instanceof|namespace|new|or|private|protected|' + 'public|static|switch|throw|try|use|var|while|xor').split('|') ); var languageConstructs = lang.arrayToMap( ('die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset').split('|') ); var builtinConstants = lang.arrayToMap( ('true|false|null|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__').split('|') ); var builtinVariables = lang.arrayToMap( ('$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|' + '$http_response_header|$argc|$argv').split('|') ); var builtinFunctionsDeprecated = lang.arrayToMap( ('key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|' + 'com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|' + 'cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|' + 'hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|' + 'maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|' + 'mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|' + 'mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|' + 'mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|' + 'mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|' + 'mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|' + 'mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|' + 'ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|' + 'ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|' + 'ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|' + 'ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|' + 'ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|' + 'PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|' + 'PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|' + 'PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|' + 'PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|' + 'PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|' + 'PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|' + 'PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|' + 'PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|' + 'px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregister' + 'set_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|' + 'sql_regcase').split('|') ); var keywordsDeprecated = lang.arrayToMap( ('cfunction|old_function').split('|') ); var futureReserved = lang.arrayToMap([]); this.$rules = { "start" : [ { token : "comment", regex : /(?:#|\/\/)(?:[^?]|\?[^>])*/ }, docComment.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/][gimy]*\\s*(?=[).,;]|$)" }, { token : "string", // " string start regex : '"', next : "qqstring" }, { token : "string", // ' string start regex : "'", next : "qstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language", // constants regex : "\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|" + "ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|" + "HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|" + "L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|" + "VERSION))|__COMPILER_HALT_OFFSET__)\\b" }, { token : ["keyword", "text", "support.class"], regex : "\\b(new)(\\s+)(\\w+)" }, { token : ["support.class", "keyword.operator"], regex : "\\b(\\w+)(::)" }, { token : "constant.language", // constants regex : "\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|" + "SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|" + "O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|" + "R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|" + "YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|" + "ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|" + "T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|" + "HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|" + "I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|" + "O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|" + "L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|" + "M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|" + "OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|" + "P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|" + "RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|" + "T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\b" }, { token : function(value) { if (keywords.hasOwnProperty(value)) return "keyword"; else if (builtinConstants.hasOwnProperty(value)) return "constant.language"; else if (builtinVariables.hasOwnProperty(value)) return "variable.language"; else if (futureReserved.hasOwnProperty(value)) return "invalid.illegal"; else if (builtinFunctions.hasOwnProperty(value)) return "support.function"; else if (value == "debugger") return "invalid.deprecated"; else if(value.match(/^(\$[a-zA-Z_\x7f-\uffff][a-zA-Z0-9_\x7f-\uffff]*|self|parent)$/)) return "variable"; return "identifier"; }, regex : /[a-zA-Z_$\x7f-\uffff][a-zA-Z0-9_\x7f-\uffff]*/ }, { onMatch : function(value, currentSate, state) { value = value.substr(3); if (value[0] == "'" || value[0] == '"') value = value.slice(1, -1); state.unshift(this.next, value); return "markup.list"; }, regex : /<<<(?:\w+|'\w+'|"\w+")$/, next: "heredoc" }, { token : "keyword.operator", regex : "::|!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|=|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "heredoc" : [ { onMatch : function(value, currentSate, stack) { if (stack[1] != value) return "string"; stack.shift(); stack.shift(); return "markup.list"; }, regex : "^\\w+(?=;?$)", next: "start" }, { token: "string", regex : ".*" } ], "comment" : [ { token : "comment", regex : "\\*\\/", next : "start" }, { defaultToken : "comment" } ], "qqstring" : [ { token : "constant.language.escape", regex : '\\\\(?:[nrtvef\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})' }, { token : "variable", regex : /\$[\w]+(?:\[[\w\]+]|[=\-]>\w+)?/ }, { token : "variable", regex : /\$\{[^"\}]+\}?/ // this is wrong but ok for now }, {token : "string", regex : '"', next : "start"}, {defaultToken : "string"} ], "qstring" : [ {token : "constant.language.escape", regex : /\\['\\]/}, {token : "string", regex : "'", next : "start"}, {defaultToken : "string"} ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(PhpLangHighlightRules, TextHighlightRules); var PhpHighlightRules = function() { HtmlHighlightRules.call(this); var startRules = [ { token : "support.php_tag", // php open tag regex : "<\\?(?:php|=)?", push : "php-start" } ]; var endRules = [ { token : "support.php_tag", // php close tag regex : "\\?>", next : "pop" } ]; for (var key in this.$rules) this.$rules[key].unshift.apply(this.$rules[key], startRules); this.embedRules(PhpLangHighlightRules, "php-", endRules, ["start"]); this.normalizeRules(); }; oop.inherits(PhpHighlightRules, HtmlHighlightRules); exports.PhpHighlightRules = PhpHighlightRules; exports.PhpLangHighlightRules = PhpLangHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/php",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/php_highlight_rules","ace/mode/php_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/unicode","ace/mode/html","ace/mode/javascript","ace/mode/css"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var PhpHighlightRules = require("./php_highlight_rules").PhpHighlightRules; var PhpLangHighlightRules = require("./php_highlight_rules").PhpLangHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var unicode = require("../unicode"); var HtmlMode = require("./html").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var PhpMode = function(opts) { this.HighlightRules = PhpLangHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(PhpMode, TextMode); (function() { this.tokenRe = new RegExp("^[" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + "\_]+", "g" ); this.nonTokenRe = new RegExp("^(?:[^" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + "\_]|\s])+", "g" ); this.lineCommentStart = ["//", "#"]; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[\:]\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState != "doc-start") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/php-inline"; }).call(PhpMode.prototype); var Mode = function(opts) { if (opts && opts.inline) { var mode = new PhpMode(); mode.createWorker = this.createWorker; mode.inlinePhp = true; return mode; } HtmlMode.call(this); this.HighlightRules = PhpHighlightRules; this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode, "php-": PhpMode }); this.foldingRules.subModes["php-"] = new CStyleFoldMode(); }; oop.inherits(Mode, HtmlMode); (function() { this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/php_worker", "PhpWorker"); worker.attachToDocument(session.getDocument()); if (this.inlinePhp) worker.call("setOptions", [{inline: true}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("ok", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/php"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-plain_text.js ================================================ ace.define("ace/mode/plain_text",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/text_highlight_rules","ace/mode/behaviour"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var Behaviour = require("./behaviour").Behaviour; var Mode = function() { this.HighlightRules = TextHighlightRules; this.$behaviour = new Behaviour(); }; oop.inherits(Mode, TextMode); (function() { this.type = "text"; this.getNextLineIndent = function(state, line, tab) { return ''; }; this.$id = "ace/mode/plain_text"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-powershell.js ================================================ ace.define("ace/mode/powershell_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var PowershellHighlightRules = function() { var keywords = ( "function|if|else|elseif|switch|while|default|for|do|until|break|continue|" + "foreach|return|filter|in|trap|throw|param|begin|process|end" ); var builtinFunctions = ( "Get-Alias|Import-Alias|New-Alias|Set-Alias|Get-AuthenticodeSignature|Set-AuthenticodeSignature|" + "Set-Location|Get-ChildItem|Clear-Item|Get-Command|Measure-Command|Trace-Command|" + "Add-Computer|Checkpoint-Computer|Remove-Computer|Restart-Computer|Restore-Computer|Stop-Computer|" + "Reset-ComputerMachinePassword|Test-ComputerSecureChannel|Add-Content|Get-Content|Set-Content|Clear-Content|" + "Get-Command|Invoke-Command|Enable-ComputerRestore|Disable-ComputerRestore|Get-ComputerRestorePoint|Test-Connection|" + "ConvertFrom-CSV|ConvertTo-CSV|ConvertTo-Html|ConvertTo-Xml|ConvertFrom-SecureString|ConvertTo-SecureString|" + "Copy-Item|Export-Counter|Get-Counter|Import-Counter|Get-Credential|Get-Culture|" + "Get-ChildItem|Get-Date|Set-Date|Remove-Item|Compare-Object|Get-Event|" + "Get-WinEvent|New-Event|Remove-Event|Unregister-Event|Wait-Event|Clear-EventLog|" + "Get-Eventlog|Limit-EventLog|New-Eventlog|Remove-EventLog|Show-EventLog|Write-EventLog|" + "Get-EventSubscriber|Register-EngineEvent|Register-ObjectEvent|Register-WmiEvent|Get-ExecutionPolicy|Set-ExecutionPolicy|" + "Export-Alias|Export-Clixml|Export-Console|Export-Csv|ForEach-Object|Format-Custom|" + "Format-List|Format-Table|Format-Wide|Export-FormatData|Get-FormatData|Get-Item|" + "Get-ChildItem|Get-Help|Add-History|Clear-History|Get-History|Invoke-History|" + "Get-Host|Read-Host|Write-Host|Get-HotFix|Import-Clixml|Import-Csv|" + "Invoke-Command|Invoke-Expression|Get-Item|Invoke-Item|New-Item|Remove-Item|" + "Set-Item|Clear-ItemProperty|Copy-ItemProperty|Get-ItemProperty|Move-ItemProperty|New-ItemProperty|" + "Remove-ItemProperty|Rename-ItemProperty|Set-ItemProperty|Get-Job|Receive-Job|Remove-Job|" + "Start-Job|Stop-Job|Wait-Job|Stop-Process|Update-List|Get-Location|" + "Pop-Location|Push-Location|Set-Location|Send-MailMessage|Add-Member|Get-Member|" + "Move-Item|Compare-Object|Group-Object|Measure-Object|New-Object|Select-Object|" + "Sort-Object|Where-Object|Out-Default|Out-File|Out-GridView|Out-Host|" + "Out-Null|Out-Printer|Out-String|Convert-Path|Join-Path|Resolve-Path|" + "Split-Path|Test-Path|Get-Pfxcertificate|Pop-Location|Push-Location|Get-Process|" + "Start-Process|Stop-Process|Wait-Process|Enable-PSBreakpoint|Disable-PSBreakpoint|Get-PSBreakpoint|" + "Set-PSBreakpoint|Remove-PSBreakpoint|Get-PSDrive|New-PSDrive|Remove-PSDrive|Get-PSProvider|" + "Set-PSdebug|Enter-PSSession|Exit-PSSession|Export-PSSession|Get-PSSession|Import-PSSession|" + "New-PSSession|Remove-PSSession|Disable-PSSessionConfiguration|Enable-PSSessionConfiguration|Get-PSSessionConfiguration|Register-PSSessionConfiguration|" + "Set-PSSessionConfiguration|Unregister-PSSessionConfiguration|New-PSSessionOption|Add-PsSnapIn|Get-PsSnapin|Remove-PSSnapin|" + "Get-Random|Read-Host|Remove-Item|Rename-Item|Rename-ItemProperty|Select-Object|" + "Select-XML|Send-MailMessage|Get-Service|New-Service|Restart-Service|Resume-Service|" + "Set-Service|Start-Service|Stop-Service|Suspend-Service|Sort-Object|Start-Sleep|" + "ConvertFrom-StringData|Select-String|Tee-Object|New-Timespan|Trace-Command|Get-Tracesource|" + "Set-Tracesource|Start-Transaction|Complete-Transaction|Get-Transaction|Use-Transaction|Undo-Transaction|" + "Start-Transcript|Stop-Transcript|Add-Type|Update-TypeData|Get-Uiculture|Get-Unique|" + "Update-Formatdata|Update-Typedata|Clear-Variable|Get-Variable|New-Variable|Remove-Variable|" + "Set-Variable|New-WebServiceProxy|Where-Object|Write-Debug|Write-Error|Write-Host|" + "Write-Output|Write-Progress|Write-Verbose|Write-Warning|Set-WmiInstance|Invoke-WmiMethod|" + "Get-WmiObject|Remove-WmiObject|Connect-WSMan|Disconnect-WSMan|Test-WSMan|Invoke-WSManAction|" + "Disable-WSManCredSSP|Enable-WSManCredSSP|Get-WSManCredSSP|New-WSManInstance|Get-WSManInstance|Set-WSManInstance|" + "Remove-WSManInstance|Set-WSManQuickConfig|New-WSManSessionOption" ); var keywordMapper = this.createKeywordMapper({ "support.function": builtinFunctions, "keyword": keywords }, "identifier"); var binaryOperatorsRe = "eq|ne|ge|gt|lt|le|like|notlike|match|notmatch|replace|contains|notcontains|" + "ieq|ine|ige|igt|ile|ilt|ilike|inotlike|imatch|inotmatch|ireplace|icontains|inotcontains|" + "is|isnot|as|" + "and|or|band|bor|not"; this.$rules = { "start" : [ { token : "comment", regex : "#.*$" }, { token : "comment.start", regex : "<#", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "[$](?:[Tt]rue|[Ff]alse)\\b" }, { token : "constant.language", regex : "[$][Nn]ull\\b" }, { token : "variable.instance", regex : "[$][a-zA-Z][a-zA-Z0-9_]*\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$\\-]*\\b" }, { token : "keyword.operator", regex : "\\-(?:" + binaryOperatorsRe + ")" }, { token : "keyword.operator", regex : "&|\\*|\\+|\\-|\\=|\\+=|\\-=" }, { token : "lparen", regex : "[[({]" }, { token : "rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment.end", regex : "#>", next : "start" }, { token : "doc.comment.tag", regex : "^\\.\\w+" }, { token : "comment", regex : "\\w+" }, { token : "comment", regex : "." } ] }; }; oop.inherits(PowershellHighlightRules, TextHighlightRules); exports.PowershellHighlightRules = PowershellHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/powershell",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/powershell_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var PowershellHighlightRules = require("./powershell_highlight_rules").PowershellHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = PowershellHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode({start: "^\\s*(<#)", end: "^[#\\s]>\\s*$"}); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.blockComment = {start: "<#", end: "#>"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { return null; }; this.$id = "ace/mode/powershell"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-praat.js ================================================ ace.define("ace/mode/praat_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var PraatHighlightRules = function() { var keywords = ( "if|then|else|elsif|elif|endif|fi|" + "endfor|endproc|" + // related keywords specified below "while|endwhile|" + "repeat|until|" + "select|plus|minus|" + "assert" ); var predefinedVariables = ( "macintosh|windows|unix|" + "praatVersion|praatVersion\\$" + "pi|undefined|" + "newline\\$|tab\\$|" + "shellDirectory\\$|homeDirectory\\$|preferencesDirectory\\$|" + "temporaryDirectory\\$|defaultDirectory\\$" ); var directives = ( "clearinfo|endSendPraat" ); var functions = ( "writeInfo|writeInfoLine|appendInfo|appendInfoLine|" + "writeFile|writeFileLine|appendFile|appendFileLine|" + "abs|round|floor|ceiling|min|max|imin|imax|" + "sqrt|sin|cos|tan|arcsin|arccos|arctan|arctan2|sinc|sincpi|" + "exp|ln|log10|log2|" + "sinh|cosh|tanh|arcsinh|arccosh|actanh|" + "sigmoid|invSigmoid|erf|erfc|" + "randomUniform|randomInteger|randomGauss|randomPoisson|" + "lnGamma|gaussP|gaussQ|invGaussQ|" + "chiSquareP|chiSquareQ|invChiSquareQ|studentP|studentQ|invStudentQ|" + "fisherP|fisherQ|invFisherQ|" + "binomialP|binomialQ|invBinomialP|invBinomialQ|" + "hertzToBark|barkToHerz|" + "hertzToMel|melToHertz|" + "hertzToSemitones|semitonesToHerz|" + "erb|hertzToErb|erbToHertz|" + "phonToDifferenceLimens|differenceLimensToPhon|" + "beta|besselI|besselK|" + "selected|selected\\$|numberOfSelected|variableExists|"+ "index|rindex|startsWith|endsWith|"+ "index_regex|rindex_regex|replace_regex\\$|"+ "length|extractWord\\$|extractLine\\$|extractNumber|" + "left\\$|right\\$|mid\\$|replace\\$|" + "beginPause|endPause|" + "demoShow|demoWindowTitle|demoInput|demoWaitForInput|" + "demoClicked|demoClickedIn|demoX|demoY|" + "demoKeyPressed|demoKey\\$|" + "demoExtraControlKeyPressed|demoShiftKeyPressed|"+ "demoCommandKeyPressed|demoOptionKeyPressed|" + "environment\\$|chooseReadFile\\$|" + "chooseDirectory\\$|createDirectory|fileReadable|deleteFile|" + "selectObject|removeObject|plusObject|minusObject|" + "runScript|exitScript|" + "beginSendPraat|endSendPraat" ); var objectTypes = ( "Activation|AffineTransform|AmplitudeTier|Art|Artword|Autosegment|" + "BarkFilter|CCA|Categories|Cepstrum|Cepstrumc|ChebyshevSeries|" + "ClassificationTable|Cochleagram|Collection|Configuration|" + "Confusion|ContingencyTable|Corpus|Correlation|Covariance|" + "CrossCorrelationTable|CrossCorrelationTables|DTW|Diagonalizer|" + "Discriminant|Dissimilarity|Distance|Distributions|DurationTier|" + "EEG|ERP|ERPTier|Eigen|Excitation|Excitations|ExperimentMFC|FFNet|" + "FeatureWeights|Formant|FormantFilter|FormantGrid|FormantPoint|" + "FormantTier|GaussianMixture|HMM|HMM_Observation|" + "HMM_ObservationSequence|HMM_State|HMM_StateSequence|Harmonicity|" + "ISpline|Index|Intensity|IntensityTier|IntervalTier|KNN|KlattGrid|" + "KlattTable|LFCC|LPC|Label|LegendreSeries|LinearRegression|" + "LogisticRegression|LongSound|Ltas|MFCC|MSpline|ManPages|" + "Manipulation|Matrix|MelFilter|MixingMatrix|Movie|Network|" + "OTGrammar|OTHistory|OTMulti|PCA|PairDistribution|ParamCurve|" + "Pattern|Permutation|Pitch|PitchTier|PointProcess|Polygon|" + "Polynomial|Procrustes|RealPoint|RealTier|ResultsMFC|Roots|SPINET|" + "SSCP|SVD|Salience|ScalarProduct|Similarity|SimpleString|" + "SortedSetOfString|Sound|Speaker|Spectrogram|Spectrum|SpectrumTier|" + "SpeechSynthesizer|SpellingChecker|Strings|StringsIndex|Table|" + "TableOfReal|TextGrid|TextInterval|TextPoint|TextTier|Tier|" + "Transition|VocalTract|Weight|WordList" ); this.$rules = { "start" : [ { token : "string.interpolated", regex : /'((?:[a-z][a-zA-Z0-9_]*)(?:\$|#|:[0-9]+)?)'/ }, { token : ["text", "text", "keyword.operator", "text", "keyword"], regex : /(^\s*)(?:([a-z][a-zA-Z0-9_]*\$?\s+)(=)(\s+))?(stopwatch)/ }, { token : ["text", "keyword", "text", "string"], regex : /(^\s*)(print(?:line)?|echo|exit|pause|sendpraat|include|execute)(\s+)(.*)/ }, { token : ["text", "keyword"], regex : "(^\\s*)(" + directives + ")$" }, { token : ["text", "keyword.operator", "text"], regex : /(\s+)((?:\+|-|\/|\*|<|>)=?|==?|!=|%|\^|\||and|or|not)(\s+)/ }, { token : ["text", "text", "keyword.operator", "text", "keyword", "text", "keyword"], regex : /(^\s*)(?:([a-z][a-zA-Z0-9_]*\$?\s+)(=)(\s+))?(?:((?:no)?warn|nocheck|noprogress)(\s+))?((?:[A-Z][^.:"]+)(?:$|(?:\.{3}|:)))/ }, { token : ["text", "keyword", "text", "keyword"], regex : /(^\s*)(?:(demo)?(\s+))((?:[A-Z][^.:"]+)(?:$|(?:\.{3}|:)))/ }, { token : ["text", "keyword", "text", "keyword"], regex : /^(\s*)(?:(demo)(\s+))?(10|12|14|16|24)$/ }, { token : ["text", "support.function", "text"], regex : /(\s*)(do\$?)(\s*:\s*|\s*\(\s*)/ }, { token : "entity.name.type", regex : "(" + objectTypes + ")" }, { token : "variable.language", regex : "(" + predefinedVariables + ")" }, { token : ["support.function", "text"], regex : "((?:" + functions + ")\\$?)(\\s*(?::|\\())" }, { token : "keyword", regex : /(\bfor\b)/, next : "for" }, { token : "keyword", regex : "(\\b(?:" + keywords + ")\\b)" }, { token : "string", regex : /"[^"]*"/ }, { token : "string", regex : /"[^"]*$/, next : "brokenstring" }, { token : ["text", "keyword", "text", "entity.name.section"], regex : /(^\s*)(\bform\b)(\s+)(.*)/, next : "form" }, { token : "constant.numeric", regex : /\b[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : ["keyword", "text", "entity.name.function"], regex : /(procedure)(\s+)(\S+)/ }, { token : ["entity.name.function", "text"], regex : /(@\S+)(:|\s*\()/ }, { token : ["text", "keyword", "text", "entity.name.function"], regex : /(^\s*)(call)(\s+)(\S+)/ }, { token : "comment", regex : /(^\s*#|;).*$/ }, { token : "text", regex : /\s+/ } ], "form" : [ { token : ["keyword", "text", "constant.numeric"], regex : /((?:optionmenu|choice)\s+)(\S+:\s+)([0-9]+)/ }, { token : ["keyword", "constant.numeric"], regex : /((?:option|button)\s+)([+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b)/ }, { token : ["keyword", "string"], regex : /((?:option|button)\s+)(.*)/ }, { token : ["keyword", "text", "string"], regex : /((?:sentence|text)\s+)(\S+\s*)(.*)/ }, { token : ["keyword", "text", "string", "invalid.illegal"], regex : /(word\s+)(\S+\s*)(\S+)?(\s.*)?/ }, { token : ["keyword", "text", "constant.language"], regex : /(boolean\s+)(\S+\s*)(0|1|"?(?:yes|no)"?)/ }, { token : ["keyword", "text", "constant.numeric"], regex : /((?:real|natural|positive|integer)\s+)(\S+\s*)([+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b)/ }, { token : ["keyword", "string"], regex : /(comment\s+)(.*)/ }, { token : "keyword", regex : 'endform', next : "start" } ], "for" : [ { token : ["keyword", "text", "constant.numeric", "text"], regex : /(from|to)(\s+)([+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?)(\s*)/ }, { token : ["keyword", "text"], regex : /(from|to)(\s+\S+\s*)/ }, { token : "text", regex : /$/, next : "start" } ], "brokenstring" : [ { token : ["text", "string"], regex : /(\s*\.{3})([^"]*)/ }, { token : "string", regex : /"/, next : "start" } ], }; }; oop.inherits(PraatHighlightRules, TextHighlightRules); exports.PraatHighlightRules = PraatHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/praat",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/praat_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var PraatHighlightRules = require("./praat_highlight_rules").PraatHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = PraatHighlightRules; this.$outdent = new MatchingBraceOutdent(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[\:]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/praat"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-prolog.js ================================================ ace.define("ace/mode/prolog_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var PrologHighlightRules = function() { this.$rules = { start: [ { include: '#comment' }, { include: '#basic_fact' }, { include: '#rule' }, { include: '#directive' }, { include: '#fact' } ], '#atom': [ { token: 'constant.other.atom.prolog', regex: '\\b[a-z][a-zA-Z0-9_]*\\b' }, { token: 'constant.numeric.prolog', regex: '-?\\d+(?:\\.\\d+)?' }, { include: '#string' } ], '#basic_elem': [ { include: '#comment' }, { include: '#statement' }, { include: '#constants' }, { include: '#operators' }, { include: '#builtins' }, { include: '#list' }, { include: '#atom' }, { include: '#variable' } ], '#basic_fact': [ { token: [ 'entity.name.function.fact.basic.prolog', 'punctuation.end.fact.basic.prolog' ], regex: '([a-z]\\w*)(\\.)' } ], '#builtins': [ { token: 'support.function.builtin.prolog', regex: '\\b(?:abolish|abort|ancestors|arg|ascii|assert[az]|atom(?:ic)?|body|char|close|conc|concat|consult|define|definition|dynamic|dump|fail|file|free|free_proc|functor|getc|goal|halt|head|head|integer|length|listing|match_args|member|next_clause|nl|nonvar|nth|number|cvars|nvars|offset|op|print?|prompt|putc|quoted|ratom|read|redefine|rename|retract(?:all)?|see|seeing|seen|skip|spy|statistics|system|tab|tell|telling|term|time|told|univ|unlink_clause|unspy_predicate|var|write)\\b' } ], '#comment': [ { token: [ 'punctuation.definition.comment.prolog', 'comment.line.percentage.prolog' ], regex: '(%)(.*$)' }, { token: 'punctuation.definition.comment.prolog', regex: '/\\*', push: [ { token: 'punctuation.definition.comment.prolog', regex: '\\*/', next: 'pop' }, { defaultToken: 'comment.block.prolog' } ] } ], '#constants': [ { token: 'constant.language.prolog', regex: '\\b(?:true|false|yes|no)\\b' } ], '#directive': [ { token: 'keyword.operator.directive.prolog', regex: ':-', push: [ { token: 'meta.directive.prolog', regex: '\\.', next: 'pop' }, { include: '#comment' }, { include: '#statement' }, { defaultToken: 'meta.directive.prolog' } ] } ], '#expr': [ { include: '#comments' }, { token: 'meta.expression.prolog', regex: '\\(', push: [ { token: 'meta.expression.prolog', regex: '\\)', next: 'pop' }, { include: '#expr' }, { defaultToken: 'meta.expression.prolog' } ] }, { token: 'keyword.control.cutoff.prolog', regex: '!' }, { token: 'punctuation.control.and.prolog', regex: ',' }, { token: 'punctuation.control.or.prolog', regex: ';' }, { include: '#basic_elem' } ], '#fact': [ { token: [ 'entity.name.function.fact.prolog', 'punctuation.begin.fact.parameters.prolog' ], regex: '([a-z]\\w*)(\\()(?!.*:-)', push: [ { token: [ 'punctuation.end.fact.parameters.prolog', 'punctuation.end.fact.prolog' ], regex: '(\\))(\\.?)', next: 'pop' }, { include: '#parameter' }, { defaultToken: 'meta.fact.prolog' } ] } ], '#list': [ { token: 'punctuation.begin.list.prolog', regex: '\\[(?=.*\\])', push: [ { token: 'punctuation.end.list.prolog', regex: '\\]', next: 'pop' }, { include: '#comment' }, { token: 'punctuation.separator.list.prolog', regex: ',' }, { token: 'punctuation.concat.list.prolog', regex: '\\|', push: [ { token: 'meta.list.concat.prolog', regex: '(?=\\s*\\])', next: 'pop' }, { include: '#basic_elem' }, { defaultToken: 'meta.list.concat.prolog' } ] }, { include: '#basic_elem' }, { defaultToken: 'meta.list.prolog' } ] } ], '#operators': [ { token: 'keyword.operator.prolog', regex: '\\\\\\+|\\bnot\\b|\\bis\\b|->|[><]|[><\\\\:=]?=|(?:=\\\\|\\\\=)=' } ], '#parameter': [ { token: 'variable.language.anonymous.prolog', regex: '\\b_\\b' }, { token: 'variable.parameter.prolog', regex: '\\b[A-Z_]\\w*\\b' }, { token: 'punctuation.separator.parameters.prolog', regex: ',' }, { include: '#basic_elem' }, { token: 'text', regex: '[^\\s]' } ], '#rule': [ { token: 'meta.rule.prolog', regex: '(?=[a-z]\\w*.*:-)', push: [ { token: 'punctuation.rule.end.prolog', regex: '\\.', next: 'pop' }, { token: 'meta.rule.signature.prolog', regex: '(?=[a-z]\\w*.*:-)', push: [ { token: 'meta.rule.signature.prolog', regex: '(?=:-)', next: 'pop' }, { token: 'entity.name.function.rule.prolog', regex: '[a-z]\\w*(?=\\(|\\s*:-)' }, { token: 'punctuation.rule.parameters.begin.prolog', regex: '\\(', push: [ { token: 'punctuation.rule.parameters.end.prolog', regex: '\\)', next: 'pop' }, { include: '#parameter' }, { defaultToken: 'meta.rule.parameters.prolog' } ] }, { defaultToken: 'meta.rule.signature.prolog' } ] }, { token: 'keyword.operator.definition.prolog', regex: ':-', push: [ { token: 'meta.rule.definition.prolog', regex: '(?=\\.)', next: 'pop' }, { include: '#comment' }, { include: '#expr' }, { defaultToken: 'meta.rule.definition.prolog' } ] }, { defaultToken: 'meta.rule.prolog' } ] } ], '#statement': [ { token: 'meta.statement.prolog', regex: '(?=[a-z]\\w*\\()', push: [ { token: 'punctuation.end.statement.parameters.prolog', regex: '\\)', next: 'pop' }, { include: '#builtins' }, { include: '#atom' }, { token: 'punctuation.begin.statement.parameters.prolog', regex: '\\(', push: [ { token: 'meta.statement.parameters.prolog', regex: '(?=\\))', next: 'pop' }, { token: 'punctuation.separator.statement.prolog', regex: ',' }, { include: '#basic_elem' }, { defaultToken: 'meta.statement.parameters.prolog' } ] }, { defaultToken: 'meta.statement.prolog' } ] } ], '#string': [ { token: 'punctuation.definition.string.begin.prolog', regex: '\'', push: [ { token: 'punctuation.definition.string.end.prolog', regex: '\'', next: 'pop' }, { token: 'constant.character.escape.prolog', regex: '\\\\.' }, { token: 'constant.character.escape.quote.prolog', regex: '\'\'' }, { defaultToken: 'string.quoted.single.prolog' } ] } ], '#variable': [ { token: 'variable.language.anonymous.prolog', regex: '\\b_\\b' }, { token: 'variable.other.prolog', regex: '\\b[A-Z_][a-zA-Z0-9_]*\\b' } ] } this.normalizeRules(); }; PrologHighlightRules.metaData = { fileTypes: [ 'plg', 'prolog' ], foldingStartMarker: '(%\\s*region \\w*)|([a-z]\\w*.*:- ?)', foldingStopMarker: '(%\\s*end(\\s*region)?)|(?=\\.)', keyEquivalent: '^~P', name: 'Prolog', scopeName: 'source.prolog' } oop.inherits(PrologHighlightRules, TextHighlightRules); exports.PrologHighlightRules = PrologHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/prolog",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/prolog_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var PrologHighlightRules = require("./prolog_highlight_rules").PrologHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = PrologHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "%"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/prolog"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-properties.js ================================================ ace.define("ace/mode/properties_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var PropertiesHighlightRules = function() { var escapeRe = /\\u[0-9a-fA-F]{4}|\\/; this.$rules = { "start" : [ { token : "comment", regex : /[!#].*$/ }, { token : "keyword", regex : /[=:]$/ }, { token : "keyword", regex : /[=:]/, next : "value" }, { token : "constant.language.escape", regex : escapeRe }, { defaultToken: "variable" } ], "value" : [ { regex : /\\$/, token : "string", next : "value" }, { regex : /$/, token : "string", next : "start" }, { token : "constant.language.escape", regex : escapeRe }, { defaultToken: "string" } ] }; }; oop.inherits(PropertiesHighlightRules, TextHighlightRules); exports.PropertiesHighlightRules = PropertiesHighlightRules; }); ace.define("ace/mode/properties",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/properties_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var PropertiesHighlightRules = require("./properties_highlight_rules").PropertiesHighlightRules; var Mode = function() { this.HighlightRules = PropertiesHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.$id = "ace/mode/properties"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-protobuf.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var cFunctions = exports.cFunctions = "\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\b" var c_cppHighlightRules = function() { var keywordControls = ( "break|case|continue|default|do|else|for|goto|if|_Pragma|" + "return|switch|while|catch|operator|try|throw|using" ); var storageType = ( "asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|" + "_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|" + "class|wchar_t|template" ); var storageModifiers = ( "const|extern|register|restrict|static|volatile|inline|private|" + "protected|public|friend|explicit|virtual|export|mutable|typename|" + "constexpr|new|delete" ); var keywordOperators = ( "and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq" + "const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace" ); var builtinConstants = ( "NULL|true|false|TRUE|FALSE" ); var keywordMapper = this.$keywords = this.createKeywordMapper({ "keyword.control" : keywordControls, "storage.type" : storageType, "storage.modifier" : storageModifiers, "keyword.operator" : keywordOperators, "variable.language": "this", "constant.language": builtinConstants }, "identifier"); var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\d\\$_\u00a1-\uffff]*\\b"; this.$rules = { "start" : [ { token : "comment", regex : "//", next : "singleLineComment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '["].*\\\\$', next : "qqstring" }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "string", // multi line string start regex : "['].*\\\\$", next : "qstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, { token : "keyword", // pre-compiler directives regex : "#\\s*(?:include|import|pragma|line|define|undef|if|ifdef|else|elif|ifndef)\\b", next : "directive" }, { token : "keyword", // special case pre-compiler directive regex : "(?:#\\s*endif)\\b" }, { token : "support.function.C99.c", regex : cFunctions }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)" }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\." }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "singleLineComment" : [ { token : "comment", regex : /\\$/, next : "singleLineComment" }, { token : "comment", regex : /$/, next : "start" }, { defaultToken: "comment" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { defaultToken : "string" } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { defaultToken : "string" } ], "directive" : [ { token : "constant.other.multiline", regex : /\\/ }, { token : "constant.other.multiline", regex : /.*\\/ }, { token : "constant.other", regex : "\\s*<.+?>", next : "start" }, { token : "constant.other", // single line regex : '\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]', next : "start" }, { token : "constant.other", // single line regex : "\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']", next : "start" }, { token : "constant.other", regex : /[^\\\/]+/, next : "start" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(c_cppHighlightRules, TextHighlightRules); exports.c_cppHighlightRules = c_cppHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = c_cppHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/c_cpp"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/protobuf_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ProtobufHighlightRules = function() { var builtinTypes = "double|float|int32|int64|uint32|uint64|sint32|" + "sint64|fixed32|fixed64|sfixed32|sfixed64|bool|" + "string|bytes"; var keywordDeclaration = "message|required|optional|repeated|package|" + "import|option|enum"; var keywordMapper = this.createKeywordMapper({ "keyword.declaration.protobuf": keywordDeclaration, "support.type": builtinTypes }, "identifier"); this.$rules = { "start": [{ token: "comment", regex: /\/\/.*$/ }, { token: "comment", regex: /\/\*/, next: "comment" }, { token: "constant", regex: "<[^>]+>" }, { regex: "=", token: "keyword.operator.assignment.protobuf" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : '[\'](?:(?:\\\\.)|(?:[^\'\\\\]))*?[\']' }, { token: "constant.numeric", // hex regex: "0[xX][0-9a-fA-F]+\\b" }, { token: "constant.numeric", // float regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token: keywordMapper, regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }], "comment": [{ token: "comment", // closing comment regex: ".*?\\*\\/", next: "start" }, { token: "comment", // comment spanning whole line regex: ".+" }] }; this.normalizeRules(); }; oop.inherits(ProtobufHighlightRules, TextHighlightRules); exports.ProtobufHighlightRules = ProtobufHighlightRules; }); ace.define("ace/mode/protobuf",["require","exports","module","ace/lib/oop","ace/mode/c_cpp","ace/mode/protobuf_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var CMode = require("./c_cpp").Mode; var ProtobufHighlightRules = require("./protobuf_highlight_rules").ProtobufHighlightRules; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { CMode.call(this); this.foldingRules = new CStyleFoldMode(); this.HighlightRules = ProtobufHighlightRules; }; oop.inherits(Mode, CMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/protobuf"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-python.js ================================================ ace.define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var PythonHighlightRules = function() { var keywords = ( "and|as|assert|break|class|continue|def|del|elif|else|except|exec|" + "finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|" + "raise|return|try|while|with|yield" ); var builtinConstants = ( "True|False|None|NotImplemented|Ellipsis|__debug__" ); var builtinFunctions = ( "abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|" + "eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|" + "binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|" + "float|list|raw_input|unichr|callable|format|locals|reduce|unicode|" + "chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|" + "cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|" + "__import__|complex|hash|min|set|apply|delattr|help|next|setattr|" + "buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern" ); var keywordMapper = this.createKeywordMapper({ "invalid.deprecated": "debugger", "support.function": builtinFunctions, "constant.language": builtinConstants, "keyword": keywords }, "identifier"); var strPre = "(?:r|u|ur|R|U|UR|Ur|uR)?"; var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))"; var octInteger = "(?:0[oO]?[0-7]+)"; var hexInteger = "(?:0[xX][\\dA-Fa-f]+)"; var binInteger = "(?:0[bB][01]+)"; var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")"; var exponent = "(?:[eE][+-]?\\d+)"; var fraction = "(?:\\.\\d+)"; var intPart = "(?:\\d+)"; var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))"; var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + exponent + ")"; var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")"; var stringEscape = "\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})"; this.$rules = { "start" : [ { token : "comment", regex : "#.*$" }, { token : "string", // multi line """ string start regex : strPre + '"{3}', next : "qqstring3" }, { token : "string", // " string regex : strPre + '"(?=.)', next : "qqstring" }, { token : "string", // multi line ''' string start regex : strPre + "'{3}", next : "qstring3" }, { token : "string", // ' string regex : strPre + "'(?=.)", next : "qstring" }, { token : "constant.numeric", // imaginary regex : "(?:" + floatNumber + "|\\d+)[jJ]\\b" }, { token : "constant.numeric", // float regex : floatNumber }, { token : "constant.numeric", // long integer regex : integer + "[lL]\\b" }, { token : "constant.numeric", // integer regex : integer + "\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|=" }, { token : "paren.lparen", regex : "[\\[\\(\\{]" }, { token : "paren.rparen", regex : "[\\]\\)\\}]" }, { token : "text", regex : "\\s+" } ], "qqstring3" : [ { token : "constant.language.escape", regex : stringEscape }, { token : "string", // multi line """ string end regex : '"{3}', next : "start" }, { defaultToken : "string" } ], "qstring3" : [ { token : "constant.language.escape", regex : stringEscape }, { token : "string", // multi line ''' string end regex : "'{3}", next : "start" }, { defaultToken : "string" } ], "qqstring" : [{ token : "constant.language.escape", regex : stringEscape }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "start" }, { defaultToken: "string" }], "qstring" : [{ token : "constant.language.escape", regex : stringEscape }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "start" }, { defaultToken: "string" }] }; }; oop.inherits(PythonHighlightRules, TextHighlightRules); exports.PythonHighlightRules = PythonHighlightRules; }); ace.define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(markers) { this.foldingStartMarker = new RegExp("([\\[{])(?:\\s*)$|(" + markers + ")(?:\\s*)(?:#.*)?$"); }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var line = session.getLine(row); var match = line.match(this.foldingStartMarker); if (match) { if (match[1]) return this.openingBracketBlock(session, match[1], row, match.index); if (match[2]) return this.indentationBlock(session, row, match.index + match[2].length); return this.indentationBlock(session, row); } } }).call(FoldMode.prototype); }); ace.define("ace/mode/python",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/python_highlight_rules","ace/mode/folding/pythonic","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var PythonHighlightRules = require("./python_highlight_rules").PythonHighlightRules; var PythonFoldMode = require("./folding/pythonic").FoldMode; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = PythonHighlightRules; this.foldingRules = new PythonFoldMode("\\:"); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[\:]\s*$/); if (match) { indent += tab; } } return indent; }; var outdents = { "pass": 1, "return": 1, "raise": 1, "break": 1, "continue": 1 }; this.checkOutdent = function(state, line, input) { if (input !== "\r\n" && input !== "\r" && input !== "\n") return false; var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens; if (!tokens) return false; do { var last = tokens.pop(); } while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/)))); if (!last) return false; return (last.type == "keyword" && outdents[last.value]); }; this.autoOutdent = function(state, doc, row) { row += 1; var indent = this.$getIndent(doc.getLine(row)); var tab = doc.getTabString(); if (indent.slice(-tab.length) == tab) doc.remove(new Range(row, indent.length-tab.length, row, indent.length)); }; this.$id = "ace/mode/python"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-r.js ================================================ ace.define("ace/mode/tex_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var TexHighlightRules = function(textClass) { if (!textClass) textClass = "text"; this.$rules = { "start" : [ { token : "comment", regex : "%.*$" }, { token : textClass, // non-command regex : "\\\\[$&%#\\{\\}]" }, { token : "keyword", // command regex : "\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b", next : "nospell" }, { token : "keyword", // command regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])" }, { token : "paren.keyword.operator", regex : "[[({]" }, { token : "paren.keyword.operator", regex : "[\\])}]" }, { token : textClass, regex : "\\s+" } ], "nospell" : [ { token : "comment", regex : "%.*$", next : "start" }, { token : "nospell." + textClass, // non-command regex : "\\\\[$&%#\\{\\}]" }, { token : "keyword", // command regex : "\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b" }, { token : "keyword", // command regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])", next : "start" }, { token : "paren.keyword.operator", regex : "[[({]" }, { token : "paren.keyword.operator", regex : "[\\])]" }, { token : "paren.keyword.operator", regex : "}", next : "start" }, { token : "nospell." + textClass, regex : "\\s+" }, { token : "nospell." + textClass, regex : "\\w+" } ] }; }; oop.inherits(TexHighlightRules, TextHighlightRules); exports.TexHighlightRules = TexHighlightRules; }); ace.define("ace/mode/r_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/tex_highlight_rules"], function(require, exports, module) { var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var TexHighlightRules = require("./tex_highlight_rules").TexHighlightRules; var RHighlightRules = function() { var keywords = lang.arrayToMap( ("function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass") .split("|") ); var buildinConstants = lang.arrayToMap( ("NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|" + "NA_complex_").split("|") ); this.$rules = { "start" : [ { token : "comment.sectionhead", regex : "#+(?!').*(?:----|====|####)\\s*$" }, { token : "comment", regex : "#+'", next : "rd-start" }, { token : "comment", regex : "#.*$" }, { token : "string", // multi line string start regex : '["]', next : "qqstring" }, { token : "string", // multi line string start regex : "[']", next : "qstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+[Li]?\\b" }, { token : "constant.numeric", // explicit integer regex : "\\d+L\\b" }, { token : "constant.numeric", // number regex : "\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b" }, { token : "constant.numeric", // number with leading decimal regex : "\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b" }, { token : "constant.language.boolean", regex : "(?:TRUE|FALSE|T|F)\\b" }, { token : "identifier", regex : "`.*?`" }, { onMatch : function(value) { if (keywords[value]) return "keyword"; else if (buildinConstants[value]) return "constant.language"; else if (value == '...' || value.match(/^\.\.\d+$/)) return "variable.language"; else return "identifier"; }, regex : "[a-zA-Z.][a-zA-Z0-9._]*\\b" }, { token : "keyword.operator", regex : "%%|>=|<=|==|!=|\\->|<\\-|\\|\\||&&|=|\\+|\\-|\\*|/|\\^|>|<|!|&|\\||~|\\$|:" }, { token : "keyword.operator", // infix operators regex : "%.*?%" }, { token : "paren.keyword.operator", regex : "[[({]" }, { token : "paren.keyword.operator", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { token : "string", regex : '.+' } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { token : "string", regex : '.+' } ] }; var rdRules = new TexHighlightRules("comment").getRules(); for (var i = 0; i < rdRules["start"].length; i++) { rdRules["start"][i].token += ".virtual-comment"; } this.addRules(rdRules, "rd-"); this.$rules["rd-start"].unshift({ token: "text", regex: "^", next: "start" }); this.$rules["rd-start"].unshift({ token : "keyword", regex : "@(?!@)[^ ]*" }); this.$rules["rd-start"].unshift({ token : "comment", regex : "@@" }); this.$rules["rd-start"].push({ token : "comment", regex : "[^%\\\\[({\\])}]+" }); }; oop.inherits(RHighlightRules, TextHighlightRules); exports.RHighlightRules = RHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/r",["require","exports","module","ace/range","ace/lib/oop","ace/mode/text","ace/mode/text_highlight_rules","ace/mode/r_highlight_rules","ace/mode/matching_brace_outdent","ace/unicode"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var RHighlightRules = require("./r_highlight_rules").RHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var unicode = require("../unicode"); var Mode = function() { this.HighlightRules = RHighlightRules; this.$outdent = new MatchingBraceOutdent(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.$id = "ace/mode/r"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-rdoc.js ================================================ ace.define("ace/mode/latex_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var LatexHighlightRules = function() { this.$rules = { "start" : [{ token : "comment", regex : "%.*$" }, { token : ["keyword", "lparen", "variable.parameter", "rparen", "lparen", "storage.type", "rparen"], regex : "(\\\\(?:documentclass|usepackage|input))(?:(\\[)([^\\]]*)(\\]))?({)([^}]*)(})" }, { token : ["keyword","lparen", "variable.parameter", "rparen"], regex : "(\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?" }, { token : ["storage.type", "lparen", "variable.parameter", "rparen"], regex : "(\\\\(?:begin|end))({)(\\w*)(})" }, { token : "storage.type", regex : "\\\\[a-zA-Z]+" }, { token : "lparen", regex : "[[({]" }, { token : "rparen", regex : "[\\])}]" }, { token : "constant.character.escape", regex : "\\\\[^a-zA-Z]?" }, { token : "string", regex : "\\${1,2}", next : "equation" }], "equation" : [{ token : "comment", regex : "%.*$" }, { token : "string", regex : "\\${1,2}", next : "start" }, { token : "constant.character.escape", regex : "\\\\(?:[^a-zA-Z]|[a-zA-Z]+)" }, { token : "error", regex : "^\\s*$", next : "start" }, { defaultToken : "string" }] }; }; oop.inherits(LatexHighlightRules, TextHighlightRules); exports.LatexHighlightRules = LatexHighlightRules; }); ace.define("ace/mode/rdoc_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/latex_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var LaTeXHighlightRules = require("./latex_highlight_rules"); var RDocHighlightRules = function() { this.$rules = { "start" : [ { token : "comment", regex : "%.*$" }, { token : "text", // non-command regex : "\\\\[$&%#\\{\\}]" }, { token : "keyword", // command regex : "\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\b", next : "nospell" }, { token : "keyword", // command regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])" }, { token : "paren.keyword.operator", regex : "[[({]" }, { token : "paren.keyword.operator", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "nospell" : [ { token : "comment", regex : "%.*$", next : "start" }, { token : "nospell.text", // non-command regex : "\\\\[$&%#\\{\\}]" }, { token : "keyword", // command regex : "\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\b" }, { token : "keyword", // command regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])", next : "start" }, { token : "paren.keyword.operator", regex : "[[({]" }, { token : "paren.keyword.operator", regex : "[\\])]" }, { token : "paren.keyword.operator", regex : "}", next : "start" }, { token : "nospell.text", regex : "\\s+" }, { token : "nospell.text", regex : "\\w+" } ] }; }; oop.inherits(RDocHighlightRules, TextHighlightRules); exports.RDocHighlightRules = RDocHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/rdoc",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/text_highlight_rules","ace/mode/rdoc_highlight_rules","ace/mode/matching_brace_outdent"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var RDocHighlightRules = require("./rdoc_highlight_rules").RDocHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Mode = function(suppressHighlighting) { this.HighlightRules = RDocHighlightRules; this.$outdent = new MatchingBraceOutdent(); }; oop.inherits(Mode, TextMode); (function() { this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.$id = "ace/mode/rdoc"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-rhtml.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/tex_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var TexHighlightRules = function(textClass) { if (!textClass) textClass = "text"; this.$rules = { "start" : [ { token : "comment", regex : "%.*$" }, { token : textClass, // non-command regex : "\\\\[$&%#\\{\\}]" }, { token : "keyword", // command regex : "\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b", next : "nospell" }, { token : "keyword", // command regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])" }, { token : "paren.keyword.operator", regex : "[[({]" }, { token : "paren.keyword.operator", regex : "[\\])}]" }, { token : textClass, regex : "\\s+" } ], "nospell" : [ { token : "comment", regex : "%.*$", next : "start" }, { token : "nospell." + textClass, // non-command regex : "\\\\[$&%#\\{\\}]" }, { token : "keyword", // command regex : "\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b" }, { token : "keyword", // command regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])", next : "start" }, { token : "paren.keyword.operator", regex : "[[({]" }, { token : "paren.keyword.operator", regex : "[\\])]" }, { token : "paren.keyword.operator", regex : "}", next : "start" }, { token : "nospell." + textClass, regex : "\\s+" }, { token : "nospell." + textClass, regex : "\\w+" } ] }; }; oop.inherits(TexHighlightRules, TextHighlightRules); exports.TexHighlightRules = TexHighlightRules; }); ace.define("ace/mode/r_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/tex_highlight_rules"], function(require, exports, module) { var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var TexHighlightRules = require("./tex_highlight_rules").TexHighlightRules; var RHighlightRules = function() { var keywords = lang.arrayToMap( ("function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass") .split("|") ); var buildinConstants = lang.arrayToMap( ("NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|" + "NA_complex_").split("|") ); this.$rules = { "start" : [ { token : "comment.sectionhead", regex : "#+(?!').*(?:----|====|####)\\s*$" }, { token : "comment", regex : "#+'", next : "rd-start" }, { token : "comment", regex : "#.*$" }, { token : "string", // multi line string start regex : '["]', next : "qqstring" }, { token : "string", // multi line string start regex : "[']", next : "qstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+[Li]?\\b" }, { token : "constant.numeric", // explicit integer regex : "\\d+L\\b" }, { token : "constant.numeric", // number regex : "\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b" }, { token : "constant.numeric", // number with leading decimal regex : "\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b" }, { token : "constant.language.boolean", regex : "(?:TRUE|FALSE|T|F)\\b" }, { token : "identifier", regex : "`.*?`" }, { onMatch : function(value) { if (keywords[value]) return "keyword"; else if (buildinConstants[value]) return "constant.language"; else if (value == '...' || value.match(/^\.\.\d+$/)) return "variable.language"; else return "identifier"; }, regex : "[a-zA-Z.][a-zA-Z0-9._]*\\b" }, { token : "keyword.operator", regex : "%%|>=|<=|==|!=|\\->|<\\-|\\|\\||&&|=|\\+|\\-|\\*|/|\\^|>|<|!|&|\\||~|\\$|:" }, { token : "keyword.operator", // infix operators regex : "%.*?%" }, { token : "paren.keyword.operator", regex : "[[({]" }, { token : "paren.keyword.operator", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { token : "string", regex : '.+' } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { token : "string", regex : '.+' } ] }; var rdRules = new TexHighlightRules("comment").getRules(); for (var i = 0; i < rdRules["start"].length; i++) { rdRules["start"][i].token += ".virtual-comment"; } this.addRules(rdRules, "rd-"); this.$rules["rd-start"].unshift({ token: "text", regex: "^", next: "start" }); this.$rules["rd-start"].unshift({ token : "keyword", regex : "@(?!@)[^ ]*" }); this.$rules["rd-start"].unshift({ token : "comment", regex : "@@" }); this.$rules["rd-start"].push({ token : "comment", regex : "[^%\\\\[({\\])}]+" }); }; oop.inherits(RHighlightRules, TextHighlightRules); exports.RHighlightRules = RHighlightRules; }); ace.define("ace/mode/rhtml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/r_highlight_rules","ace/mode/html_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var RHighlightRules = require("./r_highlight_rules").RHighlightRules; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var RHtmlHighlightRules = function() { HtmlHighlightRules.call(this); this.$rules["start"].unshift({ token: "support.function.codebegin", regex: "^<" + "!--\\s*begin.rcode\\s*(?:.*)", next: "r-start" }); this.embedRules(RHighlightRules, "r-", [{ token: "support.function.codeend", regex: "^\\s*end.rcode\\s*-->", next: "start" }], ["start"]); this.normalizeRules(); }; oop.inherits(RHtmlHighlightRules, TextHighlightRules); exports.RHtmlHighlightRules = RHtmlHighlightRules; }); ace.define("ace/mode/rhtml",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/rhtml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlMode = require("./html").Mode; var RHtmlHighlightRules = require("./rhtml_highlight_rules").RHtmlHighlightRules; var Mode = function(doc, session) { HtmlMode.call(this); this.$session = session; this.HighlightRules = RHtmlHighlightRules; }; oop.inherits(Mode, HtmlMode); (function() { this.insertChunkInfo = { value: "\n", position: {row: 0, column: 15} }; this.getLanguageMode = function(position) { return this.$session.getState(position.row).match(/^r-/) ? 'R' : 'HTML'; }; this.$id = "ace/mode/rhtml"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-ruby.js ================================================ ace.define("ace/mode/ruby_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var constantOtherSymbol = exports.constantOtherSymbol = { token : "constant.other.symbol.ruby", // symbol regex : "[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?" }; var qString = exports.qString = { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }; var qqString = exports.qqString = { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }; var tString = exports.tString = { token : "string", // backtick string regex : "[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]" }; var constantNumericHex = exports.constantNumericHex = { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b" }; var constantNumericFloat = exports.constantNumericFloat = { token : "constant.numeric", // float regex : "[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b" }; var RubyHighlightRules = function() { var builtinFunctions = ( "abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|" + "assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|" + "assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|" + "assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|" + "assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|" + "assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|" + "attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|" + "caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|" + "exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|" + "gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|" + "link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|" + "p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|" + "raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|" + "set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|" + "throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|" + "render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|" + "content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|" + "fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|" + "time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|" + "select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|" + "file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|" + "protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|" + "send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|" + "validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|" + "validates_inclusion_of|validates_numericality_of|validates_with|validates_each|" + "authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|" + "filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|" + "translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|" + "cache|expire_fragment|expire_cache_for|observe|cache_sweeper|" + "has_many|has_one|belongs_to|has_and_belongs_to_many" ); var keywords = ( "alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|" + "__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|" + "redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield" ); var buildinConstants = ( "true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|" + "RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING" ); var builtinVariables = ( "\$DEBUG|\$defout|\$FILENAME|\$LOAD_PATH|\$SAFE|\$stdin|\$stdout|\$stderr|\$VERBOSE|" + "$!|root_url|flash|session|cookies|params|request|response|logger|self" ); var keywordMapper = this.$keywords = this.createKeywordMapper({ "keyword": keywords, "constant.language": buildinConstants, "variable.language": builtinVariables, "support.function": builtinFunctions, "invalid.deprecated": "debugger" // TODO is this a remnant from js mode? }, "identifier"); this.$rules = { "start" : [ { token : "comment", regex : "#.*$" }, { token : "comment", // multi line comment regex : "^=begin(?:$|\\s.*$)", next : "comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)" }, [{ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren.lparen"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.start", regex : /"/, push : [{ token : "constant.language.escape", regex : /\\(?:[nsrtvfbae'"\\]|c.|C-.|M-.(?:\\C-.)?|[0-7]{3}|x[\da-fA-F]{2}|u[\da-fA-F]{4})/ }, { token : "paren.start", regex : /\#{/, push : "start" }, { token : "string.end", regex : /"/, next : "pop" }, { defaultToken: "string" }] }, { token : "string.start", regex : /`/, push : [{ token : "constant.language.escape", regex : /\\(?:[nsrtvfbae'"\\]|c.|C-.|M-.(?:\\C-.)?|[0-7]{3}|x[\da-fA-F]{2}|u[\da-fA-F]{4})/ }, { token : "paren.start", regex : /\#{/, push : "start" }, { token : "string.end", regex : /`/, next : "pop" }, { defaultToken: "string" }] }, { token : "string.start", regex : /'/, push : [{ token : "constant.language.escape", regex : /\\['\\]/ }, { token : "string.end", regex : /'/, next : "pop" }, { defaultToken: "string" }] }], { token : "text", // namespaces aren't symbols regex : "::" }, { token : "variable.instance", // instance variable regex : "@{1,2}[a-zA-Z_\\d]+" }, { token : "support.class", // class name regex : "[A-Z][a-zA-Z_\\d]+" }, constantOtherSymbol, constantNumericHex, constantNumericFloat, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "punctuation.separator.key-value", regex : "=>" }, { stateName: "heredoc", onMatch : function(value, currentState, stack) { var next = value[2] == '-' ? "indentedHeredoc" : "heredoc"; var tokens = value.split(this.splitRegex); stack.push(next, tokens[3]); return [ {type:"constant", value: tokens[1]}, {type:"string", value: tokens[2]}, {type:"support.class", value: tokens[3]}, {type:"string", value: tokens[4]} ]; }, regex : "(<<-?)(['\"`]?)([\\w]+)(['\"`]?)", rules: { heredoc: [{ onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }], indentedHeredoc: [{ token: "string", regex: "^ +" }, { onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }] } }, { regex : "$", token : "empty", next : function(currentState, stack) { if (stack[0] === "heredoc" || stack[0] === "indentedHeredoc") return stack[0]; return currentState; } }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : "^=end(?:$|\\s.*$)", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ] }; this.normalizeRules(); }; oop.inherits(RubyHighlightRules, TextHighlightRules); exports.RubyHighlightRules = RubyHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/ruby",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/ruby_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var RubyHighlightRules = require("./ruby_highlight_rules").RubyHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = RubyHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); var startingClassOrMethod = line.match(/^\s*(class|def|module)\s.*$/); var startingDoBlock = line.match(/.*do(\s*|\s+\|.*\|\s*)$/); var startingConditional = line.match(/^\s*(if|else)\s*/) if (match || startingClassOrMethod || startingDoBlock || startingConditional) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return /^\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, session, row) { var line = session.getLine(row); if (/}/.test(line)) return this.$outdent.autoOutdent(session, row); var indent = this.$getIndent(line); var prevLine = session.getLine(row - 1); var prevIndent = this.$getIndent(prevLine); var tab = session.getTabString(); if (prevIndent.length <= indent.length) { if (indent.slice(-tab.length) == tab) session.remove(new Range(row, indent.length-tab.length, row, indent.length)); } }; this.$id = "ace/mode/ruby"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-rust.js ================================================ ace.define("ace/mode/rust_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var RustHighlightRules = function() { this.$rules = { start: [ { token: 'variable.other.source.rust', regex: '\'[a-zA-Z_][a-zA-Z0-9_]*[^\\\']' }, { token: 'string.quoted.single.source.rust', regex: '\'', push: [ { token: 'string.quoted.single.source.rust', regex: '\'', next: 'pop' }, { include: '#rust_escaped_character' }, { defaultToken: 'string.quoted.single.source.rust' } ] }, { stateName: "bracketedComment", onMatch : function(value, currentState, stack){ stack.unshift(this.next, value.length - 1, currentState); return "string.quoted.raw.source.rust"; }, regex : /r#*"/, next : [ { onMatch : function(value, currentState, stack) { var token = "string.quoted.raw.source.rust"; if (value.length >= stack[1]) { if (value.length > stack[1]) token = "invalid"; stack.shift(); stack.shift(); this.next = stack.shift(); } else { this.next = ""; } return token; }, regex : /"#*/, next : "start" }, { defaultToken : "string.quoted.raw.source.rust" } ] }, { token: 'string.quoted.double.source.rust', regex: '"', push: [ { token: 'string.quoted.double.source.rust', regex: '"', next: 'pop' }, { include: '#rust_escaped_character' }, { defaultToken: 'string.quoted.double.source.rust' } ] }, { token: [ 'keyword.source.rust', 'meta.function.source.rust', 'entity.name.function.source.rust', 'meta.function.source.rust' ], regex: '\\b(fn)(\\s+)([a-zA-Z_][a-zA-Z0-9_][\\w\\:,+ \\\'<>]*)(\\s*\\()' }, { token: 'support.constant', regex: '\\b[a-zA-Z_][\\w\\d]*::' }, { token: 'keyword.source.rust', regex: '\\b(?:as|assert|break|claim|const|copy|Copy|do|drop|else|extern|fail|for|if|impl|in|let|log|loop|match|mod|module|move|mut|Owned|priv|pub|pure|ref|return|unchecked|unsafe|use|while|mod|Send|static|trait|class|struct|enum|type)\\b' }, { token: 'storage.type.source.rust', regex: '\\b(?:Self|m32|m64|m128|f80|f16|f128|int|uint|float|char|bool|u8|u16|u32|u64|f32|f64|i8|i16|i32|i64|str|option|either|c_float|c_double|c_void|FILE|fpos_t|DIR|dirent|c_char|c_schar|c_uchar|c_short|c_ushort|c_int|c_uint|c_long|c_ulong|size_t|ptrdiff_t|clock_t|time_t|c_longlong|c_ulonglong|intptr_t|uintptr_t|off_t|dev_t|ino_t|pid_t|mode_t|ssize_t)\\b' }, { token: 'variable.language.source.rust', regex: '\\bself\\b' }, { token: 'keyword.operator', regex: '!|\\$|\\*|\\-\\-|\\-|\\+\\+|\\+|-->|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|/=|%=|\\+=|\\-=|&=|\\^=|,|;' }, { token: 'constant.language.source.rust', regex: '\\b(?:true|false|Some|None|Left|Right|Ok|Err)\\b' }, { token: 'support.constant.source.rust', regex: '\\b(?:EXIT_FAILURE|EXIT_SUCCESS|RAND_MAX|EOF|SEEK_SET|SEEK_CUR|SEEK_END|_IOFBF|_IONBF|_IOLBF|BUFSIZ|FOPEN_MAX|FILENAME_MAX|L_tmpnam|TMP_MAX|O_RDONLY|O_WRONLY|O_RDWR|O_APPEND|O_CREAT|O_EXCL|O_TRUNC|S_IFIFO|S_IFCHR|S_IFBLK|S_IFDIR|S_IFREG|S_IFMT|S_IEXEC|S_IWRITE|S_IREAD|S_IRWXU|S_IXUSR|S_IWUSR|S_IRUSR|F_OK|R_OK|W_OK|X_OK|STDIN_FILENO|STDOUT_FILENO|STDERR_FILENO)\\b' }, { token: 'meta.preprocessor.source.rust', regex: '\\b\\w\\(\\w\\)*!|#\\[[\\w=\\(\\)_]+\\]\\b' }, { token: 'constant.numeric.integer.source.rust', regex: '\\b(?:[0-9][0-9_]*|[0-9][0-9_]*(?:u|u8|u16|u32|u64)|[0-9][0-9_]*(?:i|i8|i16|i32|i64))\\b' }, { token: 'constant.numeric.hex.source.rust', regex: '\\b(?:0x[a-fA-F0-9_]+|0x[a-fA-F0-9_]+(?:u|u8|u16|u32|u64)|0x[a-fA-F0-9_]+(?:i|i8|i16|i32|i64))\\b' }, { token: 'constant.numeric.binary.source.rust', regex: '\\b(?:0b[01_]+|0b[01_]+(?:u|u8|u16|u32|u64)|0b[01_]+(?:i|i8|i16|i32|i64))\\b' }, { token: 'constant.numeric.float.source.rust', regex: '[0-9][0-9_]*(?:f32|f64|f)|[0-9][0-9_]*[eE][+-]=[0-9_]+|[0-9][0-9_]*[eE][+-]=[0-9_]+(?:f32|f64|f)|[0-9][0-9_]*\\.[0-9_]+|[0-9][0-9_]*\\.[0-9_]+(?:f32|f64|f)|[0-9][0-9_]*\\.[0-9_]+%[eE][+-]=[0-9_]+|[0-9][0-9_]*\\.[0-9_]+%[eE][+-]=[0-9_]+(?:f32|f64|f)' }, { token: 'comment.line.documentation.source.rust', regex: '//!.*$', push_: [ { token: 'comment.line.documentation.source.rust', regex: '$', next: 'pop' }, { defaultToken: 'comment.line.documentation.source.rust' } ] }, { token: 'comment.line.double-dash.source.rust', regex: '//.*$', push_: [ { token: 'comment.line.double-dash.source.rust', regex: '$', next: 'pop' }, { defaultToken: 'comment.line.double-dash.source.rust' } ] }, { token: 'comment.start.block.source.rust', regex: '/\\*', stateName: 'comment', push: [ { token: 'comment.start.block.source.rust', regex: '/\\*', push: 'comment' }, { token: 'comment.end.block.source.rust', regex: '\\*/', next: 'pop' }, { defaultToken: 'comment.block.source.rust' } ] } ], '#rust_escaped_character': [ { token: 'constant.character.escape.source.rust', regex: '\\\\(?:x[\\da-fA-F]{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)' } ] } this.normalizeRules(); }; RustHighlightRules.metaData = { fileTypes: [ 'rs', 'rc' ], foldingStartMarker: '^.*\\bfn\\s*(\\w+\\s*)?\\([^\\)]*\\)(\\s*\\{[^\\}]*)?\\s*$', foldingStopMarker: '^\\s*\\}', name: 'Rust', scopeName: 'source.rust' } oop.inherits(RustHighlightRules, TextHighlightRules); exports.RustHighlightRules = RustHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/rust",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/rust_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var RustHighlightRules = require("./rust_highlight_rules").RustHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = RustHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/rust"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-sass.js ================================================ ace.define("ace/mode/scss_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ScssHighlightRules = function() { var properties = lang.arrayToMap( (function () { var browserPrefix = ("-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-").split("|"); var prefixProperties = ("appearance|background-clip|background-inline-policy|background-origin|" + "background-size|binding|border-bottom-colors|border-left-colors|" + "border-right-colors|border-top-colors|border-end|border-end-color|" + "border-end-style|border-end-width|border-image|border-start|" + "border-start-color|border-start-style|border-start-width|box-align|" + "box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|" + "box-pack|box-sizing|column-count|column-gap|column-width|column-rule|" + "column-rule-width|column-rule-style|column-rule-color|float-edge|" + "font-feature-settings|font-language-override|force-broken-image-icon|" + "image-region|margin-end|margin-start|opacity|outline|outline-color|" + "outline-offset|outline-radius|outline-radius-bottomleft|" + "outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|" + "outline-style|outline-width|padding-end|padding-start|stack-sizing|" + "tab-size|text-blink|text-decoration-color|text-decoration-line|" + "text-decoration-style|transform|transform-origin|transition|" + "transition-delay|transition-duration|transition-property|" + "transition-timing-function|user-focus|user-input|user-modify|user-select|" + "window-shadow|border-radius").split("|"); var properties = ("azimuth|background-attachment|background-color|background-image|" + "background-position|background-repeat|background|border-bottom-color|" + "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" + "border-color|border-left-color|border-left-style|border-left-width|" + "border-left|border-right-color|border-right-style|border-right-width|" + "border-right|border-spacing|border-style|border-top-color|" + "border-top-style|border-top-width|border-top|border-width|border|bottom|" + "box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|" + "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" + "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" + "font-stretch|font-style|font-variant|font-weight|font|height|left|" + "letter-spacing|line-height|list-style-image|list-style-position|" + "list-style-type|list-style|margin-bottom|margin-left|margin-right|" + "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" + "min-width|opacity|orphans|outline-color|" + "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" + "padding-left|padding-right|padding-top|padding|page-break-after|" + "page-break-before|page-break-inside|page|pause-after|pause-before|" + "pause|pitch-range|pitch|play-during|position|quotes|richness|right|" + "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" + "stress|table-layout|text-align|text-decoration|text-indent|" + "text-shadow|text-transform|top|unicode-bidi|vertical-align|" + "visibility|voice-family|volume|white-space|widows|width|word-spacing|" + "z-index").split("|"); var ret = []; for (var i=0, ln=browserPrefix.length; i|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" }, { caseInsensitive: true } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { token : "string", regex : '.+' } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { token : "string", regex : '.+' } ] }; }; oop.inherits(ScssHighlightRules, TextHighlightRules); exports.ScssHighlightRules = ScssHighlightRules; }); ace.define("ace/mode/sass_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/scss_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var ScssHighlightRules = require("./scss_highlight_rules").ScssHighlightRules; var SassHighlightRules = function() { ScssHighlightRules.call(this); var start = this.$rules.start; if (start[1].token == "comment") { start.splice(1, 1, { onMatch: function(value, currentState, stack) { stack.unshift(this.next, -1, value.length - 2, currentState); return "comment"; }, regex: /^\s*\/\*/, next: "comment" }, { token: "error.invalid", regex: "/\\*|[{;}]" }, { token: "support.type", regex: /^\s*:[\w\-]+\s/ }); this.$rules.comment = [ {regex: /^\s*/, onMatch: function(value, currentState, stack) { if (stack[1] === -1) stack[1] = Math.max(stack[2], value.length - 1); if (value.length <= stack[1]) {stack.shift();stack.shift();stack.shift(); this.next = stack.shift(); return "text"; } else { this.next = ""; return "comment"; } }, next: "start"}, {defaultToken: "comment"} ] } }; oop.inherits(SassHighlightRules, ScssHighlightRules); exports.SassHighlightRules = SassHighlightRules; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/sass",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sass_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var SassHighlightRules = require("./sass_highlight_rules").SassHighlightRules; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = SassHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.$id = "ace/mode/sass"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-scad.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/scad_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var scadHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "variable.language": "this", "keyword": "module|if|else|for", "constant.language": "NULL" }, "identifier"); this.$rules = { "start" : [ { token : "comment", regex : "\\/\\/.*$" }, DocCommentHighlightRules.getStartRule("start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '["].*\\\\$', next : "qqstring" }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "string", // multi line string start regex : "['].*\\\\$", next : "qstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant", // regex : "<[a-zA-Z0-9.]+>" }, { token : "keyword", // pre-compiler directivs regex : "(?:use|include)" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { token : "string", regex : '.+' } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { token : "string", regex : '.+' } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(scadHighlightRules, TextHighlightRules); exports.scadHighlightRules = scadHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/scad",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/scad_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var scadHighlightRules = require("./scad_highlight_rules").scadHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = scadHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/scad"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-scala.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/scala_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ScalaHighlightRules = function() { var keywords = ( "case|default|do|else|for|if|match|while|throw|return|try|catch|finally|yield|" + "abstract|class|def|extends|final|forSome|implicit|implicits|import|lazy|new|object|" + "override|package|private|protected|sealed|super|this|trait|type|val|var|with" ); var buildinConstants = ("true|false"); var langClasses = ( "AbstractMethodError|AssertionError|ClassCircularityError|"+ "ClassFormatError|Deprecated|EnumConstantNotPresentException|"+ "ExceptionInInitializerError|IllegalAccessError|"+ "IllegalThreadStateException|InstantiationError|InternalError|"+ "NegativeArraySizeException|NoSuchFieldError|Override|Process|"+ "ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|"+ "SuppressWarnings|TypeNotPresentException|UnknownError|"+ "UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|"+ "InstantiationException|IndexOutOfBoundsException|"+ "ArrayIndexOutOfBoundsException|CloneNotSupportedException|"+ "NoSuchFieldException|IllegalArgumentException|NumberFormatException|"+ "SecurityException|Void|InheritableThreadLocal|IllegalStateException|"+ "InterruptedException|NoSuchMethodException|IllegalAccessException|"+ "UnsupportedOperationException|Enum|StrictMath|Package|Compiler|"+ "Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|"+ "NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|"+ "NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|"+ "Character|Boolean|StackTraceElement|Appendable|StringBuffer|"+ "Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|"+ "StackOverflowError|OutOfMemoryError|VirtualMachineError|"+ "ArrayStoreException|ClassCastException|LinkageError|"+ "NoClassDefFoundError|ClassNotFoundException|RuntimeException|"+ "Exception|ThreadDeath|Error|Throwable|System|ClassLoader|"+ "Cloneable|Class|CharSequence|Comparable|String|Object|" + "Unit|Any|AnyVal|AnyRef|Null|ScalaObject|Singleton|Seq|Iterable|List|" + "Option|Array|Char|Byte|Short|Int|Long|Nothing" ); var keywordMapper = this.createKeywordMapper({ "variable.language": "this", "keyword": keywords, "support.function": langClasses, "constant.language": buildinConstants }, "identifier"); this.$rules = { "start" : [ { token : "comment", regex : "\\/\\/.*$" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)" }, { token : "string", regex : '"""', next : "tstring" }, { token : "string", regex : '"(?=.)', // " strings can't span multiple lines next : "string" }, { token : "symbol.constant", // single line regex : "'[\\w\\d_]+" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "string" : [ { token : "escape", regex : '\\\\"' }, { token : "string", regex : '"', next : "start" }, { token : "string.invalid", regex : '[^"\\\\]*$', next : "start" }, { token : "string", regex : '[^"\\\\]+' } ], "tstring" : [ { token : "string", // closing comment regex : '"{3,5}', next : "start" }, { token : "string", // comment spanning whole line regex : ".+?" } ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(ScalaHighlightRules, TextHighlightRules); exports.ScalaHighlightRules = ScalaHighlightRules; }); ace.define("ace/mode/scala",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/mode/scala_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var JavaScriptMode = require("./javascript").Mode; var ScalaHighlightRules = require("./scala_highlight_rules").ScalaHighlightRules; var Mode = function() { JavaScriptMode.call(this); this.HighlightRules = ScalaHighlightRules; }; oop.inherits(Mode, JavaScriptMode); (function() { this.createWorker = function(session) { return null; }; this.$id = "ace/mode/scala"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-scheme.js ================================================ ace.define("ace/mode/scheme_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var SchemeHighlightRules = function() { var keywordControl = "case|do|let|loop|if|else|when"; var keywordOperator = "eq?|eqv?|equal?|and|or|not|null?"; var constantLanguage = "#t|#f"; var supportFunctions = "cons|car|cdr|cond|lambda|lambda*|syntax-rules|format|set!|quote|eval|append|list|list?|member?|load"; var keywordMapper = this.createKeywordMapper({ "keyword.control": keywordControl, "keyword.operator": keywordOperator, "constant.language": constantLanguage, "support.function": supportFunctions }, "identifier", true); this.$rules = { "start": [ { token : "comment", regex : ";.*$" }, { "token": ["storage.type.function-type.scheme", "text", "entity.name.function.scheme"], "regex": "(?:\\b(?:(define|define-syntax|define-macro))\\b)(\\s+)((?:\\w|\\-|\\!|\\?)*)" }, { "token": "punctuation.definition.constant.character.scheme", "regex": "#:\\S+" }, { "token": ["punctuation.definition.variable.scheme", "variable.other.global.scheme", "punctuation.definition.variable.scheme"], "regex": "(\\*)(\\S*)(\\*)" }, { "token" : "constant.numeric", // hex "regex" : "#[xXoObB][0-9a-fA-F]+" }, { "token" : "constant.numeric", // float "regex" : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?" }, { "token" : keywordMapper, "regex" : "[a-zA-Z_#][a-zA-Z0-9_\\-\\?\\!\\*]*" }, { "token" : "string", "regex" : '"(?=.)', "next" : "qqstring" } ], "qqstring": [ { "token": "constant.character.escape.scheme", "regex": "\\\\." }, { "token" : "string", "regex" : '[^"\\\\]+', "merge" : true }, { "token" : "string", "regex" : "\\\\$", "next" : "qqstring", "merge" : true }, { "token" : "string", "regex" : '"|$', "next" : "start", "merge" : true } ] } }; oop.inherits(SchemeHighlightRules, TextHighlightRules); exports.SchemeHighlightRules = SchemeHighlightRules; }); ace.define("ace/mode/scheme",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/scheme_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var SchemeHighlightRules = require("./scheme_highlight_rules").SchemeHighlightRules; var Mode = function() { this.HighlightRules = SchemeHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = ";"; this.$id = "ace/mode/scheme"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-scss.js ================================================ ace.define("ace/mode/scss_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ScssHighlightRules = function() { var properties = lang.arrayToMap( (function () { var browserPrefix = ("-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-").split("|"); var prefixProperties = ("appearance|background-clip|background-inline-policy|background-origin|" + "background-size|binding|border-bottom-colors|border-left-colors|" + "border-right-colors|border-top-colors|border-end|border-end-color|" + "border-end-style|border-end-width|border-image|border-start|" + "border-start-color|border-start-style|border-start-width|box-align|" + "box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|" + "box-pack|box-sizing|column-count|column-gap|column-width|column-rule|" + "column-rule-width|column-rule-style|column-rule-color|float-edge|" + "font-feature-settings|font-language-override|force-broken-image-icon|" + "image-region|margin-end|margin-start|opacity|outline|outline-color|" + "outline-offset|outline-radius|outline-radius-bottomleft|" + "outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|" + "outline-style|outline-width|padding-end|padding-start|stack-sizing|" + "tab-size|text-blink|text-decoration-color|text-decoration-line|" + "text-decoration-style|transform|transform-origin|transition|" + "transition-delay|transition-duration|transition-property|" + "transition-timing-function|user-focus|user-input|user-modify|user-select|" + "window-shadow|border-radius").split("|"); var properties = ("azimuth|background-attachment|background-color|background-image|" + "background-position|background-repeat|background|border-bottom-color|" + "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" + "border-color|border-left-color|border-left-style|border-left-width|" + "border-left|border-right-color|border-right-style|border-right-width|" + "border-right|border-spacing|border-style|border-top-color|" + "border-top-style|border-top-width|border-top|border-width|border|bottom|" + "box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|" + "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" + "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" + "font-stretch|font-style|font-variant|font-weight|font|height|left|" + "letter-spacing|line-height|list-style-image|list-style-position|" + "list-style-type|list-style|margin-bottom|margin-left|margin-right|" + "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" + "min-width|opacity|orphans|outline-color|" + "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" + "padding-left|padding-right|padding-top|padding|page-break-after|" + "page-break-before|page-break-inside|page|pause-after|pause-before|" + "pause|pitch-range|pitch|play-during|position|quotes|richness|right|" + "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" + "stress|table-layout|text-align|text-decoration|text-indent|" + "text-shadow|text-transform|top|unicode-bidi|vertical-align|" + "visibility|voice-family|volume|white-space|widows|width|word-spacing|" + "z-index").split("|"); var ret = []; for (var i=0, ln=browserPrefix.length; i|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" }, { caseInsensitive: true } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { token : "string", regex : '.+' } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { token : "string", regex : '.+' } ] }; }; oop.inherits(ScssHighlightRules, TextHighlightRules); exports.ScssHighlightRules = ScssHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/scss",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/scss_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var ScssHighlightRules = require("./scss_highlight_rules").ScssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = ScssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/scss"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-sh.js ================================================ ace.define("ace/mode/sh_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var reservedKeywords = exports.reservedKeywords = ( '!|{|}|case|do|done|elif|else|'+ 'esac|fi|for|if|in|then|until|while|'+ '&|;|export|local|read|typeset|unset|'+ 'elif|select|set' ); var languageConstructs = exports.languageConstructs = ( '[|]|alias|bg|bind|break|builtin|'+ 'cd|command|compgen|complete|continue|'+ 'dirs|disown|echo|enable|eval|exec|'+ 'exit|fc|fg|getopts|hash|help|history|'+ 'jobs|kill|let|logout|popd|printf|pushd|'+ 'pwd|return|set|shift|shopt|source|'+ 'suspend|test|times|trap|type|ulimit|'+ 'umask|unalias|wait' ); var ShHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "keyword": reservedKeywords, "support.function.builtin": languageConstructs, "invalid.deprecated": "debugger" }, "identifier"); var integer = "(?:(?:[1-9]\\d*)|(?:0))"; var fraction = "(?:\\.\\d+)"; var intPart = "(?:\\d+)"; var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))"; var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + ")"; var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")"; var fileDescriptor = "(?:&" + intPart + ")"; var variableName = "[a-zA-Z_][a-zA-Z0-9_]*"; var variable = "(?:(?:\\$" + variableName + ")|(?:" + variableName + "=))"; var builtinVariable = "(?:\\$(?:SHLVL|\\$|\\!|\\?))"; var func = "(?:" + variableName + "\\s*\\(\\))"; this.$rules = { "start" : [{ token : "constant", regex : /\\./ }, { token : ["text", "comment"], regex : /(^|\s)(#.*)$/ }, { token : "string", regex : '"', push : [{ token : "constant.language.escape", regex : /\\(?:[$abeEfnrtv\\'"]|x[a-fA-F\d]{1,2}|u[a-fA-F\d]{4}([a-fA-F\d]{4})?|c.|\d{1,3})/ }, { token : "constant", regex : /\$\w+/ }, { token : "string", regex : '"', next: "pop" }, { defaultToken: "string" }] }, { regex : "<<<", token : "keyword.operator" }, { stateName: "heredoc", regex : "(<<)(\\s*)(['\"`]?)([\\w\\-]+)(['\"`]?)", onMatch : function(value, currentState, stack) { var next = value[2] == '-' ? "indentedHeredoc" : "heredoc"; var tokens = value.split(this.splitRegex); stack.push(next, tokens[4]); return [ {type:"constant", value: tokens[1]}, {type:"text", value: tokens[2]}, {type:"string", value: tokens[3]}, {type:"support.class", value: tokens[4]}, {type:"string", value: tokens[5]} ]; }, rules: { heredoc: [{ onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }], indentedHeredoc: [{ token: "string", regex: "^\t+" }, { onMatch: function(value, currentState, stack) { if (value === stack[1]) { stack.shift(); stack.shift(); this.next = stack[0] || "start"; return "support.class"; } this.next = ""; return "string"; }, regex: ".*$", next: "start" }] } }, { regex : "$", token : "empty", next : function(currentState, stack) { if (stack[0] === "heredoc" || stack[0] === "indentedHeredoc") return stack[0]; return currentState; } }, { token : "variable.language", regex : builtinVariable }, { token : "variable", regex : variable }, { token : "support.function", regex : func }, { token : "support.function", regex : fileDescriptor }, { token : "string", // ' string start : "'", end : "'" }, { token : "constant.numeric", // float regex : floatNumber }, { token : "constant.numeric", // integer regex : integer + "\\b" }, { token : keywordMapper, regex : "[a-zA-Z_][a-zA-Z0-9_]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!=" }, { token : "paren.lparen", regex : "[\\[\\(\\{]" }, { token : "paren.rparen", regex : "[\\]\\)\\}]" } ] }; this.normalizeRules(); }; oop.inherits(ShHighlightRules, TextHighlightRules); exports.ShHighlightRules = ShHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/sh",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sh_highlight_rules","ace/range","ace/mode/folding/cstyle","ace/mode/behaviour/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var ShHighlightRules = require("./sh_highlight_rules").ShHighlightRules; var Range = require("../range").Range; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var Mode = function() { this.HighlightRules = ShHighlightRules; this.foldingRules = new CStyleFoldMode(); this.$behaviour = new CstyleBehaviour(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[\:]\s*$/); if (match) { indent += tab; } } return indent; }; var outdents = { "pass": 1, "return": 1, "raise": 1, "break": 1, "continue": 1 }; this.checkOutdent = function(state, line, input) { if (input !== "\r\n" && input !== "\r" && input !== "\n") return false; var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens; if (!tokens) return false; do { var last = tokens.pop(); } while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/)))); if (!last) return false; return (last.type == "keyword" && outdents[last.value]); }; this.autoOutdent = function(state, doc, row) { row += 1; var indent = this.$getIndent(doc.getLine(row)); var tab = doc.getTabString(); if (indent.slice(-tab.length) == tab) doc.remove(new Range(row, indent.length-tab.length, row, indent.length)); }; this.$id = "ace/mode/sh"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-sjs.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/sjs_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/javascript_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var SJSHighlightRules = function() { var parent = new JavaScriptHighlightRules({noES6: true}); var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; var contextAware = function(f) { f.isContextAware = true; return f; }; var ctxBegin = function(opts) { return { token: opts.token, regex: opts.regex, next: contextAware(function(currentState, stack) { if (stack.length === 0) stack.unshift(currentState); stack.unshift(opts.next); return opts.next; }), }; }; var ctxEnd = function(opts) { return { token: opts.token, regex: opts.regex, next: contextAware(function(currentState, stack) { stack.shift(); return stack[0] || "start"; }), }; }; this.$rules = parent.$rules; this.$rules.no_regex = [ { token: "keyword", regex: "(waitfor|or|and|collapse|spawn|retract)\\b" }, { token: "keyword.operator", regex: "(->|=>|\\.\\.)" }, { token: "variable.language", regex: "(hold|default)\\b" }, ctxBegin({ token: "string", regex: "`", next: "bstring" }), ctxBegin({ token: "string", regex: '"', next: "qqstring" }), ctxBegin({ token: "string", regex: '"', next: "qqstring" }), { token: ["paren.lparen", "text", "paren.rparen"], regex: "(\\{)(\\s*)(\\|)", next: "block_arguments", } ].concat(this.$rules.no_regex); this.$rules.block_arguments = [ { token: "paren.rparen", regex: "\\|", next: "no_regex", } ].concat(this.$rules.function_arguments); this.$rules.bstring = [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next: "bstring" }, ctxBegin({ token : "paren.lparen", regex : "\\$\\{", next: "string_interp" }), ctxBegin({ token : "paren.lparen", regex : "\\$", next: "bstring_interp_single" }), ctxEnd({ token : "string", regex : "`", }), { defaultToken: "string" } ]; this.$rules.qqstring = [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next: "qqstring", }, ctxBegin({ token : "paren.lparen", regex : "#\\{", next: "string_interp" }), ctxEnd({ token : "string", regex : '"', }), { defaultToken: "string" } ]; var embeddableRules = []; for (var i=0; i < this.$rules.no_regex.length; i++) { var rule = this.$rules.no_regex[i]; var token = String(rule.token); if (token.indexOf('paren') == -1 && (!rule.next || rule.next.isContextAware)) { embeddableRules.push(rule); } }; this.$rules.string_interp = [ ctxEnd({ token: "paren.rparen", regex: "\\}" }), ctxBegin({ token: "paren.lparen", regex: '{', next: "string_interp" }) ].concat(embeddableRules); this.$rules.bstring_interp_single = [ { token: ["identifier", "paren.lparen"], regex: '(\\w+)(\\()', next: 'bstring_interp_single_call' }, ctxEnd({ token : "identifier", regex : "\\w*", }) ]; this.$rules.bstring_interp_single_call = [ ctxBegin({ token: "paren.lparen", regex: "\\(", next: "bstring_interp_single_call" }), ctxEnd({ token: "paren.rparen", regex: "\\)" }) ].concat(embeddableRules); } oop.inherits(SJSHighlightRules, TextHighlightRules); exports.SJSHighlightRules = SJSHighlightRules; }); ace.define("ace/mode/sjs",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/mode/sjs_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var JSMode = require("./javascript").Mode; var SJSHighlightRules = require("./sjs_highlight_rules").SJSHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = SJSHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, JSMode); (function() { this.createWorker = function(session) { return null; } this.$id = "ace/mode/sjs"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-smarty.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/smarty_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var SmartyHighlightRules = function() { HtmlHighlightRules.call(this); var smartyRules = { start: [ { include: '#comments' }, { include: '#blocks' } ], '#blocks': [ { token: 'punctuation.section.embedded.begin.smarty', regex: '\\{%?', push: [ { token: 'punctuation.section.embedded.end.smarty', regex: '%?\\}', next: 'pop' }, { include: '#strings' }, { include: '#variables' }, { include: '#lang' }, { defaultToken: 'source.smarty' } ] } ], '#comments': [ { token: [ 'punctuation.definition.comment.smarty', 'comment.block.smarty' ], regex: '(\\{%?)(\\*)', push: [ { token: 'comment.block.smarty', regex: '\\*%?\\}', next: 'pop' }, { defaultToken: 'comment.block.smarty' } ] } ], '#lang': [ { token: 'keyword.operator.smarty', regex: '(?:!=|!|<=|>=|<|>|===|==|%|&&|\\|\\|)|\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod)\\b' }, { token: 'constant.language.smarty', regex: '\\b(?:TRUE|FALSE|true|false)\\b' }, { token: 'keyword.control.smarty', regex: '\\b(?:if|else|elseif|foreach|foreachelse|section|switch|case|break|default)\\b' }, { token: 'variable.parameter.smarty', regex: '\\b[a-zA-Z]+=' }, { token: 'support.function.built-in.smarty', regex: '\\b(?:capture|config_load|counter|cycle|debug|eval|fetch|include_php|include|insert|literal|math|strip|rdelim|ldelim|assign|constant|block|html_[a-z_]*)\\b' }, { token: 'support.function.variable-modifier.smarty', regex: '\\|(?:capitalize|cat|count_characters|count_paragraphs|count_sentences|count_words|date_format|default|escape|indent|lower|nl2br|regex_replace|replace|spacify|string_format|strip_tags|strip|truncate|upper|wordwrap)' } ], '#strings': [ { token: 'punctuation.definition.string.begin.smarty', regex: '\'', push: [ { token: 'punctuation.definition.string.end.smarty', regex: '\'', next: 'pop' }, { token: 'constant.character.escape.smarty', regex: '\\\\.' }, { defaultToken: 'string.quoted.single.smarty' } ] }, { token: 'punctuation.definition.string.begin.smarty', regex: '"', push: [ { token: 'punctuation.definition.string.end.smarty', regex: '"', next: 'pop' }, { token: 'constant.character.escape.smarty', regex: '\\\\.' }, { defaultToken: 'string.quoted.double.smarty' } ] } ], '#variables': [ { token: [ 'punctuation.definition.variable.smarty', 'variable.other.global.smarty' ], regex: '\\b(\\$)(Smarty\\.)' }, { token: [ 'punctuation.definition.variable.smarty', 'variable.other.smarty' ], regex: '(\\$)([a-zA-Z_][a-zA-Z0-9_]*)\\b' }, { token: [ 'keyword.operator.smarty', 'variable.other.property.smarty' ], regex: '(->)([a-zA-Z_][a-zA-Z0-9_]*)\\b' }, { token: [ 'keyword.operator.smarty', 'meta.function-call.object.smarty', 'punctuation.definition.variable.smarty', 'variable.other.smarty', 'punctuation.definition.variable.smarty' ], regex: '(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\()(.*?)(\\))' } ] } var smartyStart = smartyRules.start; for (var rule in this.$rules) { this.$rules[rule].unshift.apply(this.$rules[rule], smartyStart); } Object.keys(smartyRules).forEach(function(x) { if (!this.$rules[x]) this.$rules[x] = smartyRules[x]; }, this); this.normalizeRules(); }; SmartyHighlightRules.metaData = { fileTypes: [ 'tpl' ], foldingStartMarker: '\\{%?', foldingStopMarker: '%?\\}', name: 'Smarty', scopeName: 'text.html.smarty' } oop.inherits(SmartyHighlightRules, HtmlHighlightRules); exports.SmartyHighlightRules = SmartyHighlightRules; }); ace.define("ace/mode/smarty",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/smarty_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlMode = require("./html").Mode; var SmartyHighlightRules = require("./smarty_highlight_rules").SmartyHighlightRules; var Mode = function() { HtmlMode.call(this); this.HighlightRules = SmartyHighlightRules; }; oop.inherits(Mode, HtmlMode); (function() { this.$id = "ace/mode/smarty"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-snippets.js ================================================ ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/snippets",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/text_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var SnippetHighlightRules = function() { var builtins = "SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|" + "LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME"; this.$rules = { "start" : [ {token:"constant.language.escape", regex: /\\[\$}`\\]/}, {token:"keyword", regex: "\\$(?:TM_)?(?:" + builtins + ")\\b"}, {token:"variable", regex: "\\$\\w+"}, {onMatch: function(value, state, stack) { if (stack[1]) stack[1]++; else stack.unshift(state, 1); return this.tokenName; }, tokenName: "markup.list", regex: "\\${", next: "varDecl"}, {onMatch: function(value, state, stack) { if (!stack[1]) return "text"; stack[1]--; if (!stack[1]) stack.splice(0,2); return this.tokenName; }, tokenName: "markup.list", regex: "}"}, {token: "doc.comment", regex:/^\${2}-{5,}$/} ], "varDecl" : [ {regex: /\d+\b/, token: "constant.numeric"}, {token:"keyword", regex: "(?:TM_)?(?:" + builtins + ")\\b"}, {token:"variable", regex: "\\w+"}, {regex: /:/, token: "punctuation.operator", next: "start"}, {regex: /\//, token: "string.regex", next: "regexp"}, {regex: "", next: "start"} ], "regexp" : [ {regex: /\\./, token: "escape"}, {regex: /\[/, token: "regex.start", next: "charClass"}, {regex: "/", token: "string.regex", next: "format"}, {"token": "string.regex", regex:"."} ], charClass : [ {regex: "\\.", token: "escape"}, {regex: "\\]", token: "regex.end", next: "regexp"}, {"token": "string.regex", regex:"."} ], "format" : [ {regex: /\\[ulULE]/, token: "keyword"}, {regex: /\$\d+/, token: "variable"}, {regex: "/[gim]*:?", token: "string.regex", next: "start"}, {"token": "string", regex:"."} ] }; }; oop.inherits(SnippetHighlightRules, TextHighlightRules); exports.SnippetHighlightRules = SnippetHighlightRules; var SnippetGroupHighlightRules = function() { this.$rules = { "start" : [ {token: "text", regex: "^\\t", next: "sn-start"}, {token:"invalid", regex: /^ \s*/}, {token:"comment", regex: /^#.*/}, {token:"constant.language.escape", regex: "^regex ", next: "regex"}, {token:"constant.language.escape", regex: "^(trigger|endTrigger|name|snippet|guard|endGuard|tabTrigger|key)\\b"} ], "regex" : [ {token:"text", regex: "\\."}, {token:"keyword", regex: "/"}, {token:"empty", regex: "$", next: "start"} ] }; this.embedRules(SnippetHighlightRules, "sn-", [ {token: "text", regex: "^\\t", next: "sn-start"}, {onMatch: function(value, state, stack) { stack.splice(stack.length); return this.tokenName; }, tokenName: "text", regex: "^(?!\t)", next: "start"} ]) }; oop.inherits(SnippetGroupHighlightRules, TextHighlightRules); exports.SnippetGroupHighlightRules = SnippetGroupHighlightRules; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = SnippetGroupHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.$indentWithTabs = true; this.lineCommentStart = "#"; this.$id = "ace/mode/snippets"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-soy_template.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/soy_template_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var SoyTemplateHighlightRules = function() { HtmlHighlightRules.call(this); var soyRules = { start: [ { include: '#template' }, { include: '#if' }, { include: '#comment-line' }, { include: '#comment-block' }, { include: '#comment-doc' }, { include: '#call' }, { include: '#css' }, { include: '#param' }, { include: '#print' }, { include: '#msg' }, { include: '#for' }, { include: '#foreach' }, { include: '#switch' }, { include: '#tag' }, { include: 'text.html.basic' } ], '#call': [ { token: [ 'punctuation.definition.tag.begin.soy', 'meta.tag.call.soy' ], regex: '(\\{/?)(\\s*)(?=call|delcall)', push: [ { token: 'punctuation.definition.tag.end.soy', regex: '\\}', next: 'pop' }, { include: '#string-quoted-single' }, { include: '#string-quoted-double' }, { token: ['entity.name.tag.soy', 'variable.parameter.soy'], regex: '(call|delcall)(\\s+[\\.\\w]+)'}, { token: [ 'entity.other.attribute-name.soy', 'text', 'keyword.operator.soy' ], regex: '\\b(data)(\\s*)(=)' }, { defaultToken: 'meta.tag.call.soy' } ] } ], '#comment-line': [ { token: [ 'comment.line.double-slash.soy', 'punctuation.definition.comment.soy', 'comment.line.double-slash.soy' ], regex: '(\\s+)(//)(.*$)' } ], '#comment-block': [ { token: 'punctuation.definition.comment.begin.soy', regex: '/\\*(?!\\*)', push: [ { token: 'punctuation.definition.comment.end.soy', regex: '\\*/', next: 'pop' }, { defaultToken: 'comment.block.soy' } ] } ], '#comment-doc': [ { token: 'punctuation.definition.comment.begin.soy', regex: '/\\*\\*(?!/)', push: [ { token: 'punctuation.definition.comment.end.soy', regex: '\\*/', next: 'pop' }, { token: [ 'support.type.soy', 'text', 'variable.parameter.soy' ], regex: '(@param|@param\\?)(\\s+)(\\w+)' }, { defaultToken: 'comment.block.documentation.soy' } ] } ], '#css': [ { token: [ 'punctuation.definition.tag.begin.soy', 'meta.tag.css.soy', 'entity.name.tag.soy' ], regex: '(\\{/?)(\\s*)(css)\\b', push: [ { token: 'punctuation.definition.tag.end.soy', regex: '\\}', next: 'pop' }, { token: 'support.constant.soy', regex: '\\b(?:LITERAL|REFERENCE|BACKEND_SPECIFIC|GOOG)\\b' }, { defaultToken: 'meta.tag.css.soy' } ] } ], '#for': [ { token: [ 'punctuation.definition.tag.begin.soy', 'meta.tag.for.soy', 'entity.name.tag.soy' ], regex: '(\\{/?)(\\s*)(for)\\b', push: [ { token: 'punctuation.definition.tag.end.soy', regex: '\\}', next: 'pop' }, { token: 'keyword.operator.soy', regex: '\\bin\\b' }, { token: 'support.function.soy', regex: '\\brange\\b' }, { include: '#variable' }, { include: '#number' }, { include: '#primitive' }, { defaultToken: 'meta.tag.for.soy' } ] } ], '#foreach': [ { token: [ 'punctuation.definition.tag.begin.soy', 'meta.tag.foreach.soy', 'entity.name.tag.soy' ], regex: '(\\{/?)(\\s*)(foreach)\\b', push: [ { token: 'punctuation.definition.tag.end.soy', regex: '\\}', next: 'pop' }, { token: 'keyword.operator.soy', regex: '\\bin\\b' }, { include: '#variable' }, { defaultToken: 'meta.tag.foreach.soy' } ] } ], '#function': [ { token: 'support.function.soy', regex: '\\b(?:isFirst|isLast|index|hasData|length|keys|round|floor|ceiling|min|max|randomInt)\\b' } ], '#if': [ { token: [ 'punctuation.definition.tag.begin.soy', 'meta.tag.if.soy', 'entity.name.tag.soy' ], regex: '(\\{/?)(\\s*)(if|elseif)\\b', push: [ { token: 'punctuation.definition.tag.end.soy', regex: '\\}', next: 'pop' }, { include: '#variable' }, { include: '#operator' }, { include: '#function' }, { include: '#string-quoted-single' }, { include: '#string-quoted-double' }, { defaultToken: 'meta.tag.if.soy' } ] } ], '#namespace': [ { token: [ 'entity.name.tag.soy', 'text', 'variable.parameter.soy' ], regex: '(namespace|delpackage)(\\s+)([\\w\\.]+)' } ], '#number': [ { token: 'constant.numeric', regex: '[\\d]+' } ], '#operator': [ { token: 'keyword.operator.soy', regex: '==|!=|\\band\\b|\\bor\\b|\\bnot\\b|-|\\+|/|\\?:' } ], '#param': [ { token: [ 'punctuation.definition.tag.begin.soy', 'meta.tag.param.soy', 'entity.name.tag.soy' ], regex: '(\\{/?)(\\s*)(param)', push: [ { token: 'punctuation.definition.tag.end.soy', regex: '\\}', next: 'pop' }, { include: '#variable' }, { token: [ 'entity.other.attribute-name.soy', 'text', 'keyword.operator.soy' ], regex: '\\b([\\w]+)(\\s*)((?::)?)' }, { defaultToken: 'meta.tag.param.soy' } ] } ], '#primitive': [ { token: 'constant.language.soy', regex: '\\b(?:null|false|true)\\b' } ], '#msg': [ { token: [ 'punctuation.definition.tag.begin.soy', 'meta.tag.msg.soy', 'entity.name.tag.soy' ], regex: '(\\{/?)(\\s*)(msg)\\b', push: [ { token: 'punctuation.definition.tag.end.soy', regex: '\\}', next: 'pop' }, { include: '#string-quoted-single' }, { include: '#string-quoted-double' }, { token: [ 'entity.other.attribute-name.soy', 'text', 'keyword.operator.soy' ], regex: '\\b(meaning|desc)(\\s*)(=)' }, { defaultToken: 'meta.tag.msg.soy' } ] } ], '#print': [ { token: [ 'punctuation.definition.tag.begin.soy', 'meta.tag.print.soy', 'entity.name.tag.soy' ], regex: '(\\{/?)(\\s*)(print)\\b', push: [ { token: 'punctuation.definition.tag.end.soy', regex: '\\}', next: 'pop' }, { include: '#variable' }, { include: '#print-parameter' }, { include: '#number' }, { include: '#primitive' }, { include: '#attribute-lookup' }, { defaultToken: 'meta.tag.print.soy' } ] } ], '#print-parameter': [ { token: 'keyword.operator.soy', regex: '\\|' }, { token: 'variable.parameter.soy', regex: 'noAutoescape|id|escapeHtml|escapeJs|insertWorkBreaks|truncate' } ], '#special-character': [ { token: 'support.constant.soy', regex: '\\bsp\\b|\\bnil\\b|\\\\r|\\\\n|\\\\t|\\blb\\b|\\brb\\b' } ], '#string-quoted-double': [ { token: 'string.quoted.double', regex: '"[^"]*"' } ], '#string-quoted-single': [ { token: 'string.quoted.single', regex: '\'[^\']*\'' } ], '#switch': [ { token: [ 'punctuation.definition.tag.begin.soy', 'meta.tag.switch.soy', 'entity.name.tag.soy' ], regex: '(\\{/?)(\\s*)(switch|case)\\b', push: [ { token: 'punctuation.definition.tag.end.soy', regex: '\\}', next: 'pop' }, { include: '#variable' }, { include: '#function' }, { include: '#number' }, { include: '#string-quoted-single' }, { include: '#string-quoted-double' }, { defaultToken: 'meta.tag.switch.soy' } ] } ], '#attribute-lookup': [ { token: 'punctuation.definition.attribute-lookup.begin.soy', regex: '\\[', push: [ { token: 'punctuation.definition.attribute-lookup.end.soy', regex: '\\]', next: 'pop' }, { include: '#variable' }, { include: '#function' }, { include: '#operator' }, { include: '#number' }, { include: '#primitive' }, { include: '#string-quoted-single' }, { include: '#string-quoted-double' } ] } ], '#tag': [ { token: 'punctuation.definition.tag.begin.soy', regex: '\\{', push: [ { token: 'punctuation.definition.tag.end.soy', regex: '\\}', next: 'pop' }, { include: '#namespace' }, { include: '#variable' }, { include: '#special-character' }, { include: '#tag-simple' }, { include: '#function' }, { include: '#operator' }, { include: '#attribute-lookup' }, { include: '#number' }, { include: '#primitive' }, { include: '#print-parameter' } ] } ], '#tag-simple': [ { token: 'entity.name.tag.soy', regex: '{{\\s*(?:literal|else|ifempty|default)\\s*(?=\\})'} ], '#template': [ { token: [ 'punctuation.definition.tag.begin.soy', 'meta.tag.template.soy' ], regex: '(\\{/?)(\\s*)(?=template|deltemplate)', push: [ { token: 'punctuation.definition.tag.end.soy', regex: '\\}', next: 'pop' }, { token: ['entity.name.tag.soy', 'text', 'entity.name.function.soy' ], regex: '(template|deltemplate)(\\s+)([\\.\\w]+)', originalRegex: '(?<=template|deltemplate)\\s+([\\.\\w]+)' }, { token: [ 'entity.other.attribute-name.soy', 'text', 'keyword.operator.soy', 'text', 'string.quoted.double.soy' ], regex: '\\b(private)(\\s*)(=)(\\s*)("true"|"false")' }, { token: [ 'entity.other.attribute-name.soy', 'text', 'keyword.operator.soy', 'text', 'string.quoted.single.soy' ], regex: '\\b(private)(\\s*)(=)(\\s*)(\'true\'|\'false\')' }, { token: [ 'entity.other.attribute-name.soy', 'text', 'keyword.operator.soy', 'text', 'string.quoted.double.soy' ], regex: '\\b(autoescape)(\\s*)(=)(\\s*)("true"|"false"|"contextual")' }, { token: [ 'entity.other.attribute-name.soy', 'text', 'keyword.operator.soy', 'text', 'string.quoted.single.soy' ], regex: '\\b(autoescape)(\\s*)(=)(\\s*)(\'true\'|\'false\'|\'contextual\')' }, { defaultToken: 'meta.tag.template.soy' } ] } ], '#variable': [ { token: 'variable.other.soy', regex: '\\$[\\w\\.]+' } ] } for (var i in soyRules) { if (this.$rules[i]) { this.$rules[i].unshift.call(this.$rules[i], soyRules[i]); } else { this.$rules[i] = soyRules[i]; } } this.normalizeRules(); }; SoyTemplateHighlightRules.metaData = { comment: 'SoyTemplate', fileTypes: [ 'soy' ], firstLineMatch: '\\{\\s*namespace\\b', foldingStartMarker: '\\{\\s*template\\s+[^\\}]*\\}', foldingStopMarker: '\\{\\s*/\\s*template\\s*\\}', name: 'SoyTemplate', scopeName: 'source.soy' } oop.inherits(SoyTemplateHighlightRules, HtmlHighlightRules); exports.SoyTemplateHighlightRules = SoyTemplateHighlightRules; }); ace.define("ace/mode/soy_template",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/soy_template_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlMode = require("./html").Mode; var SoyTemplateHighlightRules = require("./soy_template_highlight_rules").SoyTemplateHighlightRules; var Mode = function() { HtmlMode.call(this); this.HighlightRules = SoyTemplateHighlightRules; }; oop.inherits(Mode, HtmlMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/soy_template"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-space.js ================================================ ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/space_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var SpaceHighlightRules = function() { this.$rules = { "start" : [ { token : "empty_line", regex : / */, next : "key" }, { token : "empty_line", regex : /$/, next : "key" } ], "key" : [ { token : "variable", regex : /\S+/ }, { token : "empty_line", regex : /$/, next : "start" },{ token : "keyword.operator", regex : / /, next : "value" } ], "value" : [ { token : "keyword.operator", regex : /$/, next : "start" }, { token : "string", regex : /[^$]/ } ] }; }; oop.inherits(SpaceHighlightRules, TextHighlightRules); exports.SpaceHighlightRules = SpaceHighlightRules; }); ace.define("ace/mode/space",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/folding/coffee","ace/mode/space_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var FoldMode = require("./folding/coffee").FoldMode; var SpaceHighlightRules = require("./space_highlight_rules").SpaceHighlightRules; var Mode = function() { this.HighlightRules = SpaceHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.$id = "ace/mode/space"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-sql.js ================================================ ace.define("ace/mode/sql_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var SqlHighlightRules = function() { var keywords = ( "select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|" + "when|else|end|type|left|right|join|on|outer|desc|asc|union" ); var builtinConstants = ( "true|false|null" ); var builtinFunctions = ( "count|min|max|avg|sum|rank|now|coalesce" ); var keywordMapper = this.createKeywordMapper({ "support.function": builtinFunctions, "keyword": keywords, "constant.language": builtinConstants }, "identifier", true); this.$rules = { "start" : [ { token : "comment", regex : "--.*$" }, { token : "comment", start : "/\\*", end : "\\*/" }, { token : "string", // " string regex : '".*?"' }, { token : "string", // ' string regex : "'.*?'" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=" }, { token : "paren.lparen", regex : "[\\(]" }, { token : "paren.rparen", regex : "[\\)]" }, { token : "text", regex : "\\s+" } ] }; this.normalizeRules(); }; oop.inherits(SqlHighlightRules, TextHighlightRules); exports.SqlHighlightRules = SqlHighlightRules; }); ace.define("ace/mode/sql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sql_highlight_rules","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var SqlHighlightRules = require("./sql_highlight_rules").SqlHighlightRules; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = SqlHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "--"; this.$id = "ace/mode/sql"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-stylus.js ================================================ ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/stylus_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/css_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var CssHighlightRules = require("./css_highlight_rules"); var StylusHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.type": CssHighlightRules.supportType, "support.function": CssHighlightRules.supportFunction, "support.constant": CssHighlightRules.supportConstant, "support.constant.color": CssHighlightRules.supportConstantColor, "support.constant.fonts": CssHighlightRules.supportConstantFonts }, "text", true); this.$rules = { start: [ { token : "comment", regex : /\/\/.*$/ }, { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token: ["entity.name.function.stylus", "text"], regex: "^([-a-zA-Z_][-\\w]*)?(\\()" }, { token: ["entity.other.attribute-name.class.stylus"], regex: "\\.-?[_a-zA-Z]+[_a-zA-Z0-9-]*" }, { token: ["entity.language.stylus"], regex: "^ *&" }, { token: ["variable.language.stylus"], regex: "(arguments)" }, { token: ["keyword.stylus"], regex: "@[-\\w]+" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : CssHighlightRules.pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : CssHighlightRules.pseudoClasses }, { token: ["entity.name.tag.stylus"], regex: "(?:\\b)(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(?:h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)(?:\\b)" }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token: ["punctuation.definition.entity.stylus", "entity.other.attribute-name.id.stylus"], regex: "(#)([a-zA-Z][a-zA-Z0-9_-]*)" }, { token: "meta.vendor-prefix.stylus", regex: "-webkit-|-moz\\-|-ms-|-o-" }, { token: "keyword.control.stylus", regex: "(?:!important|for|in|return|true|false|null|if|else|unless|return)\\b" }, { token: "keyword.operator.stylus", regex: "!|~|\\+|-|(?:\\*)?\\*|\\/|%|(?:\\.)\\.\\.|<|>|(?:=|:|\\?|\\+|-|\\*|\\/|%|<|>)?=|!=" }, { token: "keyword.operator.stylus", regex: "(?:in|is(?:nt)?|not)\\b" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", regex : CssHighlightRules.numRe }, { token : "keyword", regex : "(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\\b" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "qqstring" : [ { token : "string", regex : '[^"\\\\]+' }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "start" } ], "qstring" : [ { token : "string", regex : "[^'\\\\]+" }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "start" } ] } }; oop.inherits(StylusHighlightRules, TextHighlightRules); exports.StylusHighlightRules = StylusHighlightRules; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/stylus",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/stylus_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var StylusHighlightRules = require("./stylus_highlight_rules").StylusHighlightRules; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = StylusHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/stylus"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-svg.js ================================================ ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var XmlFoldMode = require("./folding/xml").FoldMode; var Mode = function() { this.HighlightRules = XmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.foldingRules = new XmlFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.voidElements = lang.arrayToMap([]); this.blockComment = {start: ""}; this.$id = "ace/mode/xml"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/svg_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var SvgHighlightRules = function() { XmlHighlightRules.call(this); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); this.normalizeRules(); }; oop.inherits(SvgHighlightRules, XmlHighlightRules); exports.SvgHighlightRules = SvgHighlightRules; }); ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(defaultMode, subModes) { this.defaultMode = defaultMode; this.subModes = subModes; }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.$getMode = function(state) { if (typeof state != "string") state = state[0]; for (var key in this.subModes) { if (state.indexOf(key) === 0) return this.subModes[key]; } return null; }; this.$tryMode = function(state, session, foldStyle, row) { var mode = this.$getMode(state); return (mode ? mode.getFoldWidget(session, foldStyle, row) : ""); }; this.getFoldWidget = function(session, foldStyle, row) { return ( this.$tryMode(session.getState(row-1), session, foldStyle, row) || this.$tryMode(session.getState(row), session, foldStyle, row) || this.defaultMode.getFoldWidget(session, foldStyle, row) ); }; this.getFoldWidgetRange = function(session, foldStyle, row) { var mode = this.$getMode(session.getState(row-1)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.$getMode(session.getState(row)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.defaultMode; return mode.getFoldWidgetRange(session, foldStyle, row); }; }).call(FoldMode.prototype); }); ace.define("ace/mode/svg",["require","exports","module","ace/lib/oop","ace/mode/xml","ace/mode/javascript","ace/mode/svg_highlight_rules","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var XmlMode = require("./xml").Mode; var JavaScriptMode = require("./javascript").Mode; var SvgHighlightRules = require("./svg_highlight_rules").SvgHighlightRules; var MixedFoldMode = require("./folding/mixed").FoldMode; var XmlFoldMode = require("./folding/xml").FoldMode; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { XmlMode.call(this); this.HighlightRules = SvgHighlightRules; this.createModeDelegates({ "js-": JavaScriptMode }); this.foldingRules = new MixedFoldMode(new XmlFoldMode(), { "js-": new CStyleFoldMode() }); }; oop.inherits(Mode, XmlMode); (function() { this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.$id = "ace/mode/svg"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-tcl.js ================================================ ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/tcl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var TclHighlightRules = function() { this.$rules = { "start" : [ { token : "comment", regex : "#.*\\\\$", next : "commentfollow" }, { token : "comment", regex : "#.*$" }, { token : "support.function", regex : '[\\\\]$', next : "splitlineStart" }, { token : "text", regex : '[\\\\](?:["]|[{]|[}]|[[]|[]]|[$]|[\])' }, { token : "text", // last value before command regex : '^|[^{][;][^}]|[/\r/]', next : "commandItem" }, { token : "string", // single line regex : '[ ]*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line """ string start regex : '[ ]*["]', next : "qqstring" }, { token : "variable.instance", regex : "[$]", next : "variable" }, { token : "support.function", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|{\\*}|;|::" }, { token : "identifier", regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "paren.lparen", regex : "[[{]", next : "commandItem" }, { token : "paren.lparen", regex : "[(]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "commandItem" : [ { token : "comment", regex : "#.*\\\\$", next : "commentfollow" }, { token : "comment", regex : "#.*$", next : "start" }, { token : "string", // single line regex : '[ ]*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "variable.instance", regex : "[$]", next : "variable" }, { token : "support.function", regex : "(?:[:][:])[a-zA-Z0-9_/]+(?:[:][:])", next : "commandItem" }, { token : "support.function", regex : "[a-zA-Z0-9_/]+(?:[:][:])", next : "commandItem" }, { token : "support.function", regex : "(?:[:][:])", next : "commandItem" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "support.function", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|{\\*}|;|::" }, { token : "keyword", regex : "[a-zA-Z0-9_/]+", next : "start" } ], "commentfollow" : [ { token : "comment", regex : ".*\\\\$", next : "commentfollow" }, { token : "comment", regex : '.+', next : "start" } ], "splitlineStart" : [ { token : "text", regex : "^.", next : "start" }], "variable" : [ { token : "variable.instance", // variable tcl regex : "[a-zA-Z_\\d]+(?:[(][a-zA-Z_\\d]+[)])?", next : "start" }, { token : "variable.instance", // variable tcl with braces regex : "{?[a-zA-Z_\\d]+}?", next : "start" }], "qqstring" : [ { token : "string", // multi line """ string end regex : '(?:[^\\\\]|\\\\.)*?["]', next : "start" }, { token : "string", regex : '.+' } ] }; }; oop.inherits(TclHighlightRules, TextHighlightRules); exports.TclHighlightRules = TclHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/tcl",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/folding/cstyle","ace/mode/tcl_highlight_rules","ace/mode/matching_brace_outdent","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var TclHighlightRules = require("./tcl_highlight_rules").TclHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = TclHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/tcl"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-tex.js ================================================ ace.define("ace/mode/tex_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var TexHighlightRules = function(textClass) { if (!textClass) textClass = "text"; this.$rules = { "start" : [ { token : "comment", regex : "%.*$" }, { token : textClass, // non-command regex : "\\\\[$&%#\\{\\}]" }, { token : "keyword", // command regex : "\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b", next : "nospell" }, { token : "keyword", // command regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])" }, { token : "paren.keyword.operator", regex : "[[({]" }, { token : "paren.keyword.operator", regex : "[\\])}]" }, { token : textClass, regex : "\\s+" } ], "nospell" : [ { token : "comment", regex : "%.*$", next : "start" }, { token : "nospell." + textClass, // non-command regex : "\\\\[$&%#\\{\\}]" }, { token : "keyword", // command regex : "\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b" }, { token : "keyword", // command regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])", next : "start" }, { token : "paren.keyword.operator", regex : "[[({]" }, { token : "paren.keyword.operator", regex : "[\\])]" }, { token : "paren.keyword.operator", regex : "}", next : "start" }, { token : "nospell." + textClass, regex : "\\s+" }, { token : "nospell." + textClass, regex : "\\w+" } ] }; }; oop.inherits(TexHighlightRules, TextHighlightRules); exports.TexHighlightRules = TexHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/tex",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/text_highlight_rules","ace/mode/tex_highlight_rules","ace/mode/matching_brace_outdent"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var TexHighlightRules = require("./tex_highlight_rules").TexHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Mode = function(suppressHighlighting) { if (suppressHighlighting) this.HighlightRules = TextHighlightRules; else this.HighlightRules = TexHighlightRules; this.$outdent = new MatchingBraceOutdent(); }; oop.inherits(Mode, TextMode); (function() { this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.allowAutoInsert = function() { return false; }; this.$id = "ace/mode/tex"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-text.js ================================================ ================================================ FILE: browser/plugins/ace/src-noconflict/mode-textile.js ================================================ ace.define("ace/mode/textile_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var TextileHighlightRules = function() { this.$rules = { "start" : [ { token : function(value) { if (value.charAt(0) == "h") return "markup.heading." + value.charAt(1); else return "markup.heading"; }, regex : "h1|h2|h3|h4|h5|h6|bq|p|bc|pre", next : "blocktag" }, { token : "keyword", regex : "[\\*]+|[#]+" }, { token : "text", regex : ".+" } ], "blocktag" : [ { token : "keyword", regex : "\\. ", next : "start" }, { token : "keyword", regex : "\\(", next : "blocktagproperties" } ], "blocktagproperties" : [ { token : "keyword", regex : "\\)", next : "blocktag" }, { token : "string", regex : "[a-zA-Z0-9\\-_]+" }, { token : "keyword", regex : "#" } ] }; }; oop.inherits(TextileHighlightRules, TextHighlightRules); exports.TextileHighlightRules = TextileHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/textile",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/textile_highlight_rules","ace/mode/matching_brace_outdent"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var TextileHighlightRules = require("./textile_highlight_rules").TextileHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Mode = function() { this.HighlightRules = TextileHighlightRules; this.$outdent = new MatchingBraceOutdent(); }; oop.inherits(Mode, TextMode); (function() { this.type = "text"; this.getNextLineIndent = function(state, line, tab) { if (state == "intag") return tab; return ""; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/textile"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-toml.js ================================================ ace.define("ace/mode/toml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var TomlHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "constant.language.boolean": "true|false" }, "identifier"); var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; this.$rules = { "start": [ { token: "comment.toml", regex: /#.*$/ }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token: ["variable.keygroup.toml"], regex: "(?:^\\s*)(\\[([^\\]]+)\\])" }, { token : keywordMapper, regex : identifierRe }, { token : "support.date.toml", regex: "\\d{4}-\\d{2}-\\d{2}(T)\\d{2}:\\d{2}:\\d{2}(Z)" }, { token: "constant.numeric.toml", regex: "-?\\d+(\\.?\\d+)?" } ], "qqstring" : [ { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "constant.language.escape", regex : '\\\\[0tnr"\\\\]' }, { token : "string", regex : '"|$', next : "start" }, { defaultToken: "string" } ] } }; oop.inherits(TomlHighlightRules, TextHighlightRules); exports.TomlHighlightRules = TomlHighlightRules; }); ace.define("ace/mode/folding/ini",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function() { }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /^\s*\[([^\])]*)]\s*(?:$|[;#])/; this.getFoldWidgetRange = function(session, foldStyle, row) { var re = this.foldingStartMarker; var line = session.getLine(row); var m = line.match(re); if (!m) return; var startName = m[1] + "."; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); if (/^\s*$/.test(line)) continue; m = line.match(re); if (m && m[1].lastIndexOf(startName, 0) !== 0) break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/toml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/toml_highlight_rules","ace/mode/folding/ini"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var TomlHighlightRules = require("./toml_highlight_rules").TomlHighlightRules; var FoldMode = require("./folding/ini").FoldMode; var Mode = function() { this.HighlightRules = TomlHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.$id = "ace/mode/toml"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-twig.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/twig_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/html_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var TwigHighlightRules = function() { HtmlHighlightRules.call(this); var tags = "autoescape|block|do|embed|extends|filter|flush|for|from|if|import|include|macro|sandbox|set|spaceless|use|verbatim"; tags = tags + "|end" + tags.replace(/\|/g, "|end"); var filters = "abs|batch|capitalize|convert_encoding|date|date_modify|default|e|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|slice|sort|split|striptags|title|trim|upper|url_encode"; var functions = "attribute|constant|cycle|date|dump|parent|random|range|template_from_string"; var tests = "constant|divisibleby|sameas|defined|empty|even|iterable|odd"; var constants = "null|none|true|false"; var operators = "b-and|b-xor|b-or|in|is|and|or|not" var keywordMapper = this.createKeywordMapper({ "keyword.control.twig": tags, "support.function.twig": [filters, functions, tests].join("|"), "keyword.operator.twig": operators, "constant.language.twig": constants }, "identifier"); for (var rule in this.$rules) { this.$rules[rule].unshift({ token : "variable.other.readwrite.local.twig", regex : "\\{\\{-?", push : "twig-start" }, { token : "meta.tag.twig", regex : "\\{%-?", push : "twig-start" }, { token : "comment.block.twig", regex : "\\{#-?", push : "twig-comment" }); } this.$rules["twig-comment"] = [{ token : "comment.block.twig", regex : ".*-?#\\}", next : "pop" }]; this.$rules["twig-start"] = [{ token : "variable.other.readwrite.local.twig", regex : "-?\\}\\}", next : "pop" }, { token : "meta.tag.twig", regex : "-?%\\}", next : "pop" }, { token : "string", regex : "'", next : "twig-qstring" }, { token : "string", regex : '"', next : "twig-qqstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator.assignment", regex : "=|~" }, { token : "keyword.operator.comparison", regex : "==|!=|<|>|>=|<=|===" }, { token : "keyword.operator.arithmetic", regex : "\\+|-|/|%|//|\\*|\\*\\*" }, { token : "keyword.operator.other", regex : "\\.\\.|\\|" }, { token : "punctuation.operator", regex : /\?|\:|\,|\;|\./ }, { token : "paren.lparen", regex : /[\[\({]/ }, { token : "paren.rparen", regex : /[\])}]/ }, { token : "text", regex : "\\s+" } ]; this.$rules["twig-qqstring"] = [{ token : "constant.language.escape", regex : /\\[\\"$#ntr]|#{[^"}]*}/ }, { token : "string", regex : '"', next : "twig-start" }, { defaultToken : "string" } ]; this.$rules["twig-qstring"] = [{ token : "constant.language.escape", regex : /\\[\\'ntr]}/ }, { token : "string", regex : "'", next : "twig-start" }, { defaultToken : "string" } ]; this.normalizeRules(); }; oop.inherits(TwigHighlightRules, TextHighlightRules); exports.TwigHighlightRules = TwigHighlightRules; }); ace.define("ace/mode/twig",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/twig_highlight_rules","ace/mode/matching_brace_outdent"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlMode = require("./html").Mode; var TwigHighlightRules = require("./twig_highlight_rules").TwigHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Mode = function() { HtmlMode.call(this); this.HighlightRules = TwigHighlightRules; this.$outdent = new MatchingBraceOutdent(); }; oop.inherits(Mode, HtmlMode); (function() { this.blockComment = {start: "{#", end: "#}"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/twig"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-typescript.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/typescript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/javascript_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var TypeScriptHighlightRules = function() { var tsRules = [ { token: ["keyword.operator.ts", "text", "variable.parameter.function.ts", "text"], regex: "\\b(module)(\\s*)([a-zA-Z0-9_?.$][\\w?.$]*)(\\s*\\{)" }, { token: ["storage.type.variable.ts", "text", "keyword.other.ts", "text"], regex: "(super)(\\s*\\()([a-zA-Z0-9,_?.$\\s]+\\s*)(\\))" }, { token: ["entity.name.function.ts","paren.lparen", "paren.rparen"], regex: "([a-zA-Z_?.$][\\w?.$]*)(\\()(\\))" }, { token: ["variable.parameter.function.ts", "text", "variable.parameter.function.ts"], regex: "([a-zA-Z0-9_?.$][\\w?.$]*)(\\s*:\\s*)([a-zA-Z0-9_?.$][\\w?.$]*)" }, { token: ["keyword.operator.ts"], regex: "(?:\\b(constructor|declare|interface|as|AS|public|private|class|extends|export|super)\\b)" }, { token: ["storage.type.variable.ts"], regex: "(?:\\b(this\\.|string\\b|bool\\b|number)\\b)" }, { token: ["keyword.operator.ts", "storage.type.variable.ts", "keyword.operator.ts", "storage.type.variable.ts"], regex: "(class)(\\s+[a-zA-Z0-9_?.$][\\w?.$]*\\s+)(extends)(\\s+[a-zA-Z0-9_?.$][\\w?.$]*\\s+)?" }, { token: "keyword", regex: "(?:super|export|class|extends|import)\\b" } ]; var JSRules = new JavaScriptHighlightRules().getRules(); JSRules.start = tsRules.concat(JSRules.start); this.$rules = JSRules; }; oop.inherits(TypeScriptHighlightRules, JavaScriptHighlightRules); exports.TypeScriptHighlightRules = TypeScriptHighlightRules; }); ace.define("ace/mode/typescript",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/mode/typescript_highlight_rules","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/mode/matching_brace_outdent"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var jsMode = require("./javascript").Mode; var TypeScriptHighlightRules = require("./typescript_highlight_rules").TypeScriptHighlightRules; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Mode = function() { this.HighlightRules = TypeScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, jsMode); (function() { this.createWorker = function(session) { return null; }; this.$id = "ace/mode/typescript"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-vala.js ================================================ ace.define("ace/mode/vala_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ValaHighlightRules = function() { this.$rules = { start: [ { token: [ 'meta.using.vala', 'keyword.other.using.vala', 'meta.using.vala', 'storage.modifier.using.vala', 'meta.using.vala', 'punctuation.terminator.vala' ], regex: '^(\\s*)(using)\\b(?:(\\s*)([^ ;$]+)(\\s*)((?:;)?))?' }, { include: '#code' } ], '#all-types': [ { include: '#primitive-arrays' }, { include: '#primitive-types' }, { include: '#object-types' } ], '#annotations': [ { token: [ 'storage.type.annotation.vala', 'punctuation.definition.annotation-arguments.begin.vala' ], regex: '(@[^ (]+)(\\()', push: [ { token: 'punctuation.definition.annotation-arguments.end.vala', regex: '\\)', next: 'pop' }, { token: [ 'constant.other.key.vala', 'text', 'keyword.operator.assignment.vala' ], regex: '(\\w*)(\\s*)(=)' }, { include: '#code' }, { token: 'punctuation.seperator.property.vala', regex: ',' }, { defaultToken: 'meta.declaration.annotation.vala' } ] }, { token: 'storage.type.annotation.vala', regex: '@\\w*' } ], '#anonymous-classes-and-new': [ { token: 'keyword.control.new.vala', regex: '\\bnew\\b', push_disabled: [ { token: 'text', regex: '(?<=\\)|\\])(?!\\s*{)|(?<=})|(?=;)', TODO: 'FIXME: regexp doesn\'t have js equivalent', originalRegex: '(?<=\\)|\\])(?!\\s*{)|(?<=})|(?=;)', next: 'pop' }, { token: [ 'storage.type.vala', 'text' ], regex: '(\\w+)(\\s*)(?=\\[)', push: [ { token: 'text', regex: '}|(?=;|\\))', next: 'pop' }, { token: 'text', regex: '\\[', push: [ { token: 'text', regex: '\\]', next: 'pop' }, { include: '#code' } ] }, { token: 'text', regex: '{', push: [ { token: 'text', regex: '(?=})', next: 'pop' }, { include: '#code' } ] } ] }, { token: 'text', regex: '(?=\\w.*\\()', push: [ { token: 'text', regex: '(?<=\\))', TODO: 'FIXME: regexp doesn\'t have js equivalent', originalRegex: '(?<=\\))', next: 'pop' }, { include: '#object-types' }, { token: 'text', regex: '\\(', push: [ { token: 'text', regex: '\\)', next: 'pop' }, { include: '#code' } ] } ] }, { token: 'meta.inner-class.vala', regex: '{', push: [ { token: 'meta.inner-class.vala', regex: '}', next: 'pop' }, { include: '#class-body' }, { defaultToken: 'meta.inner-class.vala' } ] } ] } ], '#assertions': [ { token: [ 'keyword.control.assert.vala', 'meta.declaration.assertion.vala' ], regex: '\\b(assert|requires|ensures)(\\s)', push: [ { token: 'meta.declaration.assertion.vala', regex: '$', next: 'pop' }, { token: 'keyword.operator.assert.expression-seperator.vala', regex: ':' }, { include: '#code' }, { defaultToken: 'meta.declaration.assertion.vala' } ] } ], '#class': [ { token: 'meta.class.vala', regex: '(?=\\w?[\\w\\s]*(?:class|(?:@)?interface|enum|struct|namespace)\\s+\\w+)', push: [ { token: 'paren.vala', regex: '}', next: 'pop' }, { include: '#storage-modifiers' }, { include: '#comments' }, { token: [ 'storage.modifier.vala', 'meta.class.identifier.vala', 'entity.name.type.class.vala' ], regex: '(class|(?:@)?interface|enum|struct|namespace)(\\s+)([\\w\\.]+)' }, { token: 'storage.modifier.extends.vala', regex: ':', push: [ { token: 'meta.definition.class.inherited.classes.vala', regex: '(?={|,)', next: 'pop' }, { include: '#object-types-inherited' }, { include: '#comments' }, { defaultToken: 'meta.definition.class.inherited.classes.vala' } ] }, { token: [ 'storage.modifier.implements.vala', 'meta.definition.class.implemented.interfaces.vala' ], regex: '(,)(\\s)', push: [ { token: 'meta.definition.class.implemented.interfaces.vala', regex: '(?=\\{)', next: 'pop' }, { include: '#object-types-inherited' }, { include: '#comments' }, { defaultToken: 'meta.definition.class.implemented.interfaces.vala' } ] }, { token: 'paren.vala', regex: '{', push: [ { token: 'paren.vala', regex: '(?=})', next: 'pop' }, { include: '#class-body' }, { defaultToken: 'meta.class.body.vala' } ] }, { defaultToken: 'meta.class.vala' } ], comment: 'attempting to put namespace in here.' } ], '#class-body': [ { include: '#comments' }, { include: '#class' }, { include: '#enums' }, { include: '#methods' }, { include: '#annotations' }, { include: '#storage-modifiers' }, { include: '#code' } ], '#code': [ { include: '#comments' }, { include: '#class' }, { token: 'text', regex: '{', push: [ { token: 'text', regex: '}', next: 'pop' }, { include: '#code' } ] }, { include: '#assertions' }, { include: '#parens' }, { include: '#constants-and-special-vars' }, { include: '#anonymous-classes-and-new' }, { include: '#keywords' }, { include: '#storage-modifiers' }, { include: '#strings' }, { include: '#all-types' } ], '#comments': [ { token: 'punctuation.definition.comment.vala', regex: '/\\*\\*/' }, { include: 'text.html.javadoc' }, { include: '#comments-inline' } ], '#comments-inline': [ { token: 'punctuation.definition.comment.vala', regex: '/\\*', push: [ { token: 'punctuation.definition.comment.vala', regex: '\\*/', next: 'pop' }, { defaultToken: 'comment.block.vala' } ] }, { token: [ 'text', 'punctuation.definition.comment.vala', 'comment.line.double-slash.vala' ], regex: '(\\s*)(//)(.*$)' } ], '#constants-and-special-vars': [ { token: 'constant.language.vala', regex: '\\b(?:true|false|null)\\b' }, { token: 'variable.language.vala', regex: '\\b(?:this|base)\\b' }, { token: 'constant.numeric.vala', regex: '\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\b' }, { token: [ 'keyword.operator.dereference.vala', 'constant.other.vala' ], regex: '((?:\\.)?)\\b([A-Z][A-Z0-9_]+)(?!<|\\.class|\\s*\\w+\\s*=)\\b' } ], '#enums': [ { token: 'text', regex: '^(?=\\s*[A-Z0-9_]+\\s*(?:{|\\(|,))', push: [ { token: 'text', regex: '(?=;|})', next: 'pop' }, { token: 'constant.other.enum.vala', regex: '\\w+', push: [ { token: 'meta.enum.vala', regex: '(?=,|;|})', next: 'pop' }, { include: '#parens' }, { token: 'text', regex: '{', push: [ { token: 'text', regex: '}', next: 'pop' }, { include: '#class-body' } ] }, { defaultToken: 'meta.enum.vala' } ] } ] } ], '#keywords': [ { token: 'keyword.control.catch-exception.vala', regex: '\\b(?:try|catch|finally|throw)\\b' }, { token: 'keyword.control.vala', regex: '\\?|:|\\?\\?' }, { token: 'keyword.control.vala', regex: '\\b(?:return|break|case|continue|default|do|while|for|foreach|switch|if|else|in|yield|get|set|value)\\b' }, { token: 'keyword.operator.vala', regex: '\\b(?:typeof|is|as)\\b' }, { token: 'keyword.operator.comparison.vala', regex: '==|!=|<=|>=|<>|<|>' }, { token: 'keyword.operator.assignment.vala', regex: '=' }, { token: 'keyword.operator.increment-decrement.vala', regex: '\\-\\-|\\+\\+' }, { token: 'keyword.operator.arithmetic.vala', regex: '\\-|\\+|\\*|\\/|%' }, { token: 'keyword.operator.logical.vala', regex: '!|&&|\\|\\|' }, { token: 'keyword.operator.dereference.vala', regex: '\\.(?=\\S)', originalRegex: '(?<=\\S)\\.(?=\\S)' }, { token: 'punctuation.terminator.vala', regex: ';' }, { token: 'keyword.operator.ownership', regex: 'owned|unowned' } ], '#methods': [ { token: 'meta.method.vala', regex: '(?!new)(?=\\w.*\\s+)(?=[^=]+\\()', push: [ { token: 'paren.vala', regex: '}|(?=;)', next: 'pop' }, { include: '#storage-modifiers' }, { token: [ 'entity.name.function.vala', 'meta.method.identifier.vala' ], regex: '([\\~\\w\\.]+)(\\s*\\()', push: [ { token: 'meta.method.identifier.vala', regex: '\\)', next: 'pop' }, { include: '#parameters' }, { defaultToken: 'meta.method.identifier.vala' } ] }, { token: 'meta.method.return-type.vala', regex: '(?=\\w.*\\s+\\w+\\s*\\()', push: [ { token: 'meta.method.return-type.vala', regex: '(?=\\w+\\s*\\()', next: 'pop' }, { include: '#all-types' }, { defaultToken: 'meta.method.return-type.vala' } ] }, { include: '#throws' }, { token: 'paren.vala', regex: '{', push: [ { token: 'paren.vala', regex: '(?=})', next: 'pop' }, { include: '#code' }, { defaultToken: 'meta.method.body.vala' } ] }, { defaultToken: 'meta.method.vala' } ] } ], '#namespace': [ { token: 'text', regex: '^(?=\\s*[A-Z0-9_]+\\s*(?:{|\\(|,))', push: [ { token: 'text', regex: '(?=;|})', next: 'pop' }, { token: 'constant.other.namespace.vala', regex: '\\w+', push: [ { token: 'meta.namespace.vala', regex: '(?=,|;|})', next: 'pop' }, { include: '#parens' }, { token: 'text', regex: '{', push: [ { token: 'text', regex: '}', next: 'pop' }, { include: '#code' } ] }, { defaultToken: 'meta.namespace.vala' } ] } ], comment: 'This is not quite right. See the class grammar right now' } ], '#object-types': [ { token: 'storage.type.generic.vala', regex: '\\b(?:[a-z]\\w*\\.)*[A-Z]+\\w*<', push: [ { token: 'storage.type.generic.vala', regex: '>|[^\\w\\s,\\?<\\[()\\]]', TODO: 'FIXME: regexp doesn\'t have js equivalent', originalRegex: '>|[^\\w\\s,\\?<\\[(?:[,]+)\\]]', next: 'pop' }, { include: '#object-types' }, { token: 'storage.type.generic.vala', regex: '<', push: [ { token: 'storage.type.generic.vala', regex: '>|[^\\w\\s,\\[\\]<]', next: 'pop' }, { defaultToken: 'storage.type.generic.vala' } ], comment: 'This is just to support <>\'s with no actual type prefix' }, { defaultToken: 'storage.type.generic.vala' } ] }, { token: 'storage.type.object.array.vala', regex: '\\b(?:[a-z]\\w*\\.)*[A-Z]+\\w*(?=\\[)', push: [ { token: 'storage.type.object.array.vala', regex: '(?=[^\\]\\s])', next: 'pop' }, { token: 'text', regex: '\\[', push: [ { token: 'text', regex: '\\]', next: 'pop' }, { include: '#code' } ] }, { defaultToken: 'storage.type.object.array.vala' } ] }, { token: [ 'storage.type.vala', 'keyword.operator.dereference.vala', 'storage.type.vala' ], regex: '\\b(?:([a-z]\\w*)(\\.))*([A-Z]+\\w*\\b)' } ], '#object-types-inherited': [ { token: 'entity.other.inherited-class.vala', regex: '\\b(?:[a-z]\\w*\\.)*[A-Z]+\\w*<', push: [ { token: 'entity.other.inherited-class.vala', regex: '>|[^\\w\\s,<]', next: 'pop' }, { include: '#object-types' }, { token: 'storage.type.generic.vala', regex: '<', push: [ { token: 'storage.type.generic.vala', regex: '>|[^\\w\\s,<]', next: 'pop' }, { defaultToken: 'storage.type.generic.vala' } ], comment: 'This is just to support <>\'s with no actual type prefix' }, { defaultToken: 'entity.other.inherited-class.vala' } ] }, { token: [ 'entity.other.inherited-class.vala', 'keyword.operator.dereference.vala', 'entity.other.inherited-class.vala' ], regex: '\\b(?:([a-z]\\w*)(\\.))*([A-Z]+\\w*)' } ], '#parameters': [ { token: 'storage.modifier.vala', regex: 'final' }, { include: '#primitive-arrays' }, { include: '#primitive-types' }, { include: '#object-types' }, { token: 'variable.parameter.vala', regex: '\\w+' } ], '#parens': [ { token: 'text', regex: '\\(', push: [ { token: 'text', regex: '\\)', next: 'pop' }, { include: '#code' } ] } ], '#primitive-arrays': [ { token: 'storage.type.primitive.array.vala', regex: '\\b(?:bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|int8|int16|int32|int64|uint8|uint16|uint32|uint64)(?:\\[\\])*\\b' } ], '#primitive-types': [ { token: 'storage.type.primitive.vala', regex: '\\b(?:var|bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64)\\b', comment: 'var is not really a primitive, but acts like one in most cases' } ], '#storage-modifiers': [ { token: 'storage.modifier.vala', regex: '\\b(?:public|private|protected|internal|static|final|sealed|virtual|override|abstract|readonly|volatile|dynamic|async|unsafe|out|ref|weak|owned|unowned|const)\\b', comment: 'Not sure about unsafe and readonly' } ], '#strings': [ { token: 'punctuation.definition.string.begin.vala', regex: '@"', push: [ { token: 'punctuation.definition.string.end.vala', regex: '"', next: 'pop' }, { token: 'constant.character.escape.vala', regex: '\\\\.|%[\\w\\.\\-]+|\\$(?:\\w+|\\([\\w\\s\\+\\-\\*\\/]+\\))' }, { defaultToken: 'string.quoted.interpolated.vala' } ] }, { token: 'punctuation.definition.string.begin.vala', regex: '"', push: [ { token: 'punctuation.definition.string.end.vala', regex: '"', next: 'pop' }, { token: 'constant.character.escape.vala', regex: '\\\\.' }, { token: 'constant.character.escape.vala', regex: '%[\\w\\.\\-]+' }, { defaultToken: 'string.quoted.double.vala' } ] }, { token: 'punctuation.definition.string.begin.vala', regex: '\'', push: [ { token: 'punctuation.definition.string.end.vala', regex: '\'', next: 'pop' }, { token: 'constant.character.escape.vala', regex: '\\\\.' }, { defaultToken: 'string.quoted.single.vala' } ] }, { token: 'punctuation.definition.string.begin.vala', regex: '"""', push: [ { token: 'punctuation.definition.string.end.vala', regex: '"""', next: 'pop' }, { token: 'constant.character.escape.vala', regex: '%[\\w\\.\\-]+' }, { defaultToken: 'string.quoted.triple.vala' } ] } ], '#throws': [ { token: 'storage.modifier.vala', regex: 'throws', push: [ { token: 'meta.throwables.vala', regex: '(?={|;)', next: 'pop' }, { include: '#object-types' }, { defaultToken: 'meta.throwables.vala' } ] } ], '#values': [ { include: '#strings' }, { include: '#object-types' }, { include: '#constants-and-special-vars' } ] } this.normalizeRules(); }; ValaHighlightRules.metaData = { comment: 'Based heavily on the Java bundle\'s language syntax. TODO:\n* Closures\n* Delegates\n* Properties: Better support for properties.\n* Annotations\n* Error domains\n* Named arguments\n* Array slicing, negative indexes, multidimensional\n* construct blocks\n* lock blocks?\n* regex literals\n* DocBlock syntax highlighting. (Currently importing javadoc)\n* Folding rule for comments.\n', fileTypes: [ 'vala' ], foldingStartMarker: '(\\{\\s*(//.*)?$|^\\s*// \\{\\{\\{)', foldingStopMarker: '^\\s*(\\}|// \\}\\}\\}$)', name: 'Vala', scopeName: 'source.vala' } oop.inherits(ValaHighlightRules, TextHighlightRules); exports.ValaHighlightRules = ValaHighlightRules; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/vala",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/vala_highlight_rules","ace/mode/folding/cstyle","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/mode/matching_brace_outdent"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var ValaHighlightRules = require("./vala_highlight_rules").ValaHighlightRules; var FoldMode = require("./folding/cstyle").FoldMode; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Mode = function() { this.HighlightRules = ValaHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/vala" }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-vbscript.js ================================================ ace.define("ace/mode/vbscript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var VBScriptHighlightRules = function() { this.$rules = { "start": [ { token: [ "meta.ending-space" ], regex: "$" }, { token: [ null ], regex: "^(?=\\t)", next: "state_3" }, { token: [null], regex: "^(?= )", next: "state_4" }, { token: [ "text", "storage.type.function.asp", "text", "entity.name.function.asp", "text", "punctuation.definition.parameters.asp", "variable.parameter.function.asp", "punctuation.definition.parameters.asp" ], regex: "^(\\s*)(Function|Sub)(\\s*)([a-zA-Z_]\\w*)(\\s*)(\\()([^)]*)(\\))" }, { token: "punctuation.definition.comment.asp", regex: "'|REM", next: "comment" }, { token: [ "keyword.control.asp" ], regex: "\\b(?:If|Then|Else|ElseIf|Else If|End If|While|Wend|For|To|Each|Case|Select|End Select|Return|Continue|Do|Until|Loop|Next|With|Exit Do|Exit For|Exit Function|Exit Property|Exit Sub|IIf)\\b" }, { token: "keyword.operator.asp", regex: "\\b(?:Mod|And|Not|Or|Xor|as)\\b" }, { token: "storage.type.asp", regex: "Dim|Call|Class|Const|Dim|Redim|Function|Sub|Private Sub|Public Sub|End sub|End Function|Set|Let|Get|New|Randomize|Option Explicit|On Error Resume Next|On Error GoTo" }, { token: "storage.modifier.asp", regex: "\\b(?:Private|Public|Default)\\b" }, { token: "constant.language.asp", regex: "\\b(?:Empty|False|Nothing|Null|True)\\b" }, { token: "punctuation.definition.string.begin.asp", regex: '"', next: "string" }, { token: [ "punctuation.definition.variable.asp" ], regex: "(\\$)[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\b\\s*" }, { token: "support.class.asp", regex: "\\b(?:Application|ObjectContext|Request|Response|Server|Session)\\b" }, { token: "support.class.collection.asp", regex: "\\b(?:Contents|StaticObjects|ClientCertificate|Cookies|Form|QueryString|ServerVariables)\\b" }, { token: "support.constant.asp", regex: "\\b(?:TotalBytes|Buffer|CacheControl|Charset|ContentType|Expires|ExpiresAbsolute|IsClientConnected|PICS|Status|ScriptTimeout|CodePage|LCID|SessionID|Timeout)\\b" }, { token: "support.function.asp", regex: "\\b(?:Lock|Unlock|SetAbort|SetComplete|BinaryRead|AddHeader|AppendToLog|BinaryWrite|Clear|End|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon|Convert|Regex)\\b" }, { token: "support.function.event.asp", regex: "\\b(?:Application_OnEnd|Application_OnStart|OnTransactionAbort|OnTransactionCommit|Session_OnEnd|Session_OnStart)\\b" }, { token: "support.function.vb.asp", regex: "\\b(?:Array|Add|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng|Conversions|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial|DateValue|Day|Derived|Math|Escape|Eval|Exists|Exp|Filter|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent|GetLocale|GetObject|GetRef|Hex|Hour|InputBox|InStr|InStrRev|Int|Fix|IsArray|IsDate|IsEmpty|IsNull|IsNumeric|IsObject|Item|Items|Join|Keys|LBound|LCase|Left|Len|LoadPicture|Log|LTrim|RTrim|Trim|Maths|Mid|Minute|Month|MonthName|MsgBox|Now|Oct|Remove|RemoveAll|Replace|RGB|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion|ScriptEngineMinorVersion|Second|SetLocale|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse|Tan|Time|Timer|TimeSerial|TimeValue|TypeName|UBound|UCase|Unescape|VarType|Weekday|WeekdayName|Year)\\b" }, { token: [ "constant.numeric.asp" ], regex: "-?\\b(?:(?:0(?:x|X)[0-9a-fA-F]*)|(?:(?:[0-9]+\\.?[0-9]*)|(?:\\.[0-9]+))(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\b" }, { token: "support.type.vb.asp", regex: "\\b(?:vbtrue|vbfalse|vbcr|vbcrlf|vbformfeed|vblf|vbnewline|vbnullchar|vbnullstring|int32|vbtab|vbverticaltab|vbbinarycompare|vbtextcomparevbsunday|vbmonday|vbtuesday|vbwednesday|vbthursday|vbfriday|vbsaturday|vbusesystemdayofweek|vbfirstjan1|vbfirstfourdays|vbfirstfullweek|vbgeneraldate|vblongdate|vbshortdate|vblongtime|vbshorttime|vbobjecterror|vbEmpty|vbNull|vbInteger|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant|vbDataObject|vbDecimal|vbByte|vbArray)\\b" }, { token: [ "entity.name.function.asp" ], regex: "(?:(\\b[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\b)(?=\\(\\)?))" }, { token: [ "keyword.operator.asp" ], regex: "\\-|\\+|\\*\\\/|\\>|\\<|\\=|\\&" } ], "state_3": [ { token: [ "meta.odd-tab.tabs", "meta.even-tab.tabs" ], regex: "(\\t)(\\t)?" }, { token: "meta.leading-space", regex: "(?=[^\\t])", next: "start" }, { token: "meta.leading-space", regex: ".", next: "state_3" } ], "state_4": [ { token: ["meta.odd-tab.spaces", "meta.even-tab.spaces"], regex: "( )( )?" }, { token: "meta.leading-space", regex: "(?=[^ ])", next: "start" }, { defaultToken: "meta.leading-space" } ], "comment": [ { token: "comment.line.apostrophe.asp", regex: "$|(?=(?:%>))", next: "start" }, { defaultToken: "comment.line.apostrophe.asp" } ], "string": [ { token: "constant.character.escape.apostrophe.asp", regex: '""' }, { token: "string.quoted.double.asp", regex: '"', next: "start" }, { defaultToken: "string.quoted.double.asp" } ] } }; oop.inherits(VBScriptHighlightRules, TextHighlightRules); exports.VBScriptHighlightRules = VBScriptHighlightRules; }); ace.define("ace/mode/vbscript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/vbscript_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var VBScriptHighlightRules = require("./vbscript_highlight_rules").VBScriptHighlightRules; var Mode = function() { this.HighlightRules = VBScriptHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = ["'", "REM"]; this.$id = "ace/mode/vbscript"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-velocity.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct "3[0-6][0-7]?|" + // oct "37[0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ { token : "comment", regex : "\\/\\/", next : "line_comment" }, DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : /\/\*/, next : "comment" }, { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0[xX][0-9a-fA-F]+\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["punctuation.operator", "support.function"], regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : ["punctuation.operator", "support.function.dom"], regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : ["punctuation.operator", "support.constant"], regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "keyword.operator", regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment_regex_allowed" }, { token : "comment", regex : "\\/\\/", next : "line_comment_regex_allowed" }, { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment_regex_allowed" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "start"}, {defaultToken : "comment", caseInsensitive: true} ], "line_comment" : [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : "no_regex"}, {defaultToken : "comment", caseInsensitive: true} ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); return "paren"; } if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("jslint", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("csslint", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ], }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(JavaScriptHighlightRules, "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": ["manifest"], "head": [], "title": [], "base": ["href", "target"], "link": ["href", "hreflang", "rel", "media", "type", "sizes"], "meta": ["http-equiv", "name", "content", "charset"], "style": ["type", "media", "scoped"], "script": ["charset", "type", "src", "defer", "async"], "noscript": ["href"], "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"], "section": [], "nav": [], "article": ["pubdate"], "aside": [], "h1": [], "h2": [], "h3": [], "h4": [], "h5": [], "h6": [], "header": [], "footer": [], "address": [], "main": [], "p": [], "hr": [], "pre": [], "blockquote": ["cite"], "ol": ["start", "reversed"], "ul": [], "li": ["value"], "dl": [], "dt": [], "dd": [], "figure": [], "figcaption": [], "div": [], "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"], "em": [], "strong": [], "small": [], "s": [], "cite": [], "q": ["cite"], "dfn": [], "abbr": [], "data": [], "time": ["datetime"], "code": [], "var": [], "samp": [], "kbd": [], "sub": [], "sup": [], "i": [], "b": [], "u": [], "mark": [], "ruby": [], "rt": [], "rp": [], "bdi": [], "bdo": [], "span": [], "br": [], "wbr": [], "ins": ["cite", "datetime"], "del": ["cite", "datetime"], "img": ["alt", "src", "height", "width", "usemap", "ismap"], "iframe": ["name", "src", "height", "width", "sandbox", "seamless"], "embed": ["src", "height", "width", "type"], "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"], "param": ["name", "value"], "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"], "audio": ["src", "autobuffer", "autoplay", "loop", "controls"], "source": ["src", "type", "media"], "track": ["kind", "src", "srclang", "label", "default"], "canvas": ["width", "height"], "map": ["name"], "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"], "svg": [], "math": [], "table": ["summary"], "caption": [], "colgroup": ["span"], "col": ["span"], "tbody": [], "thead": [], "tfoot": [], "tr": [], "td": ["headers", "rowspan", "colspan"], "th": ["headers", "rowspan", "colspan", "scope"], "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"], "fieldset": ["disabled", "form", "name"], "legend": [], "label": ["form", "for"], "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"], "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"], "select": ["autofocus", "disabled", "form", "multiple", "name", "size"], "datalist": [], "optgroup": ["disabled", "label"], "option": ["disabled", "selected", "label", "value"], "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"], "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"], "output": ["for", "form", "name"], "progress": ["value", "max"], "meter": ["value", "min", "max", "low", "high", "optimum"], "details": ["open"], "summary": [], "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"], "menu": ["type", "label"], "dialog": ["open"] }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompetions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompetions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(attributeMap[tagName]); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/velocity_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/html_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var VelocityHighlightRules = function() { HtmlHighlightRules.call(this); var builtinConstants = lang.arrayToMap( ('true|false|null').split('|') ); var builtinFunctions = lang.arrayToMap( ("_DateTool|_DisplayTool|_EscapeTool|_FieldTool|_MathTool|_NumberTool|_SerializerTool|_SortTool|_StringTool|_XPathTool").split('|') ); var builtinVariables = lang.arrayToMap( ('$contentRoot|$foreach').split('|') ); var keywords = lang.arrayToMap( ("#set|#macro|#include|#parse|" + "#if|#elseif|#else|#foreach|" + "#break|#end|#stop" ).split('|') ); this.$rules.start.push( { token : "comment", regex : "##.*$" },{ token : "comment.block", // multi line comment regex : "#\\*", next : "vm_comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : function(value) { if (keywords.hasOwnProperty(value)) return "keyword"; else if (builtinConstants.hasOwnProperty(value)) return "constant.language"; else if (builtinVariables.hasOwnProperty(value)) return "variable.language"; else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1))) return "support.function"; else if (value == "debugger") return "invalid.deprecated"; else if(value.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*)$/)) return "variable"; return "identifier"; }, regex : "[a-zA-Z$#][a-zA-Z0-9_]*\\b" }, { token : "keyword.operator", regex : "!|&|\\*|\\-|\\+|=|!=|<=|>=|<|>|&&|\\|\\|" }, { token : "lparen", regex : "[[({]" }, { token : "rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ); this.$rules["vm_comment"] = [ { token : "comment", // closing comment regex : "\\*#|-->", next : "start" }, { defaultToken: "comment" } ]; this.$rules["vm_start"] = [ { token: "variable", regex: "}", next: "pop" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : function(value) { if (keywords.hasOwnProperty(value)) return "keyword"; else if (builtinConstants.hasOwnProperty(value)) return "constant.language"; else if (builtinVariables.hasOwnProperty(value)) return "variable.language"; else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1))) return "support.function"; else if (value == "debugger") return "invalid.deprecated"; else if(value.match(/^(\$[a-zA-Z_$][a-zA-Z0-9_]*)$/)) return "variable"; return "identifier"; }, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "!|&|\\*|\\-|\\+|=|!=|<=|>=|<|>|&&|\\|\\|" }, { token : "lparen", regex : "[[({]" }, { token : "rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ]; for (var i in this.$rules) { this.$rules[i].unshift({ token: "variable", regex: "\\${", push: "vm_start" }); } this.normalizeRules(); }; oop.inherits(VelocityHighlightRules, TextHighlightRules); exports.VelocityHighlightRules = VelocityHighlightRules; }); ace.define("ace/mode/folding/velocity",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "##") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "##") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "##" && next[indent] == "##") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "##" && prev[indent] == "##") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/velocity",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/velocity_highlight_rules","ace/mode/folding/velocity"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlMode = require("./html").Mode; var VelocityHighlightRules = require("./velocity_highlight_rules").VelocityHighlightRules; var FoldMode = require("./folding/velocity").FoldMode; var Mode = function() { HtmlMode.call(this); this.HighlightRules = VelocityHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, HtmlMode); (function() { this.lineCommentStart = "##"; this.blockComment = {start: "#*", end: "*#"}; this.$id = "ace/mode/velocity"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-verilog.js ================================================ ace.define("ace/mode/verilog_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var VerilogHighlightRules = function() { var keywords = "always|and|assign|automatic|begin|buf|bufif0|bufif1|case|casex|casez|cell|cmos|config|" + "deassign|default|defparam|design|disable|edge|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|" + "endprimitive|endspecify|endtable|endtask|event|for|force|forever|fork|function|generate|genvar|highz0|" + "highz1|if|ifnone|incdir|include|initial|inout|input|instance|integer|join|large|liblist|library|localparam|" + "macromodule|medium|module|nand|negedge|nmos|nor|noshowcancelled|not|notif0|notif1|or|output|parameter|pmos|" + "posedge|primitive|pull0|pull1|pulldown|pullup|pulsestyle_onevent|pulsestyle_ondetect|rcmos|real|realtime|" + "reg|release|repeat|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|showcancelled|signed|small|specify|specparam|" + "strong0|strong1|supply0|supply1|table|task|time|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|" + "unsigned|use|vectored|wait|wand|weak0|weak1|while|wire|wor|xnor|xor" + "begin|bufif0|bufif1|case|casex|casez|config|else|end|endcase|endconfig|endfunction|" + "endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|for|forever|function|generate|if|ifnone|" + "macromodule|module|primitive|repeat|specify|table|task|while"; var builtinConstants = ( "true|false|null" ); var builtinFunctions = ( "count|min|max|avg|sum|rank|now|coalesce|main" ); var keywordMapper = this.createKeywordMapper({ "support.function": builtinFunctions, "keyword": keywords, "constant.language": builtinConstants }, "identifier", true); this.$rules = { "start" : [ { token : "comment", regex : "//.*$" }, { token : "string", // " string regex : '".*?"' }, { token : "string", // ' string regex : "'.*?'" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=" }, { token : "paren.lparen", regex : "[\\(]" }, { token : "paren.rparen", regex : "[\\)]" }, { token : "text", regex : "\\s+" } ] }; }; oop.inherits(VerilogHighlightRules, TextHighlightRules); exports.VerilogHighlightRules = VerilogHighlightRules; }); ace.define("ace/mode/verilog",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/verilog_highlight_rules","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var VerilogHighlightRules = require("./verilog_highlight_rules").VerilogHighlightRules; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = VerilogHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.$id = "ace/mode/verilog"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-vhdl.js ================================================ ace.define("ace/mode/vhdl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var VHDLHighlightRules = function() { var keywords = "access|after|ailas|all|architecture|assert|attribute|"+ "begin|block|buffer|bus|case|component|configuration|"+ "disconnect|downto|else|elsif|end|entity|file|for|function|"+ "generate|generic|guarded|if|impure|in|inertial|inout|is|"+ "label|linkage|literal|loop|mapnew|next|of|on|open|"+ "others|out|port|process|pure|range|record|reject|"+ "report|return|select|shared|subtype|then|to|transport|"+ "type|unaffected|united|until|wait|when|while|with"; var storageType = "bit|bit_vector|boolean|character|integer|line|natural|"+ "positive|real|register|severity|signal|signed|"+ "std_logic|std_logic_vector|string||text|time|unsigned|"+ "variable"; var storageModifiers = "array|constant"; var keywordOperators = "abs|and|mod|nand|nor|not|rem|rol|ror|sla|sll|sra"+ "srl|xnor|xor"; var builtinConstants = ( "true|false|null" ); var keywordMapper = this.createKeywordMapper({ "keyword.operator": keywordOperators, "keyword": keywords, "constant.language": builtinConstants, "storage.modifier": storageModifiers, "storage.type": storageType }, "identifier", true); this.$rules = { "start" : [ { token : "comment", regex : "--.*$" }, { token : "string", // " string regex : '".*?"' }, { token : "string", // ' string regex : "'.*?'" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "keyword", // pre-compiler directives regex : "\\s*(?:library|package|use)\\b", }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator", regex : "&|\\*|\\+|\\-|\\/|<|=|>|\\||=>|\\*\\*|:=|\\/=|>=|<=|<>" }, { token : "punctuation.operator", regex : "\\'|\\:|\\,|\\;|\\." },{ token : "paren.lparen", regex : "[[(]" }, { token : "paren.rparen", regex : "[\\])]" }, { token : "text", regex : "\\s+" } ], }; }; oop.inherits(VHDLHighlightRules, TextHighlightRules); exports.VHDLHighlightRules = VHDLHighlightRules; }); ace.define("ace/mode/vhdl",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/vhdl_highlight_rules","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var VHDLHighlightRules = require("./vhdl_highlight_rules").VHDLHighlightRules; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = VHDLHighlightRules; }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "--"; this.$id = "ace/mode/vhdl"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-xml.js ================================================ ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction", }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)([-_a-zA-Z0-9]+)", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var XmlFoldMode = require("./folding/xml").FoldMode; var Mode = function() { this.HighlightRules = XmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.foldingRules = new XmlFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.voidElements = lang.arrayToMap([]); this.blockComment = {start: ""}; this.$id = "ace/mode/xml"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-xquery.js ================================================ ace.define("ace/mode/xquery/xquery_lexer",["require","exports","module"], function(require, exports, module) { module.exports = (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 0 ? XQueryTokenizer.TOKEN[o] : null; }; this.getExpectedTokenSet = function(e) { var expected; if (e.getExpected() < 0) { expected = XQueryTokenizer.getTokenSet(- e.getState()); } else { expected = [XQueryTokenizer.TOKEN[e.getExpected()]]; } return expected; }; this.getErrorMessage = function(e) { var tokenSet = this.getExpectedTokenSet(e); var found = this.getOffendingToken(e); var prefix = input.substring(0, e.getBegin()); var lines = prefix.split("\n"); var line = lines.length; var column = lines[line - 1].length + 1; var size = e.getEnd() - e.getBegin(); return e.getMessage() + (found == null ? "" : ", found " + found) + "\nwhile expecting " + (tokenSet.length == 1 ? tokenSet[0] : ("[" + tokenSet.join(", ") + "]")) + "\n" + (size == 0 || found != null ? "" : "after successfully scanning " + size + " characters beginning ") + "at line " + line + ", column " + column + ":\n..." + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64)) + "..."; }; this.parse_start = function() { eventHandler.startNonterminal("start", e0); lookahead1W(14); // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest | switch (l1) { case 55: // '' | '=' | '>' switch (l1) { case 58: // '>' shift(58); // '>' break; case 50: // '/>' shift(50); // '/>' break; case 27: // QName shift(27); // QName break; case 57: // '=' shift(57); // '=' break; case 35: // '"' shift(35); // '"' break; case 38: // "'" shift(38); // "'" break; default: shift(33); // EOF } eventHandler.endNonterminal("StartTag", e0); }; this.parse_TagContent = function() { eventHandler.startNonterminal("TagContent", e0); lookahead1(11); // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF | switch (l1) { case 23: // ElementContentChar shift(23); // ElementContentChar break; case 6: // Tag shift(6); // Tag break; case 7: // EndTag shift(7); // EndTag break; case 55: // '' switch (l1) { case 11: // CDataSectionContents shift(11); // CDataSectionContents break; case 64: // ']]>' shift(64); // ']]>' break; default: shift(33); // EOF } eventHandler.endNonterminal("CData", e0); }; this.parse_XMLComment = function() { eventHandler.startNonterminal("XMLComment", e0); lookahead1(0); // DirCommentContents | EOF | '-->' switch (l1) { case 9: // DirCommentContents shift(9); // DirCommentContents break; case 47: // '-->' shift(47); // '-->' break; default: shift(33); // EOF } eventHandler.endNonterminal("XMLComment", e0); }; this.parse_PI = function() { eventHandler.startNonterminal("PI", e0); lookahead1(3); // DirPIContents | EOF | '?' | '?>' switch (l1) { case 10: // DirPIContents shift(10); // DirPIContents break; case 59: // '?' shift(59); // '?' break; case 60: // '?>' shift(60); // '?>' break; default: shift(33); // EOF } eventHandler.endNonterminal("PI", e0); }; this.parse_Pragma = function() { eventHandler.startNonterminal("Pragma", e0); lookahead1(2); // PragmaContents | EOF | '#' | '#)' switch (l1) { case 8: // PragmaContents shift(8); // PragmaContents break; case 36: // '#' shift(36); // '#' break; case 37: // '#)' shift(37); // '#)' break; default: shift(33); // EOF } eventHandler.endNonterminal("Pragma", e0); }; this.parse_Comment = function() { eventHandler.startNonterminal("Comment", e0); lookahead1(4); // CommentContents | EOF | '(:' | ':)' switch (l1) { case 52: // ':)' shift(52); // ':)' break; case 41: // '(:' shift(41); // '(:' break; case 30: // CommentContents shift(30); // CommentContents break; default: shift(33); // EOF } eventHandler.endNonterminal("Comment", e0); }; this.parse_CommentDoc = function() { eventHandler.startNonterminal("CommentDoc", e0); lookahead1(5); // DocTag | DocCommentContents | EOF | '(:' | ':)' switch (l1) { case 31: // DocTag shift(31); // DocTag break; case 32: // DocCommentContents shift(32); // DocCommentContents break; case 52: // ':)' shift(52); // ':)' break; case 41: // '(:' shift(41); // '(:' break; default: shift(33); // EOF } eventHandler.endNonterminal("CommentDoc", e0); }; this.parse_QuotString = function() { eventHandler.startNonterminal("QuotString", e0); lookahead1(6); // PredefinedEntityRef | EscapeQuot | QuotChar | CharRef | EOF | '"' switch (l1) { case 18: // PredefinedEntityRef shift(18); // PredefinedEntityRef break; case 29: // CharRef shift(29); // CharRef break; case 19: // EscapeQuot shift(19); // EscapeQuot break; case 21: // QuotChar shift(21); // QuotChar break; case 35: // '"' shift(35); // '"' break; default: shift(33); // EOF } eventHandler.endNonterminal("QuotString", e0); }; this.parse_AposString = function() { eventHandler.startNonterminal("AposString", e0); lookahead1(7); // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | "'" switch (l1) { case 18: // PredefinedEntityRef shift(18); // PredefinedEntityRef break; case 29: // CharRef shift(29); // CharRef break; case 20: // EscapeApos shift(20); // EscapeApos break; case 22: // AposChar shift(22); // AposChar break; case 38: // "'" shift(38); // "'" break; default: shift(33); // EOF } eventHandler.endNonterminal("AposString", e0); }; this.parse_Prefix = function() { eventHandler.startNonterminal("Prefix", e0); lookahead1W(13); // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | whitespace(); parse_NCName(); eventHandler.endNonterminal("Prefix", e0); }; this.parse__EQName = function() { eventHandler.startNonterminal("_EQName", e0); lookahead1W(12); // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | whitespace(); parse_EQName(); eventHandler.endNonterminal("_EQName", e0); }; function parse_EQName() { eventHandler.startNonterminal("EQName", e0); switch (l1) { case 77: // 'attribute' shift(77); // 'attribute' break; case 91: // 'comment' shift(91); // 'comment' break; case 115: // 'document-node' shift(115); // 'document-node' break; case 116: // 'element' shift(116); // 'element' break; case 119: // 'empty-sequence' shift(119); // 'empty-sequence' break; case 140: // 'function' shift(140); // 'function' break; case 147: // 'if' shift(147); // 'if' break; case 160: // 'item' shift(160); // 'item' break; case 180: // 'namespace-node' shift(180); // 'namespace-node' break; case 186: // 'node' shift(186); // 'node' break; case 211: // 'processing-instruction' shift(211); // 'processing-instruction' break; case 221: // 'schema-attribute' shift(221); // 'schema-attribute' break; case 222: // 'schema-element' shift(222); // 'schema-element' break; case 238: // 'switch' shift(238); // 'switch' break; case 239: // 'text' shift(239); // 'text' break; case 248: // 'typeswitch' shift(248); // 'typeswitch' break; default: parse_FunctionName(); } eventHandler.endNonterminal("EQName", e0); } function parse_FunctionName() { eventHandler.startNonterminal("FunctionName", e0); switch (l1) { case 14: // EQName^Token shift(14); // EQName^Token break; case 65: // 'after' shift(65); // 'after' break; case 68: // 'ancestor' shift(68); // 'ancestor' break; case 69: // 'ancestor-or-self' shift(69); // 'ancestor-or-self' break; case 70: // 'and' shift(70); // 'and' break; case 74: // 'as' shift(74); // 'as' break; case 75: // 'ascending' shift(75); // 'ascending' break; case 79: // 'before' shift(79); // 'before' break; case 83: // 'case' shift(83); // 'case' break; case 84: // 'cast' shift(84); // 'cast' break; case 85: // 'castable' shift(85); // 'castable' break; case 88: // 'child' shift(88); // 'child' break; case 89: // 'collation' shift(89); // 'collation' break; case 98: // 'copy' shift(98); // 'copy' break; case 100: // 'count' shift(100); // 'count' break; case 103: // 'declare' shift(103); // 'declare' break; case 104: // 'default' shift(104); // 'default' break; case 105: // 'delete' shift(105); // 'delete' break; case 106: // 'descendant' shift(106); // 'descendant' break; case 107: // 'descendant-or-self' shift(107); // 'descendant-or-self' break; case 108: // 'descending' shift(108); // 'descending' break; case 113: // 'div' shift(113); // 'div' break; case 114: // 'document' shift(114); // 'document' break; case 117: // 'else' shift(117); // 'else' break; case 118: // 'empty' shift(118); // 'empty' break; case 121: // 'end' shift(121); // 'end' break; case 123: // 'eq' shift(123); // 'eq' break; case 124: // 'every' shift(124); // 'every' break; case 126: // 'except' shift(126); // 'except' break; case 129: // 'first' shift(129); // 'first' break; case 130: // 'following' shift(130); // 'following' break; case 131: // 'following-sibling' shift(131); // 'following-sibling' break; case 132: // 'for' shift(132); // 'for' break; case 141: // 'ge' shift(141); // 'ge' break; case 143: // 'group' shift(143); // 'group' break; case 145: // 'gt' shift(145); // 'gt' break; case 146: // 'idiv' shift(146); // 'idiv' break; case 148: // 'import' shift(148); // 'import' break; case 154: // 'insert' shift(154); // 'insert' break; case 155: // 'instance' shift(155); // 'instance' break; case 157: // 'intersect' shift(157); // 'intersect' break; case 158: // 'into' shift(158); // 'into' break; case 159: // 'is' shift(159); // 'is' break; case 165: // 'last' shift(165); // 'last' break; case 167: // 'le' shift(167); // 'le' break; case 169: // 'let' shift(169); // 'let' break; case 173: // 'lt' shift(173); // 'lt' break; case 175: // 'mod' shift(175); // 'mod' break; case 176: // 'modify' shift(176); // 'modify' break; case 177: // 'module' shift(177); // 'module' break; case 179: // 'namespace' shift(179); // 'namespace' break; case 181: // 'ne' shift(181); // 'ne' break; case 193: // 'only' shift(193); // 'only' break; case 195: // 'or' shift(195); // 'or' break; case 196: // 'order' shift(196); // 'order' break; case 197: // 'ordered' shift(197); // 'ordered' break; case 201: // 'parent' shift(201); // 'parent' break; case 207: // 'preceding' shift(207); // 'preceding' break; case 208: // 'preceding-sibling' shift(208); // 'preceding-sibling' break; case 213: // 'rename' shift(213); // 'rename' break; case 214: // 'replace' shift(214); // 'replace' break; case 215: // 'return' shift(215); // 'return' break; case 219: // 'satisfies' shift(219); // 'satisfies' break; case 224: // 'self' shift(224); // 'self' break; case 230: // 'some' shift(230); // 'some' break; case 231: // 'stable' shift(231); // 'stable' break; case 232: // 'start' shift(232); // 'start' break; case 243: // 'to' shift(243); // 'to' break; case 244: // 'treat' shift(244); // 'treat' break; case 245: // 'try' shift(245); // 'try' break; case 249: // 'union' shift(249); // 'union' break; case 251: // 'unordered' shift(251); // 'unordered' break; case 255: // 'validate' shift(255); // 'validate' break; case 261: // 'where' shift(261); // 'where' break; case 265: // 'with' shift(265); // 'with' break; case 269: // 'xquery' shift(269); // 'xquery' break; case 67: // 'allowing' shift(67); // 'allowing' break; case 76: // 'at' shift(76); // 'at' break; case 78: // 'base-uri' shift(78); // 'base-uri' break; case 80: // 'boundary-space' shift(80); // 'boundary-space' break; case 81: // 'break' shift(81); // 'break' break; case 86: // 'catch' shift(86); // 'catch' break; case 93: // 'construction' shift(93); // 'construction' break; case 96: // 'context' shift(96); // 'context' break; case 97: // 'continue' shift(97); // 'continue' break; case 99: // 'copy-namespaces' shift(99); // 'copy-namespaces' break; case 101: // 'decimal-format' shift(101); // 'decimal-format' break; case 120: // 'encoding' shift(120); // 'encoding' break; case 127: // 'exit' shift(127); // 'exit' break; case 128: // 'external' shift(128); // 'external' break; case 136: // 'ft-option' shift(136); // 'ft-option' break; case 149: // 'in' shift(149); // 'in' break; case 150: // 'index' shift(150); // 'index' break; case 156: // 'integrity' shift(156); // 'integrity' break; case 166: // 'lax' shift(166); // 'lax' break; case 187: // 'nodes' shift(187); // 'nodes' break; case 194: // 'option' shift(194); // 'option' break; case 198: // 'ordering' shift(198); // 'ordering' break; case 217: // 'revalidation' shift(217); // 'revalidation' break; case 220: // 'schema' shift(220); // 'schema' break; case 223: // 'score' shift(223); // 'score' break; case 229: // 'sliding' shift(229); // 'sliding' break; case 235: // 'strict' shift(235); // 'strict' break; case 246: // 'tumbling' shift(246); // 'tumbling' break; case 247: // 'type' shift(247); // 'type' break; case 252: // 'updating' shift(252); // 'updating' break; case 256: // 'value' shift(256); // 'value' break; case 257: // 'variable' shift(257); // 'variable' break; case 258: // 'version' shift(258); // 'version' break; case 262: // 'while' shift(262); // 'while' break; case 92: // 'constraint' shift(92); // 'constraint' break; case 171: // 'loop' shift(171); // 'loop' break; default: shift(216); // 'returning' } eventHandler.endNonterminal("FunctionName", e0); } function parse_NCName() { eventHandler.startNonterminal("NCName", e0); switch (l1) { case 26: // NCName^Token shift(26); // NCName^Token break; case 65: // 'after' shift(65); // 'after' break; case 70: // 'and' shift(70); // 'and' break; case 74: // 'as' shift(74); // 'as' break; case 75: // 'ascending' shift(75); // 'ascending' break; case 79: // 'before' shift(79); // 'before' break; case 83: // 'case' shift(83); // 'case' break; case 84: // 'cast' shift(84); // 'cast' break; case 85: // 'castable' shift(85); // 'castable' break; case 89: // 'collation' shift(89); // 'collation' break; case 100: // 'count' shift(100); // 'count' break; case 104: // 'default' shift(104); // 'default' break; case 108: // 'descending' shift(108); // 'descending' break; case 113: // 'div' shift(113); // 'div' break; case 117: // 'else' shift(117); // 'else' break; case 118: // 'empty' shift(118); // 'empty' break; case 121: // 'end' shift(121); // 'end' break; case 123: // 'eq' shift(123); // 'eq' break; case 126: // 'except' shift(126); // 'except' break; case 132: // 'for' shift(132); // 'for' break; case 141: // 'ge' shift(141); // 'ge' break; case 143: // 'group' shift(143); // 'group' break; case 145: // 'gt' shift(145); // 'gt' break; case 146: // 'idiv' shift(146); // 'idiv' break; case 155: // 'instance' shift(155); // 'instance' break; case 157: // 'intersect' shift(157); // 'intersect' break; case 158: // 'into' shift(158); // 'into' break; case 159: // 'is' shift(159); // 'is' break; case 167: // 'le' shift(167); // 'le' break; case 169: // 'let' shift(169); // 'let' break; case 173: // 'lt' shift(173); // 'lt' break; case 175: // 'mod' shift(175); // 'mod' break; case 176: // 'modify' shift(176); // 'modify' break; case 181: // 'ne' shift(181); // 'ne' break; case 193: // 'only' shift(193); // 'only' break; case 195: // 'or' shift(195); // 'or' break; case 196: // 'order' shift(196); // 'order' break; case 215: // 'return' shift(215); // 'return' break; case 219: // 'satisfies' shift(219); // 'satisfies' break; case 231: // 'stable' shift(231); // 'stable' break; case 232: // 'start' shift(232); // 'start' break; case 243: // 'to' shift(243); // 'to' break; case 244: // 'treat' shift(244); // 'treat' break; case 249: // 'union' shift(249); // 'union' break; case 261: // 'where' shift(261); // 'where' break; case 265: // 'with' shift(265); // 'with' break; case 68: // 'ancestor' shift(68); // 'ancestor' break; case 69: // 'ancestor-or-self' shift(69); // 'ancestor-or-self' break; case 77: // 'attribute' shift(77); // 'attribute' break; case 88: // 'child' shift(88); // 'child' break; case 91: // 'comment' shift(91); // 'comment' break; case 98: // 'copy' shift(98); // 'copy' break; case 103: // 'declare' shift(103); // 'declare' break; case 105: // 'delete' shift(105); // 'delete' break; case 106: // 'descendant' shift(106); // 'descendant' break; case 107: // 'descendant-or-self' shift(107); // 'descendant-or-self' break; case 114: // 'document' shift(114); // 'document' break; case 115: // 'document-node' shift(115); // 'document-node' break; case 116: // 'element' shift(116); // 'element' break; case 119: // 'empty-sequence' shift(119); // 'empty-sequence' break; case 124: // 'every' shift(124); // 'every' break; case 129: // 'first' shift(129); // 'first' break; case 130: // 'following' shift(130); // 'following' break; case 131: // 'following-sibling' shift(131); // 'following-sibling' break; case 140: // 'function' shift(140); // 'function' break; case 147: // 'if' shift(147); // 'if' break; case 148: // 'import' shift(148); // 'import' break; case 154: // 'insert' shift(154); // 'insert' break; case 160: // 'item' shift(160); // 'item' break; case 165: // 'last' shift(165); // 'last' break; case 177: // 'module' shift(177); // 'module' break; case 179: // 'namespace' shift(179); // 'namespace' break; case 180: // 'namespace-node' shift(180); // 'namespace-node' break; case 186: // 'node' shift(186); // 'node' break; case 197: // 'ordered' shift(197); // 'ordered' break; case 201: // 'parent' shift(201); // 'parent' break; case 207: // 'preceding' shift(207); // 'preceding' break; case 208: // 'preceding-sibling' shift(208); // 'preceding-sibling' break; case 211: // 'processing-instruction' shift(211); // 'processing-instruction' break; case 213: // 'rename' shift(213); // 'rename' break; case 214: // 'replace' shift(214); // 'replace' break; case 221: // 'schema-attribute' shift(221); // 'schema-attribute' break; case 222: // 'schema-element' shift(222); // 'schema-element' break; case 224: // 'self' shift(224); // 'self' break; case 230: // 'some' shift(230); // 'some' break; case 238: // 'switch' shift(238); // 'switch' break; case 239: // 'text' shift(239); // 'text' break; case 245: // 'try' shift(245); // 'try' break; case 248: // 'typeswitch' shift(248); // 'typeswitch' break; case 251: // 'unordered' shift(251); // 'unordered' break; case 255: // 'validate' shift(255); // 'validate' break; case 257: // 'variable' shift(257); // 'variable' break; case 269: // 'xquery' shift(269); // 'xquery' break; case 67: // 'allowing' shift(67); // 'allowing' break; case 76: // 'at' shift(76); // 'at' break; case 78: // 'base-uri' shift(78); // 'base-uri' break; case 80: // 'boundary-space' shift(80); // 'boundary-space' break; case 81: // 'break' shift(81); // 'break' break; case 86: // 'catch' shift(86); // 'catch' break; case 93: // 'construction' shift(93); // 'construction' break; case 96: // 'context' shift(96); // 'context' break; case 97: // 'continue' shift(97); // 'continue' break; case 99: // 'copy-namespaces' shift(99); // 'copy-namespaces' break; case 101: // 'decimal-format' shift(101); // 'decimal-format' break; case 120: // 'encoding' shift(120); // 'encoding' break; case 127: // 'exit' shift(127); // 'exit' break; case 128: // 'external' shift(128); // 'external' break; case 136: // 'ft-option' shift(136); // 'ft-option' break; case 149: // 'in' shift(149); // 'in' break; case 150: // 'index' shift(150); // 'index' break; case 156: // 'integrity' shift(156); // 'integrity' break; case 166: // 'lax' shift(166); // 'lax' break; case 187: // 'nodes' shift(187); // 'nodes' break; case 194: // 'option' shift(194); // 'option' break; case 198: // 'ordering' shift(198); // 'ordering' break; case 217: // 'revalidation' shift(217); // 'revalidation' break; case 220: // 'schema' shift(220); // 'schema' break; case 223: // 'score' shift(223); // 'score' break; case 229: // 'sliding' shift(229); // 'sliding' break; case 235: // 'strict' shift(235); // 'strict' break; case 246: // 'tumbling' shift(246); // 'tumbling' break; case 247: // 'type' shift(247); // 'type' break; case 252: // 'updating' shift(252); // 'updating' break; case 256: // 'value' shift(256); // 'value' break; case 258: // 'version' shift(258); // 'version' break; case 262: // 'while' shift(262); // 'while' break; case 92: // 'constraint' shift(92); // 'constraint' break; case 171: // 'loop' shift(171); // 'loop' break; default: shift(216); // 'returning' } eventHandler.endNonterminal("NCName", e0); } function shift(t) { if (l1 == t) { whitespace(); eventHandler.terminal(XQueryTokenizer.TOKEN[l1], b1, e1 > size ? size : e1); b0 = b1; e0 = e1; l1 = 0; } else { error(b1, e1, 0, l1, t); } } function whitespace() { if (e0 != b1) { b0 = e0; e0 = b1; eventHandler.whitespace(b0, e0); } } function matchW(set) { var code; for (;;) { code = match(set); if (code != 28) // S^WS { break; } } return code; } function lookahead1W(set) { if (l1 == 0) { l1 = matchW(set); b1 = begin; e1 = end; } } function lookahead1(set) { if (l1 == 0) { l1 = match(set); b1 = begin; e1 = end; } } function error(b, e, s, l, t) { throw new self.ParseException(b, e, s, l, t); } var lk, b0, e0; var l1, b1, e1; var eventHandler; var input; var size; var begin; var end; function match(tokenSetId) { var nonbmp = false; begin = end; var current = end; var result = XQueryTokenizer.INITIAL[tokenSetId]; var state = 0; for (var code = result & 4095; code != 0; ) { var charclass; var c0 = current < size ? input.charCodeAt(current) : 0; ++current; if (c0 < 0x80) { charclass = XQueryTokenizer.MAP0[c0]; } else if (c0 < 0xd800) { var c1 = c0 >> 4; charclass = XQueryTokenizer.MAP1[(c0 & 15) + XQueryTokenizer.MAP1[(c1 & 31) + XQueryTokenizer.MAP1[c1 >> 5]]]; } else { if (c0 < 0xdc00) { var c1 = current < size ? input.charCodeAt(current) : 0; if (c1 >= 0xdc00 && c1 < 0xe000) { ++current; c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000; nonbmp = true; } } var lo = 0, hi = 5; for (var m = 3; ; m = (hi + lo) >> 1) { if (XQueryTokenizer.MAP2[m] > c0) hi = m - 1; else if (XQueryTokenizer.MAP2[6 + m] < c0) lo = m + 1; else {charclass = XQueryTokenizer.MAP2[12 + m]; break;} if (lo > hi) {charclass = 0; break;} } } state = code; var i0 = (charclass << 12) + code - 1; code = XQueryTokenizer.TRANSITION[(i0 & 15) + XQueryTokenizer.TRANSITION[i0 >> 4]]; if (code > 4095) { result = code; code &= 4095; end = current; } } result >>= 12; if (result == 0) { end = current - 1; var c1 = end < size ? input.charCodeAt(end) : 0; if (c1 >= 0xdc00 && c1 < 0xe000) --end; return error(begin, end, state, -1, -1); } if (nonbmp) { for (var i = result >> 9; i > 0; --i) { --end; var c1 = end < size ? input.charCodeAt(end) : 0; if (c1 >= 0xdc00 && c1 < 0xe000) --end; } } else { end -= result >> 9; } return (result & 511) - 1; } } XQueryTokenizer.getTokenSet = function(tokenSetId) { var set = []; var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095; for (var i = 0; i < 276; i += 32) { var j = i; var i0 = (i >> 5) * 2062 + s - 1; var i1 = i0 >> 2; var i2 = i1 >> 2; var f = XQueryTokenizer.EXPECTED[(i0 & 3) + XQueryTokenizer.EXPECTED[(i1 & 3) + XQueryTokenizer.EXPECTED[(i2 & 3) + XQueryTokenizer.EXPECTED[i2 >> 2]]]]; for ( ; f != 0; f >>>= 1, ++j) { if ((f & 1) != 0) { set.push(XQueryTokenizer.TOKEN[j]); } } } return set; }; XQueryTokenizer.MAP0 = [ 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35 ]; XQueryTokenizer.MAP1 = [ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 35, 35, 35, 35, 35, 35, 35, 65, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65 ]; XQueryTokenizer.MAP2 = [ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 35, 31, 35, 31, 31, 35 ]; XQueryTokenizer.INITIAL = [ 1, 2, 36867, 45060, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]; XQueryTokenizer.TRANSITION = [ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22908, 18836, 17152, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18579, 21711, 17152, 19008, 19233, 20367, 19008, 28684, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20116, 18836, 18637, 19008, 19233, 21267, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18763, 18778, 18794, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18821, 22923, 18906, 19008, 19233, 17431, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18937, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19054, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 18953, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21843, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21696, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22429, 20131, 18720, 19008, 19233, 20367, 19008, 17173, 23559, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 18087, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 21242, 19111, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19024, 18836, 18609, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19081, 22444, 18987, 19008, 19233, 20367, 19008, 19065, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21992, 22007, 18987, 19008, 19233, 20367, 19008, 18690, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22414, 18836, 18987, 19008, 19233, 30651, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19138, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19280, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 19172, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21783, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19218, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21651, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19249, 19265, 19307, 18888, 27857, 30536, 24401, 31444, 23357, 18888, 19351, 18888, 18890, 27211, 19370, 27211, 27211, 19392, 24401, 31911, 24401, 24401, 25467, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 17994, 24060, 18888, 18888, 18888, 18890, 19468, 27211, 27211, 27211, 27211, 19484, 35367, 19520, 24401, 24401, 24401, 19628, 18888, 29855, 18888, 18888, 23086, 27211, 19538, 27211, 27211, 30756, 24012, 24401, 19560, 24401, 24401, 26750, 18888, 18888, 19327, 27855, 27211, 27211, 19580, 17590, 24017, 24401, 24401, 19600, 25665, 18888, 18888, 28518, 27211, 27212, 24016, 19620, 19868, 28435, 25722, 18889, 19644, 27211, 32888, 35852, 19868, 31018, 19694, 19376, 19717, 22215, 19735, 22098, 19751, 35203, 19776, 19797, 19817, 19840, 25783, 31738, 24135, 19701, 19856, 31015, 23516, 31008, 28311, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21768, 18836, 19307, 18888, 27857, 27904, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19888, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22399, 18836, 19918, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21666, 18836, 19307, 18888, 27857, 27525, 24401, 29183, 21467, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19946, 24401, 24401, 24401, 24401, 32382, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19998, 24401, 24401, 24401, 24401, 31500, 18467, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 20021, 24401, 24401, 24401, 24401, 24401, 34271, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 32926, 29908, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 20050, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20101, 19039, 20191, 20412, 20903, 17569, 20309, 20872, 25633, 20623, 20505, 20218, 20242, 17189, 17208, 17281, 20355, 20265, 20306, 20328, 20383, 22490, 20796, 20619, 21354, 20654, 20410, 20956, 21232, 20765, 17421, 20535, 17192, 18127, 22459, 20312, 25531, 22470, 20309, 20428, 18964, 20466, 20491, 21342, 21070, 20521, 20682, 17714, 18326, 17543, 17559, 17585, 22497, 20559, 19504, 20279, 20575, 20290, 20475, 20604, 20639, 20226, 20670, 17661, 21190, 17703, 21176, 17730, 19494, 20698, 20711, 22480, 21046, 21116, 18971, 21130, 20727, 20755, 17675, 17753, 17832, 17590, 25518, 20394, 20781, 20831, 20202, 20847, 21401, 17292, 17934, 17979, 18549, 20863, 20588, 25542, 20888, 20919, 18072, 18117, 20935, 20972, 21032, 21062, 21086, 18239, 21102, 18563, 21146, 21162, 21206, 18351, 20949, 20902, 18340, 21222, 21258, 21283, 18360, 20249, 17405, 21295, 21311, 21327, 20739, 20343, 21370, 21386, 21417, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21977, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 21452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 21504, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 36501, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 28674, 21946, 17617, 36473, 18223, 17237, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 21575, 21534, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 21560, 30628, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21798, 18836, 21612, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21636, 18836, 18987, 19008, 19233, 17902, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21753, 19096, 21903, 19008, 19233, 20367, 19008, 19291, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17379, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 21931, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18280, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21962, 18594, 18987, 19008, 19233, 22043, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21681, 21858, 18987, 19008, 19233, 20367, 19008, 21544, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 32319, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 22231, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 31678, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 33588, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 35019, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22248, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22324, 18836, 22059, 18888, 27857, 30501, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 34365, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22354, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 27086, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 19930, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22309, 22513, 18987, 19008, 19233, 20367, 19008, 19122, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 22544, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22608, 18836, 22988, 23004, 27585, 23020, 23036, 23067, 22087, 18888, 18888, 18888, 23083, 27211, 27211, 27211, 23102, 22121, 24401, 24401, 24401, 23122, 31386, 26154, 19674, 18888, 28119, 28232, 19424, 23705, 27211, 27211, 23142, 23173, 23189, 23212, 24401, 24401, 23246, 34427, 31693, 23262, 18888, 23290, 23308, 27783, 27620, 23327, 35263, 35107, 33383, 23346, 18193, 23393, 32748, 23968, 24401, 23414, 35153, 23463, 18888, 33913, 23442, 23482, 27211, 27211, 23532, 23552, 21431, 23575, 24401, 24401, 23604, 26095, 23635, 23657, 18888, 33482, 23685, 33251, 27211, 22187, 18851, 23721, 35536, 24401, 18887, 23750, 32641, 27211, 23769, 23787, 20080, 33012, 24384, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 23803, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 28224, 31826, 23823, 26917, 34978, 23850, 26493, 25782, 23878, 23914, 23516, 31008, 22105, 19419, 27963, 19659, 29781, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22623, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 28909, 25783, 27211, 27211, 27211, 34048, 23933, 22164, 24401, 24401, 24401, 28409, 23949, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 26583, 18888, 18888, 18888, 35585, 23984, 27211, 27211, 27211, 24005, 22201, 24033, 24401, 24401, 24401, 24052, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 26496, 24076, 24126, 24151, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22638, 18836, 22059, 19678, 27857, 24185, 24401, 24201, 24217, 26592, 18888, 18888, 18890, 24252, 24268, 27211, 27211, 22121, 24287, 24303, 24401, 24401, 30613, 19781, 35432, 36007, 32649, 18888, 25783, 24322, 28966, 23771, 27211, 35072, 22164, 24358, 32106, 26829, 24400, 31500, 31693, 18888, 18888, 18888, 24801, 18890, 27211, 27211, 27211, 27211, 24418, 19484, 24401, 24401, 24401, 24401, 20167, 31181, 18888, 18888, 18888, 27833, 23086, 27211, 27211, 33540, 27211, 30756, 21431, 24401, 24401, 22972, 24401, 26095, 18888, 36131, 18888, 27855, 27211, 24440, 27211, 22187, 22968, 24401, 24459, 24401, 31699, 28454, 18888, 34528, 34570, 35779, 24478, 24402, 24494, 25659, 18888, 36228, 27211, 27211, 24515, 30981, 23734, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 24538, 31017, 27856, 31741, 30059, 23377, 24563, 19837, 25782, 19760, 31015, 23516, 25374, 22105, 19419, 29793, 24579, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22653, 18836, 22059, 25756, 19982, 34097, 23196, 29183, 24614, 24110, 23641, 24673, 26103, 24697, 24443, 24713, 28558, 22121, 24748, 24462, 24764, 23398, 30613, 18888, 18888, 18888, 18888, 24798, 25783, 27211, 27211, 27211, 34232, 35072, 22164, 24401, 24401, 24401, 33302, 31500, 22559, 24106, 24232, 18888, 18888, 34970, 24817, 30411, 27211, 27211, 32484, 19484, 29750, 35127, 24401, 24401, 19872, 31181, 24852, 18888, 18888, 24871, 29221, 27211, 27211, 32072, 27211, 30756, 34441, 24401, 24401, 31571, 24401, 26095, 33141, 27802, 27011, 27855, 25295, 25607, 24888, 22187, 22968, 19195, 34593, 24906, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 33663, 27211, 27211, 24924, 24947, 23588, 31018, 18890, 27211, 31833, 22135, 19447, 23086, 23330, 19828, 30904, 31042, 24972, 19840, 25000, 31738, 30898, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 25016, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22668, 18836, 25041, 25057, 31320, 25073, 25089, 25105, 22087, 34796, 24236, 36138, 34870, 34125, 25121, 23106, 35497, 22248, 36613, 25137, 30671, 27365, 30613, 25153, 26447, 25199, 25233, 22574, 23274, 25249, 25265, 25281, 25318, 25344, 25360, 25400, 25428, 25452, 26731, 25504, 31693, 23669, 25558, 27407, 25575, 28599, 25934, 25599, 27211, 28180, 27304, 25623, 25839, 25649, 24401, 34820, 25681, 25698, 22586, 27775, 30190, 25745, 25778, 25799, 25817, 28995, 33569, 30756, 21518, 33443, 25837, 25855, 25893, 26095, 31254, 26677, 30136, 27855, 25930, 25950, 27211, 22187, 22968, 25966, 25986, 24401, 23428, 27763, 36330, 26959, 26002, 26029, 26045, 26085, 26119, 26170, 26203, 26222, 26239, 30527, 26372, 26274, 28404, 31018, 33757, 27211, 34262, 26316, 36729, 26345, 26366, 35337, 31017, 26388, 26407, 30954, 26350, 33861, 26434, 26463, 26479, 26512, 23516, 33189, 26531, 26547, 27963, 31293, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22683, 18836, 26568, 26181, 26608, 34097, 26643, 29183, 22087, 26669, 18888, 18888, 18890, 26693, 27211, 27211, 27211, 22121, 26720, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 26774, 25783, 27211, 27211, 27211, 26619, 35072, 22164, 24401, 24401, 24401, 21596, 31500, 31693, 18888, 18888, 33978, 18888, 18890, 27211, 27211, 25801, 27211, 27211, 19484, 24401, 24401, 24401, 26792, 24401, 31181, 18888, 18888, 18888, 35464, 23086, 27211, 27211, 27211, 26809, 30756, 21431, 24401, 24401, 24401, 26828, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 31948, 18889, 35707, 27211, 19719, 26845, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 26905, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 24984, 31088, 19419, 26945, 27651, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22698, 18836, 26999, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23051, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 27033, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 27056, 18888, 18890, 27211, 27211, 30320, 27211, 27211, 27075, 24401, 24401, 29032, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 33986, 27855, 27211, 27211, 27102, 17590, 24017, 24401, 24401, 27123, 27144, 36254, 27162, 27210, 27228, 28500, 18187, 34842, 33426, 27244, 35980, 27277, 27302, 27320, 36048, 34013, 20999, 31882, 21478, 27895, 27356, 30287, 27381, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 26329, 30087, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 27406, 27423, 27445, 35294, 27461, 22087, 18888, 18888, 30140, 18890, 27211, 27211, 27989, 27211, 22121, 24401, 24401, 25682, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 34042, 27211, 27211, 27211, 27211, 29700, 22164, 24401, 24401, 24401, 24401, 27128, 31693, 27477, 18888, 18888, 18888, 18890, 27194, 27211, 27211, 27211, 27211, 19484, 35299, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 27059, 23086, 27211, 27211, 27211, 33366, 30756, 24012, 24401, 24401, 24401, 35044, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 20815, 27211, 30818, 19960, 33969, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22713, 18836, 22059, 27496, 27516, 27541, 35231, 27557, 22087, 29662, 26292, 23292, 27573, 24836, 27601, 27211, 27636, 22121, 35544, 27686, 24401, 27721, 18866, 18888, 27799, 18888, 27818, 22071, 27853, 32260, 27211, 26013, 27873, 27920, 22164, 29419, 24401, 29946, 33413, 26742, 27751, 26881, 18888, 18888, 27261, 36776, 27936, 27211, 27211, 27211, 27988, 28005, 28031, 28052, 24401, 24401, 28069, 28088, 28135, 25488, 28152, 26069, 28167, 27211, 28340, 24657, 28196, 30756, 31523, 24401, 28212, 34176, 36174, 24956, 28248, 28266, 28290, 21488, 33077, 28327, 28356, 17590, 20986, 23126, 28391, 28425, 28102, 28451, 28470, 28490, 28516, 28534, 20034, 33728, 25868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 30241, 28274, 28553, 28574, 19406, 28590, 23086, 23330, 19828, 19452, 28615, 28660, 26147, 25783, 31738, 19837, 25782, 19760, 29613, 35958, 29276, 22105, 19419, 27963, 23157, 28700, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 22528, 18888, 18888, 18888, 18888, 18890, 27333, 27211, 27211, 27211, 27211, 19484, 30853, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22728, 18836, 28747, 28782, 28817, 28841, 28857, 28880, 28896, 24161, 28943, 32011, 36261, 27340, 28961, 29492, 28982, 29011, 24522, 29027, 25436, 29048, 23051, 27500, 29090, 29110, 30713, 18888, 23512, 29130, 25183, 27211, 29155, 28927, 27033, 29173, 23230, 24401, 29199, 35373, 31693, 18888, 18888, 25583, 32629, 29218, 27211, 27211, 31461, 30692, 29237, 27075, 24401, 24401, 24401, 29262, 29302, 19628, 18888, 34329, 18888, 18888, 23086, 27211, 29329, 27211, 27211, 30756, 24012, 35933, 24401, 24401, 24401, 27705, 31612, 18888, 18888, 29346, 29374, 27211, 35650, 17590, 21436, 29393, 24401, 25970, 18887, 33895, 18888, 27211, 32528, 27212, 24016, 32769, 19868, 25659, 18888, 26889, 27211, 27211, 29412, 23889, 24371, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31768, 19840, 25783, 31738, 19837, 29435, 29508, 31102, 29550, 29606, 22105, 30300, 29462, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22743, 18836, 22059, 29629, 29473, 34097, 33285, 29183, 29651, 27254, 18888, 29678, 33329, 32535, 27211, 29694, 29716, 22121, 19202, 24401, 32742, 29741, 18866, 26776, 33921, 28474, 18888, 18888, 25783, 29766, 27211, 29809, 27211, 35072, 22164, 35825, 24401, 29828, 24401, 24036, 36769, 25217, 18888, 18888, 29848, 18890, 27211, 29871, 27211, 26258, 27211, 29894, 24401, 29929, 24401, 36587, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 29725, 29962, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18473, 18888, 18888, 19584, 27211, 27212, 24016, 29982, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19902, 19447, 32052, 19544, 19828, 29998, 30097, 30031, 19840, 25783, 30047, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 30075, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22758, 18836, 30121, 30156, 30206, 30257, 30273, 30336, 22087, 35624, 32837, 25762, 18890, 29878, 34934, 26812, 27211, 22121, 24931, 23223, 29202, 24401, 18866, 34373, 30352, 18888, 18888, 18888, 23447, 24828, 27211, 27211, 27211, 35072, 30370, 35052, 24401, 24401, 24401, 24036, 29523, 18888, 18888, 27146, 18888, 31308, 30386, 27211, 27211, 30405, 30558, 19484, 30427, 24401, 24401, 29938, 35686, 19628, 28766, 30447, 34506, 35614, 23086, 28731, 30482, 30517, 30552, 30756, 24012, 20156, 30574, 30598, 30667, 26283, 33464, 28945, 27670, 30687, 32915, 33504, 25328, 17590, 23963, 20450, 33837, 21016, 32397, 26300, 30708, 30729, 27885, 30748, 21588, 36373, 30779, 26653, 24628, 33220, 32514, 30806, 31835, 25412, 25906, 26515, 18890, 28825, 31833, 26133, 19447, 28304, 31730, 23834, 26057, 30869, 30885, 32181, 30920, 30942, 32797, 25782, 30970, 31015, 23516, 31008, 30997, 31034, 27963, 19659, 29450, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22773, 18836, 31058, 31074, 32463, 31125, 31141, 31197, 22087, 18888, 29534, 35471, 36738, 27211, 24342, 31213, 24424, 22121, 24401, 20175, 31229, 31917, 27736, 31245, 34334, 27175, 18888, 29094, 27286, 27211, 31278, 31336, 27211, 31355, 31371, 24401, 31402, 31418, 24401, 31437, 31693, 18888, 31619, 32841, 18888, 18890, 27211, 27211, 31460, 31477, 27211, 19484, 24401, 24401, 31497, 36581, 24401, 33020, 18888, 18888, 18888, 18888, 30007, 27211, 27211, 27211, 27211, 31516, 32310, 24401, 24401, 24401, 24401, 31539, 18888, 28762, 18888, 24651, 35740, 27211, 27211, 28644, 31565, 35796, 24401, 24401, 19318, 32188, 18888, 24334, 28366, 27212, 29966, 29832, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 31587, 19868, 31635, 32435, 33693, 30105, 31663, 20005, 31715, 31757, 31784, 31812, 30015, 31851, 31878, 25783, 31898, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 31933, 30221, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22788, 18836, 22059, 25729, 30466, 31968, 24306, 31984, 32000, 32807, 35160, 27017, 29590, 34941, 19801, 29377, 33700, 22121, 27040, 30431, 29396, 28864, 29565, 18888, 18888, 18888, 32027, 18888, 25783, 27211, 27211, 23698, 27211, 35072, 22164, 24401, 24401, 30845, 24401, 24036, 32045, 18888, 26929, 18888, 18888, 18890, 27211, 31481, 32068, 27211, 27211, 32088, 24401, 33058, 32122, 24401, 24401, 33736, 18888, 18888, 33162, 18888, 23086, 27211, 27211, 29484, 27211, 28375, 32144, 24401, 24401, 33831, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 36704, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 33107, 22171, 33224, 24271, 32169, 31017, 27856, 31741, 19840, 25783, 31738, 30234, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 32204, 32232, 32252, 32677, 33295, 29074, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23619, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 32276, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 32299, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 33886, 18889, 36065, 27211, 19719, 35326, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22803, 18836, 32335, 31647, 34666, 32351, 32367, 32417, 22087, 18888, 32433, 19335, 32451, 27211, 32479, 27107, 32500, 22121, 24401, 32551, 20085, 32572, 18866, 22287, 23753, 18888, 18888, 32602, 32665, 27211, 32693, 27211, 26972, 32713, 32729, 24401, 32764, 24401, 25877, 32785, 34768, 18888, 27390, 32823, 24594, 24855, 32857, 24890, 32878, 32904, 27211, 32942, 32977, 24401, 33000, 29313, 24401, 30790, 26206, 27666, 33904, 18888, 23086, 36353, 27211, 33036, 27211, 30756, 24012, 32153, 24401, 33056, 24401, 35861, 18888, 18888, 30354, 27972, 27211, 27211, 33800, 17590, 20145, 24401, 24401, 34638, 20811, 18888, 18888, 33074, 27211, 27212, 36167, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 34616, 24169, 33093, 33123, 33157, 27856, 31741, 23862, 26552, 34302, 19837, 25782, 19760, 31015, 23516, 31008, 33178, 19973, 27963, 23497, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22818, 18836, 33205, 28113, 33240, 34097, 33275, 29183, 22087, 33318, 35438, 18888, 18890, 33345, 26391, 33382, 27211, 22121, 33399, 28072, 33442, 24401, 18866, 22232, 18888, 33459, 18888, 18888, 33480, 33498, 25175, 27211, 27211, 26704, 22164, 24775, 35239, 24401, 24401, 25914, 29580, 18888, 18888, 31109, 25211, 33520, 33539, 27211, 27211, 33556, 36284, 19484, 33585, 24401, 24401, 33604, 32556, 19628, 18888, 18888, 31262, 33658, 23086, 27211, 27211, 33679, 27211, 30756, 24012, 24401, 24401, 33716, 24401, 26854, 27480, 18888, 33752, 27855, 33259, 34701, 27211, 17590, 32102, 24782, 23807, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 33773, 36105, 19868, 25659, 18888, 23368, 27211, 29157, 19719, 23889, 34454, 29286, 18890, 33794, 25302, 33816, 19447, 34079, 33853, 31862, 31017, 27856, 31741, 33877, 28920, 33937, 19837, 30461, 34002, 22276, 36041, 34029, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22833, 18836, 34064, 32616, 34113, 34141, 34157, 34192, 34208, 32216, 36013, 31549, 31952, 34224, 34248, 34287, 29330, 34350, 34389, 34413, 34481, 26793, 18866, 26187, 29635, 22293, 18888, 36654, 25783, 34522, 34544, 34566, 25821, 35072, 22164, 34586, 34609, 34632, 19604, 24036, 36644, 36674, 24681, 18888, 32401, 34654, 31339, 34682, 34698, 27211, 34717, 34753, 28053, 34812, 34836, 24401, 33619, 19628, 34858, 32236, 34906, 24598, 33523, 27612, 34890, 34922, 24732, 29246, 36717, 33634, 34465, 32984, 34168, 26750, 34957, 18888, 18888, 34994, 35010, 27211, 33040, 17590, 29913, 35035, 24401, 36304, 25482, 30171, 35883, 35068, 35088, 26627, 20441, 31173, 35123, 35143, 35176, 24640, 30492, 29358, 19719, 35192, 35219, 25384, 28801, 35255, 35279, 32586, 34496, 23086, 23330, 29061, 31017, 27856, 31741, 19840, 25783, 31738, 24547, 25164, 35315, 31796, 35353, 34316, 22105, 19419, 27963, 24091, 28630, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22848, 18836, 22059, 34782, 34088, 35389, 21008, 35405, 35421, 35454, 18888, 18888, 23466, 35487, 27211, 27211, 27211, 35513, 31154, 24401, 24401, 24401, 35560, 18888, 26863, 36664, 35601, 24872, 25783, 30389, 23536, 26250, 35647, 35666, 22164, 19522, 19564, 30582, 35682, 27697, 35575, 29114, 18888, 18888, 18888, 18890, 27211, 35702, 27211, 27211, 27211, 35723, 24401, 35527, 24401, 24401, 24401, 19628, 30184, 18888, 18888, 18888, 23086, 35739, 27211, 27211, 27211, 29139, 22938, 24401, 24401, 24401, 24401, 23898, 35756, 18888, 18888, 25025, 35778, 27211, 27211, 17590, 20064, 35795, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 23917, 18890, 34550, 31833, 22262, 19447, 23086, 23330, 26418, 31017, 27856, 31741, 19840, 25783, 35812, 19837, 27187, 35841, 33135, 23516, 31008, 22105, 22148, 28712, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22863, 18836, 22059, 35877, 28723, 34097, 31164, 29183, 22087, 26758, 18888, 22592, 18890, 23989, 27211, 29812, 27211, 22121, 33778, 24401, 31421, 24401, 18866, 18888, 18888, 26872, 18888, 18888, 25783, 27211, 30732, 27211, 27211, 35072, 22164, 24401, 24908, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22878, 18836, 22059, 27837, 27857, 35899, 24401, 35915, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31602, 18888, 18888, 18888, 18888, 26223, 27211, 27211, 27211, 27211, 27211, 19484, 35931, 24401, 24401, 24401, 24401, 19628, 18888, 28136, 18888, 18888, 35949, 27211, 32862, 27211, 32697, 30756, 24012, 24401, 32283, 24401, 32128, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22893, 18836, 22059, 35974, 34882, 34097, 33960, 29183, 35996, 18888, 23311, 18888, 36029, 27211, 27211, 36064, 36081, 22121, 24401, 24401, 36104, 33950, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 36121, 18888, 25559, 18888, 18888, 18890, 27211, 27211, 30313, 27211, 27211, 36154, 24401, 24401, 34397, 24401, 24401, 19628, 28250, 18888, 18888, 18888, 23086, 30926, 27211, 27211, 27211, 26983, 24012, 33642, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 19354, 27857, 36190, 24401, 36206, 22087, 18888, 18888, 18888, 18007, 27211, 27211, 27211, 24724, 22121, 24401, 24401, 24401, 30827, 18866, 18888, 36222, 18888, 28795, 18888, 25783, 35100, 27211, 27429, 27211, 35072, 22164, 30836, 24401, 24499, 24401, 24036, 31693, 18888, 36244, 18888, 18888, 18890, 27211, 36088, 27211, 27211, 27211, 19484, 24401, 28036, 24401, 24401, 24401, 19628, 18888, 18888, 35631, 18888, 35762, 27211, 27211, 36277, 27211, 34730, 24012, 24401, 24401, 36300, 24401, 36320, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 25712, 18888, 18888, 36346, 27211, 27212, 19184, 24402, 19868, 25659, 32029, 18889, 27211, 33359, 19719, 23889, 36369, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22384, 18836, 36389, 19008, 19233, 20367, 36434, 17173, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36453, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22369, 18836, 18987, 19008, 19233, 20367, 19008, 21737, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21813, 18836, 36489, 19008, 19233, 20367, 19008, 17173, 17737, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17768, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20543, 22022, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36517, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 19307, 18888, 27857, 30756, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 36567, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 36603, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 36629, 36690, 18720, 19008, 19233, 20367, 19008, 17454, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17223, 17308, 17327, 17346, 18918, 36754, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 0, 94242, 0, 118820, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2482176, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 2207744, 2404352, 2412544, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3104768, 2605056, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2678784, 2207744, 2695168, 2207744, 2703360, 2207744, 2711552, 2752512, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 139, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2158592, 2158592, 2158592, 2863104, 2891776, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2785280, 2207744, 2809856, 2207744, 2207744, 2842624, 2207744, 2207744, 2207744, 2899968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2473984, 2207744, 2207744, 2494464, 2207744, 2207744, 2207744, 2523136, 2158592, 2404352, 2412544, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2605056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2678784, 2158592, 2695168, 2158592, 2703360, 2158592, 2711552, 2752512, 2158592, 2158592, 2785280, 2158592, 2158592, 2785280, 2158592, 2809856, 2158592, 2158592, 2842624, 2158592, 2158592, 2158592, 2899968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 641, 0, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 32768, 0, 2158592, 0, 2158592, 2158592, 2158592, 2383872, 2158592, 2158592, 2158592, 2158592, 3006464, 2383872, 2207744, 2207744, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2572573, 2158877, 2158877, 0, 2207744, 2207744, 2596864, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2641920, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 167936, 0, 0, 2162688, 0, 0, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2146304, 2146304, 2224128, 2224128, 2232320, 2232320, 2232320, 641, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2531328, 2158592, 2158592, 2158592, 2158592, 2158592, 2617344, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2502656, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2699264, 2158592, 2158592, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2207744, 2863104, 2891776, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3018752, 2207744, 3043328, 2207744, 2207744, 2207744, 2207744, 3080192, 2207744, 2207744, 3112960, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 172310, 279, 0, 2162688, 0, 0, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2404352, 2412544, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2584576, 2158592, 2609152, 2158592, 2158592, 2629632, 2158592, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2158592, 2158592, 3170304, 3174400, 2158592, 2367488, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 0, 2207744, 2207744, 2207744, 2433024, 2207744, 2453504, 2461696, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2510848, 2207744, 2207744, 2207744, 2207744, 2207744, 2531328, 2207744, 2207744, 2207744, 2207744, 2207744, 2617344, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 1508, 2715648, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2867200, 2207744, 2904064, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2580480, 2207744, 2207744, 2207744, 2207744, 2621440, 2207744, 2207744, 2207744, 3149824, 2207744, 2207744, 3170304, 3174400, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 2158592, 2158592, 2158592, 2404352, 2412544, 2707456, 2732032, 2207744, 2207744, 2207744, 2822144, 2826240, 2207744, 2895872, 2207744, 2207744, 2924544, 2207744, 2207744, 2973696, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 285, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 0, 0, 2535424, 2543616, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2572288, 2981888, 2207744, 2207744, 3002368, 2207744, 3047424, 3063808, 3076096, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3203072, 2708960, 2732032, 2158592, 2158592, 2158592, 2822144, 2827748, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2981888, 2158592, 2158592, 3002368, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2981888, 2158592, 2158592, 3003876, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 20480, 0, 0, 0, 0, 0, 2162688, 20480, 0, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2908160, 2527232, 2207744, 2207744, 2576384, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2908160, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 0, 0, 2158592, 2158592, 2158592, 2158592, 2633728, 2658304, 0, 0, 2740224, 2744320, 0, 2834432, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 933, 45, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 2494464, 2158592, 2158592, 2158592, 2524757, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 1504, 2158592, 2498560, 2158592, 2158592, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 2736128, 2158592, 2158592, 0, 2158592, 2912256, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3108864, 2158592, 2158592, 3133440, 3145728, 3153920, 2375680, 2379776, 2207744, 2207744, 2420736, 2207744, 2449408, 2207744, 2207744, 2207744, 2498560, 2207744, 2207744, 2207744, 2207744, 2568192, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 551, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 2020, 2158592, 2592768, 2625536, 2207744, 2207744, 2674688, 2736128, 2207744, 2207744, 2207744, 2912256, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 542, 0, 544, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 641, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2498560, 2158592, 2158592, 1621, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 1608, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1107, 97, 97, 1110, 97, 97, 3133440, 3145728, 3153920, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3014656, 2158592, 2158592, 3051520, 2158592, 2158592, 3100672, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2416640, 2207744, 2465792, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2633728, 2658304, 2740224, 2744320, 2834432, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 32768, 0, 0, 0, 0, 0, 0, 2367488, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2158592, 2158592, 2478080, 2158592, 2158592, 2158592, 2535424, 2543616, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3117056, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2699264, 2207744, 2207744, 2207744, 2207744, 2207744, 2748416, 2756608, 2777088, 2801664, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 0, 0, 2535709, 2543901, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2990365, 2158877, 2158877, 2158730, 2158730, 2158730, 2158730, 2158730, 2572426, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158592, 2158592, 2478080, 2207744, 2207744, 2990080, 2207744, 2207744, 2158592, 2158592, 2482176, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 0, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 3010560, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158592, 2428928, 2158592, 2514944, 0, 0, 2158592, 2588672, 2158592, 0, 2838528, 2158592, 2158592, 2158592, 3010560, 2158592, 2506752, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 0, 29315, 922, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 3006464, 2383872, 0, 2020, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158592, 2637824, 2953216, 2158592, 2539520, 2158592, 2539520, 2207744, 0, 0, 2539520, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 0, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2965504, 2965504, 2965504, 0, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2474269, 2158877, 2158877, 0, 0, 2158877, 2158877, 2158877, 2158877, 2634013, 2658589, 0, 0, 2740509, 2744605, 0, 2834717, 40976, 18, 36884, 45078, 24, 28, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 36884, 0, 0, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 86016, 0, 0, 2211840, 102439, 0, 0, 0, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 0, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 135, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2158592, 2158592, 2158592, 2596864, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2641920, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2494464, 2158592, 2158592, 2158592, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 0, 27, 27, 0, 2158592, 2498560, 2158592, 2158592, 0, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2494464, 2158592, 2158592, 2158592, 3006464, 2383872, 0, 0, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 40976, 18, 36884, 45078, 24, 27, 147488, 94242, 147456, 147488, 106538, 98347, 0, 0, 147456, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 81920, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2428928, 2158592, 2514944, 2158592, 2588672, 2158592, 2838528, 2158592, 2158592, 40976, 18, 151573, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1487, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 130, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3096576, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 644, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 1080, 0, 1084, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2531466, 2158730, 2158730, 2158730, 2158730, 2158730, 2617482, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2158592, 2818048, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 159779, 159744, 102439, 159779, 98347, 0, 0, 159744, 40976, 18, 18, 36884, 0, 45078, 0, 2224253, 172032, 2224253, 2232448, 2232448, 172032, 2232448, 90143, 0, 0, 2170880, 0, 0, 550, 829, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 124, 124, 127, 127, 127, 40976, 18, 36884, 45078, 25, 29, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 163931, 40976, 18, 18, 36884, 0, 45078, 249856, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 0, 827, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 4243810, 4243810, 24, 24, 27, 27, 27, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 57344, 286, 2158592, 2158592, 2158592, 2158592, 2707456, 2732032, 2158592, 2158592, 2158592, 2822144, 2826240, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1613, 97, 97, 97, 97, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 546, 0, 0, 0, 0, 286, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 17, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 120, 121, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 53248, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 196608, 18, 266240, 24, 24, 27, 27, 27, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 0, 45, 45, 45, 45, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 45, 45, 45, 45, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1766, 67, 67, 67, 1767, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 546, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 743, 57889, 0, 2170880, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1856, 45, 1858, 1859, 67, 67, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367773, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2699549, 2158877, 2158877, 2158877, 2158877, 2158877, 2748701, 2756893, 2777373, 2801949, 97, 1115, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 67, 67, 67, 67, 67, 1258, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1826, 67, 97, 97, 97, 97, 97, 97, 1338, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 905, 97, 97, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 1679, 67, 67, 67, 1682, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 189, 45, 45, 45, 1748, 45, 45, 45, 1749, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1959, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1791, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1802, 67, 1817, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1848, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 45, 45, 45, 1863, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 1878, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1973, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1165, 97, 1167, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 0, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1789, 97, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 136, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 229376, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 67, 24850, 24850, 12564, 12564, 0, 0, 280, 547, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1788, 97, 97, 0, 97, 2024, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 235, 67, 67, 67, 67, 67, 57889, 547, 547, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1799, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1092, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1612, 97, 97, 97, 97, 1616, 97, 1297, 1472, 0, 0, 0, 0, 1303, 1474, 0, 0, 0, 0, 1309, 1476, 0, 0, 0, 0, 97, 97, 97, 1481, 97, 97, 97, 97, 97, 97, 1488, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 97, 40976, 18, 36884, 45078, 26, 30, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 213080, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 143448, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 0, 0, 0, 97, 97, 97, 97, 1482, 97, 1483, 97, 97, 97, 97, 97, 97, 1326, 97, 97, 1329, 1330, 97, 97, 97, 97, 97, 97, 1159, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211974, 102439, 0, 0, 106538, 98347, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2474122, 2158730, 2158730, 2494602, 2158730, 2158730, 2158730, 2809994, 2158730, 2158730, 2842762, 2158730, 2158730, 2158730, 2900106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3014794, 2158730, 2158730, 3051658, 2158730, 2158730, 3100810, 2158730, 2158730, 2158730, 2158730, 3096714, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 2207744, 541, 541, 543, 543, 0, 0, 2166784, 0, 548, 549, 549, 0, 286, 2158877, 2158877, 2158877, 2863389, 2892061, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3186973, 2158877, 0, 0, 0, 0, 0, 0, 0, 0, 2367626, 2158877, 2404637, 2412829, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2564381, 2158877, 2158877, 2605341, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2679069, 2158877, 2695453, 2158877, 2703645, 2158877, 2711837, 2752797, 2158877, 0, 2158877, 2158877, 2158877, 2384010, 2158730, 2158730, 2158730, 2158730, 3006602, 2383872, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3096576, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 2158877, 2785565, 2158877, 2810141, 2158877, 2158877, 2842909, 2158877, 2158877, 2158877, 2900253, 2158877, 2158877, 2158877, 2158877, 2158877, 2531613, 2158877, 2158877, 2158877, 2158877, 2158877, 2617629, 2158877, 2158877, 2158877, 2158877, 2158730, 2818186, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3105053, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 0, 0, 97, 97, 97, 1611, 97, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 1499, 97, 97, 97, 97, 97, 2441354, 2445450, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2502794, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2433162, 2158730, 2453642, 2461834, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2580618, 2158730, 2158730, 2158730, 2158730, 2621578, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2699402, 2158730, 2158730, 2158730, 2158730, 2678922, 2158730, 2695306, 2158730, 2703498, 2158730, 2711690, 2752650, 2158730, 2158730, 2785418, 2158730, 2158730, 2158730, 3113098, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3186826, 2158730, 2207744, 2207744, 2207744, 2207744, 2781184, 2793472, 2207744, 2818048, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 541, 0, 543, 2158877, 2502941, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2580765, 2158877, 2158877, 2158877, 2158877, 2621725, 2158877, 3019037, 2158877, 3043613, 2158877, 2158877, 2158877, 2158877, 3080477, 2158877, 2158877, 3113245, 2158877, 2158877, 2158877, 2158877, 0, 2158877, 2908445, 2158877, 2158877, 2158877, 2978077, 2158877, 2158877, 2158877, 2158877, 3039517, 2158877, 2158730, 2510986, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2584714, 2158730, 2609290, 2158730, 2158730, 2629770, 2158730, 2158730, 2158730, 2388106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2605194, 2158730, 2158730, 2158730, 2158730, 2687114, 2158730, 2715786, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2867338, 2158730, 2904202, 2158730, 2158730, 2158730, 2642058, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2781322, 2793610, 2158730, 3121290, 2158730, 2158730, 2158730, 3149962, 2158730, 2158730, 3170442, 3174538, 2158730, 2367488, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2441216, 2445312, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2502656, 2158877, 2433309, 2158877, 2453789, 2461981, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2511133, 2158877, 2158877, 2158877, 2158877, 2584861, 2158877, 2609437, 2158877, 2158877, 2629917, 2158877, 2158877, 2158877, 2687261, 2158877, 2715933, 2158877, 2158730, 2158730, 2973834, 2158730, 2982026, 2158730, 2158730, 3002506, 2158730, 3047562, 3063946, 3076234, 2158730, 2158730, 2158730, 2158730, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158877, 2507037, 0, 0, 2158877, 2158730, 2158730, 2158730, 3203210, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2564096, 2207744, 2207744, 2207744, 2707741, 2732317, 2158877, 2158877, 2158877, 2822429, 2826525, 2158877, 2896157, 2158877, 2158877, 2924829, 2158877, 2158877, 2973981, 2158877, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 642, 0, 2158592, 0, 45, 1529, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 67, 67, 2982173, 2158877, 2158877, 3002653, 2158877, 3047709, 3064093, 3076381, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3203357, 2523274, 2527370, 2158730, 2158730, 2576522, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2908298, 2494749, 2158877, 2158877, 2158877, 2523421, 2527517, 2158877, 2158877, 2576669, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 40976, 0, 18, 18, 4321280, 2224253, 2232448, 4329472, 2232448, 2158730, 2498698, 2158730, 2158730, 2158730, 2158730, 2568330, 2158730, 2592906, 2625674, 2158730, 2158730, 2674826, 2736266, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2158730, 2912394, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3109002, 2158730, 2158730, 3133578, 3145866, 3154058, 2375680, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375965, 2380061, 2158877, 2158877, 2421021, 2158877, 2449693, 2158877, 2158877, 2158877, 3117341, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3104906, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158877, 2498845, 2158877, 2158877, 0, 2158877, 2158877, 2568477, 2158877, 2593053, 2625821, 2158877, 2158877, 2674973, 0, 0, 0, 0, 97, 97, 1480, 97, 97, 97, 97, 97, 1485, 97, 97, 97, 0, 97, 97, 1729, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 311, 97, 97, 97, 97, 97, 97, 97, 97, 1520, 97, 97, 1523, 97, 97, 1526, 97, 2736413, 2158877, 2158877, 0, 2158877, 2912541, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3109149, 2158877, 2158877, 3014941, 2158877, 2158877, 3051805, 2158877, 2158877, 3100957, 2158877, 2158877, 3121437, 2158877, 2158877, 2158877, 3150109, 3133725, 3146013, 3154205, 2158730, 2408586, 2416778, 2158730, 2465930, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3018890, 2158730, 3043466, 2158730, 2158730, 2158730, 2158730, 3080330, 2633866, 2658442, 2740362, 2744458, 2834570, 2949258, 2158730, 2986122, 2158730, 2998410, 2158730, 2158730, 2158730, 3129482, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158877, 2408733, 2416925, 2158877, 2466077, 2158877, 2158877, 3170589, 3174685, 2158877, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2424970, 2158730, 2158730, 2158730, 2158730, 2707594, 2732170, 2158730, 2158730, 2158730, 2822282, 2826378, 2158730, 2896010, 2158730, 2158730, 2924682, 2949405, 2158877, 2986269, 2158877, 2998557, 2158877, 2158877, 2158877, 3129629, 2158730, 2158730, 2478218, 2158730, 2158730, 2158730, 2535562, 2543754, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3117194, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 3014656, 2207744, 2207744, 3051520, 2207744, 2207744, 3100672, 2207744, 2207744, 3121152, 2207744, 2207744, 2207744, 2207744, 2207744, 2584576, 2207744, 2609152, 2207744, 2207744, 2629632, 2207744, 2207744, 2207744, 2686976, 2207744, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158877, 2158877, 2478365, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2158730, 2482314, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 823, 0, 825, 2158730, 2158730, 2158730, 2990218, 2158730, 2158730, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 135, 0, 2207744, 2207744, 2990080, 2207744, 2207744, 2158877, 2158877, 2482461, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2429066, 2158730, 2515082, 2158730, 2588810, 2158730, 2838666, 2158730, 2158730, 2158730, 3010698, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158877, 2429213, 2158877, 2515229, 0, 0, 2158877, 2588957, 2158877, 0, 2838813, 2158877, 2158877, 2158877, 3010845, 2158730, 2506890, 2158730, 2158730, 2158730, 2748554, 2756746, 2777226, 2801802, 2158730, 2158730, 2158730, 2863242, 2891914, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2564234, 2158730, 2158730, 2158730, 2158730, 2158730, 2597002, 2158730, 2158730, 2158730, 3006464, 2384157, 0, 0, 2158877, 2158877, 2158877, 2158877, 3006749, 2158730, 2637962, 2953354, 2158730, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158877, 2638109, 2953501, 2158877, 2539658, 2158730, 2539520, 2207744, 0, 0, 2539805, 2158877, 2158730, 2158730, 2158730, 2977930, 2158730, 2158730, 2158730, 2158730, 3039370, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3158154, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2965642, 2965504, 2965789, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1484, 97, 97, 97, 97, 2158592, 18, 0, 122880, 0, 0, 0, 77824, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 356, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1427, 67, 67, 67, 67, 67, 1432, 67, 67, 67, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 122880, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 1322, 550, 0, 286, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 4329472, 27, 27, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 542, 0, 0, 0, 542, 0, 544, 0, 0, 0, 544, 0, 550, 0, 0, 0, 0, 0, 97, 97, 1610, 97, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 237568, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 192512, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 94, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 96, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 12378, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 126, 126, 126, 126, 90143, 0, 0, 2170880, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 20480, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 241664, 102439, 106538, 98347, 0, 0, 20568, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 200797, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 0, 0, 44, 0, 0, 20575, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 41, 41, 41, 0, 0, 1126400, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 89, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 131201, 27, 27, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 208896, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 32768, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2433024, 2158592, 2453504, 2461696, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 245783, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 221184, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 180224, 40976, 18, 18, 36884, 155648, 45078, 0, 24, 24, 217088, 27, 27, 27, 217088, 90143, 0, 0, 2170880, 0, 0, 828, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 233472, 0, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 0, 0, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1787, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2029, 45, 67, 67, 67, 67, 2033, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1798, 45, 45, 1800, 45, 45, 0, 1472, 0, 0, 0, 0, 0, 1474, 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 1320, 97, 97, 0, 0, 97, 97, 97, 97, 1786, 97, 0, 0, 97, 97, 0, 1790, 1527, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 67, 24850, 24850, 12564, 12564, 0, 57889, 281, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 1785, 97, 97, 0, 0, 97, 97, 0, 97, 97, 1979, 97, 97, 45, 45, 1983, 45, 1984, 45, 45, 45, 45, 45, 652, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 690, 45, 45, 694, 45, 45, 40976, 19, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 262144, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 46, 67, 98, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 45, 67, 97, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 258048, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 1122423, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 1114152, 1114152, 1114152, 0, 0, 1114112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 37, 102439, 106538, 98347, 0, 0, 204800, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 57436, 40976, 18, 36884, 45078, 24, 27, 33, 33, 0, 33, 33, 33, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 124, 124, 124, 127, 127, 127, 127, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158877, 2158877, 2158877, 2388253, 2158877, 2158877, 2158877, 2158877, 2158877, 2781469, 2793757, 2158877, 2818333, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2867485, 2158877, 2904349, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3096861, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2441501, 2445597, 2158877, 2158877, 2158877, 2158877, 2158877, 40976, 122, 123, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 936, 2158592, 4243810, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 935, 45, 45, 45, 715, 45, 45, 45, 45, 45, 45, 45, 723, 45, 45, 45, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 45, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 47, 68, 99, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 48, 69, 100, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 49, 70, 101, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 50, 71, 102, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 51, 72, 103, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 52, 73, 104, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 53, 74, 105, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 54, 75, 106, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 55, 76, 107, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 56, 77, 108, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 57, 78, 109, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 58, 79, 110, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 59, 80, 111, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 60, 81, 112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 61, 82, 113, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 62, 83, 114, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 63, 84, 115, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 64, 85, 116, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 65, 86, 117, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 66, 87, 118, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 0, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1321, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 131, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 145, 149, 45, 45, 45, 45, 45, 174, 45, 179, 45, 185, 45, 188, 45, 45, 202, 67, 255, 67, 67, 269, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 292, 296, 97, 97, 97, 97, 97, 321, 97, 326, 97, 332, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 646, 335, 97, 97, 349, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 437, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 523, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 511, 67, 67, 67, 97, 97, 97, 620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1501, 1502, 97, 793, 67, 67, 796, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 808, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 2052, 67, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 830, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315, 97, 97, 97, 97, 97, 97, 841, 97, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 891, 97, 97, 894, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 906, 45, 937, 45, 45, 940, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 734, 735, 67, 737, 67, 738, 67, 740, 67, 67, 67, 45, 967, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 435, 45, 45, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1081, 13112, 1085, 54074, 1089, 0, 0, 0, 0, 0, 0, 363, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1674, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1913, 67, 1914, 67, 67, 67, 1918, 67, 67, 97, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 630, 97, 97, 97, 97, 97, 1169, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1534, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 1233, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 742, 67, 45, 45, 1191, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 454, 67, 67, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2050, 0, 97, 97, 45, 45, 45, 732, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 1293, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 2158592, 2158592, 2158592, 2404352, 2412544, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1737, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 647, 45, 45, 1387, 45, 45, 1391, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 1400, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 941, 45, 943, 45, 45, 45, 45, 45, 45, 951, 45, 67, 1438, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 67, 67, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 97, 1491, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1736, 97, 45, 45, 1541, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 677, 45, 45, 67, 1581, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 791, 792, 67, 67, 67, 67, 1598, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 97, 97, 97, 1727, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 67, 67, 97, 1879, 97, 1881, 97, 0, 1884, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1842, 97, 97, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1928, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1903, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 1971, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1381, 45, 45, 45, 45, 1976, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1747, 809, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 907, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1478, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 477, 67, 67, 67, 67, 67, 67, 1294, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1324, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1374, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 45, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 1910, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1919, 67, 0, 0, 97, 97, 97, 97, 45, 2048, 67, 2049, 0, 0, 97, 2051, 45, 45, 45, 939, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 397, 45, 45, 45, 1921, 67, 67, 1923, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1947, 45, 1935, 0, 0, 0, 97, 1939, 97, 97, 1941, 97, 45, 45, 45, 45, 45, 45, 382, 389, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 1812, 67, 67, 67, 67, 67, 256, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 336, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 371, 373, 45, 45, 45, 955, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 45, 457, 459, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 478, 67, 67, 482, 67, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1828, 97, 554, 556, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 575, 97, 97, 579, 97, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 330, 97, 97, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 856, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1642, 97, 1644, 97, 97, 890, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 67, 67, 67, 67, 1065, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 97, 97, 1505, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1617, 97, 97, 1635, 0, 1637, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 67, 67, 1704, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 565, 572, 97, 97, 97, 97, 97, 97, 97, 97, 1832, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1946, 45, 45, 67, 67, 67, 67, 67, 97, 1926, 97, 1927, 97, 0, 0, 0, 97, 97, 1934, 2043, 0, 0, 97, 97, 97, 2047, 45, 45, 67, 67, 0, 1832, 97, 97, 45, 45, 45, 981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 372, 45, 45, 45, 45, 1661, 1662, 45, 45, 45, 45, 45, 1666, 45, 45, 45, 45, 45, 1673, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 67, 1426, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 67, 67, 45, 418, 45, 45, 420, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 45, 959, 45, 45, 962, 45, 45, 45, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 483, 67, 67, 67, 67, 504, 67, 67, 506, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 580, 97, 97, 97, 97, 601, 97, 97, 603, 97, 97, 606, 97, 97, 97, 97, 97, 97, 848, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1498, 97, 97, 97, 97, 97, 97, 45, 45, 714, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 989, 990, 45, 67, 67, 67, 67, 67, 1011, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 467, 67, 67, 67, 67, 67, 67, 67, 45, 45, 1179, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 1004, 67, 1217, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 728, 67, 1461, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 97, 1516, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 67, 67, 67, 1705, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1715, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1380, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1887, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 2006, 45, 45, 1907, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1920, 67, 97, 0, 2035, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 1428, 67, 67, 67, 67, 67, 67, 1435, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 146, 45, 152, 45, 45, 165, 45, 175, 45, 180, 45, 45, 187, 190, 195, 45, 203, 254, 257, 262, 67, 270, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 293, 97, 299, 97, 97, 312, 97, 322, 97, 327, 97, 97, 334, 337, 342, 97, 350, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 484, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 97, 581, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 648, 45, 650, 45, 651, 45, 653, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1954, 67, 67, 67, 1958, 67, 67, 67, 67, 67, 67, 67, 768, 67, 67, 67, 67, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 680, 45, 45, 45, 45, 45, 45, 45, 45, 688, 689, 691, 45, 45, 45, 45, 45, 983, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 947, 45, 45, 45, 45, 952, 45, 45, 698, 699, 45, 45, 702, 703, 45, 45, 45, 45, 45, 45, 45, 711, 744, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 761, 67, 67, 67, 67, 765, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 775, 776, 778, 67, 67, 67, 67, 67, 67, 785, 786, 67, 67, 789, 790, 67, 67, 67, 67, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1775, 97, 97, 97, 67, 67, 67, 67, 67, 798, 67, 67, 67, 802, 67, 67, 67, 67, 67, 67, 67, 67, 1465, 67, 67, 1468, 67, 67, 1471, 67, 67, 810, 67, 67, 67, 67, 67, 67, 67, 67, 67, 821, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 833, 97, 835, 97, 836, 97, 838, 97, 97, 0, 0, 97, 97, 97, 2002, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1740, 45, 45, 45, 1744, 45, 45, 45, 97, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 0, 1717, 1718, 97, 97, 97, 97, 97, 1722, 97, 0, 0, 859, 97, 97, 97, 97, 863, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 873, 874, 876, 97, 97, 97, 97, 97, 97, 883, 884, 97, 97, 887, 888, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 225280, 0, 365, 0, 367, 0, 45, 45, 45, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1199, 45, 45, 45, 45, 45, 97, 97, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 919, 638, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2425117, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2597149, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2642205, 2158877, 2158877, 2158877, 2158877, 2158877, 3158301, 0, 2375818, 2379914, 2158730, 2158730, 2420874, 2158730, 2449546, 2158730, 2158730, 953, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 965, 978, 45, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1027, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 1077, 1078, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 139, 2158730, 2158730, 2158730, 2404490, 2412682, 1113, 97, 97, 97, 97, 97, 97, 1121, 97, 1123, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1540, 1155, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 1168, 97, 97, 1171, 1172, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 168, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1046, 67, 67, 1254, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 807, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 1354, 97, 97, 97, 1359, 97, 97, 97, 0, 97, 97, 97, 97, 1640, 97, 97, 97, 97, 97, 97, 97, 897, 97, 97, 97, 902, 97, 97, 97, 97, 97, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 0, 97, 97, 97, 1730, 97, 97, 97, 97, 97, 97, 97, 97, 915, 97, 97, 97, 97, 0, 360, 0, 67, 67, 67, 1440, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 1019, 67, 67, 67, 67, 67, 1453, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 97, 97, 97, 1493, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 97, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 67, 67, 67, 67, 1584, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 67, 67, 783, 67, 67, 67, 788, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 1601, 67, 67, 67, 1604, 67, 1606, 1607, 67, 1472, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 1614, 97, 97, 97, 97, 45, 45, 1850, 45, 45, 45, 45, 1855, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1229, 97, 1618, 97, 97, 97, 97, 97, 97, 97, 1625, 97, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 447, 45, 45, 45, 45, 45, 67, 67, 1633, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1643, 1645, 97, 97, 0, 0, 97, 97, 1784, 97, 97, 97, 0, 0, 97, 97, 0, 97, 1894, 1895, 97, 1897, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 656, 45, 45, 45, 45, 45, 45, 97, 1648, 97, 1650, 1651, 97, 0, 45, 45, 45, 1654, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 664, 45, 45, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 1669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1005, 67, 67, 1681, 67, 67, 67, 67, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 1060, 67, 67, 97, 97, 1713, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1378, 45, 45, 45, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 1549, 45, 45, 45, 45, 45, 97, 97, 1780, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2027, 2028, 45, 45, 67, 67, 2031, 2032, 67, 45, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1917, 67, 67, 67, 67, 67, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1708, 97, 97, 97, 97, 97, 45, 45, 1862, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 67, 1877, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1839, 0, 0, 97, 97, 97, 97, 1936, 0, 0, 97, 97, 97, 97, 97, 97, 1943, 1944, 1945, 45, 45, 45, 45, 670, 45, 45, 45, 45, 674, 45, 45, 45, 45, 678, 45, 1948, 45, 1950, 45, 45, 45, 45, 1955, 1956, 1957, 67, 67, 67, 1960, 67, 1962, 67, 67, 67, 67, 1967, 1968, 1969, 97, 0, 0, 0, 97, 97, 1974, 97, 0, 1936, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1906, 0, 1977, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1746, 45, 45, 45, 45, 2011, 67, 67, 2013, 67, 67, 67, 2017, 97, 97, 0, 0, 2021, 97, 8192, 97, 97, 2025, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1916, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 140, 45, 45, 45, 1180, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 45, 45, 45, 387, 45, 392, 45, 45, 396, 45, 45, 399, 45, 45, 67, 207, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 67, 67, 67, 67, 67, 0, 97, 97, 287, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1656, 1657, 45, 376, 45, 45, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1406, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 462, 67, 67, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 817, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 97, 559, 97, 97, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 896, 97, 97, 97, 900, 97, 97, 97, 97, 97, 97, 912, 914, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 391, 45, 45, 45, 45, 45, 45, 45, 45, 713, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 1140, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 636, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 1363, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 889, 97, 97, 97, 1714, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 926, 45, 45, 45, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 45, 45, 45, 45, 45, 944, 45, 45, 45, 45, 45, 45, 45, 45, 1676, 45, 45, 45, 45, 45, 45, 67, 97, 97, 97, 1833, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1902, 45, 45, 45, 45, 45, 957, 45, 45, 45, 45, 961, 45, 963, 45, 45, 45, 67, 97, 2034, 0, 97, 97, 97, 97, 97, 2040, 45, 45, 45, 2042, 67, 67, 67, 67, 67, 67, 1574, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 799, 67, 67, 67, 804, 67, 67, 67, 67, 67, 67, 67, 1298, 0, 0, 0, 1304, 0, 0, 0, 1310, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 1414, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 45, 45, 45, 57889, 0, 0, 54074, 54074, 550, 831, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 578, 97, 45, 45, 968, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 67, 67, 67, 67, 67, 25398, 1082, 13112, 1086, 54074, 1090, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 67, 67, 67, 67, 1464, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 67, 97, 97, 97, 97, 1519, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 0, 0, 0, 0, 1528, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 45, 1554, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 45, 1565, 45, 45, 45, 45, 683, 45, 45, 45, 687, 45, 45, 692, 45, 45, 45, 45, 45, 1953, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 1568, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1594, 97, 97, 1649, 97, 97, 97, 0, 45, 45, 1653, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 45, 45, 1670, 45, 1672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 736, 67, 67, 67, 67, 67, 741, 67, 67, 67, 1680, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 67, 1692, 67, 67, 67, 67, 67, 67, 67, 1697, 67, 1699, 67, 67, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 468, 475, 67, 67, 67, 67, 67, 67, 1769, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 624, 97, 97, 97, 97, 97, 97, 634, 97, 97, 1792, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 958, 45, 45, 45, 45, 45, 45, 964, 45, 150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 977, 204, 45, 67, 67, 67, 217, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 271, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 351, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1398, 45, 45, 45, 153, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 660, 661, 45, 45, 205, 45, 67, 67, 67, 67, 220, 67, 228, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 280, 94, 0, 0, 67, 67, 67, 67, 67, 272, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 352, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 439, 45, 45, 45, 45, 45, 445, 45, 45, 45, 452, 45, 45, 67, 67, 212, 216, 67, 67, 67, 67, 67, 241, 67, 246, 67, 252, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 1013, 67, 67, 1016, 67, 67, 67, 67, 67, 521, 67, 67, 525, 67, 67, 67, 67, 67, 531, 67, 67, 67, 538, 67, 0, 0, 2046, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 1421, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1384, 97, 618, 97, 97, 622, 97, 97, 97, 97, 97, 628, 97, 97, 97, 635, 97, 18, 131427, 0, 0, 0, 639, 0, 132, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 932, 45, 45, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1194, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 45, 45, 45, 45, 67, 67, 45, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 696, 45, 45, 45, 701, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 194, 45, 45, 45, 729, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 805, 67, 67, 67, 67, 67, 67, 67, 1587, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162968, 0, 0, 67, 67, 67, 67, 67, 814, 816, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1008, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1020, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1429, 67, 1430, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 1076, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1102, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1124, 97, 1126, 97, 97, 1114, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 97, 97, 1170, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 1532, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 45, 172, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 706, 45, 45, 709, 45, 45, 1177, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 1204, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 45, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 67, 1237, 67, 67, 67, 67, 67, 67, 1053, 1054, 67, 67, 67, 67, 67, 67, 1061, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1289, 67, 67, 67, 1292, 97, 97, 97, 97, 1339, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 97, 45, 1849, 45, 1851, 45, 45, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 726, 45, 1385, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1188, 45, 45, 1401, 1402, 45, 45, 45, 45, 1405, 45, 45, 45, 45, 45, 45, 45, 45, 1752, 45, 45, 45, 45, 45, 67, 67, 1410, 45, 45, 45, 1413, 45, 1415, 45, 45, 45, 45, 45, 45, 1419, 45, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 2019, 0, 97, 67, 67, 67, 1452, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 1259, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 1460, 67, 1462, 67, 67, 67, 67, 67, 67, 1466, 67, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 67, 67, 0, 1300, 0, 0, 0, 1306, 0, 0, 0, 97, 97, 97, 1506, 97, 97, 97, 97, 97, 97, 97, 97, 1512, 97, 97, 97, 0, 1728, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 1515, 97, 1517, 97, 97, 97, 97, 97, 97, 1521, 97, 97, 97, 97, 97, 97, 0, 45, 1652, 45, 45, 45, 1655, 45, 45, 45, 45, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 1553, 45, 45, 45, 1556, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 45, 67, 67, 67, 67, 1572, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 67, 1605, 67, 67, 67, 0, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1580, 67, 67, 1596, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 542, 0, 544, 67, 67, 67, 67, 1759, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 533, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 1777, 97, 97, 97, 1793, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 998, 45, 45, 1001, 1002, 45, 45, 67, 67, 45, 1861, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1871, 67, 1873, 1874, 67, 0, 97, 45, 67, 0, 97, 45, 67, 16384, 97, 45, 67, 97, 0, 0, 0, 1473, 0, 1082, 0, 0, 0, 1475, 0, 1086, 0, 0, 0, 1477, 1876, 67, 97, 97, 97, 97, 97, 1883, 0, 1885, 97, 97, 97, 1889, 0, 0, 0, 286, 0, 0, 0, 286, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 126, 126, 126, 2053, 0, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 2039, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 1246, 67, 67, 1249, 1250, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 141, 45, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 1189, 45, 45, 155, 45, 45, 45, 45, 45, 45, 45, 45, 45, 191, 45, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1753, 45, 45, 45, 67, 67, 45, 45, 67, 208, 67, 67, 67, 222, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 258, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 288, 97, 97, 97, 302, 97, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 338, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 370, 45, 45, 45, 45, 716, 45, 45, 45, 45, 45, 722, 45, 45, 45, 45, 45, 45, 1912, 67, 67, 67, 67, 67, 67, 67, 67, 67, 819, 67, 67, 25398, 542, 13112, 544, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1409, 45, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 1274, 67, 67, 67, 1279, 67, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 553, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1138, 97, 97, 97, 97, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 0, 1834, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 353, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 67, 67, 747, 748, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1302, 0, 0, 0, 1308, 0, 67, 794, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 97, 97, 97, 845, 846, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 97, 892, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 45, 992, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1239, 67, 67, 67, 1063, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1301, 0, 0, 0, 1307, 0, 0, 97, 1141, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1152, 97, 97, 0, 0, 97, 97, 2001, 0, 97, 2003, 97, 97, 97, 45, 45, 45, 1739, 45, 45, 45, 1742, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1157, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 1151, 97, 97, 97, 1253, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 539, 45, 1423, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 1700, 67, 1702, 67, 67, 1439, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 97, 97, 1492, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 1703, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 45, 1949, 45, 1951, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1961, 67, 0, 97, 45, 67, 0, 97, 2060, 2061, 0, 2062, 45, 67, 97, 0, 0, 2036, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 223, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 1963, 67, 67, 67, 97, 97, 97, 97, 0, 1972, 0, 97, 97, 97, 1975, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 931, 45, 45, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 45, 1989, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1996, 97, 18, 131427, 0, 0, 360, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 930, 45, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 1998, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1985, 45, 1986, 45, 45, 45, 156, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 679, 131427, 0, 358, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 381, 45, 45, 45, 45, 45, 45, 45, 45, 45, 400, 45, 45, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 436, 67, 67, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 25398, 542, 13112, 544, 67, 67, 522, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 67, 0, 1299, 0, 0, 0, 1305, 0, 0, 0, 97, 97, 619, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 97, 1105, 97, 97, 97, 97, 1109, 97, 97, 97, 67, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 0, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2041, 67, 67, 67, 67, 67, 780, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 97, 97, 97, 878, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 0, 45, 979, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1094, 0, 0, 0, 1092, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1486, 97, 1489, 97, 97, 97, 1117, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 1146, 97, 97, 97, 97, 97, 97, 97, 97, 881, 97, 97, 97, 886, 97, 97, 97, 1311, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1615, 97, 97, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 97, 1847, 97, 45, 45, 45, 45, 1852, 45, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 67, 67, 67, 67, 67, 1868, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1882, 0, 0, 0, 97, 97, 97, 97, 0, 1891, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1929, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1900, 45, 1901, 45, 45, 45, 1905, 45, 67, 2054, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 2037, 2038, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1774, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 142, 45, 45, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 157, 45, 45, 171, 45, 45, 45, 182, 45, 45, 45, 45, 200, 45, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 45, 45, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 1214, 45, 45, 45, 67, 209, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 249, 67, 0, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 97, 0, 0, 1937, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1741, 45, 45, 45, 45, 45, 45, 67, 67, 67, 267, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 289, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 329, 97, 97, 0, 0, 97, 1783, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2026, 45, 45, 45, 45, 67, 2030, 67, 67, 67, 67, 67, 67, 1041, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1044, 67, 67, 67, 67, 67, 67, 97, 97, 347, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 840, 67, 1007, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 67, 67, 67, 1052, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1031, 67, 67, 67, 67, 67, 97, 97, 97, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 1190, 45, 45, 45, 45, 45, 1195, 45, 1197, 45, 45, 45, 45, 1201, 45, 45, 45, 45, 1952, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 250, 67, 67, 67, 1255, 67, 1257, 67, 67, 67, 67, 1261, 67, 67, 67, 67, 67, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 0, 24851, 12565, 0, 0, 0, 0, 28809, 53532, 67, 67, 1267, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 1281, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1070, 67, 67, 67, 67, 67, 1335, 97, 1337, 97, 97, 97, 97, 1341, 97, 97, 97, 97, 97, 97, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 1347, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 1361, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 544, 0, 550, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 53530, 97, 97, 97, 1365, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 608, 97, 97, 97, 45, 45, 1424, 45, 1425, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1058, 67, 67, 67, 67, 45, 1555, 45, 45, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 45, 45, 45, 45, 67, 67, 1570, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 1595, 67, 67, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 97, 97, 97, 1636, 97, 97, 97, 1639, 97, 97, 1641, 97, 97, 97, 97, 97, 97, 1173, 0, 921, 0, 0, 0, 0, 0, 0, 45, 67, 67, 67, 1693, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 67, 67, 1773, 67, 97, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 1860, 45, 45, 67, 67, 1865, 67, 67, 67, 67, 1870, 67, 67, 67, 67, 1875, 67, 67, 97, 97, 1880, 97, 97, 0, 0, 0, 97, 97, 1888, 97, 0, 0, 0, 1938, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1854, 45, 45, 45, 45, 45, 45, 45, 1909, 45, 45, 1911, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 1924, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1898, 45, 45, 45, 45, 45, 45, 1904, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 16384, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1724, 2008, 2009, 45, 45, 67, 67, 67, 2014, 2015, 67, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2022, 0, 2023, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1869, 67, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 147, 151, 154, 45, 162, 45, 45, 176, 178, 181, 45, 45, 45, 192, 196, 45, 45, 45, 45, 2012, 67, 67, 67, 67, 67, 67, 2018, 97, 0, 0, 97, 1978, 97, 97, 97, 1982, 45, 45, 45, 45, 45, 45, 45, 45, 45, 972, 973, 45, 45, 45, 45, 45, 67, 259, 263, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 294, 298, 301, 97, 309, 97, 97, 323, 325, 328, 97, 97, 97, 97, 97, 560, 97, 97, 97, 569, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 339, 343, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 519, 97, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 616, 45, 649, 45, 45, 45, 45, 45, 654, 45, 45, 45, 45, 45, 45, 45, 45, 1393, 45, 45, 45, 45, 45, 45, 45, 45, 1209, 45, 45, 45, 45, 45, 45, 45, 67, 763, 67, 67, 67, 67, 67, 67, 67, 67, 770, 67, 67, 67, 774, 67, 0, 2045, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 213, 67, 219, 67, 67, 232, 67, 242, 67, 247, 67, 67, 67, 779, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 67, 811, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 834, 97, 97, 97, 97, 97, 839, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 645, 97, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 868, 97, 97, 97, 872, 97, 97, 877, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 97, 97, 97, 97, 909, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 27, 27, 27, 1036, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1033, 67, 67, 67, 97, 97, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 67, 67, 67, 1295, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1317, 97, 97, 97, 97, 97, 97, 1375, 97, 97, 97, 0, 0, 0, 45, 1379, 45, 45, 45, 45, 45, 45, 422, 45, 45, 45, 429, 431, 45, 45, 45, 45, 0, 1090, 0, 0, 97, 1479, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1716, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1723, 0, 921, 29315, 0, 0, 0, 0, 45, 929, 45, 45, 45, 45, 45, 45, 45, 1392, 45, 45, 45, 45, 45, 45, 45, 45, 45, 960, 45, 45, 45, 45, 45, 45, 97, 97, 97, 1738, 45, 45, 45, 45, 45, 45, 45, 1743, 45, 45, 45, 45, 166, 45, 45, 45, 45, 184, 186, 45, 45, 197, 45, 45, 97, 1779, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 640, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1803, 45, 45, 45, 45, 45, 1809, 45, 45, 45, 67, 67, 67, 1814, 67, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 67, 67, 67, 1818, 67, 67, 67, 67, 67, 1824, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1890, 0, 1829, 97, 97, 0, 0, 97, 97, 1836, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1987, 1845, 97, 97, 97, 45, 45, 45, 45, 45, 1853, 45, 45, 45, 1857, 45, 45, 45, 67, 1864, 67, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 1710, 1711, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1886, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1838, 0, 0, 0, 97, 1843, 97, 0, 1893, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 1931, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 67, 2044, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1660, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 453, 45, 455, 67, 67, 67, 67, 268, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 348, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 359, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 695, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 0, 921, 29315, 0, 925, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1811, 45, 67, 67, 67, 67, 67, 67, 1037, 67, 1039, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1095, 0, 0, 0, 1096, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 97, 1131, 97, 1133, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 1312, 0, 0, 0, 0, 1096, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1830, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1896, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 45, 133, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 401, 45, 45, 158, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1200, 45, 45, 45, 45, 206, 67, 67, 67, 67, 67, 225, 67, 67, 67, 67, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 832, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1083, 13112, 1087, 54074, 1091, 0, 0, 0, 0, 0, 0, 1316, 0, 831, 97, 97, 97, 97, 97, 97, 97, 1174, 921, 0, 1175, 0, 0, 0, 0, 45, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 148, 67, 67, 264, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 295, 97, 97, 97, 97, 313, 97, 97, 97, 97, 331, 333, 97, 18, 131427, 356, 638, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 45, 45, 1530, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 988, 45, 45, 45, 97, 344, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 402, 404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 67, 438, 45, 45, 45, 45, 45, 45, 45, 45, 449, 450, 45, 45, 45, 67, 67, 214, 218, 221, 67, 229, 67, 67, 243, 245, 248, 67, 67, 67, 67, 67, 488, 490, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1071, 67, 1073, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 67, 67, 67, 535, 536, 67, 67, 67, 67, 67, 67, 1683, 1684, 67, 67, 67, 67, 1688, 1689, 67, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 97, 97, 97, 585, 587, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 97, 97, 97, 97, 97, 97, 97, 621, 97, 97, 97, 97, 97, 97, 97, 97, 632, 633, 97, 97, 0, 0, 1782, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 712, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 725, 45, 45, 45, 163, 167, 173, 177, 45, 45, 45, 45, 45, 193, 45, 45, 45, 45, 982, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 1558, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 704, 705, 45, 45, 45, 45, 45, 45, 45, 45, 731, 45, 45, 45, 67, 67, 67, 67, 67, 739, 67, 67, 67, 67, 67, 67, 273, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 67, 67, 67, 764, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 812, 67, 67, 67, 67, 818, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 837, 97, 97, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 862, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 0, 97, 97, 97, 97, 910, 97, 97, 97, 97, 916, 97, 97, 97, 0, 0, 0, 97, 97, 1940, 97, 97, 1942, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 395, 45, 45, 45, 45, 966, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 67, 67, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1040, 67, 1042, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 97, 1706, 97, 97, 97, 1709, 97, 97, 97, 67, 67, 67, 67, 1051, 67, 67, 67, 67, 67, 1057, 67, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 1446, 67, 67, 67, 67, 67, 67, 67, 1297, 0, 0, 0, 1303, 0, 0, 0, 1309, 67, 67, 67, 67, 1079, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 1098, 97, 97, 97, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 97, 97, 1134, 97, 1136, 97, 1139, 97, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 1176, 0, 646, 45, 67, 67, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 67, 97, 1348, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1127, 97, 67, 1569, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1448, 1449, 67, 1816, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 1827, 97, 97, 0, 1781, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 1831, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1980, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 97, 1846, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 45, 45, 2010, 45, 67, 67, 67, 67, 67, 2016, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 2007, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 143, 45, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1813, 67, 67, 1815, 45, 45, 67, 210, 67, 67, 67, 67, 67, 67, 239, 67, 67, 67, 67, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1445, 67, 67, 67, 67, 67, 67, 97, 97, 290, 97, 97, 97, 97, 97, 97, 319, 97, 97, 97, 97, 97, 97, 303, 97, 97, 317, 97, 97, 97, 97, 97, 97, 305, 97, 97, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 97, 97, 97, 375, 45, 45, 45, 379, 45, 45, 390, 45, 45, 394, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 461, 67, 67, 67, 465, 67, 67, 476, 67, 67, 480, 67, 67, 67, 67, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 97, 97, 97, 558, 97, 97, 97, 562, 97, 97, 573, 97, 97, 577, 97, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 1638, 97, 97, 97, 97, 97, 97, 97, 97, 1646, 597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1334, 45, 681, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 1399, 45, 45, 730, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1434, 67, 67, 67, 67, 67, 67, 750, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 45, 45, 993, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1238, 67, 67, 1006, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 1048, 1049, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 97, 97, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 920, 97, 97, 1142, 1143, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 97, 97, 97, 1158, 97, 97, 97, 1161, 97, 97, 97, 97, 1166, 97, 97, 97, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 45, 1218, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 67, 67, 67, 67, 67, 1269, 67, 67, 67, 67, 67, 67, 67, 67, 1278, 67, 67, 67, 67, 67, 67, 1761, 67, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 97, 97, 1349, 97, 97, 97, 97, 97, 97, 97, 97, 1358, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 926, 0, 0, 0, 45, 45, 1411, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1754, 45, 45, 67, 67, 1301, 0, 1307, 0, 1313, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 21054, 97, 97, 97, 97, 67, 1757, 67, 67, 67, 1760, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 1778, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 1820, 67, 1822, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1933, 97, 1892, 97, 97, 97, 97, 97, 97, 1899, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1925, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1796, 97, 45, 45, 45, 45, 45, 45, 45, 970, 45, 45, 45, 45, 45, 45, 45, 45, 1417, 45, 45, 45, 45, 45, 45, 45, 67, 1964, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1721, 97, 97, 0, 0, 1997, 97, 0, 0, 2000, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 733, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 144, 45, 45, 45, 1805, 45, 1807, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 231, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 45, 45, 67, 211, 67, 67, 67, 67, 230, 234, 240, 244, 67, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 260, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 291, 97, 97, 97, 97, 310, 314, 320, 324, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 97, 97, 97, 1362, 340, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 360, 0, 362, 0, 365, 28809, 367, 139, 369, 45, 45, 45, 374, 67, 67, 460, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 67, 67, 67, 67, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 67, 1772, 67, 67, 97, 97, 97, 97, 97, 97, 97, 0, 921, 922, 1175, 0, 0, 0, 0, 45, 67, 502, 67, 67, 67, 67, 67, 67, 67, 508, 67, 67, 67, 515, 517, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1932, 97, 97, 0, 1999, 97, 97, 97, 0, 97, 97, 2004, 2005, 97, 45, 45, 45, 45, 1193, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 552, 97, 97, 97, 97, 97, 1377, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 97, 97, 557, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 97, 97, 1135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 1319, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1733, 97, 97, 97, 97, 97, 97, 1340, 97, 97, 97, 1343, 97, 97, 1345, 97, 1346, 97, 599, 97, 97, 97, 97, 97, 97, 97, 605, 97, 97, 97, 612, 614, 97, 97, 97, 97, 97, 1794, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1207, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 745, 67, 67, 67, 67, 751, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 762, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 777, 67, 67, 781, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 1593, 67, 67, 97, 843, 97, 97, 97, 97, 849, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 860, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1797, 45, 45, 45, 45, 1801, 45, 97, 875, 97, 97, 879, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 991, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 215, 67, 67, 67, 67, 233, 67, 67, 67, 67, 251, 253, 1022, 67, 67, 67, 1026, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 67, 1064, 67, 67, 67, 1067, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 1096, 0, 921, 29315, 0, 0, 0, 0, 928, 45, 45, 45, 45, 45, 934, 45, 45, 45, 164, 45, 45, 45, 45, 45, 45, 45, 45, 45, 198, 45, 45, 45, 378, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 398, 45, 97, 97, 1116, 97, 97, 97, 1120, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1147, 1148, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 0, 45, 1178, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 45, 451, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 1260, 67, 67, 67, 1263, 67, 67, 1265, 1203, 45, 45, 1205, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 67, 1266, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 481, 67, 45, 1386, 45, 1389, 45, 45, 45, 45, 1394, 45, 45, 45, 1397, 45, 45, 45, 45, 995, 45, 997, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1915, 67, 67, 67, 67, 67, 1422, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1433, 67, 1436, 67, 67, 67, 67, 1441, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 97, 1494, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1571, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 97, 1634, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1125, 97, 97, 97, 1647, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 1658, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 1712, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 1835, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1844, 97, 97, 1726, 0, 97, 97, 97, 97, 97, 1732, 97, 1734, 97, 97, 97, 97, 97, 300, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 866, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1758, 67, 67, 67, 1762, 67, 67, 67, 67, 67, 67, 67, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1771, 67, 67, 67, 97, 97, 97, 97, 97, 1776, 97, 97, 97, 97, 297, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 67, 67, 67, 1966, 97, 97, 97, 1970, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1837, 97, 0, 1840, 1841, 97, 97, 97, 1988, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1994, 1995, 67, 97, 97, 97, 97, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 917, 97, 97, 0, 0, 0, 67, 67, 265, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 345, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 361, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 414, 45, 45, 45, 45, 377, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 433, 45, 45, 45, 67, 67, 67, 67, 67, 463, 67, 67, 67, 472, 67, 67, 67, 67, 67, 67, 67, 527, 67, 67, 67, 67, 67, 67, 537, 67, 540, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 564, 97, 97, 97, 97, 97, 97, 97, 637, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 927, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 67, 67, 67, 67, 1240, 45, 697, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 708, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 45, 45, 384, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1210, 45, 45, 45, 45, 45, 45, 67, 67, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1164, 97, 97, 97, 67, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1687, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 1097, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1450, 45, 45, 1388, 45, 1390, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1236, 67, 67, 67, 67, 67, 1437, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 1490, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1503, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1930, 0, 97, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 67, 67, 1965, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 1382, 45, 1383, 45, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 45, 45, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 341, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 1099, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1333, 97, 1230, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1992, 67, 1993, 67, 67, 67, 97, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1665, 45, 45, 45, 45, 45, 131427, 357, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 416, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1990, 67, 1991, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1707, 97, 97, 97, 97, 97, 97, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1030, 67, 1032, 67, 67, 67, 67, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1632, 0, 921, 29315, 923, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 425, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1093, 0, 0, 0, 0, 0, 97, 1609, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1369, 97, 97, 97, 1372, 97, 97, 67, 67, 266, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 346, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1677, 45, 45, 45, 45, 67, 45, 45, 954, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 67, 456, 67, 67, 67, 67, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1069, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 97, 97, 97, 97, 97, 1376, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 1559, 1561, 45, 45, 45, 1564, 45, 1566, 1567, 45, 67, 67, 67, 67, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 1252, 97, 1725, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 1630, 0, 0, 94242, 0, 0, 0, 2211840, 0, 1118208, 0, 0, 0, 0, 2158592, 2158731, 2158592, 2158592, 2158592, 3117056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3018752, 2158592, 3043328, 2158592, 2158592, 2158592, 2158592, 3080192, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158878, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2605056, 2158592, 2158592, 2207744, 0, 542, 0, 544, 0, 0, 2166784, 0, 0, 0, 550, 0, 0, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2867200, 2158592, 2904064, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 0, 0, 1130496, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 139, 0, 0, 0, 139, 0, 2367488, 2207744, 0, 0, 0, 0, 176128, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 1508, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 67, 24850, 24850, 12564, 12564, 0, 0, 0, 0, 0, 53531, 53531, 0, 286, 97, 97, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 1154, 57889, 0, 0, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 97, 576, 97, 97, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 0, 0, 139264, 0, 921, 29315, 0, 0, 926, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 720, 45, 45, 45, 45, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 942, 45, 45, 946, 45, 45, 45, 950, 45, 45, 0, 2146304, 2146304, 0, 0, 0, 0, 2224128, 2224128, 2224128, 2232320, 2232320, 2232320, 2232320, 0, 0, 1301, 0, 0, 0, 0, 0, 1307, 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1318, 97, 97, 97, 97, 97, 97, 1795, 97, 97, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 67, 67, 2158592, 2146304, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 924, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 67, 67 ]; XQueryTokenizer.EXPECTED = [ 290, 300, 304, 353, 296, 309, 305, 319, 315, 324, 328, 352, 354, 334, 338, 330, 320, 345, 349, 293, 358, 362, 341, 366, 312, 370, 374, 378, 382, 386, 390, 394, 398, 737, 402, 634, 439, 604, 634, 634, 634, 634, 408, 634, 634, 634, 404, 634, 634, 634, 457, 634, 634, 963, 634, 634, 413, 634, 634, 634, 634, 634, 634, 634, 663, 418, 422, 903, 902, 426, 431, 548, 634, 437, 521, 919, 443, 615, 409, 449, 455, 624, 731, 751, 634, 461, 465, 672, 470, 469, 474, 481, 485, 477, 489, 493, 629, 542, 497, 505, 603, 602, 991, 648, 510, 804, 634, 515, 958, 526, 525, 530, 768, 634, 546, 552, 711, 710, 593, 558, 562, 618, 566, 570, 574, 578, 582, 586, 590, 608, 612, 660, 822, 821, 634, 622, 596, 444, 628, 533, 724, 633, 640, 653, 647, 652, 536, 1008, 451, 450, 445, 657, 670, 676, 685, 689, 693, 697, 701, 704, 707, 715, 719, 798, 815, 634, 723, 762, 996, 634, 728, 969, 730, 735, 908, 634, 741, 679, 889, 511, 747, 634, 750, 755, 499, 666, 499, 501, 759, 772, 776, 780, 634, 787, 784, 797, 802, 809, 808, 427, 814, 1006, 517, 634, 519, 853, 634, 813, 850, 793, 634, 819, 826, 833, 832, 837, 843, 847, 857, 861, 863, 867, 871, 875, 879, 883, 643, 887, 539, 980, 979, 634, 893, 944, 634, 900, 896, 634, 907, 933, 506, 912, 917, 828, 433, 636, 635, 554, 961, 923, 930, 927, 937, 941, 634, 634, 634, 974, 948, 952, 985, 913, 968, 967, 743, 634, 973, 839, 634, 978, 599, 634, 984, 989, 765, 444, 995, 1000, 634, 1003, 790, 955, 1012, 681, 634, 634, 634, 634, 634, 414, 1016, 1020, 1024, 1085, 1027, 1090, 1090, 1046, 1080, 1137, 1108, 1215, 1049, 1032, 1039, 1085, 1085, 1085, 1085, 1058, 1062, 1068, 1085, 1086, 1090, 1090, 1091, 1072, 1064, 1107, 1090, 1090, 1090, 1118, 1123, 1138, 1078, 1074, 1084, 1085, 1085, 1085, 1087, 1090, 1062, 1052, 1060, 1114, 1062, 1104, 1085, 1085, 1090, 1090, 1028, 1122, 1063, 1128, 1139, 1127, 1158, 1085, 1085, 1151, 1090, 1090, 1090, 1095, 1090, 1132, 1073, 1136, 1143, 1061, 1150, 1085, 1155, 1098, 1101, 1146, 1162, 1169, 1101, 1185, 1151, 1090, 1110, 1173, 1054, 1087, 1109, 1177, 1165, 1089, 1204, 1184, 1107, 1189, 1193, 1088, 1197, 1180, 1201, 1208, 1042, 1212, 1219, 1223, 1227, 1231, 1235, 1245, 1777, 1527, 1686, 1686, 1238, 1686, 1254, 1686, 1686, 1686, 1294, 1669, 1686, 1686, 1686, 1322, 1625, 1534, 1268, 1624, 1275, 1281, 1443, 1292, 1300, 1686, 1686, 1686, 1350, 1826, 1306, 1686, 1686, 1240, 2032, 1317, 1321, 1686, 1686, 1253, 1686, 1326, 1686, 1686, 1686, 1418, 1709, 1446, 1686, 1686, 1686, 1492, 1686, 1295, 1447, 1686, 1686, 1258, 1686, 1736, 1686, 1686, 1520, 1355, 1686, 1288, 1348, 1361, 1686, 1359, 1686, 1364, 1498, 1368, 1302, 1362, 1381, 1389, 1395, 1486, 1686, 1371, 1377, 1370, 1686, 1375, 1382, 1384, 1402, 1408, 1385, 1383, 1619, 1413, 1423, 1428, 1433, 1686, 1686, 1270, 1686, 1338, 1686, 1440, 1686, 1686, 1686, 1499, 1465, 1686, 1686, 1686, 1639, 1473, 1884, 1686, 1686, 1293, 1864, 1686, 1686, 1296, 1321, 1483, 1686, 1686, 1686, 1646, 1686, 1748, 1496, 1686, 1418, 1675, 1686, 1418, 1702, 1686, 1418, 1981, 1686, 1429, 1409, 1427, 1504, 1692, 1686, 1686, 1313, 1448, 1651, 1508, 1686, 1686, 1340, 1686, 1903, 1686, 1686, 1435, 1513, 1686, 1283, 1287, 1519, 1686, 1524, 1363, 1568, 1938, 1539, 1566, 1579, 1479, 1533, 1538, 1553, 1544, 1552, 1557, 1563, 1574, 1557, 1583, 1589, 1590, 1759, 1594, 1603, 1607, 1611, 1686, 1436, 1514, 1686, 1434, 1656, 1686, 1434, 1680, 1686, 1453, 1686, 1686, 1686, 1559, 1617, 1686, 1770, 1418, 1623, 1769, 1629, 1686, 1515, 1335, 1686, 1285, 1686, 1671, 1921, 1650, 1686, 1686, 1344, 1308, 1666, 1686, 1686, 1686, 1659, 1685, 1686, 1686, 1686, 1686, 1241, 1686, 1686, 1844, 1691, 1686, 1630, 1977, 1970, 1362, 1686, 1686, 1686, 1693, 1698, 1686, 1686, 1686, 1697, 1686, 1764, 1715, 1686, 1634, 1638, 1686, 1599, 1585, 1686, 1271, 1686, 1269, 1686, 1721, 1686, 1686, 1354, 1686, 1801, 1686, 1799, 1686, 1640, 1686, 1686, 1461, 1686, 1686, 1732, 1686, 1944, 1686, 1740, 1686, 1746, 1415, 1396, 1686, 1598, 1547, 1417, 1597, 1416, 1577, 1546, 1397, 1577, 1547, 1548, 1570, 1398, 1753, 1686, 1652, 1509, 1686, 1686, 1686, 1757, 1686, 1419, 1686, 1763, 1418, 1768, 1781, 1686, 1686, 1686, 1705, 1686, 2048, 1792, 1686, 1686, 1686, 1735, 1686, 1797, 1686, 1686, 1404, 1686, 1639, 1815, 1686, 1686, 1418, 2017, 1820, 1686, 1686, 1803, 1686, 1686, 1686, 1736, 1489, 1686, 1686, 1825, 1338, 1260, 1263, 1686, 1686, 1785, 1686, 1686, 1728, 1686, 1686, 1749, 1497, 1830, 1830, 1262, 1248, 1261, 1329, 1260, 1264, 1329, 1248, 1249, 1259, 1540, 1849, 1842, 1686, 1686, 1835, 1686, 1686, 1816, 1686, 1686, 1831, 1882, 1848, 1686, 1686, 1686, 1774, 2071, 1854, 1686, 1686, 1469, 1884, 1686, 1821, 1859, 1686, 1686, 1350, 1883, 1686, 1686, 1686, 1781, 1391, 1875, 1686, 1686, 1613, 1644, 1686, 1686, 1889, 1686, 1686, 1662, 1884, 1686, 1885, 1890, 1686, 1686, 1686, 1894, 1686, 1686, 1678, 1686, 1907, 1686, 1686, 1529, 1914, 1686, 1838, 1686, 1686, 1881, 1686, 1686, 1872, 1876, 1836, 1919, 1686, 1837, 1692, 1910, 1686, 1925, 1928, 1742, 1686, 1811, 1811, 1930, 1810, 1929, 1935, 1928, 1900, 1942, 1867, 1868, 1931, 1035, 1788, 1948, 1952, 1956, 1960, 1964, 1686, 1976, 1686, 1686, 1686, 2065, 1686, 1992, 2037, 1686, 1686, 1998, 2009, 1972, 2002, 1686, 1686, 1686, 2077, 1300, 2023, 1686, 1686, 1686, 1807, 2031, 1686, 1686, 1686, 1860, 1500, 2032, 1686, 1686, 1686, 2083, 1686, 2036, 1686, 1277, 1276, 2042, 1877, 1686, 1686, 2041, 1686, 1686, 2027, 2037, 2012, 1686, 2012, 1855, 1850, 1686, 2046, 1686, 1686, 2054, 1996, 1686, 1897, 1309, 2059, 2052, 1686, 2058, 1686, 1686, 2081, 1686, 1717, 1477, 1686, 1331, 1686, 1686, 1687, 1686, 1860, 1681, 1686, 1686, 1686, 1966, 1724, 1686, 1686, 1686, 1984, 2015, 1686, 1686, 1686, 1988, 1686, 2063, 1686, 1686, 1686, 2005, 1686, 1727, 1686, 1686, 1711, 1457, 2069, 1686, 1686, 1686, 2019, 2075, 1686, 1686, 1915, 1686, 1686, 1793, 1874, 1686, 1686, 1491, 1362, 1449, 1686, 1686, 1460, 2098, 2087, 2091, 2095, 2184, 2102, 2113, 2780, 2117, 2134, 2142, 2281, 2146, 2146, 2146, 2304, 2296, 2181, 2639, 2591, 2872, 2592, 2873, 2313, 2195, 2200, 2281, 2146, 2273, 2226, 2204, 2152, 2219, 2276, 2167, 2177, 2276, 2235, 2276, 2276, 2230, 2281, 2276, 2296, 2276, 2293, 2276, 2276, 2276, 2276, 2234, 2276, 2311, 2314, 2210, 2199, 2217, 2222, 2276, 2276, 2276, 2240, 2276, 2294, 2276, 2276, 2173, 2276, 2198, 2281, 2281, 2281, 2281, 2282, 2146, 2146, 2146, 2146, 2205, 2146, 2204, 2248, 2276, 2235, 2276, 2297, 2276, 2276, 2276, 2277, 2256, 2281, 2283, 2146, 2146, 2146, 2275, 2276, 2295, 2276, 2276, 2293, 2146, 2304, 2264, 2269, 2221, 2276, 2276, 2276, 2293, 2295, 2276, 2276, 2276, 2295, 2263, 2205, 2268, 2220, 2172, 2276, 2276, 2276, 2296, 2276, 2276, 2296, 2294, 2276, 2276, 2278, 2281, 2281, 2280, 2281, 2281, 2281, 2283, 2206, 2223, 2276, 2276, 2279, 2281, 2281, 2146, 2273, 2276, 2276, 2281, 2281, 2281, 2276, 2292, 2276, 2298, 2225, 2276, 2298, 2169, 2224, 2292, 2298, 2171, 2229, 2281, 2281, 2171, 2236, 2281, 2281, 2281, 2146, 2275, 2225, 2292, 2299, 2276, 2229, 2281, 2146, 2276, 2290, 2297, 2283, 2146, 2146, 2274, 2224, 2227, 2298, 2225, 2297, 2276, 2230, 2170, 2230, 2282, 2146, 2147, 2151, 2156, 2288, 2276, 2230, 2303, 2308, 2236, 2284, 2228, 2318, 2318, 2318, 2326, 2335, 2339, 2343, 2349, 2416, 2693, 2357, 2592, 2109, 2592, 2592, 2162, 2943, 2823, 2646, 2592, 2361, 2592, 2122, 2592, 2592, 2122, 2470, 2592, 2592, 2592, 2109, 2107, 2592, 2592, 2592, 2123, 2592, 2592, 2592, 2125, 2592, 2413, 2592, 2592, 2592, 2127, 2592, 2592, 2414, 2592, 2592, 2592, 2130, 2952, 2592, 2594, 2592, 2592, 2212, 2609, 2252, 2592, 2592, 2592, 2446, 2434, 2592, 2592, 2592, 2212, 2446, 2450, 2456, 2431, 2435, 2592, 2592, 2243, 2478, 2448, 2439, 2946, 2592, 2592, 2592, 2368, 2809, 2813, 2450, 2441, 2212, 2812, 2449, 2440, 2947, 2592, 2592, 2592, 2345, 2451, 2457, 2948, 2592, 2124, 2592, 2592, 2650, 2823, 2449, 2455, 2946, 2592, 2128, 2592, 2592, 2649, 2952, 2592, 2810, 2448, 2461, 2991, 2467, 2592, 2592, 2329, 2817, 2474, 2990, 2466, 2592, 2592, 2373, 2447, 2992, 2469, 2592, 2592, 2592, 2373, 2447, 2477, 2468, 2592, 2592, 2353, 2469, 2592, 2495, 2592, 2592, 2415, 2483, 2592, 2415, 2496, 2592, 2592, 2352, 2592, 2592, 2352, 2352, 2469, 2592, 2592, 2363, 2331, 2494, 2592, 2592, 2592, 2375, 2592, 2375, 2415, 2504, 2592, 2592, 2367, 2372, 2503, 2592, 2592, 2592, 2389, 2418, 2415, 2592, 2592, 2373, 2592, 2592, 2592, 2593, 2732, 2417, 2415, 2592, 2417, 2520, 2592, 2592, 2592, 2390, 2521, 2521, 2592, 2592, 2592, 2401, 2599, 2585, 2526, 2531, 2120, 2592, 2212, 2426, 2450, 2463, 2948, 2592, 2592, 2592, 2213, 2389, 2527, 2532, 2121, 2542, 2551, 2105, 2592, 2213, 2592, 2592, 2592, 2558, 2538, 2544, 2553, 2557, 2537, 2543, 2552, 2421, 2572, 2576, 2546, 2543, 2547, 2592, 2592, 2373, 2615, 2575, 2545, 2105, 2592, 2244, 2479, 2592, 2129, 2592, 2592, 2628, 2690, 2469, 2562, 2566, 2592, 2592, 2592, 2415, 2928, 2934, 2401, 2570, 2574, 2564, 2572, 2585, 2590, 2592, 2592, 2585, 2965, 2592, 2592, 2592, 2445, 2251, 2592, 2592, 2592, 2474, 2592, 2609, 2892, 2592, 2362, 2592, 2592, 2138, 2851, 2159, 2592, 2592, 2592, 2509, 2888, 2892, 2592, 2592, 2592, 2490, 2418, 2891, 2592, 2592, 2376, 2592, 2592, 2374, 2592, 2889, 2388, 2592, 2373, 2373, 2890, 2592, 2592, 2387, 2592, 2887, 2505, 2892, 2592, 2373, 2610, 2388, 2592, 2592, 2376, 2373, 2592, 2887, 2891, 2592, 2374, 2592, 2592, 2608, 2159, 2614, 2620, 2592, 2592, 2394, 2594, 2887, 2399, 2592, 2887, 2397, 2508, 2374, 2507, 2592, 2375, 2592, 2592, 2592, 2595, 2508, 2506, 2592, 2506, 2505, 2505, 2592, 2507, 2637, 2505, 2592, 2592, 2401, 2661, 2592, 2643, 2592, 2592, 2417, 2592, 2655, 2592, 2592, 2592, 2510, 2414, 2656, 2592, 2592, 2592, 2516, 2592, 2593, 2660, 2665, 2880, 2592, 2592, 2592, 2522, 2767, 2666, 2881, 2592, 2592, 2420, 2571, 2696, 2592, 2592, 2592, 2580, 2572, 2686, 2632, 2698, 2592, 2383, 2514, 2592, 2163, 2932, 2465, 2685, 2631, 2697, 2592, 2388, 2592, 2592, 2212, 2604, 2671, 2632, 2678, 2592, 2401, 2405, 2409, 2592, 2592, 2592, 2679, 2592, 2592, 2592, 2592, 2108, 2677, 2591, 2592, 2592, 2592, 2419, 2592, 2683, 2187, 2191, 2469, 2671, 2189, 2467, 2592, 2401, 2629, 2633, 2702, 2468, 2592, 2592, 2421, 2536, 2703, 2469, 2592, 2592, 2422, 2573, 2593, 2672, 2467, 2592, 2402, 2406, 2592, 2402, 2979, 2592, 2592, 2626, 2673, 2467, 2592, 2446, 2259, 2947, 2592, 2377, 2709, 2592, 2592, 2522, 2862, 2713, 2468, 2592, 2592, 2581, 2572, 2562, 2374, 2374, 2592, 2376, 2721, 2724, 2592, 2592, 2624, 2373, 2731, 2592, 2592, 2592, 2626, 2732, 2592, 2592, 2592, 2755, 2656, 2726, 2736, 2741, 2592, 2486, 2593, 2381, 2592, 2727, 2737, 2742, 2715, 2747, 2753, 2592, 2498, 2469, 2873, 2743, 2592, 2592, 2592, 2791, 2759, 2763, 2592, 2592, 2627, 2704, 2592, 2592, 2522, 2789, 2593, 2761, 2753, 2592, 2498, 2863, 2592, 2592, 2767, 2592, 2592, 2592, 2792, 2789, 2592, 2592, 2592, 2803, 2126, 2592, 2592, 2592, 2811, 2122, 2592, 2592, 2592, 2834, 2777, 2592, 2592, 2592, 2848, 2936, 2591, 2489, 2797, 2592, 2592, 2670, 2631, 2490, 2798, 2592, 2592, 2592, 2963, 2807, 2592, 2592, 2592, 2965, 2838, 2592, 2592, 2592, 2975, 2330, 2818, 2829, 2592, 2498, 2939, 2592, 2498, 2592, 2791, 2331, 2819, 2830, 2592, 2592, 2592, 2982, 2834, 2817, 2828, 2106, 2592, 2592, 2592, 2405, 2405, 2817, 2828, 2592, 2592, 2415, 2849, 2842, 2592, 2522, 2773, 2592, 2522, 2868, 2592, 2580, 2600, 2586, 2137, 2850, 2843, 2592, 2592, 2855, 2937, 2844, 2592, 2592, 2592, 2987, 2936, 2591, 2592, 2592, 2684, 2630, 2592, 2856, 2938, 2592, 2592, 2860, 2939, 2592, 2592, 2872, 2592, 2861, 2591, 2592, 2592, 2887, 2616, 2592, 2867, 2592, 2592, 2708, 2592, 2498, 2469, 2498, 2497, 2785, 2773, 2499, 2783, 2770, 2877, 2877, 2877, 2772, 2592, 2592, 2345, 2885, 2592, 2592, 2592, 2715, 2762, 2515, 2896, 2592, 2592, 2715, 2917, 2516, 2897, 2592, 2592, 2592, 2901, 2906, 2911, 2592, 2592, 2956, 2960, 2715, 2902, 2907, 2912, 2593, 2916, 2920, 2820, 2922, 2822, 2592, 2592, 2715, 2927, 2921, 2821, 2106, 2592, 2592, 2974, 2408, 2321, 2821, 2106, 2592, 2592, 2983, 2592, 2593, 2404, 2408, 2592, 2592, 2717, 2749, 2716, 2928, 2322, 2822, 2593, 2926, 2919, 2820, 2934, 2823, 2592, 2592, 2592, 2651, 2824, 2592, 2592, 2592, 2130, 2952, 2592, 2592, 2592, 2592, 2964, 2592, 2592, 2716, 2748, 2592, 2969, 2592, 2592, 2716, 2918, 2368, 2970, 2592, 2592, 2592, 2403, 2407, 2592, 2592, 2787, 2211, 2404, 2409, 2592, 2592, 2802, 2837, 2987, 2592, 2592, 2592, 2809, 2427, 2592, 2793, 2592, 2592, 2809, 2447, 1073741824, 0x80000000, 539754496, 542375936, 402653184, 554434560, 571736064, 545521856, 268451840, 335544320, 268693630, 512, 2048, 256, 1024, 0, 1024, 0, 1073741824, 0x80000000, 0, 0, 0, 8388608, 0, 0, 1073741824, 1073741824, 0, 0x80000000, 537133056, 4194304, 1048576, 268435456, -1073741824, 0, 0, 0, 1048576, 0, 0, 0, 1572864, 0, 0, 0, 4194304, 0, 134217728, 16777216, 0, 0, 32, 64, 98304, 0, 33554432, 8388608, 192, 67108864, 67108864, 67108864, 67108864, 16, 32, 4, 0, 8192, 196608, 196608, 229376, 80, 4096, 524288, 8388608, 0, 0, 32, 128, 256, 24576, 24600, 24576, 24576, 2, 24576, 24576, 24576, 24584, 24592, 24576, 24578, 24576, 24578, 24576, 24576, 16, 512, 2048, 2048, 256, 4096, 32768, 1048576, 4194304, 67108864, 134217728, 268435456, 262144, 134217728, 0, 128, 128, 64, 16384, 16384, 16384, 67108864, 32, 32, 4, 4, 4096, 262144, 134217728, 0, 0, 0, 2, 0, 8192, 131072, 131072, 4096, 4096, 4096, 4096, 24576, 24576, 24576, 8, 8, 24576, 24576, 16384, 16384, 16384, 24576, 24584, 24576, 24576, 24576, 16384, 24576, 536870912, 262144, 0, 0, 32, 2048, 8192, 4, 4096, 4096, 4096, 786432, 8388608, 16777216, 0, 128, 16384, 16384, 16384, 32768, 65536, 2097152, 32, 32, 32, 32, 4, 4, 4, 4, 4, 4096, 67108864, 67108864, 67108864, 24576, 24576, 24576, 24576, 0, 16384, 16384, 16384, 16384, 67108864, 67108864, 8, 67108864, 24576, 8, 8, 8, 24576, 24576, 24576, 24578, 24576, 24576, 24576, 2, 2, 2, 16384, 67108864, 67108864, 67108864, 32, 67108864, 8, 8, 24576, 2048, 0x80000000, 536870912, 262144, 262144, 262144, 67108864, 8, 24576, 16384, 32768, 1048576, 4194304, 25165824, 67108864, 24576, 32770, 2, 4, 112, 512, 98304, 524288, 50, 402653186, 1049090, 1049091, 10, 66, 100925514, 10, 66, 12582914, 0, 0, -1678194207, -1678194207, -1041543218, 0, 32768, 0, 0, 32, 65536, 268435456, 1, 1, 513, 1048577, 0, 12582912, 0, 0, 0, 4, 1792, 0, 0, 0, 7, 29360128, 0, 0, 0, 8, 0, 0, 0, 12, 1, 1, 0, 0, -604102721, -604102721, 4194304, 8388608, 0, 0, 0, 31, 925600, 997981306, 997981306, 997981306, 0, 0, 2048, 8388608, 0, 0, 1, 2, 4, 32, 64, 512, 8192, 0, 0, 0, 245760, 997720064, 0, 0, 0, 32, 0, 0, 0, 3, 12, 16, 32, 8, 112, 3072, 12288, 16384, 32768, 65536, 131072, 7864320, 16777216, 973078528, 0, 0, 65536, 131072, 3670016, 4194304, 16777216, 33554432, 2, 8, 48, 2048, 8192, 16384, 32768, 65536, 131072, 524288, 131072, 524288, 3145728, 4194304, 16777216, 33554432, 65536, 131072, 2097152, 4194304, 16777216, 33554432, 134217728, 268435456, 536870912, 0, 0, 0, 1024, 0, 8, 48, 2048, 8192, 65536, 33554432, 268435456, 536870912, 65536, 268435456, 536870912, 0, 0, 32768, 0, 0, 126, 623104, 65011712, 0, 32, 65536, 536870912, 0, 0, 65536, 524288, 0, 32, 65536, 0, 0, 0, 2048, 0, 0, 0, 15482, 245760, -604102721, 0, 0, 0, 18913, 33062912, 925600, -605028352, 0, 0, 0, 65536, 31, 8096, 131072, 786432, 3145728, 3145728, 12582912, 50331648, 134217728, 268435456, 160, 256, 512, 7168, 131072, 786432, 131072, 786432, 1048576, 2097152, 12582912, 16777216, 268435456, 1073741824, 0x80000000, 12582912, 16777216, 33554432, 268435456, 1073741824, 0x80000000, 3, 12, 16, 160, 256, 7168, 786432, 1048576, 12582912, 16777216, 268435456, 1073741824, 0, 8, 16, 32, 128, 256, 512, 7168, 786432, 1048576, 2097152, 0, 1, 2, 8, 16, 7168, 786432, 1048576, 8388608, 16777216, 16777216, 1073741824, 0, 0, 0, 0, 1, 0, 0, 8, 32, 128, 256, 7168, 8, 32, 0, 3072, 0, 8, 32, 3072, 4096, 524288, 8, 32, 0, 0, 3072, 4096, 0, 2048, 524288, 8388608, 8, 2048, 0, 0, 1, 12, 256, 4096, 32768, 262144, 1048576, 4194304, 67108864, 0, 2048, 0, 2048, 2048, 1073741824, -58805985, -58805985, -58805985, 0, 0, 262144, 0, 0, 32, 4194304, 16777216, 134217728, 4382, 172032, -58982400, 0, 0, 2, 28, 256, 4096, 8192, 8192, 32768, 131072, 262144, 524288, 1, 2, 12, 256, 4096, 0, 0, 4194304, 67108864, 134217728, 805306368, 1073741824, 0, 0, 1, 2, 12, 16, 256, 4096, 1048576, 67108864, 134217728, 268435456, 0, 512, 1048576, 4194304, 201326592, 1879048192, 0, 0, 12, 256, 4096, 134217728, 268435456, 536870912, 12, 256, 268435456, 536870912, 0, 12, 256, 0, 0, 1, 32, 64, 512, 0, 0, 205236961, 205236961, 0, 0, 0, 1, 96, 640, 1, 10976, 229376, 204996608, 0, 640, 2048, 8192, 229376, 1572864, 1572864, 2097152, 201326592, 0, 0, 0, 64, 512, 2048, 229376, 1572864, 201326592, 1572864, 201326592, 0, 0, 1, 4382, 0, 1, 32, 2048, 65536, 131072, 1572864, 201326592, 131072, 1572864, 134217728, 0, 0, 524288, 524288, 0, 0, 0, -68582786, -68582786, -68582786, 0, 0, 2097152, 524288, 0, 524288, 0, 0, 65536, 131072, 1572864, 0, 0, 2, 4, 0, 0, 65011712, -134217728, 0, 0, 0, 0, 2, 4, 120, 512, -268435456, 0, 0, 0, 2, 8, 48, 64, 2048, 8192, 98304, 524288, 2097152, 4194304, 25165824, 33554432, 134217728, 268435456, 0x80000000, 0, 0, 25165824, 33554432, 134217728, 1879048192, 0x80000000, 0, 0, 4, 112, 512, 622592, 65011712, 134217728, -268435456, 16777216, 33554432, 134217728, 1610612736, 0, 0, 0, 64, 98304, 524288, 4194304, 16777216, 33554432, 0, 98304, 524288, 16777216, 33554432, 0, 65536, 524288, 33554432, 536870912, 1073741824, 0, 65536, 524288, 536870912, 1073741824, 0, 0, 65536, 524288, 536870912, 0, 524288, 0, 524288, 524288, 1048576, 2086666240, 0x80000000, 0, -1678194207, 0, 0, 0, 8, 32, 2048, 524288, 8388608, 0, 0, 33062912, 436207616, 0x80000000, 0, 0, 32, 64, 2432, 16384, 32768, 32768, 524288, 3145728, 4194304, 25165824, 25165824, 167772160, 268435456, 0x80000000, 0, 32, 64, 384, 2048, 16384, 32768, 1048576, 2097152, 4194304, 25165824, 32, 64, 128, 256, 2048, 16384, 2048, 16384, 1048576, 4194304, 16777216, 33554432, 134217728, 536870912, 1073741824, 0, 0, 2048, 16384, 4194304, 16777216, 33554432, 134217728, 805306368, 0, 0, 16777216, 134217728, 268435456, 0x80000000, 0, 622592, 622592, 622592, 8807, 8807, 434791, 0, 0, 16777216, 0, 0, 0, 7, 608, 8192, 0, 0, 0, 3, 4, 96, 512, 32, 64, 8192, 0, 0, 16777216, 134217728, 0, 0, 2, 4, 8192, 16384, 65536, 2097152, 33554432, 268435456 ]; XQueryTokenizer.TOKEN = [ "(0)", "ModuleDecl", "Annotation", "OptionDecl", "Operator", "Variable", "Tag", "EndTag", "PragmaContents", "DirCommentContents", "DirPIContents", "CDataSectionContents", "AttrTest", "Wildcard", "EQName", "IntegerLiteral", "DecimalLiteral", "DoubleLiteral", "PredefinedEntityRef", "'\"\"'", "EscapeApos", "QuotChar", "AposChar", "ElementContentChar", "QuotAttrContentChar", "AposAttrContentChar", "NCName", "QName", "S", "CharRef", "CommentContents", "DocTag", "DocCommentContents", "EOF", "'!'", "'\"'", "'#'", "'#)'", "''''", "'('", "'(#'", "'(:'", "'(:~'", "')'", "'*'", "'*'", "','", "'-->'", "'.'", "'/'", "'/>'", "':'", "':)'", "';'", "''), token: xmlcomment, next: function(stack){ stack.pop(); } } ], CData: [ { name: 'CDataSectionContents', token: cdata }, { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } } ], PI: [ { name: 'DirPIContents', token: pi }, { name: n('?'), token: pi }, { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } } ], AposString: [ { name: n('\'\''), token: 'string', next: function(stack){ stack.pop(); } }, { name: 'PredefinedEntityRef', token: 'constant.language.escape' }, { name: 'CharRef', token: 'constant.language.escape' }, { name: 'EscapeApos', token: 'constant.language.escape' }, { name: 'AposChar', token: 'string' } ], QuotString: [ { name: n('"'), token: 'string', next: function(stack){ stack.pop(); } }, { name: 'PredefinedEntityRef', token: 'constant.language.escape' }, { name: 'CharRef', token: 'constant.language.escape' }, { name: 'EscapeQuot', token: 'constant.language.escape' }, { name: 'QuotChar', token: 'string' } ] }; exports.XQueryLexer = function(){ return new Lexer(XQueryTokenizer, Rules); }; }, {"./XQueryTokenizer":1,"./lexer":2}]},{},[3]) (3) }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return { text: '{' + selected + '}', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '(' + selected + ')', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return { text: '[' + selected + ']', selection: false }; } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } else { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string/.test(token.type); var stringAfter = !rightToken || /string/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === "') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken(); var atCursor = false; var state = JSON.parse(state).pop(); if ((token && token.value === '>') || state !== "StartTag") return; if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){ do { token = iterator.stepBackward(); } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text'))); } else { atCursor = true; } var previous = iterator.stepBackward(); if (!token || !hasType(token, 'meta.tag') || (previous !== null && previous.value.match('/'))) { return } var tag = token.value.substring(1); if (atCursor){ var tag = tag.substring(0, position.column - token.start); } return { text: '>' + '', selection: [1, 1] } } }); } oop.inherits(XQueryBehaviour, Behaviour); exports.XQueryBehaviour = XQueryBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/xquery",["require","exports","module","ace/worker/worker_client","ace/lib/oop","ace/mode/text","ace/mode/text_highlight_rules","ace/mode/xquery/xquery_lexer","ace/range","ace/mode/behaviour/xquery","ace/mode/folding/cstyle","ace/anchor"], function(require, exports, module) { "use strict"; var WorkerClient = require("../worker/worker_client").WorkerClient; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XQueryLexer = require("./xquery/xquery_lexer").XQueryLexer; var Range = require("../range").Range; var XQueryBehaviour = require("./behaviour/xquery").XQueryBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Anchor = require("../anchor").Anchor; var Mode = function() { this.$tokenizer = new XQueryLexer(); this.$behaviour = new XQueryBehaviour(); this.foldingRules = new CStyleFoldMode(); this.$highlightRules = new TextHighlightRules(); }; oop.inherits(Mode, TextMode); (function() { this.completer = { getCompletions: function(editor, session, pos, prefix, callback) { if (!session.$worker) return callback(); session.$worker.emit("complete", { data: { pos: pos, prefix: prefix } }); session.$worker.on("complete", function(e){ callback(null, e.data); }); } }; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var match = line.match(/\s*(?:then|else|return|[{\(]|<\w+>)\s*$/); if (match) indent += tab; return indent; }; this.checkOutdent = function(state, line, input) { if (! /^\s+$/.test(line)) return false; return (/^\s*[\}\)]/).test(input); }; this.autoOutdent = function(state, doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*[\}\)])/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.toggleCommentLines = function(state, doc, startRow, endRow) { var i, line; var outdent = true; var re = /^\s*\(:(.*):\)/; for (i=startRow; i<= endRow; i++) { if (!re.test(doc.getLine(i))) { outdent = false; break; } } var range = new Range(0, 0, 0, 0); for (i=startRow; i<= endRow; i++) { line = doc.getLine(i); range.start.row = i; range.end.row = i; range.end.column = line.length; doc.replace(range, outdent ? line.match(re)[1] : "(:" + line + ":)"); } }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/xquery_worker", "XQueryWorker"); var that = this; worker.attachToDocument(session.getDocument()); worker.on("ok", function(e) { session.clearAnnotations(); }); worker.on("markers", function(e) { session.clearAnnotations(); that.addMarkers(e.data, session); }); worker.on("highlight", function(tokens) { that.$tokenizer.tokens = tokens.data.tokens; that.$tokenizer.lines = session.getDocument().getAllLines(); var rows = Object.keys(that.$tokenizer.tokens); for(var i=0; i < rows.length; i++) { var row = parseInt(rows[i]); delete session.bgTokenizer.lines[row]; delete session.bgTokenizer.states[row]; session.bgTokenizer.fireUpdateEvent(row, row); } }); return worker; }; this.removeMarkers = function(session) { var markers = session.getMarkers(false); for (var id in markers) { if (markers[id].clazz.indexOf('language_highlight_') === 0) { session.removeMarker(id); } } for (var i = 0; i < session.markerAnchors.length; i++) { session.markerAnchors[i].detach(); } session.markerAnchors = []; }; this.addMarkers = function(annos, mySession) { var _self = this; if (!mySession.markerAnchors) mySession.markerAnchors = []; this.removeMarkers(mySession); mySession.languageAnnos = []; annos.forEach(function(anno) { var anchor = new Anchor(mySession.getDocument(), anno.pos.sl, anno.pos.sc || 0); mySession.markerAnchors.push(anchor); var markerId; var colDiff = anno.pos.ec - anno.pos.sc; var rowDiff = anno.pos.el - anno.pos.sl; var gutterAnno = { guttertext: anno.message, type: anno.level || "warning", text: anno.message }; function updateFloat(single) { if (markerId) mySession.removeMarker(markerId); gutterAnno.row = anchor.row; if (anno.pos.sc !== undefined && anno.pos.ec !== undefined) { var range = new Range(anno.pos.sl, anno.pos.sc, anno.pos.el, anno.pos.ec); markerId = mySession.addMarker(range, "language_highlight_" + (anno.type ? anno.type : "default")); } if (single) mySession.setAnnotations(mySession.languageAnnos); } updateFloat(); anchor.on("change", function() { updateFloat(true); }); if (anno.message) mySession.languageAnnos.push(gutterAnno); }); mySession.setAnnotations(mySession.languageAnnos); }; this.$id = "ace/mode/xquery"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/mode-yaml.js ================================================ ace.define("ace/mode/yaml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var YamlHighlightRules = function() { this.$rules = { "start" : [ { token : "comment", regex : "#.*$" }, { token : "list.markup", regex : /^(?:-{3}|\.{3})\s*(?=#|$)/ }, { token : "list.markup", regex : /^\s*[\-?](?:$|\s)/ }, { token: "constant", regex: "!![\\w//]+" }, { token: "constant.language", regex: "[&\\*][a-zA-Z0-9-_]+" }, { token: ["meta.tag", "keyword"], regex: /^(\s*\w.*?)(\:(?:\s+|$))/ },{ token: ["meta.tag", "keyword"], regex: /(\w+?)(\s*\:(?:\s+|$))/ }, { token : "keyword.operator", regex : "<<\\w*:\\w*" }, { token : "keyword.operator", regex : "-\\s*(?=[{])" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '[|>][-+\\d\\s]*$', next : "qqstring" }, { token : "string", // single quoted string regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "constant.numeric", // float regex : /(\b|[+\-\.])[\d_]+(?:(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)/ }, { token : "constant.numeric", // other number regex : /[+\-]?\.inf\b|NaN\b|0x[\dA-Fa-f_]+|0b[10_]+/ }, { token : "constant.language.boolean", regex : "(?:true|false|TRUE|FALSE|True|False|yes|no)\\b" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" } ], "qqstring" : [ { token : "string", regex : '(?=(?:(?:\\\\.)|(?:[^:]))*?:)', next : "start" }, { token : "string", regex : '.+' } ]}; }; oop.inherits(YamlHighlightRules, TextHighlightRules); exports.YamlHighlightRules = YamlHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/yaml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/yaml_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var YamlHighlightRules = require("./yaml_highlight_rules").YamlHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = YamlHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/yaml"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/abap.js ================================================ ace.define("ace/snippets/abap",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "abap"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/actionscript.js ================================================ ace.define("ace/snippets/actionscript",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet main\n\ package {\n\ import flash.display.*;\n\ import flash.Events.*;\n\ \n\ public class Main extends Sprite {\n\ public function Main ( ) {\n\ trace(\"start\");\n\ stage.scaleMode = StageScaleMode.NO_SCALE;\n\ stage.addEventListener(Event.RESIZE, resizeListener);\n\ }\n\ \n\ private function resizeListener (e:Event):void {\n\ trace(\"The application window changed size!\");\n\ trace(\"New width: \" + stage.stageWidth);\n\ trace(\"New height: \" + stage.stageHeight);\n\ }\n\ \n\ }\n\ \n\ }\n\ snippet class\n\ ${1:public|internal} class ${2:name} ${3:extends } {\n\ public function $2 ( ) {\n\ (\"start\");\n\ }\n\ }\n\ snippet all\n\ package name {\n\ \n\ ${1:public|internal|final} class ${2:name} ${3:extends } {\n\ private|public| static const FOO = \"abc\";\n\ private|public| static var BAR = \"abc\";\n\ if Cababilities.os == \"Linux|MacOS\" {\n\ FOO = \"other\";\n\ }\n\ public function $2 ( ){\n\ super2();\n\ trace(\"start\");\n\ }\n\ public function name (a, b...){\n\ super.name(..);\n\ lable:break\n\ }\n\ }\n\ }\n\ \n\ function A(){\n\ }\n\ snippet switch\n\ switch(${1}){\n\ case ${2}:\n\ ${3}\n\ break;\n\ default:\n\ }\n\ snippet case\n\ case ${1}:\n\ ${2}\n\ break;\n\ snippet package\n\ package ${1:package}{\n\ ${2}\n\ }\n\ snippet wh\n\ while ${1:cond}{\n\ ${2}\n\ }\n\ snippet do\n\ do {\n\ ${2}\n\ } while (${1:cond})\n\ snippet while\n\ while ${1:cond}{\n\ ${2}\n\ }\n\ snippet for enumerate names\n\ for (${1:var} in ${2:object}){\n\ ${3}\n\ }\n\ snippet for enumerate values\n\ for each (${1:var} in ${2:object}){\n\ ${3}\n\ }\n\ snippet get_set\n\ function get ${1:name} {\n\ return ${2}\n\ }\n\ function set $1 (newValue) {\n\ ${3}\n\ }\n\ snippet interface\n\ interface name {\n\ function method(${1}):${2:returntype};\n\ }\n\ snippet try\n\ try {\n\ ${1}\n\ } catch (error:ErrorType) {\n\ ${2}\n\ } finally {\n\ ${3}\n\ }\n\ # For Loop (same as c.snippet)\n\ snippet for for (..) {..}\n\ for (${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\n\ ${4:/* code */}\n\ }\n\ # Custom For Loop\n\ snippet forr\n\ for (${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) {\n\ ${5:/* code */}\n\ }\n\ # If Condition\n\ snippet if\n\ if (${1:/* condition */}) {\n\ ${2:/* code */}\n\ }\n\ snippet el\n\ else {\n\ ${1}\n\ }\n\ # Ternary conditional\n\ snippet t\n\ ${1:/* condition */} ? ${2:a} : ${3:b}\n\ snippet fun\n\ function ${1:function_name}(${2})${3}\n\ {\n\ ${4:/* code */}\n\ }\n\ # FlxSprite (usefull when using the flixel library)\n\ snippet FlxSprite\n\ package\n\ {\n\ import org.flixel.*\n\ \n\ public class ${1:ClassName} extends ${2:FlxSprite}\n\ {\n\ public function $1(${3: X:Number, Y:Number}):void\n\ {\n\ super(X,Y);\n\ ${4: //code...}\n\ }\n\ \n\ override public function update():void\n\ {\n\ super.update();\n\ ${5: //code...}\n\ }\n\ }\n\ }\n\ \n\ "; exports.scope = "actionscript"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/ada.js ================================================ ace.define("ace/snippets/ada",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "ada"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/apache_conf.js ================================================ ace.define("ace/snippets/apache_conf",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "apache_conf"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/applescript.js ================================================ ace.define("ace/snippets/applescript",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "applescript"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/asciidoc.js ================================================ ace.define("ace/snippets/asciidoc",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "asciidoc"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/assembly_x86.js ================================================ ace.define("ace/snippets/assembly_x86",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "assembly_x86"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/autohotkey.js ================================================ ace.define("ace/snippets/autohotkey",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "autohotkey"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/batchfile.js ================================================ ace.define("ace/snippets/batchfile",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "batchfile"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/c9search.js ================================================ ace.define("ace/snippets/c9search",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "c9search"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/c_cpp.js ================================================ ace.define("ace/snippets/c_cpp",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "## STL Collections\n\ # std::array\n\ snippet array\n\ std::array<${1:T}, ${2:N}> ${3};${4}\n\ # std::vector\n\ snippet vector\n\ std::vector<${1:T}> ${2};${3}\n\ # std::deque\n\ snippet deque\n\ std::deque<${1:T}> ${2};${3}\n\ # std::forward_list\n\ snippet flist\n\ std::forward_list<${1:T}> ${2};${3}\n\ # std::list\n\ snippet list\n\ std::list<${1:T}> ${2};${3}\n\ # std::set\n\ snippet set\n\ std::set<${1:T}> ${2};${3}\n\ # std::map\n\ snippet map\n\ std::map<${1:Key}, ${2:T}> ${3};${4}\n\ # std::multiset\n\ snippet mset\n\ std::multiset<${1:T}> ${2};${3}\n\ # std::multimap\n\ snippet mmap\n\ std::multimap<${1:Key}, ${2:T}> ${3};${4}\n\ # std::unordered_set\n\ snippet uset\n\ std::unordered_set<${1:T}> ${2};${3}\n\ # std::unordered_map\n\ snippet umap\n\ std::unordered_map<${1:Key}, ${2:T}> ${3};${4}\n\ # std::unordered_multiset\n\ snippet umset\n\ std::unordered_multiset<${1:T}> ${2};${3}\n\ # std::unordered_multimap\n\ snippet ummap\n\ std::unordered_multimap<${1:Key}, ${2:T}> ${3};${4}\n\ # std::stack\n\ snippet stack\n\ std::stack<${1:T}> ${2};${3}\n\ # std::queue\n\ snippet queue\n\ std::queue<${1:T}> ${2};${3}\n\ # std::priority_queue\n\ snippet pqueue\n\ std::priority_queue<${1:T}> ${2};${3}\n\ ##\n\ ## Access Modifiers\n\ # private\n\ snippet pri\n\ private\n\ # protected\n\ snippet pro\n\ protected\n\ # public\n\ snippet pub\n\ public\n\ # friend\n\ snippet fr\n\ friend\n\ # mutable\n\ snippet mu\n\ mutable\n\ ## \n\ ## Class\n\ # class\n\ snippet cl\n\ class ${1:`Filename('$1', 'name')`} \n\ {\n\ public:\n\ $1(${2});\n\ ~$1();\n\ \n\ private:\n\ ${3:/* data */}\n\ };\n\ # member function implementation\n\ snippet mfun\n\ ${4:void} ${1:`Filename('$1', 'ClassName')`}::${2:memberFunction}(${3}) {\n\ ${5:/* code */}\n\ }\n\ # namespace\n\ snippet ns\n\ namespace ${1:`Filename('', 'my')`} {\n\ ${2}\n\ } /* namespace $1 */\n\ ##\n\ ## Input/Output\n\ # std::cout\n\ snippet cout\n\ std::cout << ${1} << std::endl;${2}\n\ # std::cin\n\ snippet cin\n\ std::cin >> ${1};${2}\n\ ##\n\ ## Iteration\n\ # for i \n\ snippet fori\n\ for (int ${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\n\ ${4:/* code */}\n\ }${5}\n\ \n\ # foreach\n\ snippet fore\n\ for (${1:auto} ${2:i} : ${3:container}) {\n\ ${4:/* code */}\n\ }${5}\n\ # iterator\n\ snippet iter\n\ for (${1:std::vector}<${2:type}>::${3:const_iterator} ${4:i} = ${5:container}.begin(); $4 != $5.end(); ++$4) {\n\ ${6}\n\ }${7}\n\ \n\ # auto iterator\n\ snippet itera\n\ for (auto ${1:i} = $1.begin(); $1 != $1.end(); ++$1) {\n\ ${2:std::cout << *$1 << std::endl;}\n\ }${3}\n\ ##\n\ ## Lambdas\n\ # lamda (one line)\n\ snippet ld\n\ [${1}](${2}){${3:/* code */}}${4}\n\ # lambda (multi-line)\n\ snippet lld\n\ [${1}](${2}){\n\ ${3:/* code */}\n\ }${4}\n\ "; exports.scope = "c_cpp"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/cirru.js ================================================ ace.define("ace/snippets/cirru",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "cirru"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/clojure.js ================================================ ace.define("ace/snippets/clojure",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet comm\n\ (comment\n\ ${1}\n\ )\n\ snippet condp\n\ (condp ${1:pred} ${2:expr}\n\ ${3})\n\ snippet def\n\ (def ${1})\n\ snippet defm\n\ (defmethod ${1:multifn} \"${2:doc-string}\" ${3:dispatch-val} [${4:args}]\n\ ${5})\n\ snippet defmm\n\ (defmulti ${1:name} \"${2:doc-string}\" ${3:dispatch-fn})\n\ snippet defma\n\ (defmacro ${1:name} \"${2:doc-string}\" ${3:dispatch-fn})\n\ snippet defn\n\ (defn ${1:name} \"${2:doc-string}\" [${3:arg-list}]\n\ ${4})\n\ snippet defp\n\ (defprotocol ${1:name}\n\ ${2})\n\ snippet defr\n\ (defrecord ${1:name} [${2:fields}]\n\ ${3:protocol}\n\ ${4})\n\ snippet deft\n\ (deftest ${1:name}\n\ (is (= ${2:assertion})))\n\ ${3})\n\ snippet is\n\ (is (= ${1} ${2}))\n\ snippet defty\n\ (deftype ${1:Name} [${2:fields}]\n\ ${3:Protocol}\n\ ${4})\n\ snippet doseq\n\ (doseq [${1:elem} ${2:coll}]\n\ ${3})\n\ snippet fn\n\ (fn [${1:arg-list}] ${2})\n\ snippet if\n\ (if ${1:test-expr}\n\ ${2:then-expr}\n\ ${3:else-expr})\n\ snippet if-let \n\ (if-let [${1:result} ${2:test-expr}]\n\ (${3:then-expr} $1)\n\ (${4:else-expr}))\n\ snippet imp\n\ (:import [${1:package}])\n\ & {:keys [${1:keys}] :or {${2:defaults}}}\n\ snippet let\n\ (let [${1:name} ${2:expr}]\n\ ${3})\n\ snippet letfn\n\ (letfn [(${1:name) [${2:args}]\n\ ${3})])\n\ snippet map\n\ (map ${1:func} ${2:coll})\n\ snippet mapl\n\ (map #(${1:lambda}) ${2:coll})\n\ snippet met\n\ (${1:name} [${2:this} ${3:args}]\n\ ${4})\n\ snippet ns\n\ (ns ${1:name}\n\ ${2})\n\ snippet dotimes\n\ (dotimes [_ 10]\n\ (time\n\ (dotimes [_ ${1:times}]\n\ ${2})))\n\ snippet pmethod\n\ (${1:name} [${2:this} ${3:args}])\n\ snippet refer\n\ (:refer-clojure :exclude [${1}])\n\ snippet require\n\ (:require [${1:namespace} :as [${2}]])\n\ snippet use\n\ (:use [${1:namespace} :only [${2}]])\n\ snippet print\n\ (println ${1})\n\ snippet reduce\n\ (reduce ${1:(fn [p n] ${3})} ${2})\n\ snippet when\n\ (when ${1:test} ${2:body})\n\ snippet when-let\n\ (when-let [${1:result} ${2:test}]\n\ ${3:body})\n\ "; exports.scope = "clojure"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/cobol.js ================================================ ace.define("ace/snippets/cobol",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "cobol"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/coffee.js ================================================ ace.define("ace/snippets/coffee",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# Closure loop\n\ snippet forindo\n\ for ${1:name} in ${2:array}\n\ do ($1) ->\n\ ${3:// body}\n\ # Array comprehension\n\ snippet fora\n\ for ${1:name} in ${2:array}\n\ ${3:// body...}\n\ # Object comprehension\n\ snippet foro\n\ for ${1:key}, ${2:value} of ${3:object}\n\ ${4:// body...}\n\ # Range comprehension (inclusive)\n\ snippet forr\n\ for ${1:name} in [${2:start}..${3:finish}]\n\ ${4:// body...}\n\ snippet forrb\n\ for ${1:name} in [${2:start}..${3:finish}] by ${4:step}\n\ ${5:// body...}\n\ # Range comprehension (exclusive)\n\ snippet forrex\n\ for ${1:name} in [${2:start}...${3:finish}]\n\ ${4:// body...}\n\ snippet forrexb\n\ for ${1:name} in [${2:start}...${3:finish}] by ${4:step}\n\ ${5:// body...}\n\ # Function\n\ snippet fun\n\ (${1:args}) ->\n\ ${2:// body...}\n\ # Function (bound)\n\ snippet bfun\n\ (${1:args}) =>\n\ ${2:// body...}\n\ # Class\n\ snippet cla class ..\n\ class ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\ ${2}\n\ snippet cla class .. constructor: ..\n\ class ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\ constructor: (${2:args}) ->\n\ ${3}\n\ \n\ ${4}\n\ snippet cla class .. extends ..\n\ class ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`} extends ${2:ParentClass}\n\ ${3}\n\ snippet cla class .. extends .. constructor: ..\n\ class ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`} extends ${2:ParentClass}\n\ constructor: (${3:args}) ->\n\ ${4}\n\ \n\ ${5}\n\ # If\n\ snippet if\n\ if ${1:condition}\n\ ${2:// body...}\n\ # If __ Else\n\ snippet ife\n\ if ${1:condition}\n\ ${2:// body...}\n\ else\n\ ${3:// body...}\n\ # Else if\n\ snippet elif\n\ else if ${1:condition}\n\ ${2:// body...}\n\ # Ternary If\n\ snippet ifte\n\ if ${1:condition} then ${2:value} else ${3:other}\n\ # Unless\n\ snippet unl\n\ ${1:action} unless ${2:condition}\n\ # Switch\n\ snippet swi\n\ switch ${1:object}\n\ when ${2:value}\n\ ${3:// body...}\n\ \n\ # Log\n\ snippet log\n\ console.log ${1}\n\ # Try __ Catch\n\ snippet try\n\ try\n\ ${1}\n\ catch ${2:error}\n\ ${3}\n\ # Require\n\ snippet req\n\ ${2:$1} = require '${1:sys}'${3}\n\ # Export\n\ snippet exp\n\ ${1:root} = exports ? this\n\ "; exports.scope = "coffee"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/coldfusion.js ================================================ ace.define("ace/snippets/coldfusion",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "coldfusion"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/csharp.js ================================================ ace.define("ace/snippets/csharp",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "csharp"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/css.js ================================================ ace.define("ace/snippets/css",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet .\n\ ${1} {\n\ ${2}\n\ }\n\ snippet !\n\ !important\n\ snippet bdi:m+\n\ -moz-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\n\ snippet bdi:m\n\ -moz-border-image: ${1};\n\ snippet bdrz:m\n\ -moz-border-radius: ${1};\n\ snippet bxsh:m+\n\ -moz-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\n\ snippet bxsh:m\n\ -moz-box-shadow: ${1};\n\ snippet bdi:w+\n\ -webkit-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\n\ snippet bdi:w\n\ -webkit-border-image: ${1};\n\ snippet bdrz:w\n\ -webkit-border-radius: ${1};\n\ snippet bxsh:w+\n\ -webkit-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\n\ snippet bxsh:w\n\ -webkit-box-shadow: ${1};\n\ snippet @f\n\ @font-face {\n\ font-family: ${1};\n\ src: url(${2});\n\ }\n\ snippet @i\n\ @import url(${1});\n\ snippet @m\n\ @media ${1:print} {\n\ ${2}\n\ }\n\ snippet bg+\n\ background: #${1:FFF} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\n\ snippet bga\n\ background-attachment: ${1};\n\ snippet bga:f\n\ background-attachment: fixed;\n\ snippet bga:s\n\ background-attachment: scroll;\n\ snippet bgbk\n\ background-break: ${1};\n\ snippet bgbk:bb\n\ background-break: bounding-box;\n\ snippet bgbk:c\n\ background-break: continuous;\n\ snippet bgbk:eb\n\ background-break: each-box;\n\ snippet bgcp\n\ background-clip: ${1};\n\ snippet bgcp:bb\n\ background-clip: border-box;\n\ snippet bgcp:cb\n\ background-clip: content-box;\n\ snippet bgcp:nc\n\ background-clip: no-clip;\n\ snippet bgcp:pb\n\ background-clip: padding-box;\n\ snippet bgc\n\ background-color: #${1:FFF};\n\ snippet bgc:t\n\ background-color: transparent;\n\ snippet bgi\n\ background-image: url(${1});\n\ snippet bgi:n\n\ background-image: none;\n\ snippet bgo\n\ background-origin: ${1};\n\ snippet bgo:bb\n\ background-origin: border-box;\n\ snippet bgo:cb\n\ background-origin: content-box;\n\ snippet bgo:pb\n\ background-origin: padding-box;\n\ snippet bgpx\n\ background-position-x: ${1};\n\ snippet bgpy\n\ background-position-y: ${1};\n\ snippet bgp\n\ background-position: ${1:0} ${2:0};\n\ snippet bgr\n\ background-repeat: ${1};\n\ snippet bgr:n\n\ background-repeat: no-repeat;\n\ snippet bgr:x\n\ background-repeat: repeat-x;\n\ snippet bgr:y\n\ background-repeat: repeat-y;\n\ snippet bgr:r\n\ background-repeat: repeat;\n\ snippet bgz\n\ background-size: ${1};\n\ snippet bgz:a\n\ background-size: auto;\n\ snippet bgz:ct\n\ background-size: contain;\n\ snippet bgz:cv\n\ background-size: cover;\n\ snippet bg\n\ background: ${1};\n\ snippet bg:ie\n\ filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1}',sizingMethod='${2:crop}');\n\ snippet bg:n\n\ background: none;\n\ snippet bd+\n\ border: ${1:1px} ${2:solid} #${3:000};\n\ snippet bdb+\n\ border-bottom: ${1:1px} ${2:solid} #${3:000};\n\ snippet bdbc\n\ border-bottom-color: #${1:000};\n\ snippet bdbi\n\ border-bottom-image: url(${1});\n\ snippet bdbi:n\n\ border-bottom-image: none;\n\ snippet bdbli\n\ border-bottom-left-image: url(${1});\n\ snippet bdbli:c\n\ border-bottom-left-image: continue;\n\ snippet bdbli:n\n\ border-bottom-left-image: none;\n\ snippet bdblrz\n\ border-bottom-left-radius: ${1};\n\ snippet bdbri\n\ border-bottom-right-image: url(${1});\n\ snippet bdbri:c\n\ border-bottom-right-image: continue;\n\ snippet bdbri:n\n\ border-bottom-right-image: none;\n\ snippet bdbrrz\n\ border-bottom-right-radius: ${1};\n\ snippet bdbs\n\ border-bottom-style: ${1};\n\ snippet bdbs:n\n\ border-bottom-style: none;\n\ snippet bdbw\n\ border-bottom-width: ${1};\n\ snippet bdb\n\ border-bottom: ${1};\n\ snippet bdb:n\n\ border-bottom: none;\n\ snippet bdbk\n\ border-break: ${1};\n\ snippet bdbk:c\n\ border-break: close;\n\ snippet bdcl\n\ border-collapse: ${1};\n\ snippet bdcl:c\n\ border-collapse: collapse;\n\ snippet bdcl:s\n\ border-collapse: separate;\n\ snippet bdc\n\ border-color: #${1:000};\n\ snippet bdci\n\ border-corner-image: url(${1});\n\ snippet bdci:c\n\ border-corner-image: continue;\n\ snippet bdci:n\n\ border-corner-image: none;\n\ snippet bdf\n\ border-fit: ${1};\n\ snippet bdf:c\n\ border-fit: clip;\n\ snippet bdf:of\n\ border-fit: overwrite;\n\ snippet bdf:ow\n\ border-fit: overwrite;\n\ snippet bdf:r\n\ border-fit: repeat;\n\ snippet bdf:sc\n\ border-fit: scale;\n\ snippet bdf:sp\n\ border-fit: space;\n\ snippet bdf:st\n\ border-fit: stretch;\n\ snippet bdi\n\ border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\n\ snippet bdi:n\n\ border-image: none;\n\ snippet bdl+\n\ border-left: ${1:1px} ${2:solid} #${3:000};\n\ snippet bdlc\n\ border-left-color: #${1:000};\n\ snippet bdli\n\ border-left-image: url(${1});\n\ snippet bdli:n\n\ border-left-image: none;\n\ snippet bdls\n\ border-left-style: ${1};\n\ snippet bdls:n\n\ border-left-style: none;\n\ snippet bdlw\n\ border-left-width: ${1};\n\ snippet bdl\n\ border-left: ${1};\n\ snippet bdl:n\n\ border-left: none;\n\ snippet bdlt\n\ border-length: ${1};\n\ snippet bdlt:a\n\ border-length: auto;\n\ snippet bdrz\n\ border-radius: ${1};\n\ snippet bdr+\n\ border-right: ${1:1px} ${2:solid} #${3:000};\n\ snippet bdrc\n\ border-right-color: #${1:000};\n\ snippet bdri\n\ border-right-image: url(${1});\n\ snippet bdri:n\n\ border-right-image: none;\n\ snippet bdrs\n\ border-right-style: ${1};\n\ snippet bdrs:n\n\ border-right-style: none;\n\ snippet bdrw\n\ border-right-width: ${1};\n\ snippet bdr\n\ border-right: ${1};\n\ snippet bdr:n\n\ border-right: none;\n\ snippet bdsp\n\ border-spacing: ${1};\n\ snippet bds\n\ border-style: ${1};\n\ snippet bds:ds\n\ border-style: dashed;\n\ snippet bds:dtds\n\ border-style: dot-dash;\n\ snippet bds:dtdtds\n\ border-style: dot-dot-dash;\n\ snippet bds:dt\n\ border-style: dotted;\n\ snippet bds:db\n\ border-style: double;\n\ snippet bds:g\n\ border-style: groove;\n\ snippet bds:h\n\ border-style: hidden;\n\ snippet bds:i\n\ border-style: inset;\n\ snippet bds:n\n\ border-style: none;\n\ snippet bds:o\n\ border-style: outset;\n\ snippet bds:r\n\ border-style: ridge;\n\ snippet bds:s\n\ border-style: solid;\n\ snippet bds:w\n\ border-style: wave;\n\ snippet bdt+\n\ border-top: ${1:1px} ${2:solid} #${3:000};\n\ snippet bdtc\n\ border-top-color: #${1:000};\n\ snippet bdti\n\ border-top-image: url(${1});\n\ snippet bdti:n\n\ border-top-image: none;\n\ snippet bdtli\n\ border-top-left-image: url(${1});\n\ snippet bdtli:c\n\ border-corner-image: continue;\n\ snippet bdtli:n\n\ border-corner-image: none;\n\ snippet bdtlrz\n\ border-top-left-radius: ${1};\n\ snippet bdtri\n\ border-top-right-image: url(${1});\n\ snippet bdtri:c\n\ border-top-right-image: continue;\n\ snippet bdtri:n\n\ border-top-right-image: none;\n\ snippet bdtrrz\n\ border-top-right-radius: ${1};\n\ snippet bdts\n\ border-top-style: ${1};\n\ snippet bdts:n\n\ border-top-style: none;\n\ snippet bdtw\n\ border-top-width: ${1};\n\ snippet bdt\n\ border-top: ${1};\n\ snippet bdt:n\n\ border-top: none;\n\ snippet bdw\n\ border-width: ${1};\n\ snippet bd\n\ border: ${1};\n\ snippet bd:n\n\ border: none;\n\ snippet b\n\ bottom: ${1};\n\ snippet b:a\n\ bottom: auto;\n\ snippet bxsh+\n\ box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\n\ snippet bxsh\n\ box-shadow: ${1};\n\ snippet bxsh:n\n\ box-shadow: none;\n\ snippet bxz\n\ box-sizing: ${1};\n\ snippet bxz:bb\n\ box-sizing: border-box;\n\ snippet bxz:cb\n\ box-sizing: content-box;\n\ snippet cps\n\ caption-side: ${1};\n\ snippet cps:b\n\ caption-side: bottom;\n\ snippet cps:t\n\ caption-side: top;\n\ snippet cl\n\ clear: ${1};\n\ snippet cl:b\n\ clear: both;\n\ snippet cl:l\n\ clear: left;\n\ snippet cl:n\n\ clear: none;\n\ snippet cl:r\n\ clear: right;\n\ snippet cp\n\ clip: ${1};\n\ snippet cp:a\n\ clip: auto;\n\ snippet cp:r\n\ clip: rect(${1:0} ${2:0} ${3:0} ${4:0});\n\ snippet c\n\ color: #${1:000};\n\ snippet ct\n\ content: ${1};\n\ snippet ct:a\n\ content: attr(${1});\n\ snippet ct:cq\n\ content: close-quote;\n\ snippet ct:c\n\ content: counter(${1});\n\ snippet ct:cs\n\ content: counters(${1});\n\ snippet ct:ncq\n\ content: no-close-quote;\n\ snippet ct:noq\n\ content: no-open-quote;\n\ snippet ct:n\n\ content: normal;\n\ snippet ct:oq\n\ content: open-quote;\n\ snippet coi\n\ counter-increment: ${1};\n\ snippet cor\n\ counter-reset: ${1};\n\ snippet cur\n\ cursor: ${1};\n\ snippet cur:a\n\ cursor: auto;\n\ snippet cur:c\n\ cursor: crosshair;\n\ snippet cur:d\n\ cursor: default;\n\ snippet cur:ha\n\ cursor: hand;\n\ snippet cur:he\n\ cursor: help;\n\ snippet cur:m\n\ cursor: move;\n\ snippet cur:p\n\ cursor: pointer;\n\ snippet cur:t\n\ cursor: text;\n\ snippet d\n\ display: ${1};\n\ snippet d:mib\n\ display: -moz-inline-box;\n\ snippet d:mis\n\ display: -moz-inline-stack;\n\ snippet d:b\n\ display: block;\n\ snippet d:cp\n\ display: compact;\n\ snippet d:ib\n\ display: inline-block;\n\ snippet d:itb\n\ display: inline-table;\n\ snippet d:i\n\ display: inline;\n\ snippet d:li\n\ display: list-item;\n\ snippet d:n\n\ display: none;\n\ snippet d:ri\n\ display: run-in;\n\ snippet d:tbcp\n\ display: table-caption;\n\ snippet d:tbc\n\ display: table-cell;\n\ snippet d:tbclg\n\ display: table-column-group;\n\ snippet d:tbcl\n\ display: table-column;\n\ snippet d:tbfg\n\ display: table-footer-group;\n\ snippet d:tbhg\n\ display: table-header-group;\n\ snippet d:tbrg\n\ display: table-row-group;\n\ snippet d:tbr\n\ display: table-row;\n\ snippet d:tb\n\ display: table;\n\ snippet ec\n\ empty-cells: ${1};\n\ snippet ec:h\n\ empty-cells: hide;\n\ snippet ec:s\n\ empty-cells: show;\n\ snippet exp\n\ expression()\n\ snippet fl\n\ float: ${1};\n\ snippet fl:l\n\ float: left;\n\ snippet fl:n\n\ float: none;\n\ snippet fl:r\n\ float: right;\n\ snippet f+\n\ font: ${1:1em} ${2:Arial},${3:sans-serif};\n\ snippet fef\n\ font-effect: ${1};\n\ snippet fef:eb\n\ font-effect: emboss;\n\ snippet fef:eg\n\ font-effect: engrave;\n\ snippet fef:n\n\ font-effect: none;\n\ snippet fef:o\n\ font-effect: outline;\n\ snippet femp\n\ font-emphasize-position: ${1};\n\ snippet femp:a\n\ font-emphasize-position: after;\n\ snippet femp:b\n\ font-emphasize-position: before;\n\ snippet fems\n\ font-emphasize-style: ${1};\n\ snippet fems:ac\n\ font-emphasize-style: accent;\n\ snippet fems:c\n\ font-emphasize-style: circle;\n\ snippet fems:ds\n\ font-emphasize-style: disc;\n\ snippet fems:dt\n\ font-emphasize-style: dot;\n\ snippet fems:n\n\ font-emphasize-style: none;\n\ snippet fem\n\ font-emphasize: ${1};\n\ snippet ff\n\ font-family: ${1};\n\ snippet ff:c\n\ font-family: ${1:'Monotype Corsiva','Comic Sans MS'},cursive;\n\ snippet ff:f\n\ font-family: ${1:Capitals,Impact},fantasy;\n\ snippet ff:m\n\ font-family: ${1:Monaco,'Courier New'},monospace;\n\ snippet ff:ss\n\ font-family: ${1:Helvetica,Arial},sans-serif;\n\ snippet ff:s\n\ font-family: ${1:Georgia,'Times New Roman'},serif;\n\ snippet fza\n\ font-size-adjust: ${1};\n\ snippet fza:n\n\ font-size-adjust: none;\n\ snippet fz\n\ font-size: ${1};\n\ snippet fsm\n\ font-smooth: ${1};\n\ snippet fsm:aw\n\ font-smooth: always;\n\ snippet fsm:a\n\ font-smooth: auto;\n\ snippet fsm:n\n\ font-smooth: never;\n\ snippet fst\n\ font-stretch: ${1};\n\ snippet fst:c\n\ font-stretch: condensed;\n\ snippet fst:e\n\ font-stretch: expanded;\n\ snippet fst:ec\n\ font-stretch: extra-condensed;\n\ snippet fst:ee\n\ font-stretch: extra-expanded;\n\ snippet fst:n\n\ font-stretch: normal;\n\ snippet fst:sc\n\ font-stretch: semi-condensed;\n\ snippet fst:se\n\ font-stretch: semi-expanded;\n\ snippet fst:uc\n\ font-stretch: ultra-condensed;\n\ snippet fst:ue\n\ font-stretch: ultra-expanded;\n\ snippet fs\n\ font-style: ${1};\n\ snippet fs:i\n\ font-style: italic;\n\ snippet fs:n\n\ font-style: normal;\n\ snippet fs:o\n\ font-style: oblique;\n\ snippet fv\n\ font-variant: ${1};\n\ snippet fv:n\n\ font-variant: normal;\n\ snippet fv:sc\n\ font-variant: small-caps;\n\ snippet fw\n\ font-weight: ${1};\n\ snippet fw:b\n\ font-weight: bold;\n\ snippet fw:br\n\ font-weight: bolder;\n\ snippet fw:lr\n\ font-weight: lighter;\n\ snippet fw:n\n\ font-weight: normal;\n\ snippet f\n\ font: ${1};\n\ snippet h\n\ height: ${1};\n\ snippet h:a\n\ height: auto;\n\ snippet l\n\ left: ${1};\n\ snippet l:a\n\ left: auto;\n\ snippet lts\n\ letter-spacing: ${1};\n\ snippet lh\n\ line-height: ${1};\n\ snippet lisi\n\ list-style-image: url(${1});\n\ snippet lisi:n\n\ list-style-image: none;\n\ snippet lisp\n\ list-style-position: ${1};\n\ snippet lisp:i\n\ list-style-position: inside;\n\ snippet lisp:o\n\ list-style-position: outside;\n\ snippet list\n\ list-style-type: ${1};\n\ snippet list:c\n\ list-style-type: circle;\n\ snippet list:dclz\n\ list-style-type: decimal-leading-zero;\n\ snippet list:dc\n\ list-style-type: decimal;\n\ snippet list:d\n\ list-style-type: disc;\n\ snippet list:lr\n\ list-style-type: lower-roman;\n\ snippet list:n\n\ list-style-type: none;\n\ snippet list:s\n\ list-style-type: square;\n\ snippet list:ur\n\ list-style-type: upper-roman;\n\ snippet lis\n\ list-style: ${1};\n\ snippet lis:n\n\ list-style: none;\n\ snippet mb\n\ margin-bottom: ${1};\n\ snippet mb:a\n\ margin-bottom: auto;\n\ snippet ml\n\ margin-left: ${1};\n\ snippet ml:a\n\ margin-left: auto;\n\ snippet mr\n\ margin-right: ${1};\n\ snippet mr:a\n\ margin-right: auto;\n\ snippet mt\n\ margin-top: ${1};\n\ snippet mt:a\n\ margin-top: auto;\n\ snippet m\n\ margin: ${1};\n\ snippet m:4\n\ margin: ${1:0} ${2:0} ${3:0} ${4:0};\n\ snippet m:3\n\ margin: ${1:0} ${2:0} ${3:0};\n\ snippet m:2\n\ margin: ${1:0} ${2:0};\n\ snippet m:0\n\ margin: 0;\n\ snippet m:a\n\ margin: auto;\n\ snippet mah\n\ max-height: ${1};\n\ snippet mah:n\n\ max-height: none;\n\ snippet maw\n\ max-width: ${1};\n\ snippet maw:n\n\ max-width: none;\n\ snippet mih\n\ min-height: ${1};\n\ snippet miw\n\ min-width: ${1};\n\ snippet op\n\ opacity: ${1};\n\ snippet op:ie\n\ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100});\n\ snippet op:ms\n\ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100})';\n\ snippet orp\n\ orphans: ${1};\n\ snippet o+\n\ outline: ${1:1px} ${2:solid} #${3:000};\n\ snippet oc\n\ outline-color: ${1:#000};\n\ snippet oc:i\n\ outline-color: invert;\n\ snippet oo\n\ outline-offset: ${1};\n\ snippet os\n\ outline-style: ${1};\n\ snippet ow\n\ outline-width: ${1};\n\ snippet o\n\ outline: ${1};\n\ snippet o:n\n\ outline: none;\n\ snippet ovs\n\ overflow-style: ${1};\n\ snippet ovs:a\n\ overflow-style: auto;\n\ snippet ovs:mq\n\ overflow-style: marquee;\n\ snippet ovs:mv\n\ overflow-style: move;\n\ snippet ovs:p\n\ overflow-style: panner;\n\ snippet ovs:s\n\ overflow-style: scrollbar;\n\ snippet ovx\n\ overflow-x: ${1};\n\ snippet ovx:a\n\ overflow-x: auto;\n\ snippet ovx:h\n\ overflow-x: hidden;\n\ snippet ovx:s\n\ overflow-x: scroll;\n\ snippet ovx:v\n\ overflow-x: visible;\n\ snippet ovy\n\ overflow-y: ${1};\n\ snippet ovy:a\n\ overflow-y: auto;\n\ snippet ovy:h\n\ overflow-y: hidden;\n\ snippet ovy:s\n\ overflow-y: scroll;\n\ snippet ovy:v\n\ overflow-y: visible;\n\ snippet ov\n\ overflow: ${1};\n\ snippet ov:a\n\ overflow: auto;\n\ snippet ov:h\n\ overflow: hidden;\n\ snippet ov:s\n\ overflow: scroll;\n\ snippet ov:v\n\ overflow: visible;\n\ snippet pb\n\ padding-bottom: ${1};\n\ snippet pl\n\ padding-left: ${1};\n\ snippet pr\n\ padding-right: ${1};\n\ snippet pt\n\ padding-top: ${1};\n\ snippet p\n\ padding: ${1};\n\ snippet p:4\n\ padding: ${1:0} ${2:0} ${3:0} ${4:0};\n\ snippet p:3\n\ padding: ${1:0} ${2:0} ${3:0};\n\ snippet p:2\n\ padding: ${1:0} ${2:0};\n\ snippet p:0\n\ padding: 0;\n\ snippet pgba\n\ page-break-after: ${1};\n\ snippet pgba:aw\n\ page-break-after: always;\n\ snippet pgba:a\n\ page-break-after: auto;\n\ snippet pgba:l\n\ page-break-after: left;\n\ snippet pgba:r\n\ page-break-after: right;\n\ snippet pgbb\n\ page-break-before: ${1};\n\ snippet pgbb:aw\n\ page-break-before: always;\n\ snippet pgbb:a\n\ page-break-before: auto;\n\ snippet pgbb:l\n\ page-break-before: left;\n\ snippet pgbb:r\n\ page-break-before: right;\n\ snippet pgbi\n\ page-break-inside: ${1};\n\ snippet pgbi:a\n\ page-break-inside: auto;\n\ snippet pgbi:av\n\ page-break-inside: avoid;\n\ snippet pos\n\ position: ${1};\n\ snippet pos:a\n\ position: absolute;\n\ snippet pos:f\n\ position: fixed;\n\ snippet pos:r\n\ position: relative;\n\ snippet pos:s\n\ position: static;\n\ snippet q\n\ quotes: ${1};\n\ snippet q:en\n\ quotes: '\\201C' '\\201D' '\\2018' '\\2019';\n\ snippet q:n\n\ quotes: none;\n\ snippet q:ru\n\ quotes: '\\00AB' '\\00BB' '\\201E' '\\201C';\n\ snippet rz\n\ resize: ${1};\n\ snippet rz:b\n\ resize: both;\n\ snippet rz:h\n\ resize: horizontal;\n\ snippet rz:n\n\ resize: none;\n\ snippet rz:v\n\ resize: vertical;\n\ snippet r\n\ right: ${1};\n\ snippet r:a\n\ right: auto;\n\ snippet tbl\n\ table-layout: ${1};\n\ snippet tbl:a\n\ table-layout: auto;\n\ snippet tbl:f\n\ table-layout: fixed;\n\ snippet tal\n\ text-align-last: ${1};\n\ snippet tal:a\n\ text-align-last: auto;\n\ snippet tal:c\n\ text-align-last: center;\n\ snippet tal:l\n\ text-align-last: left;\n\ snippet tal:r\n\ text-align-last: right;\n\ snippet ta\n\ text-align: ${1};\n\ snippet ta:c\n\ text-align: center;\n\ snippet ta:l\n\ text-align: left;\n\ snippet ta:r\n\ text-align: right;\n\ snippet td\n\ text-decoration: ${1};\n\ snippet td:l\n\ text-decoration: line-through;\n\ snippet td:n\n\ text-decoration: none;\n\ snippet td:o\n\ text-decoration: overline;\n\ snippet td:u\n\ text-decoration: underline;\n\ snippet te\n\ text-emphasis: ${1};\n\ snippet te:ac\n\ text-emphasis: accent;\n\ snippet te:a\n\ text-emphasis: after;\n\ snippet te:b\n\ text-emphasis: before;\n\ snippet te:c\n\ text-emphasis: circle;\n\ snippet te:ds\n\ text-emphasis: disc;\n\ snippet te:dt\n\ text-emphasis: dot;\n\ snippet te:n\n\ text-emphasis: none;\n\ snippet th\n\ text-height: ${1};\n\ snippet th:a\n\ text-height: auto;\n\ snippet th:f\n\ text-height: font-size;\n\ snippet th:m\n\ text-height: max-size;\n\ snippet th:t\n\ text-height: text-size;\n\ snippet ti\n\ text-indent: ${1};\n\ snippet ti:-\n\ text-indent: -9999px;\n\ snippet tj\n\ text-justify: ${1};\n\ snippet tj:a\n\ text-justify: auto;\n\ snippet tj:d\n\ text-justify: distribute;\n\ snippet tj:ic\n\ text-justify: inter-cluster;\n\ snippet tj:ii\n\ text-justify: inter-ideograph;\n\ snippet tj:iw\n\ text-justify: inter-word;\n\ snippet tj:k\n\ text-justify: kashida;\n\ snippet tj:t\n\ text-justify: tibetan;\n\ snippet to+\n\ text-outline: ${1:0} ${2:0} #${3:000};\n\ snippet to\n\ text-outline: ${1};\n\ snippet to:n\n\ text-outline: none;\n\ snippet tr\n\ text-replace: ${1};\n\ snippet tr:n\n\ text-replace: none;\n\ snippet tsh+\n\ text-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\n\ snippet tsh\n\ text-shadow: ${1};\n\ snippet tsh:n\n\ text-shadow: none;\n\ snippet tt\n\ text-transform: ${1};\n\ snippet tt:c\n\ text-transform: capitalize;\n\ snippet tt:l\n\ text-transform: lowercase;\n\ snippet tt:n\n\ text-transform: none;\n\ snippet tt:u\n\ text-transform: uppercase;\n\ snippet tw\n\ text-wrap: ${1};\n\ snippet tw:no\n\ text-wrap: none;\n\ snippet tw:n\n\ text-wrap: normal;\n\ snippet tw:s\n\ text-wrap: suppress;\n\ snippet tw:u\n\ text-wrap: unrestricted;\n\ snippet t\n\ top: ${1};\n\ snippet t:a\n\ top: auto;\n\ snippet va\n\ vertical-align: ${1};\n\ snippet va:bl\n\ vertical-align: baseline;\n\ snippet va:b\n\ vertical-align: bottom;\n\ snippet va:m\n\ vertical-align: middle;\n\ snippet va:sub\n\ vertical-align: sub;\n\ snippet va:sup\n\ vertical-align: super;\n\ snippet va:tb\n\ vertical-align: text-bottom;\n\ snippet va:tt\n\ vertical-align: text-top;\n\ snippet va:t\n\ vertical-align: top;\n\ snippet v\n\ visibility: ${1};\n\ snippet v:c\n\ visibility: collapse;\n\ snippet v:h\n\ visibility: hidden;\n\ snippet v:v\n\ visibility: visible;\n\ snippet whsc\n\ white-space-collapse: ${1};\n\ snippet whsc:ba\n\ white-space-collapse: break-all;\n\ snippet whsc:bs\n\ white-space-collapse: break-strict;\n\ snippet whsc:k\n\ white-space-collapse: keep-all;\n\ snippet whsc:l\n\ white-space-collapse: loose;\n\ snippet whsc:n\n\ white-space-collapse: normal;\n\ snippet whs\n\ white-space: ${1};\n\ snippet whs:n\n\ white-space: normal;\n\ snippet whs:nw\n\ white-space: nowrap;\n\ snippet whs:pl\n\ white-space: pre-line;\n\ snippet whs:pw\n\ white-space: pre-wrap;\n\ snippet whs:p\n\ white-space: pre;\n\ snippet wid\n\ widows: ${1};\n\ snippet w\n\ width: ${1};\n\ snippet w:a\n\ width: auto;\n\ snippet wob\n\ word-break: ${1};\n\ snippet wob:ba\n\ word-break: break-all;\n\ snippet wob:bs\n\ word-break: break-strict;\n\ snippet wob:k\n\ word-break: keep-all;\n\ snippet wob:l\n\ word-break: loose;\n\ snippet wob:n\n\ word-break: normal;\n\ snippet wos\n\ word-spacing: ${1};\n\ snippet wow\n\ word-wrap: ${1};\n\ snippet wow:no\n\ word-wrap: none;\n\ snippet wow:n\n\ word-wrap: normal;\n\ snippet wow:s\n\ word-wrap: suppress;\n\ snippet wow:u\n\ word-wrap: unrestricted;\n\ snippet z\n\ z-index: ${1};\n\ snippet z:a\n\ z-index: auto;\n\ snippet zoo\n\ zoom: 1;\n\ "; exports.scope = "css"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/curly.js ================================================ ace.define("ace/snippets/curly",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "curly"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/d.js ================================================ ace.define("ace/snippets/d",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "d"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/dart.js ================================================ ace.define("ace/snippets/dart",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet lib\n\ library ${1};\n\ ${2}\n\ snippet im\n\ import '${1}';\n\ ${2}\n\ snippet pa\n\ part '${1}';\n\ ${2}\n\ snippet pao\n\ part of ${1};\n\ ${2}\n\ snippet main\n\ void main() {\n\ ${1:/* code */}\n\ }\n\ snippet st\n\ static ${1}\n\ snippet fi\n\ final ${1}\n\ snippet re\n\ return ${1}\n\ snippet br\n\ break;\n\ snippet th\n\ throw ${1}\n\ snippet cl\n\ class ${1:`Filename(\"\", \"untitled\")`} ${2}\n\ snippet imp\n\ implements ${1}\n\ snippet ext\n\ extends ${1}\n\ snippet if\n\ if (${1:true}) {\n\ ${2}\n\ }\n\ snippet ife\n\ if (${1:true}) {\n\ ${2}\n\ } else {\n\ ${3}\n\ }\n\ snippet el\n\ else\n\ snippet sw\n\ switch (${1}) {\n\ ${2}\n\ }\n\ snippet cs\n\ case ${1}:\n\ ${2}\n\ snippet de\n\ default:\n\ ${1}\n\ snippet for\n\ for (var ${2:i} = 0, len = ${1:things}.length; $2 < len; ${3:++}$2) {\n\ ${4:$1[$2]}\n\ }\n\ snippet fore\n\ for (final ${2:item} in ${1:itemList}) {\n\ ${3:/* code */}\n\ }\n\ snippet wh\n\ while (${1:/* condition */}) {\n\ ${2:/* code */}\n\ }\n\ snippet dowh\n\ do {\n\ ${2:/* code */}\n\ } while (${1:/* condition */});\n\ snippet as\n\ assert(${1:/* condition */});\n\ snippet try\n\ try {\n\ ${2}\n\ } catch (${1:Exception e}) {\n\ }\n\ snippet tryf\n\ try {\n\ ${2}\n\ } catch (${1:Exception e}) {\n\ } finally {\n\ }\n\ "; exports.scope = "dart"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/diff.js ================================================ ace.define("ace/snippets/diff",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# DEP-3 (http://dep.debian.net/deps/dep3/) style patch header\n\ snippet header DEP-3 style header\n\ Description: ${1}\n\ Origin: ${2:vendor|upstream|other}, ${3:url of the original patch}\n\ Bug: ${4:url in upstream bugtracker}\n\ Forwarded: ${5:no|not-needed|url}\n\ Author: ${6:`g:snips_author`}\n\ Reviewed-by: ${7:name and email}\n\ Last-Update: ${8:`strftime(\"%Y-%m-%d\")`}\n\ Applied-Upstream: ${9:upstream version|url|commit}\n\ \n\ "; exports.scope = "diff"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/django.js ================================================ ace.define("ace/snippets/django",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# Model Fields\n\ \n\ # Note: Optional arguments are using defaults that match what Django will use\n\ # as a default, e.g. with max_length fields. Doing this as a form of self\n\ # documentation and to make it easy to know whether you should override the\n\ # default or not.\n\ \n\ # Note: Optional arguments that are booleans will use the opposite since you\n\ # can either not specify them, or override them, e.g. auto_now_add=False.\n\ \n\ snippet auto\n\ ${1:FIELDNAME} = models.AutoField(${2})\n\ snippet bool\n\ ${1:FIELDNAME} = models.BooleanField(${2:default=True})\n\ snippet char\n\ ${1:FIELDNAME} = models.CharField(max_length=${2}${3:, blank=True})\n\ snippet comma\n\ ${1:FIELDNAME} = models.CommaSeparatedIntegerField(max_length=${2}${3:, blank=True})\n\ snippet date\n\ ${1:FIELDNAME} = models.DateField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\n\ snippet datetime\n\ ${1:FIELDNAME} = models.DateTimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\n\ snippet decimal\n\ ${1:FIELDNAME} = models.DecimalField(max_digits=${2}, decimal_places=${3})\n\ snippet email\n\ ${1:FIELDNAME} = models.EmailField(max_length=${2:75}${3:, blank=True})\n\ snippet file\n\ ${1:FIELDNAME} = models.FileField(upload_to=${2:path/for/upload}${3:, max_length=100})\n\ snippet filepath\n\ ${1:FIELDNAME} = models.FilePathField(path=${2:\"/abs/path/to/dir\"}${3:, max_length=100}${4:, match=\"*.ext\"}${5:, recursive=True}${6:, blank=True, })\n\ snippet float\n\ ${1:FIELDNAME} = models.FloatField(${2})\n\ snippet image\n\ ${1:FIELDNAME} = models.ImageField(upload_to=${2:path/for/upload}${3:, height_field=height, width_field=width}${4:, max_length=100})\n\ snippet int\n\ ${1:FIELDNAME} = models.IntegerField(${2})\n\ snippet ip\n\ ${1:FIELDNAME} = models.IPAddressField(${2})\n\ snippet nullbool\n\ ${1:FIELDNAME} = models.NullBooleanField(${2})\n\ snippet posint\n\ ${1:FIELDNAME} = models.PositiveIntegerField(${2})\n\ snippet possmallint\n\ ${1:FIELDNAME} = models.PositiveSmallIntegerField(${2})\n\ snippet slug\n\ ${1:FIELDNAME} = models.SlugField(max_length=${2:50}${3:, blank=True})\n\ snippet smallint\n\ ${1:FIELDNAME} = models.SmallIntegerField(${2})\n\ snippet text\n\ ${1:FIELDNAME} = models.TextField(${2:blank=True})\n\ snippet time\n\ ${1:FIELDNAME} = models.TimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\n\ snippet url\n\ ${1:FIELDNAME} = models.URLField(${2:verify_exists=False}${3:, max_length=200}${4:, blank=True})\n\ snippet xml\n\ ${1:FIELDNAME} = models.XMLField(schema_path=${2:None}${3:, blank=True})\n\ # Relational Fields\n\ snippet fk\n\ ${1:FIELDNAME} = models.ForeignKey(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, to_field=''})\n\ snippet m2m\n\ ${1:FIELDNAME} = models.ManyToManyField(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, symmetrical=False}${6:, through=''}${7:, db_table=''})\n\ snippet o2o\n\ ${1:FIELDNAME} = models.OneToOneField(${2:OtherModel}${3:, parent_link=True}${4:, related_name=''}${5:, limit_choices_to=}${6:, to_field=''})\n\ \n\ # Code Skeletons\n\ \n\ snippet form\n\ class ${1:FormName}(forms.Form):\n\ \"\"\"${2:docstring}\"\"\"\n\ ${3}\n\ \n\ snippet model\n\ class ${1:ModelName}(models.Model):\n\ \"\"\"${2:docstring}\"\"\"\n\ ${3}\n\ \n\ class Meta:\n\ ${4}\n\ \n\ def __unicode__(self):\n\ ${5}\n\ \n\ def save(self, force_insert=False, force_update=False):\n\ ${6}\n\ \n\ @models.permalink\n\ def get_absolute_url(self):\n\ return ('${7:view_or_url_name}' ${8})\n\ \n\ snippet modeladmin\n\ class ${1:ModelName}Admin(admin.ModelAdmin):\n\ ${2}\n\ \n\ admin.site.register($1, $1Admin)\n\ \n\ snippet tabularinline\n\ class ${1:ModelName}Inline(admin.TabularInline):\n\ model = $1\n\ \n\ snippet stackedinline\n\ class ${1:ModelName}Inline(admin.StackedInline):\n\ model = $1\n\ \n\ snippet r2r\n\ return render_to_response('${1:template.html}', {\n\ ${2}\n\ }${3:, context_instance=RequestContext(request)}\n\ )\n\ "; exports.scope = "django"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/dockerfile.js ================================================ ace.define("ace/snippets/dockerfile",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "dockerfile"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/dot.js ================================================ ace.define("ace/snippets/dot",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "dot"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/eiffel.js ================================================ ace.define("ace/snippets/eiffel",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "eiffel"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/ejs.js ================================================ ace.define("ace/snippets/ejs",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "ejs"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/elixir.js ================================================ ace.define("ace/snippets/elixir",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = ""; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/elm.js ================================================ ace.define("ace/snippets/elm",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "elm"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/erlang.js ================================================ ace.define("ace/snippets/erlang",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# module and export all\n\ snippet mod\n\ -module(${1:`Filename('', 'my')`}).\n\ \n\ -compile([export_all]).\n\ \n\ start() ->\n\ ${2}\n\ \n\ stop() ->\n\ ok.\n\ # define directive\n\ snippet def\n\ -ace.define(${1:macro}, ${2:body}).${3}\n\ # export directive\n\ snippet exp\n\ -export([${1:function}/${2:arity}]).\n\ # include directive\n\ snippet inc\n\ -include(\"${1:file}\").${2}\n\ # behavior directive\n\ snippet beh\n\ -behaviour(${1:behaviour}).${2}\n\ # if expression\n\ snippet if\n\ if\n\ ${1:guard} ->\n\ ${2:body}\n\ end\n\ # case expression\n\ snippet case\n\ case ${1:expression} of\n\ ${2:pattern} ->\n\ ${3:body};\n\ end\n\ # anonymous function\n\ snippet fun\n\ fun (${1:Parameters}) -> ${2:body} end${3}\n\ # try...catch\n\ snippet try\n\ try\n\ ${1}\n\ catch\n\ ${2:_:_} -> ${3:got_some_exception}\n\ end\n\ # record directive\n\ snippet rec\n\ -record(${1:record}, {\n\ ${2:field}=${3:value}}).${4}\n\ # todo comment\n\ snippet todo\n\ %% TODO: ${1}\n\ ## Snippets below (starting with '%') are in EDoc format.\n\ ## See http://www.erlang.org/doc/apps/edoc/chapter.html#id56887 for more details\n\ # doc comment\n\ snippet %d\n\ %% @doc ${1}\n\ # end of doc comment\n\ snippet %e\n\ %% @end\n\ # specification comment\n\ snippet %s\n\ %% @spec ${1}\n\ # private function marker\n\ snippet %p\n\ %% @private\n\ # OTP application\n\ snippet application\n\ -module(${1:`Filename('', 'my')`}).\n\ \n\ -behaviour(application).\n\ \n\ -export([start/2, stop/1]).\n\ \n\ start(_Type, _StartArgs) ->\n\ case ${2:root_supervisor}:start_link() of\n\ {ok, Pid} ->\n\ {ok, Pid};\n\ Other ->\n\ {error, Other}\n\ end.\n\ \n\ stop(_State) ->\n\ ok. \n\ # OTP supervisor\n\ snippet supervisor\n\ -module(${1:`Filename('', 'my')`}).\n\ \n\ -behaviour(supervisor).\n\ \n\ %% API\n\ -export([start_link/0]).\n\ \n\ %% Supervisor callbacks\n\ -export([init/1]).\n\ \n\ -ace.define(SERVER, ?MODULE).\n\ \n\ start_link() ->\n\ supervisor:start_link({local, ?SERVER}, ?MODULE, []).\n\ \n\ init([]) ->\n\ Server = {${2:my_server}, {$2, start_link, []},\n\ permanent, 2000, worker, [$2]},\n\ Children = [Server],\n\ RestartStrategy = {one_for_one, 0, 1},\n\ {ok, {RestartStrategy, Children}}.\n\ # OTP gen_server\n\ snippet gen_server\n\ -module(${1:`Filename('', 'my')`}).\n\ \n\ -behaviour(gen_server).\n\ \n\ %% API\n\ -export([\n\ start_link/0\n\ ]).\n\ \n\ %% gen_server callbacks\n\ -export([init/1, handle_call/3, handle_cast/2, handle_info/2,\n\ terminate/2, code_change/3]).\n\ \n\ -ace.define(SERVER, ?MODULE).\n\ \n\ -record(state, {}).\n\ \n\ %%%===================================================================\n\ %%% API\n\ %%%===================================================================\n\ \n\ start_link() ->\n\ gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).\n\ \n\ %%%===================================================================\n\ %%% gen_server callbacks\n\ %%%===================================================================\n\ \n\ init([]) ->\n\ {ok, #state{}}.\n\ \n\ handle_call(_Request, _From, State) ->\n\ Reply = ok,\n\ {reply, Reply, State}.\n\ \n\ handle_cast(_Msg, State) ->\n\ {noreply, State}.\n\ \n\ handle_info(_Info, State) ->\n\ {noreply, State}.\n\ \n\ terminate(_Reason, _State) ->\n\ ok.\n\ \n\ code_change(_OldVsn, State, _Extra) ->\n\ {ok, State}.\n\ \n\ %%%===================================================================\n\ %%% Internal functions\n\ %%%===================================================================\n\ \n\ "; exports.scope = "erlang"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/forth.js ================================================ ace.define("ace/snippets/forth",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "forth"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/ftl.js ================================================ ace.define("ace/snippets/ftl",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "ftl"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/gcode.js ================================================ ace.define("ace/snippets/gcode",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "gcode"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/gherkin.js ================================================ ace.define("ace/snippets/gherkin",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "gherkin"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/gitignore.js ================================================ ace.define("ace/snippets/gitignore",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "gitignore"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/glsl.js ================================================ ace.define("ace/snippets/glsl",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "glsl"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/golang.js ================================================ ace.define("ace/snippets/golang",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "golang"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/groovy.js ================================================ ace.define("ace/snippets/groovy",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "groovy"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/haml.js ================================================ ace.define("ace/snippets/haml",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet t\n\ %table\n\ %tr\n\ %th\n\ ${1:headers}\n\ %tr\n\ %td\n\ ${2:headers}\n\ snippet ul\n\ %ul\n\ %li\n\ ${1:item}\n\ %li\n\ snippet =rp\n\ = render :partial => '${1:partial}'\n\ snippet =rpl\n\ = render :partial => '${1:partial}', :locals => {}\n\ snippet =rpc\n\ = render :partial => '${1:partial}', :collection => @$1\n\ \n\ "; exports.scope = "haml"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/handlebars.js ================================================ ace.define("ace/snippets/handlebars",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "handlebars"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/haskell.js ================================================ ace.define("ace/snippets/haskell",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet lang\n\ {-# LANGUAGE ${1:OverloadedStrings} #-}\n\ snippet info\n\ -- |\n\ -- Module : ${1:Module.Namespace}\n\ -- Copyright : ${2:Author} ${3:2011-2012}\n\ -- License : ${4:BSD3}\n\ --\n\ -- Maintainer : ${5:email@something.com}\n\ -- Stability : ${6:experimental}\n\ -- Portability : ${7:unknown}\n\ --\n\ -- ${8:Description}\n\ --\n\ snippet import\n\ import ${1:Data.Text}\n\ snippet import2\n\ import ${1:Data.Text} (${2:head})\n\ snippet importq\n\ import qualified ${1:Data.Text} as ${2:T}\n\ snippet inst\n\ instance ${1:Monoid} ${2:Type} where\n\ ${3}\n\ snippet type\n\ type ${1:Type} = ${2:Type}\n\ snippet data\n\ data ${1:Type} = ${2:$1} ${3:Int}\n\ snippet newtype\n\ newtype ${1:Type} = ${2:$1} ${3:Int}\n\ snippet class\n\ class ${1:Class} a where\n\ ${2}\n\ snippet module\n\ module `substitute(substitute(expand('%:r'), '[/\\\\]','.','g'),'^\\%(\\l*\\.\\)\\?','','')` (\n\ ) where\n\ `expand('%') =~ 'Main' ? \"\\n\\nmain = do\\n print \\\"hello world\\\"\" : \"\"`\n\ \n\ snippet const\n\ ${1:name} :: ${2:a}\n\ $1 = ${3:undefined}\n\ snippet fn\n\ ${1:fn} :: ${2:a} -> ${3:a}\n\ $1 ${4} = ${5:undefined}\n\ snippet fn2\n\ ${1:fn} :: ${2:a} -> ${3:a} -> ${4:a}\n\ $1 ${5} = ${6:undefined}\n\ snippet ap\n\ ${1:map} ${2:fn} ${3:list}\n\ snippet do\n\ do\n\ \n\ snippet λ\n\ \\${1:x} -> ${2}\n\ snippet \\\n\ \\${1:x} -> ${2}\n\ snippet <-\n\ ${1:a} <- ${2:m a}\n\ snippet ←\n\ ${1:a} <- ${2:m a}\n\ snippet ->\n\ ${1:m a} -> ${2:a}\n\ snippet →\n\ ${1:m a} -> ${2:a}\n\ snippet tup\n\ (${1:a}, ${2:b})\n\ snippet tup2\n\ (${1:a}, ${2:b}, ${3:c})\n\ snippet tup3\n\ (${1:a}, ${2:b}, ${3:c}, ${4:d})\n\ snippet rec\n\ ${1:Record} { ${2:recFieldA} = ${3:undefined}\n\ , ${4:recFieldB} = ${5:undefined}\n\ }\n\ snippet case\n\ case ${1:something} of\n\ ${2} -> ${3}\n\ snippet let\n\ let ${1} = ${2}\n\ in ${3}\n\ snippet where\n\ where\n\ ${1:fn} = ${2:undefined}\n\ "; exports.scope = "haskell"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/haxe.js ================================================ ace.define("ace/snippets/haxe",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "haxe"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/html.js ================================================ ace.define("ace/snippets/html",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# Some useful Unicode entities\n\ # Non-Breaking Space\n\ snippet nbs\n\  \n\ # ←\n\ snippet left\n\ ←\n\ # →\n\ snippet right\n\ →\n\ # ↑\n\ snippet up\n\ ↑\n\ # ↓\n\ snippet down\n\ ↓\n\ # ↩\n\ snippet return\n\ ↩\n\ # ⇤\n\ snippet backtab\n\ ⇤\n\ # ⇥\n\ snippet tab\n\ ⇥\n\ # ⇧\n\ snippet shift\n\ ⇧\n\ # ⌃\n\ snippet ctrl\n\ ⌃\n\ # ⌅\n\ snippet enter\n\ ⌅\n\ # ⌘\n\ snippet cmd\n\ ⌘\n\ # ⌥\n\ snippet option\n\ ⌥\n\ # ⌦\n\ snippet delete\n\ ⌦\n\ # ⌫\n\ snippet backspace\n\ ⌫\n\ # ⎋\n\ snippet esc\n\ ⎋\n\ # Generic Doctype\n\ snippet doctype HTML 4.01 Strict\n\ \n\ snippet doctype HTML 4.01 Transitional\n\ \n\ snippet doctype HTML 5\n\ \n\ snippet doctype XHTML 1.0 Frameset\n\ \n\ snippet doctype XHTML 1.0 Strict\n\ \n\ snippet doctype XHTML 1.0 Transitional\n\ \n\ snippet doctype XHTML 1.1\n\ \n\ # HTML Doctype 4.01 Strict\n\ snippet docts\n\ \n\ # HTML Doctype 4.01 Transitional\n\ snippet doct\n\ \n\ # HTML Doctype 5\n\ snippet doct5\n\ \n\ # XHTML Doctype 1.0 Frameset\n\ snippet docxf\n\ \n\ # XHTML Doctype 1.0 Strict\n\ snippet docxs\n\ \n\ # XHTML Doctype 1.0 Transitional\n\ snippet docxt\n\ \n\ # XHTML Doctype 1.1\n\ snippet docx\n\ \n\ # Attributes\n\ snippet attr\n\ ${1:attribute}=\"${2:property}\"\n\ snippet attr+\n\ ${1:attribute}=\"${2:property}\" attr+${3}\n\ snippet .\n\ class=\"${1}\"${2}\n\ snippet #\n\ id=\"${1}\"${2}\n\ snippet alt\n\ alt=\"${1}\"${2}\n\ snippet charset\n\ charset=\"${1:utf-8}\"${2}\n\ snippet data\n\ data-${1}=\"${2:$1}\"${3}\n\ snippet for\n\ for=\"${1}\"${2}\n\ snippet height\n\ height=\"${1}\"${2}\n\ snippet href\n\ href=\"${1:#}\"${2}\n\ snippet lang\n\ lang=\"${1:en}\"${2}\n\ snippet media\n\ media=\"${1}\"${2}\n\ snippet name\n\ name=\"${1}\"${2}\n\ snippet rel\n\ rel=\"${1}\"${2}\n\ snippet scope\n\ scope=\"${1:row}\"${2}\n\ snippet src\n\ src=\"${1}\"${2}\n\ snippet title=\n\ title=\"${1}\"${2}\n\ snippet type\n\ type=\"${1}\"${2}\n\ snippet value\n\ value=\"${1}\"${2}\n\ snippet width\n\ width=\"${1}\"${2}\n\ # Elements\n\ snippet a\n\ ${2:$1}\n\ snippet a.\n\ ${3:$1}\n\ snippet a#\n\ ${3:$1}\n\ snippet a:ext\n\ ${2:$1}\n\ snippet a:mail\n\ ${3:email me}\n\ snippet abbr\n\ ${2}\n\ snippet address\n\
\n\ ${1}\n\
\n\ snippet area\n\ \"${4}\"\n\ snippet area+\n\ \"${4}\"\n\ area+${5}\n\ snippet area:c\n\ \"${3}\"\n\ snippet area:d\n\ \"${3}\"\n\ snippet area:p\n\ \"${3}\"\n\ snippet area:r\n\ \"${3}\"\n\ snippet article\n\
\n\ ${1}\n\
\n\ snippet article.\n\
\n\ ${2}\n\
\n\ snippet article#\n\
\n\ ${2}\n\
\n\ snippet aside\n\ \n\ snippet aside.\n\ \n\ snippet aside#\n\ \n\ snippet audio\n\ \n\ snippet b\n\ ${1}\n\ snippet base\n\ \n\ snippet bdi\n\ ${1}\n\ snippet bdo\n\ ${2}\n\ snippet bdo:l\n\ ${1}\n\ snippet bdo:r\n\ ${1}\n\ snippet blockquote\n\
\n\ ${1}\n\
\n\ snippet body\n\ \n\ ${1}\n\ \n\ snippet br\n\
${1}\n\ snippet button\n\ \n\ snippet button.\n\ \n\ snippet button#\n\ \n\ snippet button:s\n\ \n\ snippet button:r\n\ \n\ snippet canvas\n\ \n\ ${1}\n\ \n\ snippet caption\n\ ${1}\n\ snippet cite\n\ ${1}\n\ snippet code\n\ ${1}\n\ snippet col\n\ ${1}\n\ snippet col+\n\ \n\ col+${1}\n\ snippet colgroup\n\ \n\ ${1}\n\ \n\ snippet colgroup+\n\ \n\ \n\ col+${1}\n\ \n\ snippet command\n\ \n\ snippet command:c\n\ \n\ snippet command:r\n\ \n\ snippet datagrid\n\ \n\ ${1}\n\ \n\ snippet datalist\n\ \n\ ${1}\n\ \n\ snippet datatemplate\n\ \n\ ${1}\n\ \n\ snippet dd\n\
${1}
\n\ snippet dd.\n\
${2}
\n\ snippet dd#\n\
${2}
\n\ snippet del\n\ ${1}\n\ snippet details\n\
${1}
\n\ snippet dfn\n\ ${1}\n\ snippet dialog\n\ \n\ ${1}\n\ \n\ snippet div\n\
\n\ ${1}\n\
\n\ snippet div.\n\
\n\ ${2}\n\
\n\ snippet div#\n\
\n\ ${2}\n\
\n\ snippet dl\n\
\n\ ${1}\n\
\n\ snippet dl.\n\
\n\ ${2}\n\
\n\ snippet dl#\n\
\n\ ${2}\n\
\n\ snippet dl+\n\
\n\
${1}
\n\
${2}
\n\ dt+${3}\n\
\n\ snippet dt\n\
${1}
\n\ snippet dt.\n\
${2}
\n\ snippet dt#\n\
${2}
\n\ snippet dt+\n\
${1}
\n\
${2}
\n\ dt+${3}\n\ snippet em\n\ ${1}\n\ snippet embed\n\ \n\ snippet fieldset\n\
\n\ ${1}\n\
\n\ snippet fieldset.\n\
\n\ ${2}\n\
\n\ snippet fieldset#\n\
\n\ ${2}\n\
\n\ snippet fieldset+\n\
\n\ ${1}\n\ ${2}\n\
\n\ fieldset+${3}\n\ snippet figcaption\n\
${1}
\n\ snippet figure\n\
${1}
\n\ snippet footer\n\
\n\ ${1}\n\
\n\ snippet footer.\n\
\n\ ${2}\n\
\n\ snippet footer#\n\
\n\ ${2}\n\
\n\ snippet form\n\
\n\ ${3}\n\
\n\ snippet form.\n\
\n\ ${4}\n\
\n\ snippet form#\n\
\n\ ${4}\n\
\n\ snippet h1\n\

${1}

\n\ snippet h1.\n\

${2}

\n\ snippet h1#\n\

${2}

\n\ snippet h2\n\

${1}

\n\ snippet h2.\n\

${2}

\n\ snippet h2#\n\

${2}

\n\ snippet h3\n\

${1}

\n\ snippet h3.\n\

${2}

\n\ snippet h3#\n\

${2}

\n\ snippet h4\n\

${1}

\n\ snippet h4.\n\

${2}

\n\ snippet h4#\n\

${2}

\n\ snippet h5\n\
${1}
\n\ snippet h5.\n\
${2}
\n\ snippet h5#\n\
${2}
\n\ snippet h6\n\
${1}
\n\ snippet h6.\n\
${2}
\n\ snippet h6#\n\
${2}
\n\ snippet head\n\ \n\ \n\ \n\ ${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`}\n\ ${2}\n\ \n\ snippet header\n\
\n\ ${1}\n\
\n\ snippet header.\n\
\n\ ${2}\n\
\n\ snippet header#\n\
\n\ ${2}\n\
\n\ snippet hgroup\n\
\n\ ${1}\n\
\n\ snippet hgroup.\n\
\n\ ${2}\n\
\n\ snippet hr\n\
${1}\n\ snippet html\n\ \n\ ${1}\n\ \n\ snippet xhtml\n\ \n\ ${1}\n\ \n\ snippet html5\n\ \n\ \n\ \n\ \n\ ${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`}\n\ ${2:meta}\n\ \n\ \n\ ${3:body}\n\ \n\ \n\ snippet i\n\ ${1}\n\ snippet iframe\n\ ${2}\n\ snippet iframe.\n\ ${3}\n\ snippet iframe#\n\ ${3}\n\ snippet img\n\ \"${2}\"${3}\n\ snippet img.\n\ \"${3}\"${4}\n\ snippet img#\n\ \"${3}\"${4}\n\ snippet input\n\ ${5}\n\ snippet input.\n\ ${6}\n\ snippet input:text\n\ ${4}\n\ snippet input:submit\n\ ${4}\n\ snippet input:hidden\n\ ${4}\n\ snippet input:button\n\ ${4}\n\ snippet input:image\n\ ${5}\n\ snippet input:checkbox\n\ ${3}\n\ snippet input:radio\n\ ${3}\n\ snippet input:color\n\ ${4}\n\ snippet input:date\n\ ${4}\n\ snippet input:datetime\n\ ${4}\n\ snippet input:datetime-local\n\ ${4}\n\ snippet input:email\n\ ${4}\n\ snippet input:file\n\ ${4}\n\ snippet input:month\n\ ${4}\n\ snippet input:number\n\ ${4}\n\ snippet input:password\n\ ${4}\n\ snippet input:range\n\ ${4}\n\ snippet input:reset\n\ ${4}\n\ snippet input:search\n\ ${4}\n\ snippet input:time\n\ ${4}\n\ snippet input:url\n\ ${4}\n\ snippet input:week\n\ ${4}\n\ snippet ins\n\ ${1}\n\ snippet kbd\n\ ${1}\n\ snippet keygen\n\ ${1}\n\ snippet label\n\ \n\ snippet label:i\n\ \n\ ${7}\n\ snippet label:s\n\ \n\ \n\ snippet legend\n\ ${1}\n\ snippet legend+\n\ ${1}\n\ snippet li\n\
  • ${1}
  • \n\ snippet li.\n\
  • ${2}
  • \n\ snippet li+\n\
  • ${1}
  • \n\ li+${2}\n\ snippet lia\n\
  • ${1}
  • \n\ snippet lia+\n\
  • ${1}
  • \n\ lia+${3}\n\ snippet link\n\ ${5}\n\ snippet link:atom\n\ ${2}\n\ snippet link:css\n\ ${4}\n\ snippet link:favicon\n\ ${2}\n\ snippet link:rss\n\ ${2}\n\ snippet link:touch\n\ ${2}\n\ snippet map\n\ \n\ ${2}\n\ \n\ snippet map.\n\ \n\ ${3}\n\ \n\ snippet map#\n\ \n\ ${3}\n\ \n\ snippet map+\n\ \n\ \"${5}\"${6}\n\ ${7}\n\ snippet mark\n\ ${1}\n\ snippet menu\n\ \n\ ${1}\n\ \n\ snippet menu:c\n\ \n\ ${1}\n\ \n\ snippet menu:t\n\ \n\ ${1}\n\ \n\ snippet meta\n\ ${3}\n\ snippet meta:compat\n\ ${3}\n\ snippet meta:refresh\n\ ${3}\n\ snippet meta:utf\n\ ${3}\n\ snippet meter\n\ ${1}\n\ snippet nav\n\ \n\ snippet nav.\n\ \n\ snippet nav#\n\ \n\ snippet noscript\n\ \n\ snippet object\n\ \n\ ${3}\n\ ${4}\n\ # Embed QT Movie\n\ snippet movie\n\ \n\ \n\ \n\ \n\ \n\ ${6}\n\ snippet ol\n\
      \n\ ${1}\n\
    \n\ snippet ol.\n\
      \n\ ${2}\n\
    \n\ snippet ol#\n\
      \n\ ${2}\n\
    \n\ snippet ol+\n\
      \n\
    1. ${1}
    2. \n\ li+${2}\n\
    \n\ snippet opt\n\ \n\ snippet opt+\n\ \n\ opt+${3}\n\ snippet optt\n\ \n\ snippet optgroup\n\ \n\ \n\ opt+${3}\n\ \n\ snippet output\n\ ${1}\n\ snippet p\n\

    ${1}

    \n\ snippet param\n\ ${3}\n\ snippet pre\n\
    \n\
    		${1}\n\
    	
    \n\ snippet progress\n\ ${1}\n\ snippet q\n\ ${1}\n\ snippet rp\n\ ${1}\n\ snippet rt\n\ ${1}\n\ snippet ruby\n\ \n\ ${1}\n\ \n\ snippet s\n\ ${1}\n\ snippet samp\n\ \n\ ${1}\n\ \n\ snippet script\n\ \n\ snippet scriptsrc\n\ \n\ snippet section\n\
    \n\ ${1}\n\
    \n\ snippet section.\n\
    \n\ ${2}\n\
    \n\ snippet section#\n\
    \n\ ${2}\n\
    \n\ snippet select\n\ \n\ snippet select.\n\ \n\ snippet select+\n\ \n\ snippet small\n\ ${1}\n\ snippet source\n\ \n\ snippet span\n\ ${1}\n\ snippet strong\n\ ${1}\n\ snippet style\n\ \n\ snippet sub\n\ ${1}\n\ snippet summary\n\ \n\ ${1}\n\ \n\ snippet sup\n\ ${1}\n\ snippet table\n\ \n\ ${2}\n\
    \n\ snippet table.\n\ \n\ ${3}\n\
    \n\ snippet table#\n\ \n\ ${3}\n\
    \n\ snippet tbody\n\ \n\ ${1}\n\ \n\ snippet td\n\ ${1}\n\ snippet td.\n\ ${2}\n\ snippet td#\n\ ${2}\n\ snippet td+\n\ ${1}\n\ td+${2}\n\ snippet textarea\n\ ${6}\n\ snippet tfoot\n\ \n\ ${1}\n\ \n\ snippet th\n\ ${1}\n\ snippet th.\n\ ${2}\n\ snippet th#\n\ ${2}\n\ snippet th+\n\ ${1}\n\ th+${2}\n\ snippet thead\n\ \n\ ${1}\n\ \n\ snippet time\n\ \n\ snippet title\n\ ${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`}\n\ snippet tr\n\ \n\ ${1}\n\ \n\ snippet tr+\n\ \n\ ${1}\n\ td+${2}\n\ \n\ snippet track\n\ ${5}${6}\n\ snippet ul\n\
      \n\ ${1}\n\
    \n\ snippet ul.\n\
      \n\ ${2}\n\
    \n\ snippet ul#\n\
      \n\ ${2}\n\
    \n\ snippet ul+\n\
      \n\
    • ${1}
    • \n\ li+${2}\n\
    \n\ snippet var\n\ ${1}\n\ snippet video\n\ ${8}\n\ snippet wbr\n\ ${1}\n\ "; exports.scope = "html"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/html_ruby.js ================================================ ace.define("ace/snippets/html_ruby",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "html_ruby"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/ini.js ================================================ ace.define("ace/snippets/ini",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "ini"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/io.js ================================================ ace.define("ace/snippets/io",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippets = [ { "content": "assertEquals(${1:expected}, ${2:expr})", "name": "assertEquals", "scope": "io", "tabTrigger": "ae" }, { "content": "${1:${2:newValue} := ${3:Object} }clone do(\n\t$0\n)", "name": "clone do", "scope": "io", "tabTrigger": "cdo" }, { "content": "docSlot(\"${1:slotName}\", \"${2:documentation}\")", "name": "docSlot", "scope": "io", "tabTrigger": "ds" }, { "content": "(${1:header,}\n\t${2:body}\n)$0", "keyEquivalent": "@(", "name": "Indented Bracketed Line", "scope": "io", "tabTrigger": "(" }, { "content": "\n\t$0\n", "keyEquivalent": "\r", "name": "Special: Return Inside Empty Parenthesis", "scope": "io meta.empty-parenthesis.io, io meta.comma-parenthesis.io" }, { "content": "${1:methodName} := method(${2:args,}\n\t$0\n)", "name": "method", "scope": "io", "tabTrigger": "m" }, { "content": "newSlot(\"${1:slotName}\", ${2:defaultValue}, \"${3:docString}\")$0", "name": "newSlot", "scope": "io", "tabTrigger": "ns" }, { "content": "${1:name} := Object clone do(\n\t$0\n)", "name": "Object clone do", "scope": "io", "tabTrigger": "ocdo" }, { "content": "test${1:SomeFeature} := method(\n\t$0\n)", "name": "testMethod", "scope": "io", "tabTrigger": "ts" }, { "content": "${1:Something}Test := ${2:UnitTest} clone do(\n\t$0\n)", "name": "UnitTest", "scope": "io", "tabTrigger": "ut" } ]; exports.scope = "io"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/jack.js ================================================ ace.define("ace/snippets/jack",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "jack"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/jade.js ================================================ ace.define("ace/snippets/jade",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "jade"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/java.js ================================================ ace.define("ace/snippets/java",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "## Access Modifiers\n\ snippet po\n\ protected\n\ snippet pu\n\ public\n\ snippet pr\n\ private\n\ ##\n\ ## Annotations\n\ snippet before\n\ @Before\n\ static void ${1:intercept}(${2:args}) { ${3} }\n\ snippet mm\n\ @ManyToMany\n\ ${1}\n\ snippet mo\n\ @ManyToOne\n\ ${1}\n\ snippet om\n\ @OneToMany${1:(cascade=CascadeType.ALL)}\n\ ${2}\n\ snippet oo\n\ @OneToOne\n\ ${1}\n\ ##\n\ ## Basic Java packages and import\n\ snippet im\n\ import\n\ snippet j.b\n\ java.beans.\n\ snippet j.i\n\ java.io.\n\ snippet j.m\n\ java.math.\n\ snippet j.n\n\ java.net.\n\ snippet j.u\n\ java.util.\n\ ##\n\ ## Class\n\ snippet cl\n\ class ${1:`Filename(\"\", \"untitled\")`} ${2}\n\ snippet in\n\ interface ${1:`Filename(\"\", \"untitled\")`} ${2:extends Parent}${3}\n\ snippet tc\n\ public class ${1:`Filename()`} extends ${2:TestCase}\n\ ##\n\ ## Class Enhancements\n\ snippet ext\n\ extends \n\ snippet imp\n\ implements\n\ ##\n\ ## Comments\n\ snippet /*\n\ ##\n\ ## Constants\n\ snippet co\n\ static public final ${1:String} ${2:var} = ${3};${4}\n\ snippet cos\n\ static public final String ${1:var} = \"${2}\";${3}\n\ ##\n\ ## Control Statements\n\ snippet case\n\ case ${1}:\n\ ${2}\n\ snippet def\n\ default:\n\ ${2}\n\ snippet el\n\ else\n\ snippet elif\n\ else if (${1}) ${2}\n\ snippet if\n\ if (${1}) ${2}\n\ snippet sw\n\ switch (${1}) {\n\ ${2}\n\ }\n\ ##\n\ ## Create a Method\n\ snippet m\n\ ${1:void} ${2:method}(${3}) ${4:throws }${5}\n\ ##\n\ ## Create a Variable\n\ snippet v\n\ ${1:String} ${2:var}${3: = null}${4};${5}\n\ ##\n\ ## Enhancements to Methods, variables, classes, etc.\n\ snippet ab\n\ abstract\n\ snippet fi\n\ final\n\ snippet st\n\ static\n\ snippet sy\n\ synchronized\n\ ##\n\ ## Error Methods\n\ snippet err\n\ System.err.print(\"${1:Message}\");\n\ snippet errf\n\ System.err.printf(\"${1:Message}\", ${2:exception});\n\ snippet errln\n\ System.err.println(\"${1:Message}\");\n\ ##\n\ ## Exception Handling\n\ snippet as\n\ assert ${1:test} : \"${2:Failure message}\";${3}\n\ snippet ca\n\ catch(${1:Exception} ${2:e}) ${3}\n\ snippet thr\n\ throw\n\ snippet ths\n\ throws\n\ snippet try\n\ try {\n\ ${3}\n\ } catch(${1:Exception} ${2:e}) {\n\ }\n\ snippet tryf\n\ try {\n\ ${3}\n\ } catch(${1:Exception} ${2:e}) {\n\ } finally {\n\ }\n\ ##\n\ ## Find Methods\n\ snippet findall\n\ List<${1:listName}> ${2:items} = ${1}.findAll();${3}\n\ snippet findbyid\n\ ${1:var} ${2:item} = ${1}.findById(${3});${4}\n\ ##\n\ ## Javadocs\n\ snippet /**\n\ snippet @au\n\ @author `system(\"grep \\`id -un\\` /etc/passwd | cut -d \\\":\\\" -f5 | cut -d \\\",\\\" -f1\")`\n\ snippet @br\n\ @brief ${1:Description}\n\ snippet @fi\n\ @file ${1:`Filename()`}.java\n\ snippet @pa\n\ @param ${1:param}\n\ snippet @re\n\ @return ${1:param}\n\ ##\n\ ## Logger Methods\n\ snippet debug\n\ Logger.debug(${1:param});${2}\n\ snippet error\n\ Logger.error(${1:param});${2}\n\ snippet info\n\ Logger.info(${1:param});${2}\n\ snippet warn\n\ Logger.warn(${1:param});${2}\n\ ##\n\ ## Loops\n\ snippet enfor\n\ for (${1} : ${2}) ${3}\n\ snippet for\n\ for (${1}; ${2}; ${3}) ${4}\n\ snippet wh\n\ while (${1}) ${2}\n\ ##\n\ ## Main method\n\ snippet main\n\ public static void main (String[] args) {\n\ ${1:/* code */}\n\ }\n\ ##\n\ ## Print Methods\n\ snippet print\n\ System.out.print(\"${1:Message}\");\n\ snippet printf\n\ System.out.printf(\"${1:Message}\", ${2:args});\n\ snippet println\n\ System.out.println(${1});\n\ ##\n\ ## Render Methods\n\ snippet ren\n\ render(${1:param});${2}\n\ snippet rena\n\ renderArgs.put(\"${1}\", ${2});${3}\n\ snippet renb\n\ renderBinary(${1:param});${2}\n\ snippet renj\n\ renderJSON(${1:param});${2}\n\ snippet renx\n\ renderXml(${1:param});${2}\n\ ##\n\ ## Setter and Getter Methods\n\ snippet set\n\ ${1:public} void set${3:}(${2:String} ${4:}){\n\ this.$4 = $4;\n\ }\n\ snippet get\n\ ${1:public} ${2:String} get${3:}(){\n\ return this.${4:};\n\ }\n\ ##\n\ ## Terminate Methods or Loops\n\ snippet re\n\ return\n\ snippet br\n\ break;\n\ ##\n\ ## Test Methods\n\ snippet t\n\ public void test${1:Name}() throws Exception {\n\ ${2}\n\ }\n\ snippet test\n\ @Test\n\ public void test${1:Name}() throws Exception {\n\ ${2}\n\ }\n\ ##\n\ ## Utils\n\ snippet Sc\n\ Scanner\n\ ##\n\ ## Miscellaneous\n\ snippet action\n\ public static void ${1:index}(${2:args}) { ${3} }\n\ snippet rnf\n\ notFound(${1:param});${2}\n\ snippet rnfin\n\ notFoundIfNull(${1:param});${2}\n\ snippet rr\n\ redirect(${1:param});${2}\n\ snippet ru\n\ unauthorized(${1:param});${2}\n\ snippet unless\n\ (unless=${1:param});${2}\n\ "; exports.scope = "java"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/javascript.js ================================================ ace.define("ace/snippets/javascript",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# Prototype\n\ snippet proto\n\ ${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\n\ ${4:// body...}\n\ };\n\ # Function\n\ snippet fun\n\ function ${1?:function_name}(${2:argument}) {\n\ ${3:// body...}\n\ }\n\ # Anonymous Function\n\ regex /((=)\\s*|(:)\\s*|(\\()|\\b)/f/(\\))?/\n\ snippet f\n\ function${M1?: ${1:functionName}}($2) {\n\ ${0:$TM_SELECTED_TEXT}\n\ }${M2?;}${M3?,}${M4?)}\n\ # Immediate function\n\ trigger \\(?f\\(\n\ endTrigger \\)?\n\ snippet f(\n\ (function(${1}) {\n\ ${0:${TM_SELECTED_TEXT:/* code */}}\n\ }(${1}));\n\ # if\n\ snippet if\n\ if (${1:true}) {\n\ ${0}\n\ }\n\ # if ... else\n\ snippet ife\n\ if (${1:true}) {\n\ ${2}\n\ } else {\n\ ${0}\n\ }\n\ # tertiary conditional\n\ snippet ter\n\ ${1:/* condition */} ? ${2:a} : ${3:b}\n\ # switch\n\ snippet switch\n\ switch (${1:expression}) {\n\ case '${3:case}':\n\ ${4:// code}\n\ break;\n\ ${5}\n\ default:\n\ ${2:// code}\n\ }\n\ # case\n\ snippet case\n\ case '${1:case}':\n\ ${2:// code}\n\ break;\n\ ${3}\n\ \n\ # while (...) {...}\n\ snippet wh\n\ while (${1:/* condition */}) {\n\ ${0:/* code */}\n\ }\n\ # try\n\ snippet try\n\ try {\n\ ${0:/* code */}\n\ } catch (e) {}\n\ # do...while\n\ snippet do\n\ do {\n\ ${2:/* code */}\n\ } while (${1:/* condition */});\n\ # Object Method\n\ snippet :f\n\ regex /([,{[])|^\\s*/:f/\n\ ${1:method_name}: function(${2:attribute}) {\n\ ${0}\n\ }${3:,}\n\ # setTimeout function\n\ snippet setTimeout\n\ regex /\\b/st|timeout|setTimeo?u?t?/\n\ setTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\n\ # Get Elements\n\ snippet gett\n\ getElementsBy${1:TagName}('${2}')${3}\n\ # Get Element\n\ snippet get\n\ getElementBy${1:Id}('${2}')${3}\n\ # console.log (Firebug)\n\ snippet cl\n\ console.log(${1});\n\ # return\n\ snippet ret\n\ return ${1:result}\n\ # for (property in object ) { ... }\n\ snippet fori\n\ for (var ${1:prop} in ${2:Things}) {\n\ ${0:$2[$1]}\n\ }\n\ # hasOwnProperty\n\ snippet has\n\ hasOwnProperty(${1})\n\ # docstring\n\ snippet /**\n\ snippet @par\n\ regex /^\\s*\\*\\s*/@(para?m?)?/\n\ @param {${1:type}} ${2:name} ${3:description}\n\ snippet @ret\n\ @return {${1:type}} ${2:description}\n\ # JSON.parse\n\ snippet jsonp\n\ JSON.parse(${1:jstr});\n\ # JSON.stringify\n\ snippet jsons\n\ JSON.stringify(${1:object});\n\ # self-defining function\n\ snippet sdf\n\ var ${1:function_name} = function(${2:argument}) {\n\ ${3:// initial code ...}\n\ \n\ $1 = function($2) {\n\ ${4:// main code}\n\ };\n\ }\n\ # singleton\n\ snippet sing\n\ function ${1:Singleton} (${2:argument}) {\n\ var instance;\n\ $1 = function $1($2) {\n\ return instance;\n\ };\n\ $1.prototype = this;\n\ instance = new $1();\n\ instance.constructor = $1;\n\ \n\ ${3:// code ...}\n\ \n\ return instance;\n\ }\n\ # class\n\ snippet class\n\ regex /^\\s*/clas{0,2}/\n\ var ${1:class} = function(${20}) {\n\ $40$0\n\ };\n\ \n\ (function() {\n\ ${60:this.prop = \"\"}\n\ }).call(${1:class}.prototype);\n\ \n\ exports.${1:class} = ${1:class};\n\ # \n\ snippet for-\n\ for (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\n\ ${0:${2:Things}[${1:i}];}\n\ }\n\ # for (...) {...}\n\ snippet for\n\ for (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\n\ ${3:$2[$1]}$0\n\ }\n\ # for (...) {...} (Improved Native For-Loop)\n\ snippet forr\n\ for (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\n\ ${3:$2[$1]}$0\n\ }\n\ \n\ \n\ #modules\n\ snippet def\n\ ace.define(function(require, exports, module) {\n\ \"use strict\";\n\ var ${1/.*\\///} = require(\"${1}\");\n\ \n\ $TM_SELECTED_TEXT\n\ });\n\ snippet req\n\ guard ^\\s*\n\ var ${1/.*\\///} = require(\"${1}\");\n\ $0\n\ snippet requ\n\ guard ^\\s*\n\ var ${1/.*\\/(.)/\\u$1/} = require(\"${1}\").${1/.*\\/(.)/\\u$1/};\n\ $0\n\ "; exports.scope = "javascript"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/json.js ================================================ ace.define("ace/snippets/json",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "json"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/jsoniq.js ================================================ ace.define("ace/snippets/jsoniq",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet for\n\ for $${1:item} in ${2:expr}\n\ snippet return\n\ return ${1:expr}\n\ snippet import\n\ import module namespace ${1:ns} = \"${2:http://www.example.com/}\";\n\ snippet some\n\ some $${1:varname} in ${2:expr} satisfies ${3:expr}\n\ snippet every\n\ every $${1:varname} in ${2:expr} satisfies ${3:expr}\n\ snippet if\n\ if(${1:true}) then ${2:expr} else ${3:true}\n\ snippet switch\n\ switch(${1:\"foo\"})\n\ case ${2:\"foo\"}\n\ return ${3:true}\n\ default return ${4:false}\n\ snippet try\n\ try { ${1:expr} } catch ${2:*} { ${3:expr} }\n\ snippet tumbling\n\ for tumbling window $${1:varname} in ${2:expr}\n\ start at $${3:start} when ${4:expr}\n\ end at $${5:end} when ${6:expr}\n\ return ${7:expr}\n\ snippet sliding\n\ for sliding window $${1:varname} in ${2:expr}\n\ start at $${3:start} when ${4:expr}\n\ end at $${5:end} when ${6:expr}\n\ return ${7:expr}\n\ snippet let\n\ let $${1:varname} := ${2:expr}\n\ snippet group\n\ group by $${1:varname} := ${2:expr}\n\ snippet order\n\ order by ${1:expr} ${2:descending}\n\ snippet stable\n\ stable order by ${1:expr}\n\ snippet count\n\ count $${1:varname}\n\ snippet ordered\n\ ordered { ${1:expr} }\n\ snippet unordered\n\ unordered { ${1:expr} }\n\ snippet treat \n\ treat as ${1:expr}\n\ snippet castable\n\ castable as ${1:atomicType}\n\ snippet cast\n\ cast as ${1:atomicType}\n\ snippet typeswitch\n\ typeswitch(${1:expr})\n\ case ${2:type} return ${3:expr}\n\ default return ${4:expr}\n\ snippet var\n\ declare variable $${1:varname} := ${2:expr};\n\ snippet fn\n\ declare function ${1:ns}:${2:name}(){\n\ ${3:expr}\n\ };\n\ snippet module\n\ module namespace ${1:ns} = \"${2:http://www.example.com}\";\n\ "; exports.scope = "jsoniq"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/jsp.js ================================================ ace.define("ace/snippets/jsp",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet @page\n\ <%@page contentType=\"text/html\" pageEncoding=\"UTF-8\"%>\n\ snippet jstl\n\ <%@ taglib uri=\"http://java.sun.com/jsp/jstl/core\" prefix=\"c\" %>\n\ <%@ taglib uri=\"http://java.sun.com/jsp/jstl/functions\" prefix=\"fn\" %>\n\ snippet jstl:c\n\ <%@ taglib uri=\"http://java.sun.com/jsp/jstl/core\" prefix=\"c\" %>\n\ snippet jstl:fn\n\ <%@ taglib uri=\"http://java.sun.com/jsp/jstl/functions\" prefix=\"fn\" %>\n\ snippet cpath\n\ ${pageContext.request.contextPath}\n\ snippet cout\n\ \n\ snippet cset\n\ \n\ snippet cremove\n\ \n\ snippet ccatch\n\ \n\ snippet cif\n\ \n\ ${2}\n\ \n\ snippet cchoose\n\ \n\ ${1}\n\ \n\ snippet cwhen\n\ \n\ ${2}\n\ \n\ snippet cother\n\ \n\ ${1}\n\ \n\ snippet cfore\n\ \n\ ${4:}\n\ \n\ snippet cfort\n\ ${2:item1,item2,item3}\n\ \n\ ${5:}\n\ \n\ snippet cparam\n\ \n\ snippet cparam+\n\ \n\ cparam+${3}\n\ snippet cimport\n\ \n\ snippet cimport+\n\ \n\ \n\ cparam+${4}\n\ \n\ snippet curl\n\ \n\ ${3}\n\ snippet curl+\n\ \n\ \n\ cparam+${6}\n\ \n\ ${3}\n\ snippet credirect\n\ \n\ snippet contains\n\ ${fn:contains(${1:string}, ${2:substr})}\n\ snippet contains:i\n\ ${fn:containsIgnoreCase(${1:string}, ${2:substr})}\n\ snippet endswith\n\ ${fn:endsWith(${1:string}, ${2:suffix})}\n\ snippet escape\n\ ${fn:escapeXml(${1:string})}\n\ snippet indexof\n\ ${fn:indexOf(${1:string}, ${2:substr})}\n\ snippet join\n\ ${fn:join(${1:collection}, ${2:delims})}\n\ snippet length\n\ ${fn:length(${1:collection_or_string})}\n\ snippet replace\n\ ${fn:replace(${1:string}, ${2:substr}, ${3:replace})}\n\ snippet split\n\ ${fn:split(${1:string}, ${2:delims})}\n\ snippet startswith\n\ ${fn:startsWith(${1:string}, ${2:prefix})}\n\ snippet substr\n\ ${fn:substring(${1:string}, ${2:begin}, ${3:end})}\n\ snippet substr:a\n\ ${fn:substringAfter(${1:string}, ${2:substr})}\n\ snippet substr:b\n\ ${fn:substringBefore(${1:string}, ${2:substr})}\n\ snippet lc\n\ ${fn:toLowerCase(${1:string})}\n\ snippet uc\n\ ${fn:toUpperCase(${1:string})}\n\ snippet trim\n\ ${fn:trim(${1:string})}\n\ "; exports.scope = "jsp"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/jsx.js ================================================ ace.define("ace/snippets/jsx",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "jsx"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/julia.js ================================================ ace.define("ace/snippets/julia",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "julia"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/latex.js ================================================ ace.define("ace/snippets/latex",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "latex"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/less.js ================================================ ace.define("ace/snippets/less",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "less"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/liquid.js ================================================ ace.define("ace/snippets/liquid",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "liquid"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/lisp.js ================================================ ace.define("ace/snippets/lisp",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "lisp"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/livescript.js ================================================ ace.define("ace/snippets/livescript",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "livescript"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/logiql.js ================================================ ace.define("ace/snippets/logiql",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "logiql"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/lsl.js ================================================ ace.define("ace/snippets/lsl",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet @\n\ @${1:label};\n\ snippet CAMERA_ACTIVE\n\ CAMERA_ACTIVE, ${1:integer isActive}, $0\n\ snippet CAMERA_BEHINDNESS_ANGLE\n\ CAMERA_BEHINDNESS_ANGLE, ${1:float degrees}, $0\n\ snippet CAMERA_BEHINDNESS_LAG\n\ CAMERA_BEHINDNESS_LAG, ${1:float seconds}, $0\n\ snippet CAMERA_DISTANCE\n\ CAMERA_DISTANCE, ${1:float meters}, $0\n\ snippet CAMERA_FOCUS\n\ CAMERA_FOCUS, ${1:vector position}, $0\n\ snippet CAMERA_FOCUS_LAG\n\ CAMERA_FOCUS_LAG, ${1:float seconds}, $0\n\ snippet CAMERA_FOCUS_LOCKED\n\ CAMERA_FOCUS_LOCKED, ${1:integer isLocked}, $0\n\ snippet CAMERA_FOCUS_OFFSET\n\ CAMERA_FOCUS_OFFSET, ${1:vector meters}, $0\n\ snippet CAMERA_FOCUS_THRESHOLD\n\ CAMERA_FOCUS_THRESHOLD, ${1:float meters}, $0\n\ snippet CAMERA_PITCH\n\ CAMERA_PITCH, ${1:float degrees}, $0\n\ snippet CAMERA_POSITION\n\ CAMERA_POSITION, ${1:vector position}, $0\n\ snippet CAMERA_POSITION_LAG\n\ CAMERA_POSITION_LAG, ${1:float seconds}, $0\n\ snippet CAMERA_POSITION_LOCKED\n\ CAMERA_POSITION_LOCKED, ${1:integer isLocked}, $0\n\ snippet CAMERA_POSITION_THRESHOLD\n\ CAMERA_POSITION_THRESHOLD, ${1:float meters}, $0\n\ snippet CHARACTER_AVOIDANCE_MODE\n\ CHARACTER_AVOIDANCE_MODE, ${1:integer flags}, $0\n\ snippet CHARACTER_DESIRED_SPEED\n\ CHARACTER_DESIRED_SPEED, ${1:float speed}, $0\n\ snippet CHARACTER_DESIRED_TURN_SPEED\n\ CHARACTER_DESIRED_TURN_SPEED, ${1:float speed}, $0\n\ snippet CHARACTER_LENGTH\n\ CHARACTER_LENGTH, ${1:float length}, $0\n\ snippet CHARACTER_MAX_TURN_RADIUS\n\ CHARACTER_MAX_TURN_RADIUS, ${1:float radius}, $0\n\ snippet CHARACTER_ORIENTATION\n\ CHARACTER_ORIENTATION, ${1:integer orientation}, $0\n\ snippet CHARACTER_RADIUS\n\ CHARACTER_RADIUS, ${1:float radius}, $0\n\ snippet CHARACTER_STAY_WITHIN_PARCEL\n\ CHARACTER_STAY_WITHIN_PARCEL, ${1:boolean stay}, $0\n\ snippet CHARACTER_TYPE\n\ CHARACTER_TYPE, ${1:integer type}, $0\n\ snippet HTTP_BODY_MAXLENGTH\n\ HTTP_BODY_MAXLENGTH, ${1:integer length}, $0\n\ snippet HTTP_CUSTOM_HEADER\n\ HTTP_CUSTOM_HEADER, ${1:string name}, ${2:string value}, $0\n\ snippet HTTP_METHOD\n\ HTTP_METHOD, ${1:string method}, $0\n\ snippet HTTP_MIMETYPE\n\ HTTP_MIMETYPE, ${1:string mimeType}, $0\n\ snippet HTTP_PRAGMA_NO_CACHE\n\ HTTP_PRAGMA_NO_CACHE, ${1:integer send_header}, $0\n\ snippet HTTP_VERBOSE_THROTTLE\n\ HTTP_VERBOSE_THROTTLE, ${1:integer noisy}, $0\n\ snippet HTTP_VERIFY_CERT\n\ HTTP_VERIFY_CERT, ${1:integer verify}, $0\n\ snippet RC_DATA_FLAGS\n\ RC_DATA_FLAGS, ${1:integer flags}, $0\n\ snippet RC_DETECT_PHANTOM\n\ RC_DETECT_PHANTOM, ${1:integer dectedPhantom}, $0\n\ snippet RC_MAX_HITS\n\ RC_MAX_HITS, ${1:integer maxHits}, $0\n\ snippet RC_REJECT_TYPES\n\ RC_REJECT_TYPES, ${1:integer filterMask}, $0\n\ snippet at_rot_target\n\ at_rot_target(${1:integer handle}, ${2:rotation targetrot}, ${3:rotation ourrot})\n\ {\n\ $0\n\ }\n\ snippet at_target\n\ at_target(${1:integer tnum}, ${2:vector targetpos}, ${3:vector ourpos})\n\ {\n\ $0\n\ }\n\ snippet attach\n\ attach(${1:key id})\n\ {\n\ $0\n\ }\n\ snippet changed\n\ changed(${1:integer change})\n\ {\n\ $0\n\ }\n\ snippet collision\n\ collision(${1:integer index})\n\ {\n\ $0\n\ }\n\ snippet collision_end\n\ collision_end(${1:integer index})\n\ {\n\ $0\n\ }\n\ snippet collision_start\n\ collision_start(${1:integer index})\n\ {\n\ $0\n\ }\n\ snippet control\n\ control(${1:key id}, ${2:integer level}, ${3:integer edge})\n\ {\n\ $0\n\ }\n\ snippet dataserver\n\ dataserver(${1:key query_id}, ${2:string data})\n\ {\n\ $0\n\ }\n\ snippet do\n\ do\n\ {\n\ $0\n\ }\n\ while (${1:condition});\n\ snippet else\n\ else\n\ {\n\ $0\n\ }\n\ snippet email\n\ email(${1:string time}, ${2:string address}, ${3:string subject}, ${4:string message}, ${5:integer num_left})\n\ {\n\ $0\n\ }\n\ snippet experience_permissions\n\ experience_permissions(${1:key agent_id})\n\ {\n\ $0\n\ }\n\ snippet experience_permissions_denied\n\ experience_permissions_denied(${1:key agent_id}, ${2:integer reason})\n\ {\n\ $0\n\ }\n\ snippet for\n\ for (${1:start}; ${3:condition}; ${3:step})\n\ {\n\ $0\n\ }\n\ snippet http_request\n\ http_request(${1:key request_id}, ${2:string method}, ${3:string body})\n\ {\n\ $0\n\ }\n\ snippet http_response\n\ http_response(${1:key request_id}, ${2:integer status}, ${3:list metadata}, ${4:string body})\n\ {\n\ $0\n\ }\n\ snippet if\n\ if (${1:condition})\n\ {\n\ $0\n\ }\n\ snippet jump\n\ jump ${1:label};\n\ snippet land_collision\n\ land_collision(${1:vector pos})\n\ {\n\ $0\n\ }\n\ snippet land_collision_end\n\ land_collision_end(${1:vector pos})\n\ {\n\ $0\n\ }\n\ snippet land_collision_start\n\ land_collision_start(${1:vector pos})\n\ {\n\ $0\n\ }\n\ snippet link_message\n\ link_message(${1:integer sender_num}, ${2:integer num}, ${3:string str}, ${4:key id})\n\ {\n\ $0\n\ }\n\ snippet listen\n\ listen(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string message})\n\ {\n\ $0\n\ }\n\ snippet llAbs\n\ llAbs(${1:integer val})\n\ snippet llAcos\n\ llAcos(${1:float val})\n\ snippet llAddToLandBanList\n\ llAddToLandBanList(${1:key agent}, ${2:float hours});\n\ snippet llAddToLandPassList\n\ llAddToLandPassList(${1:key agent}, ${2:float hours});\n\ snippet llAdjustSoundVolume\n\ llAdjustSoundVolume(${1:float volume});\n\ snippet llAgentInExperience\n\ llAgentInExperience(${1:key agent})\n\ snippet llAllowInventoryDrop\n\ llAllowInventoryDrop(${1:integer add});\n\ snippet llAngleBetween\n\ llAngleBetween(${1:rotation a}, ${2:rotation b})\n\ snippet llApplyImpulse\n\ llApplyImpulse(${1:vector force}, ${2:integer local});\n\ snippet llApplyRotationalImpulse\n\ llApplyRotationalImpulse(${1:vector force}, ${2:integer local});\n\ snippet llAsin\n\ llAsin(${1:float val})\n\ snippet llAtan2\n\ llAtan2(${1:float y}, ${2:float x})\n\ snippet llAttachToAvatar\n\ llAttachToAvatar(${1:integer attach_point});\n\ snippet llAttachToAvatarTemp\n\ llAttachToAvatarTemp(${1:integer attach_point});\n\ snippet llAvatarOnLinkSitTarget\n\ llAvatarOnLinkSitTarget(${1:integer link})\n\ snippet llAvatarOnSitTarget\n\ llAvatarOnSitTarget()\n\ snippet llAxes2Rot\n\ llAxes2Rot(${1:vector fwd}, ${2:vector left}, ${3:vector up})\n\ snippet llAxisAngle2Rot\n\ llAxisAngle2Rot(${1:vector axis}, ${2:float angle})\n\ snippet llBase64ToInteger\n\ llBase64ToInteger(${1:string str})\n\ snippet llBase64ToString\n\ llBase64ToString(${1:string str})\n\ snippet llBreakAllLinks\n\ llBreakAllLinks();\n\ snippet llBreakLink\n\ llBreakLink(${1:integer link});\n\ snippet llCastRay\n\ llCastRay(${1:vector start}, ${2:vector end}, ${3:list options});\n\ snippet llCeil\n\ llCeil(${1:float val})\n\ snippet llClearCameraParams\n\ llClearCameraParams();\n\ snippet llClearLinkMedia\n\ llClearLinkMedia(${1:integer link}, ${2:integer face});\n\ snippet llClearPrimMedia\n\ llClearPrimMedia(${1:integer face});\n\ snippet llCloseRemoteDataChannel\n\ llCloseRemoteDataChannel(${1:key channel});\n\ snippet llCollisionFilter\n\ llCollisionFilter(${1:string name}, ${2:key id}, ${3:integer accept});\n\ snippet llCollisionSound\n\ llCollisionSound(${1:string impact_sound}, ${2:float impact_volume});\n\ snippet llCos\n\ llCos(${1:float theta})\n\ snippet llCreateCharacter\n\ llCreateCharacter(${1:list options});\n\ snippet llCreateKeyValue\n\ llCreateKeyValue(${1:string k})\n\ snippet llCreateLink\n\ llCreateLink(${1:key target}, ${2:integer parent});\n\ snippet llCSV2List\n\ llCSV2List(${1:string src})\n\ snippet llDataSizeKeyValue\n\ llDataSizeKeyValue()\n\ snippet llDeleteCharacter\n\ llDeleteCharacter();\n\ snippet llDeleteKeyValue\n\ llDeleteKeyValue(${1:string k})\n\ snippet llDeleteSubList\n\ llDeleteSubList(${1:list src}, ${2:integer start}, ${3:integer end})\n\ snippet llDeleteSubString\n\ llDeleteSubString(${1:string src}, ${2:integer start}, ${3:integer end})\n\ snippet llDetachFromAvatar\n\ llDetachFromAvatar();\n\ snippet llDetectedGrab\n\ llDetectedGrab(${1:integer number})\n\ snippet llDetectedGroup\n\ llDetectedGroup(${1:integer number})\n\ snippet llDetectedKey\n\ llDetectedKey(${1:integer number})\n\ snippet llDetectedLinkNumber\n\ llDetectedLinkNumber(${1:integer number})\n\ snippet llDetectedName\n\ llDetectedName(${1:integer number})\n\ snippet llDetectedOwner\n\ llDetectedOwner(${1:integer number})\n\ snippet llDetectedPos\n\ llDetectedPosl(${1:integer number})\n\ snippet llDetectedRot\n\ llDetectedRot(${1:integer number})\n\ snippet llDetectedTouchBinormal\n\ llDetectedTouchBinormal(${1:integer number})\n\ snippet llDetectedTouchFace\n\ llDetectedTouchFace(${1:integer number})\n\ snippet llDetectedTouchNormal\n\ llDetectedTouchNormal(${1:integer number})\n\ snippet llDetectedTouchPos\n\ llDetectedTouchPos(${1:integer number})\n\ snippet llDetectedTouchST\n\ llDetectedTouchST(${1:integer number})\n\ snippet llDetectedTouchUV\n\ llDetectedTouchUV(${1:integer number})\n\ snippet llDetectedType\n\ llDetectedType(${1:integer number})\n\ snippet llDetectedVel\n\ llDetectedVel(${1:integer number})\n\ snippet llDialog\n\ llDialog(${1:key agent}, ${2:string message}, ${3:list buttons}, ${4:integer channel});\n\ snippet llDie\n\ llDie();\n\ snippet llDumpList2String\n\ llDumpList2String(${1:list src}, ${2:string separator})\n\ snippet llEdgeOfWorld\n\ llEdgeOfWorld(${1:vector pos}, ${2:vector dir})\n\ snippet llEjectFromLand\n\ llEjectFromLand(${1:key agent});\n\ snippet llEmail\n\ llEmail(${1:string address}, ${2:string subject}, ${3:string message});\n\ snippet llEscapeURL\n\ llEscapeURL(${1:string url})\n\ snippet llEuler2Rot\n\ llEuler2Rot(${1:vector v})\n\ snippet llExecCharacterCmd\n\ llExecCharacterCmd(${1:integer command}, ${2:list options});\n\ snippet llEvade\n\ llEvade(${1:key target}, ${2:list options});\n\ snippet llFabs\n\ llFabs(${1:float val})\n\ snippet llFleeFrom\n\ llFleeFrom(${1:vector position}, ${2:float distance}, ${3:list options});\n\ snippet llFloor\n\ llFloor(${1:float val})\n\ snippet llForceMouselook\n\ llForceMouselook(${1:integer mouselook});\n\ snippet llFrand\n\ llFrand(${1:float mag})\n\ snippet llGenerateKey\n\ llGenerateKey()\n\ snippet llGetAccel\n\ llGetAccel()\n\ snippet llGetAgentInfo\n\ llGetAgentInfo(${1:key id})\n\ snippet llGetAgentLanguage\n\ llGetAgentLanguage(${1:key agent})\n\ snippet llGetAgentList\n\ llGetAgentList(${1:integer scope}, ${2:list options})\n\ snippet llGetAgentSize\n\ llGetAgentSize(${1:key agent})\n\ snippet llGetAlpha\n\ llGetAlpha(${1:integer face})\n\ snippet llGetAndResetTime\n\ llGetAndResetTime()\n\ snippet llGetAnimation\n\ llGetAnimation(${1:key id})\n\ snippet llGetAnimationList\n\ llGetAnimationList(${1:key agent})\n\ snippet llGetAnimationOverride\n\ llGetAnimationOverride(${1:string anim_state})\n\ snippet llGetAttached\n\ llGetAttached()\n\ snippet llGetBoundingBox\n\ llGetBoundingBox(${1:key object})\n\ snippet llGetCameraPos\n\ llGetCameraPos()\n\ snippet llGetCameraRot\n\ llGetCameraRot()\n\ snippet llGetCenterOfMass\n\ llGetCenterOfMass()\n\ snippet llGetClosestNavPoint\n\ llGetClosestNavPoint(${1:vector point}, ${2:list options})\n\ snippet llGetColor\n\ llGetColor(${1:integer face})\n\ snippet llGetCreator\n\ llGetCreator()\n\ snippet llGetDate\n\ llGetDate()\n\ snippet llGetDisplayName\n\ llGetDisplayName(${1:key id})\n\ snippet llGetEnergy\n\ llGetEnergy()\n\ snippet llGetEnv\n\ llGetEnv(${1:string name})\n\ snippet llGetExperienceDetails\n\ llGetExperienceDetails(${1:key experience_id})\n\ snippet llGetExperienceErrorMessage\n\ llGetExperienceErrorMessage(${1:integer error})\n\ snippet llGetForce\n\ llGetForce()\n\ snippet llGetFreeMemory\n\ llGetFreeMemory()\n\ snippet llGetFreeURLs\n\ llGetFreeURLs()\n\ snippet llGetGeometricCenter\n\ llGetGeometricCenter()\n\ snippet llGetGMTclock\n\ llGetGMTclock()\n\ snippet llGetHTTPHeader\n\ llGetHTTPHeader(${1:key request_id}, ${2:string header})\n\ snippet llGetInventoryCreator\n\ llGetInventoryCreator(${1:string item})\n\ snippet llGetInventoryKey\n\ llGetInventoryKey(${1:string name})\n\ snippet llGetInventoryName\n\ llGetInventoryName(${1:integer type}, ${2:integer number})\n\ snippet llGetInventoryNumber\n\ llGetInventoryNumber(${1:integer type})\n\ snippet llGetInventoryPermMask\n\ llGetInventoryPermMask(${1:string item}, ${2:integer mask})\n\ snippet llGetInventoryType\n\ llGetInventoryType(${1:string name})\n\ snippet llGetKey\n\ llGetKey()\n\ snippet llGetLandOwnerAt\n\ llGetLandOwnerAt(${1:vector pos})\n\ snippet llGetLinkKey\n\ llGetLinkKey(${1:integer link})\n\ snippet llGetLinkMedia\n\ llGetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params})\n\ snippet llGetLinkName\n\ llGetLinkName(${1:integer link})\n\ snippet llGetLinkNumber\n\ llGetLinkNumber()\n\ snippet llGetLinkNumberOfSides\n\ llGetLinkNumberOfSides(${1:integer link})\n\ snippet llGetLinkPrimitiveParams\n\ llGetLinkPrimitiveParams(${1:integer link}, ${2:list params})\n\ snippet llGetListEntryType\n\ llGetListEntryType(${1:list src}, ${2:integer index})\n\ snippet llGetListLength\n\ llGetListLength(${1:list src})\n\ snippet llGetLocalPos\n\ llGetLocalPos()\n\ snippet llGetLocalRot\n\ llGetLocalRot()\n\ snippet llGetMass\n\ llGetMass()\n\ snippet llGetMassMKS\n\ llGetMassMKS()\n\ snippet llGetMaxScaleFactor\n\ llGetMaxScaleFactor()\n\ snippet llGetMemoryLimit\n\ llGetMemoryLimit()\n\ snippet llGetMinScaleFactor\n\ llGetMinScaleFactor()\n\ snippet llGetNextEmail\n\ llGetNextEmail(${1:string address}, ${2:string subject});\n\ snippet llGetNotecardLine\n\ llGetNotecardLine(${1:string name}, ${2:integer line})\n\ snippet llGetNumberOfNotecardLines\n\ llGetNumberOfNotecardLines(${1:string name})\n\ snippet llGetNumberOfPrims\n\ llGetNumberOfPrims()\n\ snippet llGetNumberOfSides\n\ llGetNumberOfSides()\n\ snippet llGetObjectDesc\n\ llGetObjectDesc()\n\ snippet llGetObjectDetails\n\ llGetObjectDetails(${1:key id}, ${2:list params})\n\ snippet llGetObjectMass\n\ llGetObjectMass(${1:key id})\n\ snippet llGetObjectName\n\ llGetObjectName()\n\ snippet llGetObjectPermMask\n\ llGetObjectPermMask(${1:integer mask})\n\ snippet llGetObjectPrimCount\n\ llGetObjectPrimCount(${1:key prim})\n\ snippet llGetOmega\n\ llGetOmega()\n\ snippet llGetOwner\n\ llGetOwner()\n\ snippet llGetOwnerKey\n\ llGetOwnerKey(${1:key id})\n\ snippet llGetParcelDetails\n\ llGetParcelDetails(${1:vector pos}, ${2:list params})\n\ snippet llGetParcelFlags\n\ llGetParcelFlags(${1:vector pos})\n\ snippet llGetParcelMaxPrims\n\ llGetParcelMaxPrims(${1:vector pos}, ${2:integer sim_wide})\n\ snippet llGetParcelMusicURL\n\ llGetParcelMusicURL()\n\ snippet llGetParcelPrimCount\n\ llGetParcelPrimCount(${1:vector pos}, ${2:integer category}, ${3:integer sim_wide})\n\ snippet llGetParcelPrimOwners\n\ llGetParcelPrimOwners(${1:vector pos})\n\ snippet llGetPermissions\n\ llGetPermissions()\n\ snippet llGetPermissionsKey\n\ llGetPermissionsKey()\n\ snippet llGetPhysicsMaterial\n\ llGetPhysicsMaterial()\n\ snippet llGetPos\n\ llGetPos()\n\ snippet llGetPrimitiveParams\n\ llGetPrimitiveParams(${1:list params})\n\ snippet llGetPrimMediaParams\n\ llGetPrimMediaParams(${1:integer face}, ${2:list params})\n\ snippet llGetRegionAgentCount\n\ llGetRegionAgentCount()\n\ snippet llGetRegionCorner\n\ llGetRegionCorner()\n\ snippet llGetRegionFlags\n\ llGetRegionFlags()\n\ snippet llGetRegionFPS\n\ llGetRegionFPS()\n\ snippet llGetRegionName\n\ llGetRegionName()\n\ snippet llGetRegionTimeDilation\n\ llGetRegionTimeDilation()\n\ snippet llGetRootPosition\n\ llGetRootPosition()\n\ snippet llGetRootRotation\n\ llGetRootRotation()\n\ snippet llGetRot\n\ llGetRot()\n\ snippet llGetScale\n\ llGetScale()\n\ snippet llGetScriptName\n\ llGetScriptName()\n\ snippet llGetScriptState\n\ llGetScriptState(${1:string script})\n\ snippet llGetSimStats\n\ llGetSimStats(${1:integer stat_type})\n\ snippet llGetSimulatorHostname\n\ llGetSimulatorHostname()\n\ snippet llGetSPMaxMemory\n\ llGetSPMaxMemory()\n\ snippet llGetStartParameter\n\ llGetStartParameter()\n\ snippet llGetStaticPath\n\ llGetStaticPath(${1:vector start}, ${2:vector end}, ${3:float radius}, ${4:list params})\n\ snippet llGetStatus\n\ llGetStatus(${1:integer status})\n\ snippet llGetSubString\n\ llGetSubString(${1:string src}, ${2:integer start}, ${3:integer end})\n\ snippet llGetSunDirection\n\ llGetSunDirection()\n\ snippet llGetTexture\n\ llGetTexture(${1:integer face})\n\ snippet llGetTextureOffset\n\ llGetTextureOffset(${1:integer face})\n\ snippet llGetTextureRot\n\ llGetTextureRot(${1:integer face})\n\ snippet llGetTextureScale\n\ llGetTextureScale(${1:integer face})\n\ snippet llGetTime\n\ llGetTime()\n\ snippet llGetTimeOfDay\n\ llGetTimeOfDay()\n\ snippet llGetTimestamp\n\ llGetTimestamp()\n\ snippet llGetTorque\n\ llGetTorque()\n\ snippet llGetUnixTime\n\ llGetUnixTime()\n\ snippet llGetUsedMemory\n\ llGetUsedMemory()\n\ snippet llGetUsername\n\ llGetUsername(${1:key id})\n\ snippet llGetVel\n\ llGetVel()\n\ snippet llGetWallclock\n\ llGetWallclock()\n\ snippet llGiveInventory\n\ llGiveInventory(${1:key destination}, ${2:string inventory});\n\ snippet llGiveInventoryList\n\ llGiveInventoryList(${1:key target}, ${2:string folder}, ${3:list inventory});\n\ snippet llGiveMoney\n\ llGiveMoney(${1:key destination}, ${2:integer amount})\n\ snippet llGround\n\ llGround(${1:vector offset})\n\ snippet llGroundContour\n\ llGroundContour(${1:vector offset})\n\ snippet llGroundNormal\n\ llGroundNormal(${1:vector offset})\n\ snippet llGroundRepel\n\ llGroundRepel(${1:float height}, ${2:integer water}, ${3:float tau});\n\ snippet llGroundSlope\n\ llGroundSlope(${1:vector offset})\n\ snippet llHTTPRequest\n\ llHTTPRequest(${1:string url}, ${2:list parameters}, ${3:string body})\n\ snippet llHTTPResponse\n\ llHTTPResponse(${1:key request_id}, ${2:integer status}, ${3:string body});\n\ snippet llInsertString\n\ llInsertString(${1:string dst}, ${2:integer pos}, ${3:string src})\n\ snippet llInstantMessage\n\ llInstantMessage(${1:key user}, ${2:string message});\n\ snippet llIntegerToBase64\n\ llIntegerToBase64(${1:integer number})\n\ snippet llJson2List\n\ llJson2List(${1:string json})\n\ snippet llJsonGetValue\n\ llJsonGetValue(${1:string json}, ${2:list specifiers})\n\ snippet llJsonSetValue\n\ llJsonSetValue(${1:string json}, ${2:list specifiers}, ${3:string newValue})\n\ snippet llJsonValueType\n\ llJsonValueType(${1:string json}, ${2:list specifiers})\n\ snippet llKey2Name\n\ llKey2Name(${1:key id})\n\ snippet llKeyCountKeyValue\n\ llKeyCountKeyValue()\n\ snippet llKeysKeyValue\n\ llKeysKeyValue(${1:integer first}, ${2:integer count})\n\ snippet llLinkParticleSystem\n\ llLinkParticleSystem(${1:integer link}, ${2:list rules});\n\ snippet llLinkSitTarget\n\ llLinkSitTarget(${1:integer link}, ${2:vector offset}, ${3:rotation rot});\n\ snippet llList2CSV\n\ llList2CSV(${1:list src})\n\ snippet llList2Float\n\ llList2Float(${1:list src}, ${2:integer index})\n\ snippet llList2Integer\n\ llList2Integer(${1:list src}, ${2:integer index})\n\ snippet llList2Json\n\ llList2Json(${1:string type}, ${2:list values})\n\ snippet llList2Key\n\ llList2Key(${1:list src}, ${2:integer index})\n\ snippet llList2List\n\ llList2List(${1:list src}, ${2:integer start}, ${3:integer end})\n\ snippet llList2ListStrided\n\ llList2ListStrided(${1:list src}, ${2:integer start}, ${3:integer end}, ${4:integer stride})\n\ snippet llList2Rot\n\ llList2Rot(${1:list src}, ${2:integer index})\n\ snippet llList2String\n\ llList2String(${1:list src}, ${2:integer index})\n\ snippet llList2Vector\n\ llList2Vector(${1:list src}, ${2:integer index})\n\ snippet llListen\n\ llListen(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string msg})\n\ snippet llListenControl\n\ llListenControl(${1:integer handle}, ${2:integer active});\n\ snippet llListenRemove\n\ llListenRemove(${1:integer handle});\n\ snippet llListFindList\n\ llListFindList(${1:list src}, ${2:list test})\n\ snippet llListInsertList\n\ llListInsertList(${1:list dest}, ${2:list src}, ${3:integer start})\n\ snippet llListRandomize\n\ llListRandomize(${1:list src}, ${2:integer stride})\n\ snippet llListReplaceList\n\ llListReplaceList(${1:list dest}, ${2:list src}, ${3:integer start}, ${4:integer end})\n\ snippet llListSort\n\ llListSort(${1:list src}, ${2:integer stride}, ${3:integer ascending})\n\ snippet llListStatistics\n\ llListStatistics(${1:integer operation}, ${2:list src})\n\ snippet llLoadURL\n\ llLoadURL(${1:key agent}, ${2:string message}, ${3:string url});\n\ snippet llLog\n\ llLog(${1:float val})\n\ snippet llLog10\n\ llLog10(${1:float val})\n\ snippet llLookAt\n\ llLookAt(${1:vector target}, ${2:float strength}, ${3:float damping});\n\ snippet llLoopSound\n\ llLoopSound(${1:string sound}, ${2:float volume});\n\ snippet llLoopSoundMaster\n\ llLoopSoundMaster(${1:string sound}, ${2:float volume});\n\ snippet llLoopSoundSlave\n\ llLoopSoundSlave(${1:string sound}, ${2:float volume});\n\ snippet llManageEstateAccess\n\ llManageEstateAccess(${1:integer action}, ${2:key agent})\n\ snippet llMapDestination\n\ llMapDestination(${1:string simname}, ${2:vector pos}, ${3:vector look_at});\n\ snippet llMD5String\n\ llMD5String(${1:string src}, ${2:integer nonce})\n\ snippet llMessageLinked\n\ llMessageLinked(${1:integer link}, ${2:integer num}, ${3:string str}, ${4:key id});\n\ snippet llMinEventDelay\n\ llMinEventDelay(${1:float delay});\n\ snippet llModifyLand\n\ llModifyLand(${1:integer action}, ${2:integer brush});\n\ snippet llModPow\n\ llModPow(${1:integer a}, ${2:integer b}, ${3:integer c})\n\ snippet llMoveToTarget\n\ llMoveToTarget(${1:vector target}, ${2:float tau});\n\ snippet llNavigateTo\n\ llNavigateTo(${1:vector pos}, ${2:list options});\n\ snippet llOffsetTexture\n\ llOffsetTexture(${1:float u}, ${2:float v}, ${3:integer face});\n\ snippet llOpenRemoteDataChannel\n\ llOpenRemoteDataChannel();\n\ snippet llOverMyLand\n\ llOverMyLand(${1:key id})\n\ snippet llOwnerSay\n\ llOwnerSay(${1:string msg});\n\ snippet llParcelMediaCommandList\n\ llParcelMediaCommandList(${1:list commandList});\n\ snippet llParcelMediaQuery\n\ llParcelMediaQuery(${1:list query})\n\ snippet llParseString2List\n\ llParseString2List(${1:string src}, ${2:list separators}, ${3:list spacers})\n\ snippet llParseStringKeepNulls\n\ llParseStringKeepNulls(${1:string src}, ${2:list separators}, ${3:list spacers})\n\ snippet llParticleSystem\n\ llParticleSystem(${1:list rules});\n\ snippet llPassCollisions\n\ llPassCollisions(${1:integer pass});\n\ snippet llPassTouches\n\ llPassTouches(${1:integer pass});\n\ snippet llPatrolPoints\n\ llPatrolPoints(${1:list patrolPoints}, ${2:list options});\n\ snippet llPlaySound\n\ llPlaySound(${1:string sound}, ${2:float volume});\n\ snippet llPlaySoundSlave\n\ llPlaySoundSlave(${1:string sound}, ${2:float volume});\n\ snippet llPow\n\ llPow(${1:float base}, ${2:float exponent})\n\ snippet llPreloadSound\n\ llPreloadSound(${1:string sound});\n\ snippet llPursue\n\ llPursue(${1:key target}, ${2:list options});\n\ snippet llPushObject\n\ llPushObject(${1:key target}, ${2:vector impulse}, ${3:vector ang_impulse}, ${4:integer local});\n\ snippet llReadKeyValue\n\ llReadKeyValue(${1:string k})\n\ snippet llRegionSay\n\ llRegionSay(${1:integer channel}, ${2:string msg});\n\ snippet llRegionSayTo\n\ llRegionSayTo(${1:key target}, ${2:integer channel}, ${3:string msg});\n\ snippet llReleaseControls\n\ llReleaseControls();\n\ snippet llReleaseURL\n\ llReleaseURL(${1:string url});\n\ snippet llRemoteDataReply\n\ llRemoteDataReply(${1:key channel}, ${2:key message_id}, ${3:string sdata}, ${4:integer idata});\n\ snippet llRemoteLoadScriptPin\n\ llRemoteLoadScriptPin(${1:key target}, ${2:string name}, ${3:integer pin}, ${4:integer running}, ${5:integer start_param});\n\ snippet llRemoveFromLandBanList\n\ llRemoveFromLandBanList(${1:key agent});\n\ snippet llRemoveFromLandPassList\n\ llRemoveFromLandPassList(${1:key agent});\n\ snippet llRemoveInventory\n\ llRemoveInventory(${1:string item});\n\ snippet llRemoveVehicleFlags\n\ llRemoveVehicleFlags(${1:integer flags});\n\ snippet llRequestAgentData\n\ llRequestAgentData(${1:key id}, ${2:integer data})\n\ snippet llRequestDisplayName\n\ llRequestDisplayName(${1:key id})\n\ snippet llRequestExperiencePermissions\n\ llRequestExperiencePermissions(${1:key agent}, ${2:string name})\n\ snippet llRequestInventoryData\n\ llRequestInventoryData(${1:string name})\n\ snippet llRequestPermissions\n\ llRequestPermissions(${1:key agent}, ${2:integer permissions})\n\ snippet llRequestSecureURL\n\ llRequestSecureURL()\n\ snippet llRequestSimulatorData\n\ llRequestSimulatorData(${1:string region}, ${2:integer data})\n\ snippet llRequestURL\n\ llRequestURL()\n\ snippet llRequestUsername\n\ llRequestUsername(${1:key id})\n\ snippet llResetAnimationOverride\n\ llResetAnimationOverride(${1:string anim_state});\n\ snippet llResetLandBanList\n\ llResetLandBanList();\n\ snippet llResetLandPassList\n\ llResetLandPassList();\n\ snippet llResetOtherScript\n\ llResetOtherScript(${1:string name});\n\ snippet llResetScript\n\ llResetScript();\n\ snippet llResetTime\n\ llResetTime();\n\ snippet llReturnObjectsByID\n\ llReturnObjectsByID(${1:list objects})\n\ snippet llReturnObjectsByOwner\n\ llReturnObjectsByOwner(${1:key owner}, ${2:integer scope})\n\ snippet llRezAtRoot\n\ llRezAtRoot(${1:string inventory}, ${2:vector position}, ${3:vector velocity}, ${4:rotation rot}, ${5:integer param});\n\ snippet llRezObject\n\ llRezObject(${1:string inventory}, ${2:vector pos}, ${3:vector vel}, ${4:rotation rot}, ${5:integer param});\n\ snippet llRot2Angle\n\ llRot2Angle(${1:rotation rot})\n\ snippet llRot2Axis\n\ llRot2Axis(${1:rotation rot})\n\ snippet llRot2Euler\n\ llRot2Euler(${1:rotation quat})\n\ snippet llRot2Fwd\n\ llRot2Fwd(${1:rotation q})\n\ snippet llRot2Left\n\ llRot2Left(${1:rotation q})\n\ snippet llRot2Up\n\ llRot2Up(${1:rotation q})\n\ snippet llRotateTexture\n\ llRotateTexture(${1:float angle}, ${2:integer face});\n\ snippet llRotBetween\n\ llRotBetween(${1:vector start}, ${2:vector end})\n\ snippet llRotLookAt\n\ llRotLookAt(${1:rotation target_direction}, ${2:float strength}, ${3:float damping});\n\ snippet llRotTarget\n\ llRotTarget(${1:rotation rot}, ${2:float error})\n\ snippet llRotTargetRemove\n\ llRotTargetRemove(${1:integer handle});\n\ snippet llRound\n\ llRound(${1:float val})\n\ snippet llSameGroup\n\ llSameGroup(${1:key group})\n\ snippet llSay\n\ llSay(${1:integer channel}, ${2:string msg});\n\ snippet llScaleByFactor\n\ llScaleByFactor(${1:float scaling_factor})\n\ snippet llScaleTexture\n\ llScaleTexture(${1:float u}, ${2:float v}, ${3:integer face});\n\ snippet llScriptDanger\n\ llScriptDanger(${1:vector pos})\n\ snippet llScriptProfiler\n\ llScriptProfiler(${1:integer flags});\n\ snippet llSendRemoteData\n\ llSendRemoteData(${1:key channel}, ${2:string dest}, ${3:integer idata}, ${4:string sdata})\n\ snippet llSensor\n\ llSensor(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc});\n\ snippet llSensorRepeat\n\ llSensorRepeat(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc}, ${6:float rate});\n\ snippet llSetAlpha\n\ llSetAlpha(${1:float alpha}, ${2:integer face});\n\ snippet llSetAngularVelocity\n\ llSetAngularVelocity(${1:vector force}, ${2:integer local});\n\ snippet llSetAnimationOverride\n\ llSetAnimationOverride(${1:string anim_state}, ${2:string anim})\n\ snippet llSetBuoyancy\n\ llSetBuoyancy(${1:float buoyancy});\n\ snippet llSetCameraAtOffset\n\ llSetCameraAtOffset(${1:vector offset});\n\ snippet llSetCameraEyeOffset\n\ llSetCameraEyeOffset(${1:vector offset});\n\ snippet llSetCameraParams\n\ llSetCameraParams(${1:list rules});\n\ snippet llSetClickAction\n\ llSetClickAction(${1:integer action});\n\ snippet llSetColor\n\ llSetColor(${1:vector color}, ${2:integer face});\n\ snippet llSetContentType\n\ llSetContentType(${1:key request_id}, ${2:integer content_type});\n\ snippet llSetDamage\n\ llSetDamage(${1:float damage});\n\ snippet llSetForce\n\ llSetForce(${1:vector force}, ${2:integer local});\n\ snippet llSetForceAndTorque\n\ llSetForceAndTorque(${1:vector force}, ${2:vector torque}, ${3:integer local});\n\ snippet llSetHoverHeight\n\ llSetHoverHeight(${1:float height}, ${2:integer water}, ${3:float tau});\n\ snippet llSetKeyframedMotion\n\ llSetKeyframedMotion(${1:list keyframes}, ${2:list options});\n\ snippet llSetLinkAlpha\n\ llSetLinkAlpha(${1:integer link}, ${2:float alpha}, ${3:integer face});\n\ snippet llSetLinkCamera\n\ llSetLinkCamera(${1:integer link}, ${2:vector eye}, ${3:vector at});\n\ snippet llSetLinkColor\n\ llSetLinkColor(${1:integer link}, ${2:vector color}, ${3:integer face});\n\ snippet llSetLinkMedia\n\ llSetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params});\n\ snippet llSetLinkPrimitiveParams\n\ llSetLinkPrimitiveParams(${1:integer link}, ${2:list rules});\n\ snippet llSetLinkPrimitiveParamsFast\n\ llSetLinkPrimitiveParamsFast(${1:integer link}, ${2:list rules});\n\ snippet llSetLinkTexture\n\ llSetLinkTexture(${1:integer link}, ${2:string texture}, ${3:integer face});\n\ snippet llSetLinkTextureAnim\n\ llSetLinkTextureAnim(${1:integer link}, ${2:integer mode}, ${3:integer face}, ${4:integer sizex}, ${5:integer sizey}, ${6:float start}, ${7:float length}, ${8:float rate});\n\ snippet llSetLocalRot\n\ llSetLocalRot(${1:rotation rot});\n\ snippet llSetMemoryLimit\n\ llSetMemoryLimit(${1:integer limit})\n\ snippet llSetObjectDesc\n\ llSetObjectDesc(${1:string description});\n\ snippet llSetObjectName\n\ llSetObjectName(${1:string name});\n\ snippet llSetParcelMusicURL\n\ llSetParcelMusicURL(${1:string url});\n\ snippet llSetPayPrice\n\ llSetPayPrice(${1:integer price}, [${2:integer price_button_a}, ${3:integer price_button_b}, ${4:integer price_button_c}, ${5:integer price_button_d}]);\n\ snippet llSetPhysicsMaterial\n\ llSetPhysicsMaterial(${1:integer mask}, ${2:float gravity_multiplier}, ${3:float restitution}, ${4:float friction}, ${5:float density});\n\ snippet llSetPos\n\ llSetPos(${1:vector pos});\n\ snippet llSetPrimitiveParams\n\ llSetPrimitiveParams(${1:list rules});\n\ snippet llSetPrimMediaParams\n\ llSetPrimMediaParams(${1:integer face}, ${2:list params});\n\ snippet llSetRegionPos\n\ llSetRegionPos(${1:vector position})\n\ snippet llSetRemoteScriptAccessPin\n\ llSetRemoteScriptAccessPin(${1:integer pin});\n\ snippet llSetRot\n\ llSetRot(${1:rotation rot});\n\ snippet llSetScale\n\ llSetScale(${1:vector size});\n\ snippet llSetScriptState\n\ llSetScriptState(${1:string name}, ${2:integer run});\n\ snippet llSetSitText\n\ llSetSitText(${1:string text});\n\ snippet llSetSoundQueueing\n\ llSetSoundQueueing(${1:integer queue});\n\ snippet llSetSoundRadius\n\ llSetSoundRadius(${1:float radius});\n\ snippet llSetStatus\n\ llSetStatus(${1:integer status}, ${2:integer value});\n\ snippet llSetText\n\ llSetText(${1:string text}, ${2:vector color}, ${3:float alpha});\n\ snippet llSetTexture\n\ llSetTexture(${1:string texture}, ${2:integer face});\n\ snippet llSetTextureAnim\n\ llSetTextureAnim(${1:integer mode}, ${2:integer face}, ${3:integer sizex}, ${4:integer sizey}, ${5:float start}, ${6:float length}, ${7:float rate});\n\ snippet llSetTimerEvent\n\ llSetTimerEvent(${1:float sec});\n\ snippet llSetTorque\n\ llSetTorque(${1:vector torque}, ${2:integer local});\n\ snippet llSetTouchText\n\ llSetTouchText(${1:string text});\n\ snippet llSetVehicleFlags\n\ llSetVehicleFlags(${1:integer flags});\n\ snippet llSetVehicleFloatParam\n\ llSetVehicleFloatParam(${1:integer param}, ${2:float value});\n\ snippet llSetVehicleRotationParam\n\ llSetVehicleRotationParam(${1:integer param}, ${2:rotation rot});\n\ snippet llSetVehicleType\n\ llSetVehicleType(${1:integer type});\n\ snippet llSetVehicleVectorParam\n\ llSetVehicleVectorParam(${1:integer param}, ${2:vector vec});\n\ snippet llSetVelocity\n\ llSetVelocity(${1:vector force}, ${2:integer local});\n\ snippet llSHA1String\n\ llSHA1String(${1:string src})\n\ snippet llShout\n\ llShout(${1:integer channel}, ${2:string msg});\n\ snippet llSin\n\ llSin(${1:float theta})\n\ snippet llSitTarget\n\ llSitTarget(${1:vector offset}, ${2:rotation rot});\n\ snippet llSleep\n\ llSleep(${1:float sec});\n\ snippet llSqrt\n\ llSqrt(${1:float val})\n\ snippet llStartAnimation\n\ llStartAnimation(${1:string anim});\n\ snippet llStopAnimation\n\ llStopAnimation(${1:string anim});\n\ snippet llStopHover\n\ llStopHover();\n\ snippet llStopLookAt\n\ llStopLookAt();\n\ snippet llStopMoveToTarget\n\ llStopMoveToTarget();\n\ snippet llStopSound\n\ llStopSound();\n\ snippet llStringLength\n\ llStringLength(${1:string str})\n\ snippet llStringToBase64\n\ llStringToBase64(${1:string str})\n\ snippet llStringTrim\n\ llStringTrim(${1:string src}, ${2:integer type})\n\ snippet llSubStringIndex\n\ llSubStringIndex(${1:string source}, ${2:string pattern})\n\ snippet llTakeControls\n\ llTakeControls(${1:integer controls}, ${2:integer accept}, ${3:integer pass_on});\n\ snippet llTan\n\ llTan(${1:float theta})\n\ snippet llTarget\n\ llTarget(${1:vector position}, ${2:float range})\n\ snippet llTargetOmega\n\ llTargetOmega(${1:vector axis}, ${2:float spinrate}, ${3:float gain});\n\ snippet llTargetRemove\n\ llTargetRemove(${1:integer handle});\n\ snippet llTeleportAgent\n\ llTeleportAgent(${1:key agent}, ${2:string landmark}, ${3:vector position}, ${4:vector look_at});\n\ snippet llTeleportAgentGlobalCoords\n\ llTeleportAgentGlobalCoords(${1:key agent}, ${2:vector global_coordinates}, ${3:vector region_coordinates}, ${4:vector look_at});\n\ snippet llTeleportAgentHome\n\ llTeleportAgentHome(${1:key agent});\n\ snippet llTextBox\n\ llTextBox(${1:key agent}, ${2:string message}, ${3:integer channel});\n\ snippet llToLower\n\ llToLower(${1:string src})\n\ snippet llToUpper\n\ llToUpper(${1:string src})\n\ snippet llTransferLindenDollars\n\ llTransferLindenDollars(${1:key destination}, ${2:integer amount})\n\ snippet llTriggerSound\n\ llTriggerSound(${1:string sound}, ${2:float volume});\n\ snippet llTriggerSoundLimited\n\ llTriggerSoundLimited(${1:string sound}, ${2:float volume}, ${3:vector top_north_east}, ${4:vector bottom_south_west});\n\ snippet llUnescapeURL\n\ llUnescapeURL(${1:string url})\n\ snippet llUnSit\n\ llUnSit(${1:key id});\n\ snippet llUpdateCharacter\n\ llUpdateCharacter(${1:list options})\n\ snippet llUpdateKeyValue\n\ llUpdateKeyValue(${1:string k}, ${2:string v}, ${3:integer checked}, ${4:string ov})\n\ snippet llVecDist\n\ llVecDist(${1:vector vec_a}, ${2:vector vec_b})\n\ snippet llVecMag\n\ llVecMag(${1:vector vec})\n\ snippet llVecNorm\n\ llVecNorm(${1:vector vec})\n\ snippet llVolumeDetect\n\ llVolumeDetect(${1:integer detect});\n\ snippet llWanderWithin\n\ llWanderWithin(${1:vector origin}, ${2:vector dist}, ${3:list options});\n\ snippet llWater\n\ llWater(${1:vector offset});\n\ snippet llWhisper\n\ llWhisper(${1:integer channel}, ${2:string msg});\n\ snippet llWind\n\ llWind(${1:vector offset});\n\ snippet llXorBase64\n\ llXorBase64(${1:string str1}, ${2:string str2})\n\ snippet money\n\ money(${1:key id}, ${2:integer amount})\n\ {\n\ $0\n\ }\n\ snippet object_rez\n\ object_rez(${1:key id})\n\ {\n\ $0\n\ }\n\ snippet on_rez\n\ on_rez(${1:integer start_param})\n\ {\n\ $0\n\ }\n\ snippet path_update\n\ path_update(${1:integer type}, ${2:list reserved})\n\ {\n\ $0\n\ }\n\ snippet remote_data\n\ remote_data(${1:integer event_type}, ${2:key channel}, ${3:key message_id}, ${4:string sender}, ${5:integer idata}, ${6:string sdata})\n\ {\n\ $0\n\ }\n\ snippet run_time_permissions\n\ run_time_permissions(${1:integer perm})\n\ {\n\ $0\n\ }\n\ snippet sensor\n\ sensor(${1:integer index})\n\ {\n\ $0\n\ }\n\ snippet state\n\ state ${1:name}\n\ snippet touch\n\ touch(${1:integer index})\n\ {\n\ $0\n\ }\n\ snippet touch_end\n\ touch_end(${1:integer index})\n\ {\n\ $0\n\ }\n\ snippet touch_start\n\ touch_start(${1:integer index})\n\ {\n\ $0\n\ }\n\ snippet transaction_result\n\ transaction_result(${1:key id}, ${2:integer success}, ${3:string data})\n\ {\n\ $0\n\ }\n\ snippet while\n\ while (${1:condition})\n\ {\n\ $0\n\ }\n\ "; exports.scope = "lsl"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/lua.js ================================================ ace.define("ace/snippets/lua",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet #!\n\ #!/usr/bin/env lua\n\ $1\n\ snippet local\n\ local ${1:x} = ${2:1}\n\ snippet fun\n\ function ${1:fname}(${2:...})\n\ ${3:-- body}\n\ end\n\ snippet for\n\ for ${1:i}=${2:1},${3:10} do\n\ ${4:print(i)}\n\ end\n\ snippet forp\n\ for ${1:i},${2:v} in pairs(${3:table_name}) do\n\ ${4:-- body}\n\ end\n\ snippet fori\n\ for ${1:i},${2:v} in ipairs(${3:table_name}) do\n\ ${4:-- body}\n\ end\n\ "; exports.scope = "lua"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/luapage.js ================================================ ace.define("ace/snippets/luapage",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "luapage"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/lucene.js ================================================ ace.define("ace/snippets/lucene",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "lucene"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/makefile.js ================================================ ace.define("ace/snippets/makefile",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet ifeq\n\ ifeq (${1:cond0},${2:cond1})\n\ ${3:code}\n\ endif\n\ "; exports.scope = "makefile"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/markdown.js ================================================ ace.define("ace/snippets/markdown",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# Markdown\n\ \n\ # Includes octopress (http://octopress.org/) snippets\n\ \n\ snippet [\n\ [${1:text}](http://${2:address} \"${3:title}\")\n\ snippet [*\n\ [${1:link}](${2:`@*`} \"${3:title}\")${4}\n\ \n\ snippet [:\n\ [${1:id}]: http://${2:url} \"${3:title}\"\n\ snippet [:*\n\ [${1:id}]: ${2:`@*`} \"${3:title}\"\n\ \n\ snippet ![\n\ ![${1:alttext}](${2:/images/image.jpg} \"${3:title}\")\n\ snippet ![*\n\ ![${1:alt}](${2:`@*`} \"${3:title}\")${4}\n\ \n\ snippet ![:\n\ ![${1:id}]: ${2:url} \"${3:title}\"\n\ snippet ![:*\n\ ![${1:id}]: ${2:`@*`} \"${3:title}\"\n\ \n\ snippet ===\n\ regex /^/=+/=*//\n\ ${PREV_LINE/./=/g}\n\ \n\ ${0}\n\ snippet ---\n\ regex /^/-+/-*//\n\ ${PREV_LINE/./-/g}\n\ \n\ ${0}\n\ snippet blockquote\n\ {% blockquote %}\n\ ${1:quote}\n\ {% endblockquote %}\n\ \n\ snippet blockquote-author\n\ {% blockquote ${1:author}, ${2:title} %}\n\ ${3:quote}\n\ {% endblockquote %}\n\ \n\ snippet blockquote-link\n\ {% blockquote ${1:author} ${2:URL} ${3:link_text} %}\n\ ${4:quote}\n\ {% endblockquote %}\n\ \n\ snippet bt-codeblock-short\n\ ```\n\ ${1:code_snippet}\n\ ```\n\ \n\ snippet bt-codeblock-full\n\ ``` ${1:language} ${2:title} ${3:URL} ${4:link_text}\n\ ${5:code_snippet}\n\ ```\n\ \n\ snippet codeblock-short\n\ {% codeblock %}\n\ ${1:code_snippet}\n\ {% endcodeblock %}\n\ \n\ snippet codeblock-full\n\ {% codeblock ${1:title} lang:${2:language} ${3:URL} ${4:link_text} %}\n\ ${5:code_snippet}\n\ {% endcodeblock %}\n\ \n\ snippet gist-full\n\ {% gist ${1:gist_id} ${2:filename} %}\n\ \n\ snippet gist-short\n\ {% gist ${1:gist_id} %}\n\ \n\ snippet img\n\ {% img ${1:class} ${2:URL} ${3:width} ${4:height} ${5:title_text} ${6:alt_text} %}\n\ \n\ snippet youtube\n\ {% youtube ${1:video_id} %}\n\ \n\ # The quote should appear only once in the text. It is inherently part of it.\n\ # See http://octopress.org/docs/plugins/pullquote/ for more info.\n\ \n\ snippet pullquote\n\ {% pullquote %}\n\ ${1:text} {\" ${2:quote} \"} ${3:text}\n\ {% endpullquote %}\n\ "; exports.scope = "markdown"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/mask.js ================================================ ace.define("ace/snippets/mask",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "mask"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/matlab.js ================================================ ace.define("ace/snippets/matlab",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "matlab"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/mel.js ================================================ ace.define("ace/snippets/mel",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "mel"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/mushcode.js ================================================ ace.define("ace/snippets/mushcode",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "mushcode"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/mysql.js ================================================ ace.define("ace/snippets/mysql",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "mysql"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/nix.js ================================================ ace.define("ace/snippets/nix",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "nix"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/objectivec.js ================================================ ace.define("ace/snippets/objectivec",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "objectivec"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/ocaml.js ================================================ ace.define("ace/snippets/ocaml",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "ocaml"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/pascal.js ================================================ ace.define("ace/snippets/pascal",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "pascal"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/perl.js ================================================ ace.define("ace/snippets/perl",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# #!/usr/bin/perl\n\ snippet #!\n\ #!/usr/bin/env perl\n\ \n\ # Hash Pointer\n\ snippet .\n\ =>\n\ # Function\n\ snippet sub\n\ sub ${1:function_name} {\n\ ${2:#body ...}\n\ }\n\ # Conditional\n\ snippet if\n\ if (${1}) {\n\ ${2:# body...}\n\ }\n\ # Conditional if..else\n\ snippet ife\n\ if (${1}) {\n\ ${2:# body...}\n\ }\n\ else {\n\ ${3:# else...}\n\ }\n\ # Conditional if..elsif..else\n\ snippet ifee\n\ if (${1}) {\n\ ${2:# body...}\n\ }\n\ elsif (${3}) {\n\ ${4:# elsif...}\n\ }\n\ else {\n\ ${5:# else...}\n\ }\n\ # Conditional One-line\n\ snippet xif\n\ ${1:expression} if ${2:condition};${3}\n\ # Unless conditional\n\ snippet unless\n\ unless (${1}) {\n\ ${2:# body...}\n\ }\n\ # Unless conditional One-line\n\ snippet xunless\n\ ${1:expression} unless ${2:condition};${3}\n\ # Try/Except\n\ snippet eval\n\ local $@;\n\ eval {\n\ ${1:# do something risky...}\n\ };\n\ if (my $e = $@) {\n\ ${2:# handle failure...}\n\ }\n\ # While Loop\n\ snippet wh\n\ while (${1}) {\n\ ${2:# body...}\n\ }\n\ # While Loop One-line\n\ snippet xwh\n\ ${1:expression} while ${2:condition};${3}\n\ # C-style For Loop\n\ snippet cfor\n\ for (my $${2:var} = 0; $$2 < ${1:count}; $$2${3:++}) {\n\ ${4:# body...}\n\ }\n\ # For loop one-line\n\ snippet xfor\n\ ${1:expression} for @${2:array};${3}\n\ # Foreach Loop\n\ snippet for\n\ foreach my $${1:x} (@${2:array}) {\n\ ${3:# body...}\n\ }\n\ # Foreach Loop One-line\n\ snippet fore\n\ ${1:expression} foreach @${2:array};${3}\n\ # Package\n\ snippet package\n\ package ${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`};\n\ \n\ ${2}\n\ \n\ 1;\n\ \n\ __END__\n\ # Package syntax perl >= 5.14\n\ snippet packagev514\n\ package ${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`} ${2:0.99};\n\ \n\ ${3}\n\ \n\ 1;\n\ \n\ __END__\n\ #moose\n\ snippet moose\n\ use Moose;\n\ use namespace::autoclean;\n\ ${1:#}BEGIN {extends '${2:ParentClass}'};\n\ \n\ ${3}\n\ # parent\n\ snippet parent\n\ use parent qw(${1:Parent Class});\n\ # Read File\n\ snippet slurp\n\ my $${1:var} = do { local $/; open my $file, '<', \"${2:file}\"; <$file> };\n\ ${3}\n\ # strict warnings\n\ snippet strwar\n\ use strict;\n\ use warnings;\n\ # older versioning with perlcritic bypass\n\ snippet vers\n\ ## no critic\n\ our $VERSION = '${1:version}';\n\ eval $VERSION;\n\ ## use critic\n\ # new 'switch' like feature\n\ snippet switch\n\ use feature 'switch';\n\ \n\ # Anonymous subroutine\n\ snippet asub\n\ sub {\n\ ${1:# body }\n\ }\n\ \n\ \n\ \n\ # Begin block\n\ snippet begin\n\ BEGIN {\n\ ${1:# begin body}\n\ }\n\ \n\ # call package function with some parameter\n\ snippet pkgmv\n\ __PACKAGE__->${1:package_method}(${2:var})\n\ \n\ # call package function without a parameter\n\ snippet pkgm\n\ __PACKAGE__->${1:package_method}()\n\ \n\ # call package \"get_\" function without a parameter\n\ snippet pkget\n\ __PACKAGE__->get_${1:package_method}()\n\ \n\ # call package function with a parameter\n\ snippet pkgetv\n\ __PACKAGE__->get_${1:package_method}(${2:var})\n\ \n\ # complex regex\n\ snippet qrx\n\ qr/\n\ ${1:regex}\n\ /xms\n\ \n\ #simpler regex\n\ snippet qr/\n\ qr/${1:regex}/x\n\ \n\ #given\n\ snippet given\n\ given ($${1:var}) {\n\ ${2:# cases}\n\ ${3:# default}\n\ }\n\ \n\ # switch-like case\n\ snippet when\n\ when (${1:case}) {\n\ ${2:# body}\n\ }\n\ \n\ # hash slice\n\ snippet hslice\n\ @{ ${1:hash} }{ ${2:array} }\n\ \n\ \n\ # map\n\ snippet map\n\ map { ${2: body } } ${1: @array } ;\n\ \n\ \n\ \n\ # Pod stub\n\ snippet ppod\n\ =head1 NAME\n\ \n\ ${1:ClassName} - ${2:ShortDesc}\n\ \n\ =head1 SYNOPSIS\n\ \n\ use $1;\n\ \n\ ${3:# synopsis...}\n\ \n\ =head1 DESCRIPTION\n\ \n\ ${4:# longer description...}\n\ \n\ \n\ =head1 INTERFACE\n\ \n\ \n\ =head1 DEPENDENCIES\n\ \n\ \n\ =head1 SEE ALSO\n\ \n\ \n\ # Heading for a subroutine stub\n\ snippet psub\n\ =head2 ${1:MethodName}\n\ \n\ ${2:Summary....}\n\ \n\ # Heading for inline subroutine pod\n\ snippet psubi\n\ =head2 ${1:MethodName}\n\ \n\ ${2:Summary...}\n\ \n\ \n\ =cut\n\ # inline documented subroutine\n\ snippet subpod\n\ =head2 $1\n\ \n\ Summary of $1\n\ \n\ =cut\n\ \n\ sub ${1:subroutine_name} {\n\ ${2:# body...}\n\ }\n\ # Subroutine signature\n\ snippet parg\n\ =over 2\n\ \n\ =item\n\ Arguments\n\ \n\ \n\ =over 3\n\ \n\ =item\n\ C<${1:DataStructure}>\n\ \n\ ${2:Sample}\n\ \n\ \n\ =back\n\ \n\ \n\ =item\n\ Return\n\ \n\ =over 3\n\ \n\ \n\ =item\n\ C<${3:...return data}>\n\ \n\ \n\ =back\n\ \n\ \n\ =back\n\ \n\ \n\ \n\ # Moose has\n\ snippet has\n\ has ${1:attribute} => (\n\ is => '${2:ro|rw}',\n\ isa => '${3:Str|Int|HashRef|ArrayRef|etc}',\n\ default => sub {\n\ ${4:defaultvalue}\n\ },\n\ ${5:# other attributes}\n\ );\n\ \n\ \n\ # override\n\ snippet override\n\ override ${1:attribute} => sub {\n\ ${2:# my $self = shift;};\n\ ${3:# my ($self, $args) = @_;};\n\ };\n\ \n\ \n\ # use test classes\n\ snippet tuse\n\ use Test::More;\n\ use Test::Deep; # (); # uncomment to stop prototype errors\n\ use Test::Exception;\n\ \n\ # local test lib\n\ snippet tlib\n\ use lib qw{ ./t/lib };\n\ \n\ #test methods\n\ snippet tmeths\n\ $ENV{TEST_METHOD} = '${1:regex}';\n\ \n\ # runtestclass\n\ snippet trunner\n\ use ${1:test_class};\n\ $1->runtests();\n\ \n\ # Test::Class-style test\n\ snippet tsub\n\ sub t${1:number}_${2:test_case} :Test(${3:num_of_tests}) {\n\ my $self = shift;\n\ ${4:# body}\n\ \n\ }\n\ \n\ # Test::Routine-style test\n\ snippet trsub\n\ test ${1:test_name} => { description => '${2:Description of test.}'} => sub {\n\ my ($self) = @_;\n\ ${3:# test code}\n\ };\n\ \n\ #prep test method\n\ snippet tprep\n\ sub prep${1:number}_${2:test_case} :Test(startup) {\n\ my $self = shift;\n\ ${4:# body}\n\ }\n\ \n\ # cause failures to print stack trace\n\ snippet debug_trace\n\ use Carp; # 'verbose';\n\ # cloak \"die\"\n\ # warn \"warning\"\n\ $SIG{'__DIE__'} = sub {\n\ require Carp; Carp::confess\n\ };\n\ \n\ "; exports.scope = "perl"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/pgsql.js ================================================ ace.define("ace/snippets/pgsql",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "pgsql"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/php.js ================================================ ace.define("ace/snippets/php",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet \n\ # this one is for php5.4\n\ snippet \n\ snippet ns\n\ namespace ${1:Foo\\Bar\\Baz};\n\ ${2}\n\ snippet use\n\ use ${1:Foo\\Bar\\Baz};\n\ ${2}\n\ snippet c\n\ ${1:abstract }class ${2:$FILENAME}\n\ {\n\ ${3}\n\ }\n\ snippet i\n\ interface ${1:$FILENAME}\n\ {\n\ ${2}\n\ }\n\ snippet t.\n\ $this->${1}\n\ snippet f\n\ function ${1:foo}(${2:array }${3:$bar})\n\ {\n\ ${4}\n\ }\n\ # method\n\ snippet m\n\ ${1:abstract }${2:protected}${3: static} function ${4:foo}(${5:array }${6:$bar})\n\ {\n\ ${7}\n\ }\n\ # setter method\n\ snippet sm \n\ ${5:public} function set${6:$2}(${7:$2 }$$1)\n\ {\n\ $this->${8:$1} = $$1;\n\ return $this;\n\ }${9}\n\ # getter method\n\ snippet gm\n\ ${3:public} function get${4:$2}()\n\ {\n\ return $this->${5:$1};\n\ }${6}\n\ #setter\n\ snippet $s\n\ ${1:$foo}->set${2:Bar}(${3});\n\ #getter\n\ snippet $g\n\ ${1:$foo}->get${2:Bar}();\n\ \n\ # Tertiary conditional\n\ snippet =?:\n\ $${1:foo} = ${2:true} ? ${3:a} : ${4};\n\ snippet ?:\n\ ${1:true} ? ${2:a} : ${3}\n\ \n\ snippet C\n\ $_COOKIE['${1:variable}']${2}\n\ snippet E\n\ $_ENV['${1:variable}']${2}\n\ snippet F\n\ $_FILES['${1:variable}']${2}\n\ snippet G\n\ $_GET['${1:variable}']${2}\n\ snippet P\n\ $_POST['${1:variable}']${2}\n\ snippet R\n\ $_REQUEST['${1:variable}']${2}\n\ snippet S\n\ $_SERVER['${1:variable}']${2}\n\ snippet SS\n\ $_SESSION['${1:variable}']${2}\n\ \n\ # the following are old ones\n\ snippet inc\n\ include '${1:file}';${2}\n\ snippet inc1\n\ include_once '${1:file}';${2}\n\ snippet req\n\ require '${1:file}';${2}\n\ snippet req1\n\ require_once '${1:file}';${2}\n\ # Start Docblock\n\ snippet /*\n\ # Class - post doc\n\ snippet doc_cp${5}\n\ # Class Variable - post doc\n\ snippet doc_vp${3}\n\ # Class Variable\n\ snippet doc_v\n\ ${1:var} $${2};${5}\n\ # Class\n\ snippet doc_c\n\ ${1:}class ${2:}\n\ {\n\ ${7}\n\ } // END $1class $2\n\ # Constant Definition - post doc\n\ snippet doc_dp${2}\n\ # Constant Definition\n\ snippet doc_d\n\ ace.define(${1}, ${2});${4}\n\ # Function - post doc\n\ snippet doc_fp${4}\n\ # Function signature\n\ snippet doc_s\n\ ${1}function ${2}(${3});${7}\n\ # Function\n\ snippet doc_f\n\ ${1}function ${2}(${3})\n\ {${7}\n\ }\n\ # Header\n\ snippet doc_h\n\ \n\ # Interface\n\ snippet interface\n\ interface ${1:$FILENAME}\n\ {\n\ ${5}\n\ }\n\ # class ...\n\ snippet class\n\ class ${2:$FILENAME}\n\ {\n\ ${3}\n\ ${5:public} function ${6:__construct}(${7:argument})\n\ {\n\ ${8:// code...}\n\ }\n\ }\n\ # ace.define(...)\n\ snippet def\n\ ace.define('${1}'${2});${3}\n\ # defined(...)\n\ snippet def?\n\ ${1}defined('${2}')${3}\n\ snippet wh\n\ while (${1:/* condition */}) {\n\ ${2:// code...}\n\ }\n\ # do ... while\n\ snippet do\n\ do {\n\ ${2:// code... }\n\ } while (${1:/* condition */});\n\ snippet if\n\ if (${1:/* condition */}) {\n\ ${2:// code...}\n\ }\n\ snippet ifil\n\ \n\ ${2:}\n\ \n\ snippet ife\n\ if (${1:/* condition */}) {\n\ ${2:// code...}\n\ } else {\n\ ${3:// code...}\n\ }\n\ ${4}\n\ snippet ifeil\n\ \n\ ${2:}\n\ \n\ ${3:}\n\ \n\ ${4}\n\ snippet else\n\ else {\n\ ${1:// code...}\n\ }\n\ snippet elseif\n\ elseif (${1:/* condition */}) {\n\ ${2:// code...}\n\ }\n\ snippet switch\n\ switch ($${1:variable}) {\n\ case '${2:value}':\n\ ${3:// code...}\n\ break;\n\ ${5}\n\ default:\n\ ${4:// code...}\n\ break;\n\ }\n\ snippet case\n\ case '${1:value}':\n\ ${2:// code...}\n\ break;${3}\n\ snippet for\n\ for ($${2:i} = 0; $$2 < ${1:count}; $$2${3:++}) {\n\ ${4: // code...}\n\ }\n\ snippet foreach\n\ foreach ($${1:variable} as $${2:value}) {\n\ ${3:// code...}\n\ }\n\ snippet foreachil\n\ \n\ ${3:}\n\ \n\ snippet foreachk\n\ foreach ($${1:variable} as $${2:key} => $${3:value}) {\n\ ${4:// code...}\n\ }\n\ snippet foreachkil\n\ $${3:value}): ?>\n\ ${4:}\n\ \n\ # $... = array (...)\n\ snippet array\n\ $${1:arrayName} = array('${2}' => ${3});${4}\n\ snippet try\n\ try {\n\ ${2}\n\ } catch (${1:Exception} $e) {\n\ }\n\ # lambda with closure\n\ snippet lambda\n\ ${1:static }function (${2:args}) use (${3:&$x, $y /*put vars in scope (closure) */}) {\n\ ${4}\n\ };\n\ # pre_dump();\n\ snippet pd\n\ echo '
    '; var_dump(${1}); echo '
    ';\n\ # pre_dump(); die();\n\ snippet pdd\n\ echo '
    '; var_dump(${1}); echo '
    '; die(${2:});\n\ snippet vd\n\ var_dump(${1});\n\ snippet vdd\n\ var_dump(${1}); die(${2:});\n\ snippet http_redirect\n\ header (\"HTTP/1.1 301 Moved Permanently\"); \n\ header (\"Location: \".URL); \n\ exit();\n\ # Getters & Setters\n\ snippet gs\n\ public function get${3:$2}()\n\ {\n\ return $this->${4:$1};\n\ }\n\ public function set$3(${7:$2 }$$1)\n\ {\n\ $this->$4 = $$1;\n\ return $this;\n\ }${8}\n\ # anotation, get, and set, useful for doctrine\n\ snippet ags\n\ ${2:protected} $${3:foo};\n\ \n\ public function get${4:$3}()\n\ {\n\ return $this->$3;\n\ }\n\ \n\ public function set$4(${5:$4 }$${6:$3})\n\ {\n\ $this->$3 = $$6;\n\ return $this;\n\ }\n\ snippet rett\n\ return true;\n\ snippet retf\n\ return false;\n\ "; exports.scope = "php"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/plain_text.js ================================================ ace.define("ace/snippets/plain_text",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "plain_text"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/powershell.js ================================================ ace.define("ace/snippets/powershell",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "powershell"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/praat.js ================================================ ace.define("ace/snippets/praat",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "praat"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/prolog.js ================================================ ace.define("ace/snippets/prolog",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "prolog"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/properties.js ================================================ ace.define("ace/snippets/properties",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "properties"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/protobuf.js ================================================ ace.define("ace/snippets/protobuf",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = ""; exports.scope = "protobuf"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/python.js ================================================ ace.define("ace/snippets/python",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet #!\n\ #!/usr/bin/env python\n\ snippet imp\n\ import ${1:module}\n\ snippet from\n\ from ${1:package} import ${2:module}\n\ # Module Docstring\n\ snippet docs\n\ '''\n\ File: ${1:FILENAME:file_name}\n\ Author: ${2:author}\n\ Description: ${3}\n\ '''\n\ snippet wh\n\ while ${1:condition}:\n\ ${2:# TODO: write code...}\n\ # dowh - does the same as do...while in other languages\n\ snippet dowh\n\ while True:\n\ ${1:# TODO: write code...}\n\ if ${2:condition}:\n\ break\n\ snippet with\n\ with ${1:expr} as ${2:var}:\n\ ${3:# TODO: write code...}\n\ # New Class\n\ snippet cl\n\ class ${1:ClassName}(${2:object}):\n\ \"\"\"${3:docstring for $1}\"\"\"\n\ def __init__(self, ${4:arg}):\n\ ${5:super($1, self).__init__()}\n\ self.$4 = $4\n\ ${6}\n\ # New Function\n\ snippet def\n\ def ${1:fname}(${2:`indent('.') ? 'self' : ''`}):\n\ \"\"\"${3:docstring for $1}\"\"\"\n\ ${4:# TODO: write code...}\n\ snippet deff\n\ def ${1:fname}(${2:`indent('.') ? 'self' : ''`}):\n\ ${3:# TODO: write code...}\n\ # New Method\n\ snippet defs\n\ def ${1:mname}(self, ${2:arg}):\n\ ${3:# TODO: write code...}\n\ # New Property\n\ snippet property\n\ def ${1:foo}():\n\ doc = \"${2:The $1 property.}\"\n\ def fget(self):\n\ ${3:return self._$1}\n\ def fset(self, value):\n\ ${4:self._$1 = value}\n\ # Ifs\n\ snippet if\n\ if ${1:condition}:\n\ ${2:# TODO: write code...}\n\ snippet el\n\ else:\n\ ${1:# TODO: write code...}\n\ snippet ei\n\ elif ${1:condition}:\n\ ${2:# TODO: write code...}\n\ # For\n\ snippet for\n\ for ${1:item} in ${2:items}:\n\ ${3:# TODO: write code...}\n\ # Encodes\n\ snippet cutf8\n\ # -*- coding: utf-8 -*-\n\ snippet clatin1\n\ # -*- coding: latin-1 -*-\n\ snippet cascii\n\ # -*- coding: ascii -*-\n\ # Lambda\n\ snippet ld\n\ ${1:var} = lambda ${2:vars} : ${3:action}\n\ snippet .\n\ self.\n\ snippet try Try/Except\n\ try:\n\ ${1:# TODO: write code...}\n\ except ${2:Exception}, ${3:e}:\n\ ${4:raise $3}\n\ snippet try Try/Except/Else\n\ try:\n\ ${1:# TODO: write code...}\n\ except ${2:Exception}, ${3:e}:\n\ ${4:raise $3}\n\ else:\n\ ${5:# TODO: write code...}\n\ snippet try Try/Except/Finally\n\ try:\n\ ${1:# TODO: write code...}\n\ except ${2:Exception}, ${3:e}:\n\ ${4:raise $3}\n\ finally:\n\ ${5:# TODO: write code...}\n\ snippet try Try/Except/Else/Finally\n\ try:\n\ ${1:# TODO: write code...}\n\ except ${2:Exception}, ${3:e}:\n\ ${4:raise $3}\n\ else:\n\ ${5:# TODO: write code...}\n\ finally:\n\ ${6:# TODO: write code...}\n\ # if __name__ == '__main__':\n\ snippet ifmain\n\ if __name__ == '__main__':\n\ ${1:main()}\n\ # __magic__\n\ snippet _\n\ __${1:init}__${2}\n\ # python debugger (pdb)\n\ snippet pdb\n\ import pdb; pdb.set_trace()\n\ # ipython debugger (ipdb)\n\ snippet ipdb\n\ import ipdb; ipdb.set_trace()\n\ # ipython debugger (pdbbb)\n\ snippet pdbbb\n\ import pdbpp; pdbpp.set_trace()\n\ snippet pprint\n\ import pprint; pprint.pprint(${1})${2}\n\ snippet \"\n\ \"\"\"\n\ ${1:doc}\n\ \"\"\"\n\ # test function/method\n\ snippet test\n\ def test_${1:description}(${2:self}):\n\ ${3:# TODO: write code...}\n\ # test case\n\ snippet testcase\n\ class ${1:ExampleCase}(unittest.TestCase):\n\ \n\ def test_${2:description}(self):\n\ ${3:# TODO: write code...}\n\ snippet fut\n\ from __future__ import ${1}\n\ #getopt\n\ snippet getopt\n\ try:\n\ # Short option syntax: \"hv:\"\n\ # Long option syntax: \"help\" or \"verbose=\"\n\ opts, args = getopt.getopt(sys.argv[1:], \"${1:short_options}\", [${2:long_options}])\n\ \n\ except getopt.GetoptError, err:\n\ # Print debug info\n\ print str(err)\n\ ${3:error_action}\n\ \n\ for option, argument in opts:\n\ if option in (\"-h\", \"--help\"):\n\ ${4}\n\ elif option in (\"-v\", \"--verbose\"):\n\ verbose = argument\n\ "; exports.scope = "python"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/r.js ================================================ ace.define("ace/snippets/r",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet #!\n\ #!/usr/bin/env Rscript\n\ \n\ # includes\n\ snippet lib\n\ library(${1:package})\n\ snippet req\n\ require(${1:package})\n\ snippet source\n\ source('${1:file}')\n\ \n\ # conditionals\n\ snippet if\n\ if (${1:condition}) {\n\ ${2:code}\n\ }\n\ snippet el\n\ else {\n\ ${1:code}\n\ }\n\ snippet ei\n\ else if (${1:condition}) {\n\ ${2:code}\n\ }\n\ \n\ # functions\n\ snippet fun\n\ ${1:name} = function (${2:variables}) {\n\ ${3:code}\n\ }\n\ snippet ret\n\ return(${1:code})\n\ \n\ # dataframes, lists, etc\n\ snippet df\n\ ${1:name}[${2:rows}, ${3:cols}]\n\ snippet c\n\ c(${1:items})\n\ snippet li\n\ list(${1:items})\n\ snippet mat\n\ matrix(${1:data}, nrow=${2:rows}, ncol=${3:cols})\n\ \n\ # apply functions\n\ snippet apply\n\ apply(${1:array}, ${2:margin}, ${3:function})\n\ snippet lapply\n\ lapply(${1:list}, ${2:function})\n\ snippet sapply\n\ lapply(${1:list}, ${2:function})\n\ snippet vapply\n\ vapply(${1:list}, ${2:function}, ${3:type})\n\ snippet mapply\n\ mapply(${1:function}, ${2:...})\n\ snippet tapply\n\ tapply(${1:vector}, ${2:index}, ${3:function})\n\ snippet rapply\n\ rapply(${1:list}, ${2:function})\n\ \n\ # plyr functions\n\ snippet dd\n\ ddply(${1:frame}, ${2:variables}, ${3:function})\n\ snippet dl\n\ dlply(${1:frame}, ${2:variables}, ${3:function})\n\ snippet da\n\ daply(${1:frame}, ${2:variables}, ${3:function})\n\ snippet d_\n\ d_ply(${1:frame}, ${2:variables}, ${3:function})\n\ \n\ snippet ad\n\ adply(${1:array}, ${2:margin}, ${3:function})\n\ snippet al\n\ alply(${1:array}, ${2:margin}, ${3:function})\n\ snippet aa\n\ aaply(${1:array}, ${2:margin}, ${3:function})\n\ snippet a_\n\ a_ply(${1:array}, ${2:margin}, ${3:function})\n\ \n\ snippet ld\n\ ldply(${1:list}, ${2:function})\n\ snippet ll\n\ llply(${1:list}, ${2:function})\n\ snippet la\n\ laply(${1:list}, ${2:function})\n\ snippet l_\n\ l_ply(${1:list}, ${2:function})\n\ \n\ snippet md\n\ mdply(${1:matrix}, ${2:function})\n\ snippet ml\n\ mlply(${1:matrix}, ${2:function})\n\ snippet ma\n\ maply(${1:matrix}, ${2:function})\n\ snippet m_\n\ m_ply(${1:matrix}, ${2:function})\n\ \n\ # plot functions\n\ snippet pl\n\ plot(${1:x}, ${2:y})\n\ snippet ggp\n\ ggplot(${1:data}, aes(${2:aesthetics}))\n\ snippet img\n\ ${1:(jpeg,bmp,png,tiff)}(filename=\"${2:filename}\", width=${3}, height=${4}, unit=\"${5}\")\n\ ${6:plot}\n\ dev.off()\n\ \n\ # statistical test functions\n\ snippet fis\n\ fisher.test(${1:x}, ${2:y})\n\ snippet chi\n\ chisq.test(${1:x}, ${2:y})\n\ snippet tt\n\ t.test(${1:x}, ${2:y})\n\ snippet wil\n\ wilcox.test(${1:x}, ${2:y})\n\ snippet cor\n\ cor.test(${1:x}, ${2:y})\n\ snippet fte\n\ var.test(${1:x}, ${2:y})\n\ snippet kvt \n\ kv.test(${1:x}, ${2:y})\n\ "; exports.scope = "r"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/rdoc.js ================================================ ace.define("ace/snippets/rdoc",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "rdoc"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/rhtml.js ================================================ ace.define("ace/snippets/rhtml",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "rhtml"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/ruby.js ================================================ ace.define("ace/snippets/ruby",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "########################################\n\ # Ruby snippets - for Rails, see below #\n\ ########################################\n\ \n\ # encoding for Ruby 1.9\n\ snippet enc\n\ # encoding: utf-8\n\ \n\ # #!/usr/bin/env ruby\n\ snippet #!\n\ #!/usr/bin/env ruby\n\ # encoding: utf-8\n\ \n\ # New Block\n\ snippet =b\n\ =begin rdoc\n\ ${1}\n\ =end\n\ snippet y\n\ :yields: ${1:arguments}\n\ snippet rb\n\ #!/usr/bin/env ruby -wKU\n\ snippet beg\n\ begin\n\ ${3}\n\ rescue ${1:Exception} => ${2:e}\n\ end\n\ \n\ snippet req require\n\ require \"${1}\"${2}\n\ snippet #\n\ # =>\n\ snippet end\n\ __END__\n\ snippet case\n\ case ${1:object}\n\ when ${2:condition}\n\ ${3}\n\ end\n\ snippet when\n\ when ${1:condition}\n\ ${2}\n\ snippet def\n\ def ${1:method_name}\n\ ${2}\n\ end\n\ snippet deft\n\ def test_${1:case_name}\n\ ${2}\n\ end\n\ snippet if\n\ if ${1:condition}\n\ ${2}\n\ end\n\ snippet ife\n\ if ${1:condition}\n\ ${2}\n\ else\n\ ${3}\n\ end\n\ snippet elsif\n\ elsif ${1:condition}\n\ ${2}\n\ snippet unless\n\ unless ${1:condition}\n\ ${2}\n\ end\n\ snippet while\n\ while ${1:condition}\n\ ${2}\n\ end\n\ snippet for\n\ for ${1:e} in ${2:c}\n\ ${3}\n\ end\n\ snippet until\n\ until ${1:condition}\n\ ${2}\n\ end\n\ snippet cla class .. end\n\ class ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\ ${2}\n\ end\n\ snippet cla class .. initialize .. end\n\ class ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\ def initialize(${2:args})\n\ ${3}\n\ end\n\ end\n\ snippet cla class .. < ParentClass .. initialize .. end\n\ class ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`} < ${2:ParentClass}\n\ def initialize(${3:args})\n\ ${4}\n\ end\n\ end\n\ snippet cla ClassName = Struct .. do .. end\n\ ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`} = Struct.new(:${2:attr_names}) do\n\ def ${3:method_name}\n\ ${4}\n\ end\n\ end\n\ snippet cla class BlankSlate .. initialize .. end\n\ class ${1:BlankSlate}\n\ instance_methods.each { |meth| undef_method(meth) unless meth =~ /\\A__/ }\n\ end\n\ snippet cla class << self .. end\n\ class << ${1:self}\n\ ${2}\n\ end\n\ # class .. < DelegateClass .. initialize .. end\n\ snippet cla-\n\ class ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`} < DelegateClass(${2:ParentClass})\n\ def initialize(${3:args})\n\ super(${4:del_obj})\n\ \n\ ${5}\n\ end\n\ end\n\ snippet mod module .. end\n\ module ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\ ${2}\n\ end\n\ snippet mod module .. module_function .. end\n\ module ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\ module_function\n\ \n\ ${2}\n\ end\n\ snippet mod module .. ClassMethods .. end\n\ module ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\ module ClassMethods\n\ ${2}\n\ end\n\ \n\ module InstanceMethods\n\ \n\ end\n\ \n\ def self.included(receiver)\n\ receiver.extend ClassMethods\n\ receiver.send :include, InstanceMethods\n\ end\n\ end\n\ # attr_reader\n\ snippet r\n\ attr_reader :${1:attr_names}\n\ # attr_writer\n\ snippet w\n\ attr_writer :${1:attr_names}\n\ # attr_accessor\n\ snippet rw\n\ attr_accessor :${1:attr_names}\n\ snippet atp\n\ attr_protected :${1:attr_names}\n\ snippet ata\n\ attr_accessible :${1:attr_names}\n\ # include Enumerable\n\ snippet Enum\n\ include Enumerable\n\ \n\ def each(&block)\n\ ${1}\n\ end\n\ # include Comparable\n\ snippet Comp\n\ include Comparable\n\ \n\ def <=>(other)\n\ ${1}\n\ end\n\ # extend Forwardable\n\ snippet Forw-\n\ extend Forwardable\n\ # def self\n\ snippet defs\n\ def self.${1:class_method_name}\n\ ${2}\n\ end\n\ # def method_missing\n\ snippet defmm\n\ def method_missing(meth, *args, &blk)\n\ ${1}\n\ end\n\ snippet defd\n\ def_delegator :${1:@del_obj}, :${2:del_meth}, :${3:new_name}\n\ snippet defds\n\ def_delegators :${1:@del_obj}, :${2:del_methods}\n\ snippet am\n\ alias_method :${1:new_name}, :${2:old_name}\n\ snippet app\n\ if __FILE__ == $PROGRAM_NAME\n\ ${1}\n\ end\n\ # usage_if()\n\ snippet usai\n\ if ARGV.${1}\n\ abort \"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\"${3}\n\ end\n\ # usage_unless()\n\ snippet usau\n\ unless ARGV.${1}\n\ abort \"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\"${3}\n\ end\n\ snippet array\n\ Array.new(${1:10}) { |${2:i}| ${3} }\n\ snippet hash\n\ Hash.new { |${1:hash}, ${2:key}| $1[$2] = ${3} }\n\ snippet file File.foreach() { |line| .. }\n\ File.foreach(${1:\"path/to/file\"}) { |${2:line}| ${3} }\n\ snippet file File.read()\n\ File.read(${1:\"path/to/file\"})${2}\n\ snippet Dir Dir.global() { |file| .. }\n\ Dir.glob(${1:\"dir/glob/*\"}) { |${2:file}| ${3} }\n\ snippet Dir Dir[\"..\"]\n\ Dir[${1:\"glob/**/*.rb\"}]${2}\n\ snippet dir\n\ Filename.dirname(__FILE__)\n\ snippet deli\n\ delete_if { |${1:e}| ${2} }\n\ snippet fil\n\ fill(${1:range}) { |${2:i}| ${3} }\n\ # flatten_once()\n\ snippet flao\n\ inject(Array.new) { |${1:arr}, ${2:a}| $1.push(*$2)}${3}\n\ snippet zip\n\ zip(${1:enums}) { |${2:row}| ${3} }\n\ # downto(0) { |n| .. }\n\ snippet dow\n\ downto(${1:0}) { |${2:n}| ${3} }\n\ snippet ste\n\ step(${1:2}) { |${2:n}| ${3} }\n\ snippet tim\n\ times { |${1:n}| ${2} }\n\ snippet upt\n\ upto(${1:1.0/0.0}) { |${2:n}| ${3} }\n\ snippet loo\n\ loop { ${1} }\n\ snippet ea\n\ each { |${1:e}| ${2} }\n\ snippet ead\n\ each do |${1:e}|\n\ ${2}\n\ end\n\ snippet eab\n\ each_byte { |${1:byte}| ${2} }\n\ snippet eac- each_char { |chr| .. }\n\ each_char { |${1:chr}| ${2} }\n\ snippet eac- each_cons(..) { |group| .. }\n\ each_cons(${1:2}) { |${2:group}| ${3} }\n\ snippet eai\n\ each_index { |${1:i}| ${2} }\n\ snippet eaid\n\ each_index do |${1:i}|\n\ ${2}\n\ end\n\ snippet eak\n\ each_key { |${1:key}| ${2} }\n\ snippet eakd\n\ each_key do |${1:key}|\n\ ${2}\n\ end\n\ snippet eal\n\ each_line { |${1:line}| ${2} }\n\ snippet eald\n\ each_line do |${1:line}|\n\ ${2}\n\ end\n\ snippet eap\n\ each_pair { |${1:name}, ${2:val}| ${3} }\n\ snippet eapd\n\ each_pair do |${1:name}, ${2:val}|\n\ ${3}\n\ end\n\ snippet eas-\n\ each_slice(${1:2}) { |${2:group}| ${3} }\n\ snippet easd-\n\ each_slice(${1:2}) do |${2:group}|\n\ ${3}\n\ end\n\ snippet eav\n\ each_value { |${1:val}| ${2} }\n\ snippet eavd\n\ each_value do |${1:val}|\n\ ${2}\n\ end\n\ snippet eawi\n\ each_with_index { |${1:e}, ${2:i}| ${3} }\n\ snippet eawid\n\ each_with_index do |${1:e},${2:i}|\n\ ${3}\n\ end\n\ snippet reve\n\ reverse_each { |${1:e}| ${2} }\n\ snippet reved\n\ reverse_each do |${1:e}|\n\ ${2}\n\ end\n\ snippet inj\n\ inject(${1:init}) { |${2:mem}, ${3:var}| ${4} }\n\ snippet injd\n\ inject(${1:init}) do |${2:mem}, ${3:var}|\n\ ${4}\n\ end\n\ snippet map\n\ map { |${1:e}| ${2} }\n\ snippet mapd\n\ map do |${1:e}|\n\ ${2}\n\ end\n\ snippet mapwi-\n\ enum_with_index.map { |${1:e}, ${2:i}| ${3} }\n\ snippet sor\n\ sort { |a, b| ${1} }\n\ snippet sorb\n\ sort_by { |${1:e}| ${2} }\n\ snippet ran\n\ sort_by { rand }\n\ snippet all\n\ all? { |${1:e}| ${2} }\n\ snippet any\n\ any? { |${1:e}| ${2} }\n\ snippet cl\n\ classify { |${1:e}| ${2} }\n\ snippet col\n\ collect { |${1:e}| ${2} }\n\ snippet cold\n\ collect do |${1:e}|\n\ ${2}\n\ end\n\ snippet det\n\ detect { |${1:e}| ${2} }\n\ snippet detd\n\ detect do |${1:e}|\n\ ${2}\n\ end\n\ snippet fet\n\ fetch(${1:name}) { |${2:key}| ${3} }\n\ snippet fin\n\ find { |${1:e}| ${2} }\n\ snippet find\n\ find do |${1:e}|\n\ ${2}\n\ end\n\ snippet fina\n\ find_all { |${1:e}| ${2} }\n\ snippet finad\n\ find_all do |${1:e}|\n\ ${2}\n\ end\n\ snippet gre\n\ grep(${1:/pattern/}) { |${2:match}| ${3} }\n\ snippet sub\n\ ${1:g}sub(${2:/pattern/}) { |${3:match}| ${4} }\n\ snippet sca\n\ scan(${1:/pattern/}) { |${2:match}| ${3} }\n\ snippet scad\n\ scan(${1:/pattern/}) do |${2:match}|\n\ ${3}\n\ end\n\ snippet max\n\ max { |a, b| ${1} }\n\ snippet min\n\ min { |a, b| ${1} }\n\ snippet par\n\ partition { |${1:e}| ${2} }\n\ snippet pard\n\ partition do |${1:e}|\n\ ${2}\n\ end\n\ snippet rej\n\ reject { |${1:e}| ${2} }\n\ snippet rejd\n\ reject do |${1:e}|\n\ ${2}\n\ end\n\ snippet sel\n\ select { |${1:e}| ${2} }\n\ snippet seld\n\ select do |${1:e}|\n\ ${2}\n\ end\n\ snippet lam\n\ lambda { |${1:args}| ${2} }\n\ snippet doo\n\ do\n\ ${1}\n\ end\n\ snippet dov\n\ do |${1:variable}|\n\ ${2}\n\ end\n\ snippet :\n\ :${1:key} => ${2:\"value\"}${3}\n\ snippet ope\n\ open(${1:\"path/or/url/or/pipe\"}, \"${2:w}\") { |${3:io}| ${4} }\n\ # path_from_here()\n\ snippet fpath\n\ File.join(File.dirname(__FILE__), *%2[${1:rel path here}])${2}\n\ # unix_filter {}\n\ snippet unif\n\ ARGF.each_line${1} do |${2:line}|\n\ ${3}\n\ end\n\ # option_parse {}\n\ snippet optp\n\ require \"optparse\"\n\ \n\ options = {${1:default => \"args\"}}\n\ \n\ ARGV.options do |opts|\n\ opts.banner = \"Usage: #{File.basename($PROGRAM_NAME)}\n\ snippet opt\n\ opts.on( \"-${1:o}\", \"--${2:long-option-name}\", ${3:String},\n\ \"${4:Option description.}\") do |${5:opt}|\n\ ${6}\n\ end\n\ snippet tc\n\ require \"test/unit\"\n\ \n\ require \"${1:library_file_name}\"\n\ \n\ class Test${2:$1} < Test::Unit::TestCase\n\ def test_${3:case_name}\n\ ${4}\n\ end\n\ end\n\ snippet ts\n\ require \"test/unit\"\n\ \n\ require \"tc_${1:test_case_file}\"\n\ require \"tc_${2:test_case_file}\"${3}\n\ snippet as\n\ assert ${1:test}, \"${2:Failure message.}\"${3}\n\ snippet ase\n\ assert_equal ${1:expected}, ${2:actual}${3}\n\ snippet asne\n\ assert_not_equal ${1:unexpected}, ${2:actual}${3}\n\ snippet asid\n\ assert_in_delta ${1:expected_float}, ${2:actual_float}, ${3:2 ** -20}${4}\n\ snippet asio\n\ assert_instance_of ${1:ExpectedClass}, ${2:actual_instance}${3}\n\ snippet asko\n\ assert_kind_of ${1:ExpectedKind}, ${2:actual_instance}${3}\n\ snippet asn\n\ assert_nil ${1:instance}${2}\n\ snippet asnn\n\ assert_not_nil ${1:instance}${2}\n\ snippet asm\n\ assert_match /${1:expected_pattern}/, ${2:actual_string}${3}\n\ snippet asnm\n\ assert_no_match /${1:unexpected_pattern}/, ${2:actual_string}${3}\n\ snippet aso\n\ assert_operator ${1:left}, :${2:operator}, ${3:right}${4}\n\ snippet asr\n\ assert_raise ${1:Exception} { ${2} }\n\ snippet asrd\n\ assert_raise ${1:Exception} do\n\ ${2}\n\ end\n\ snippet asnr\n\ assert_nothing_raised ${1:Exception} { ${2} }\n\ snippet asnrd\n\ assert_nothing_raised ${1:Exception} do\n\ ${2}\n\ end\n\ snippet asrt\n\ assert_respond_to ${1:object}, :${2:method}${3}\n\ snippet ass assert_same(..)\n\ assert_same ${1:expected}, ${2:actual}${3}\n\ snippet ass assert_send(..)\n\ assert_send [${1:object}, :${2:message}, ${3:args}]${4}\n\ snippet asns\n\ assert_not_same ${1:unexpected}, ${2:actual}${3}\n\ snippet ast\n\ assert_throws :${1:expected} { ${2} }\n\ snippet astd\n\ assert_throws :${1:expected} do\n\ ${2}\n\ end\n\ snippet asnt\n\ assert_nothing_thrown { ${1} }\n\ snippet asntd\n\ assert_nothing_thrown do\n\ ${1}\n\ end\n\ snippet fl\n\ flunk \"${1:Failure message.}\"${2}\n\ # Benchmark.bmbm do .. end\n\ snippet bm-\n\ TESTS = ${1:10_000}\n\ Benchmark.bmbm do |results|\n\ ${2}\n\ end\n\ snippet rep\n\ results.report(\"${1:name}:\") { TESTS.times { ${2} }}\n\ # Marshal.dump(.., file)\n\ snippet Md\n\ File.open(${1:\"path/to/file.dump\"}, \"wb\") { |${2:file}| Marshal.dump(${3:obj}, $2) }${4}\n\ # Mashal.load(obj)\n\ snippet Ml\n\ File.open(${1:\"path/to/file.dump\"}, \"rb\") { |${2:file}| Marshal.load($2) }${3}\n\ # deep_copy(..)\n\ snippet deec\n\ Marshal.load(Marshal.dump(${1:obj_to_copy}))${2}\n\ snippet Pn-\n\ PStore.new(${1:\"file_name.pstore\"})${2}\n\ snippet tra\n\ transaction(${1:true}) { ${2} }\n\ # xmlread(..)\n\ snippet xml-\n\ REXML::Document.new(File.read(${1:\"path/to/file\"}))${2}\n\ # xpath(..) { .. }\n\ snippet xpa\n\ elements.each(${1:\"//Xpath\"}) do |${2:node}|\n\ ${3}\n\ end\n\ # class_from_name()\n\ snippet clafn\n\ split(\"::\").inject(Object) { |par, const| par.const_get(const) }\n\ # singleton_class()\n\ snippet sinc\n\ class << self; self end\n\ snippet nam\n\ namespace :${1:`Filename()`} do\n\ ${2}\n\ end\n\ snippet tas\n\ desc \"${1:Task description}\"\n\ task :${2:task_name => [:dependent, :tasks]} do\n\ ${3}\n\ end\n\ # block\n\ snippet b\n\ { |${1:var}| ${2} }\n\ snippet begin\n\ begin\n\ raise 'A test exception.'\n\ rescue Exception => e\n\ puts e.message\n\ puts e.backtrace.inspect\n\ else\n\ # other exception\n\ ensure\n\ # always executed\n\ end\n\ \n\ #debugging\n\ snippet debug\n\ require 'ruby-debug'; debugger; true;\n\ snippet pry\n\ require 'pry'; binding.pry\n\ \n\ #############################################\n\ # Rails snippets - for pure Ruby, see above #\n\ #############################################\n\ snippet art\n\ assert_redirected_to ${1::action => \"${2:index}\"}\n\ snippet artnp\n\ assert_redirected_to ${1:parent}_${2:child}_path(${3:@$1}, ${4:@$2})\n\ snippet artnpp\n\ assert_redirected_to ${1:parent}_${2:child}_path(${3:@$1})\n\ snippet artp\n\ assert_redirected_to ${1:model}_path(${2:@$1})\n\ snippet artpp\n\ assert_redirected_to ${1:model}s_path\n\ snippet asd\n\ assert_difference \"${1:Model}.${2:count}\", $1 do\n\ ${3}\n\ end\n\ snippet asnd\n\ assert_no_difference \"${1:Model}.${2:count}\" do\n\ ${3}\n\ end\n\ snippet asre\n\ assert_response :${1:success}, @response.body${2}\n\ snippet asrj\n\ assert_rjs :${1:replace}, \"${2:dom id}\"\n\ snippet ass assert_select(..)\n\ assert_select '${1:path}', :${2:text} => '${3:inner_html' ${4:do}\n\ snippet bf\n\ before_filter :${1:method}\n\ snippet bt\n\ belongs_to :${1:association}\n\ snippet crw\n\ cattr_accessor :${1:attr_names}\n\ snippet defcreate\n\ def create\n\ @${1:model_class_name} = ${2:ModelClassName}.new(params[:$1])\n\ \n\ respond_to do |wants|\n\ if @$1.save\n\ flash[:notice] = '$2 was successfully created.'\n\ wants.html { redirect_to(@$1) }\n\ wants.xml { render :xml => @$1, :status => :created, :location => @$1 }\n\ else\n\ wants.html { render :action => \"new\" }\n\ wants.xml { render :xml => @$1.errors, :status => :unprocessable_entity }\n\ end\n\ end\n\ end${3}\n\ snippet defdestroy\n\ def destroy\n\ @${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\n\ @$1.destroy\n\ \n\ respond_to do |wants|\n\ wants.html { redirect_to($1s_url) }\n\ wants.xml { head :ok }\n\ end\n\ end${3}\n\ snippet defedit\n\ def edit\n\ @${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\n\ end\n\ snippet defindex\n\ def index\n\ @${1:model_class_name} = ${2:ModelClassName}.all\n\ \n\ respond_to do |wants|\n\ wants.html # index.html.erb\n\ wants.xml { render :xml => @$1s }\n\ end\n\ end${3}\n\ snippet defnew\n\ def new\n\ @${1:model_class_name} = ${2:ModelClassName}.new\n\ \n\ respond_to do |wants|\n\ wants.html # new.html.erb\n\ wants.xml { render :xml => @$1 }\n\ end\n\ end${3}\n\ snippet defshow\n\ def show\n\ @${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\n\ \n\ respond_to do |wants|\n\ wants.html # show.html.erb\n\ wants.xml { render :xml => @$1 }\n\ end\n\ end${3}\n\ snippet defupdate\n\ def update\n\ @${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\n\ \n\ respond_to do |wants|\n\ if @$1.update_attributes(params[:$1])\n\ flash[:notice] = '$2 was successfully updated.'\n\ wants.html { redirect_to(@$1) }\n\ wants.xml { head :ok }\n\ else\n\ wants.html { render :action => \"edit\" }\n\ wants.xml { render :xml => @$1.errors, :status => :unprocessable_entity }\n\ end\n\ end\n\ end${3}\n\ snippet flash\n\ flash[:${1:notice}] = \"${2}\"\n\ snippet habtm\n\ has_and_belongs_to_many :${1:object}, :join_table => \"${2:table_name}\", :foreign_key => \"${3}_id\"${4}\n\ snippet hm\n\ has_many :${1:object}\n\ snippet hmd\n\ has_many :${1:other}s, :class_name => \"${2:$1}\", :foreign_key => \"${3:$1}_id\", :dependent => :destroy${4}\n\ snippet hmt\n\ has_many :${1:object}, :through => :${2:object}\n\ snippet ho\n\ has_one :${1:object}\n\ snippet i18\n\ I18n.t('${1:type.key}')${2}\n\ snippet ist\n\ <%= image_submit_tag(\"${1:agree.png}\", :id => \"${2:id}\"${3} %>\n\ snippet log\n\ Rails.logger.${1:debug} ${2}\n\ snippet log2\n\ RAILS_DEFAULT_LOGGER.${1:debug} ${2}\n\ snippet logd\n\ logger.debug { \"${1:message}\" }${2}\n\ snippet loge\n\ logger.error { \"${1:message}\" }${2}\n\ snippet logf\n\ logger.fatal { \"${1:message}\" }${2}\n\ snippet logi\n\ logger.info { \"${1:message}\" }${2}\n\ snippet logw\n\ logger.warn { \"${1:message}\" }${2}\n\ snippet mapc\n\ ${1:map}.${2:connect} '${3:controller/:action/:id}'\n\ snippet mapca\n\ ${1:map}.catch_all \"*${2:anything}\", :controller => \"${3:default}\", :action => \"${4:error}\"${5}\n\ snippet mapr\n\ ${1:map}.resource :${2:resource}\n\ snippet maprs\n\ ${1:map}.resources :${2:resource}\n\ snippet mapwo\n\ ${1:map}.with_options :${2:controller} => '${3:thing}' do |$3|\n\ ${4}\n\ end\n\ snippet mbs\n\ before_save :${1:method}\n\ snippet mcht\n\ change_table :${1:table_name} do |t|\n\ ${2}\n\ end\n\ snippet mp\n\ map(&:${1:id})\n\ snippet mrw\n\ mattr_accessor :${1:attr_names}\n\ snippet oa\n\ order(\"${1:field}\")\n\ snippet od\n\ order(\"${1:field} DESC\")\n\ snippet pa\n\ params[:${1:id}]${2}\n\ snippet ra\n\ render :action => \"${1:action}\"\n\ snippet ral\n\ render :action => \"${1:action}\", :layout => \"${2:layoutname}\"\n\ snippet rest\n\ respond_to do |wants|\n\ wants.${1:html} { ${2} }\n\ end\n\ snippet rf\n\ render :file => \"${1:filepath}\"\n\ snippet rfu\n\ render :file => \"${1:filepath}\", :use_full_path => ${2:false}\n\ snippet ri\n\ render :inline => \"${1:<%= 'hello' %>}\"\n\ snippet ril\n\ render :inline => \"${1:<%= 'hello' %>}\", :locals => { ${2::name} => \"${3:value}\"${4} }\n\ snippet rit\n\ render :inline => \"${1:<%= 'hello' %>}\", :type => ${2::rxml}\n\ snippet rjson\n\ render :json => ${1:text to render}\n\ snippet rl\n\ render :layout => \"${1:layoutname}\"\n\ snippet rn\n\ render :nothing => ${1:true}\n\ snippet rns\n\ render :nothing => ${1:true}, :status => ${2:401}\n\ snippet rp\n\ render :partial => \"${1:item}\"\n\ snippet rpc\n\ render :partial => \"${1:item}\", :collection => ${2:@$1s}\n\ snippet rpl\n\ render :partial => \"${1:item}\", :locals => { :${2:$1} => ${3:@$1}\n\ snippet rpo\n\ render :partial => \"${1:item}\", :object => ${2:@$1}\n\ snippet rps\n\ render :partial => \"${1:item}\", :status => ${2:500}\n\ snippet rt\n\ render :text => \"${1:text to render}\"\n\ snippet rtl\n\ render :text => \"${1:text to render}\", :layout => \"${2:layoutname}\"\n\ snippet rtlt\n\ render :text => \"${1:text to render}\", :layout => ${2:true}\n\ snippet rts\n\ render :text => \"${1:text to render}\", :status => ${2:401}\n\ snippet ru\n\ render :update do |${1:page}|\n\ $1.${2}\n\ end\n\ snippet rxml\n\ render :xml => ${1:text to render}\n\ snippet sc\n\ scope :${1:name}, :where(:@${2:field} => ${3:value})\n\ snippet sl\n\ scope :${1:name}, lambda do |${2:value}|\n\ where(\"${3:field = ?}\", ${4:bind var})\n\ end\n\ snippet sha1\n\ Digest::SHA1.hexdigest(${1:string})\n\ snippet sweeper\n\ class ${1:ModelClassName}Sweeper < ActionController::Caching::Sweeper\n\ observe $1\n\ \n\ def after_save(${2:model_class_name})\n\ expire_cache($2)\n\ end\n\ \n\ def after_destroy($2)\n\ expire_cache($2)\n\ end\n\ \n\ def expire_cache($2)\n\ expire_page\n\ end\n\ end\n\ snippet tcb\n\ t.boolean :${1:title}\n\ ${2}\n\ snippet tcbi\n\ t.binary :${1:title}, :limit => ${2:2}.megabytes\n\ ${3}\n\ snippet tcd\n\ t.decimal :${1:title}, :precision => ${2:10}, :scale => ${3:2}\n\ ${4}\n\ snippet tcda\n\ t.date :${1:title}\n\ ${2}\n\ snippet tcdt\n\ t.datetime :${1:title}\n\ ${2}\n\ snippet tcf\n\ t.float :${1:title}\n\ ${2}\n\ snippet tch\n\ t.change :${1:name}, :${2:string}, :${3:limit} => ${4:80}\n\ ${5}\n\ snippet tci\n\ t.integer :${1:title}\n\ ${2}\n\ snippet tcl\n\ t.integer :lock_version, :null => false, :default => 0\n\ ${1}\n\ snippet tcr\n\ t.references :${1:taggable}, :polymorphic => { :default => '${2:Photo}' }\n\ ${3}\n\ snippet tcs\n\ t.string :${1:title}\n\ ${2}\n\ snippet tct\n\ t.text :${1:title}\n\ ${2}\n\ snippet tcti\n\ t.time :${1:title}\n\ ${2}\n\ snippet tcts\n\ t.timestamp :${1:title}\n\ ${2}\n\ snippet tctss\n\ t.timestamps\n\ ${1}\n\ snippet va\n\ validates_associated :${1:attribute}\n\ snippet vao\n\ validates_acceptance_of :${1:terms}\n\ snippet vc\n\ validates_confirmation_of :${1:attribute}\n\ snippet ve\n\ validates_exclusion_of :${1:attribute}, :in => ${2:%w( mov avi )}\n\ snippet vf\n\ validates_format_of :${1:attribute}, :with => /${2:regex}/\n\ snippet vi\n\ validates_inclusion_of :${1:attribute}, :in => %w(${2: mov avi })\n\ snippet vl\n\ validates_length_of :${1:attribute}, :within => ${2:3}..${3:20}\n\ snippet vn\n\ validates_numericality_of :${1:attribute}\n\ snippet vpo\n\ validates_presence_of :${1:attribute}\n\ snippet vu\n\ validates_uniqueness_of :${1:attribute}\n\ snippet wants\n\ wants.${1:js|xml|html} { ${2} }\n\ snippet wc\n\ where(${1:\"conditions\"}${2:, bind_var})\n\ snippet wh\n\ where(${1:field} => ${2:value})\n\ snippet xdelete\n\ xhr :delete, :${1:destroy}, :id => ${2:1}${3}\n\ snippet xget\n\ xhr :get, :${1:show}, :id => ${2:1}${3}\n\ snippet xpost\n\ xhr :post, :${1:create}, :${2:object} => { ${3} }\n\ snippet xput\n\ xhr :put, :${1:update}, :id => ${2:1}, :${3:object} => { ${4} }${5}\n\ snippet test\n\ test \"should ${1:do something}\" do\n\ ${2}\n\ end\n\ #migrations\n\ snippet mac\n\ add_column :${1:table_name}, :${2:column_name}, :${3:data_type}\n\ snippet mrc\n\ remove_column :${1:table_name}, :${2:column_name}\n\ snippet mrnc\n\ rename_column :${1:table_name}, :${2:old_column_name}, :${3:new_column_name}\n\ snippet mcc\n\ change_column :${1:table}, :${2:column}, :${3:type}\n\ snippet mccc\n\ t.column :${1:title}, :${2:string}\n\ snippet mct\n\ create_table :${1:table_name} do |t|\n\ t.column :${2:name}, :${3:type}\n\ end\n\ snippet migration\n\ class ${1:class_name} < ActiveRecord::Migration\n\ def self.up\n\ ${2}\n\ end\n\ \n\ def self.down\n\ end\n\ end\n\ \n\ snippet trc\n\ t.remove :${1:column}\n\ snippet tre\n\ t.rename :${1:old_column_name}, :${2:new_column_name}\n\ ${3}\n\ snippet tref\n\ t.references :${1:model}\n\ \n\ #rspec\n\ snippet it\n\ it \"${1:spec_name}\" do\n\ ${2}\n\ end\n\ snippet itp\n\ it \"${1:spec_name}\"\n\ ${2}\n\ snippet desc\n\ describe ${1:class_name} do\n\ ${2}\n\ end\n\ snippet cont\n\ context \"${1:message}\" do\n\ ${2}\n\ end\n\ snippet bef\n\ before :${1:each} do\n\ ${2}\n\ end\n\ snippet aft\n\ after :${1:each} do\n\ ${2}\n\ end\n\ "; exports.scope = "ruby"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/rust.js ================================================ ace.define("ace/snippets/rust",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "rust"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/sass.js ================================================ ace.define("ace/snippets/sass",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "sass"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/scad.js ================================================ ace.define("ace/snippets/scad",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "scad"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/scala.js ================================================ ace.define("ace/snippets/scala",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "scala"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/scheme.js ================================================ ace.define("ace/snippets/scheme",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "scheme"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/scss.js ================================================ ace.define("ace/snippets/scss",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "scss"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/sh.js ================================================ ace.define("ace/snippets/sh",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# Shebang. Executing bash via /usr/bin/env makes scripts more portable.\n\ snippet #!\n\ #!/usr/bin/env bash\n\ \n\ snippet if\n\ if [[ ${1:condition} ]]; then\n\ ${2:#statements}\n\ fi\n\ snippet elif\n\ elif [[ ${1:condition} ]]; then\n\ ${2:#statements}\n\ snippet for\n\ for (( ${2:i} = 0; $2 < ${1:count}; $2++ )); do\n\ ${3:#statements}\n\ done\n\ snippet fori\n\ for ${1:needle} in ${2:haystack} ; do\n\ ${3:#statements}\n\ done\n\ snippet wh\n\ while [[ ${1:condition} ]]; do\n\ ${2:#statements}\n\ done\n\ snippet until\n\ until [[ ${1:condition} ]]; do\n\ ${2:#statements}\n\ done\n\ snippet case\n\ case ${1:word} in\n\ ${2:pattern})\n\ ${3};;\n\ esac\n\ snippet go \n\ while getopts '${1:o}' ${2:opts} \n\ do \n\ case $$2 in\n\ ${3:o0})\n\ ${4:#staments};;\n\ esac\n\ done\n\ # Set SCRIPT_DIR variable to directory script is located.\n\ snippet sdir\n\ SCRIPT_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\n\ # getopt\n\ snippet getopt\n\ __ScriptVersion=\"${1:version}\"\n\ \n\ #=== FUNCTION ================================================================\n\ # NAME: usage\n\ # DESCRIPTION: Display usage information.\n\ #===============================================================================\n\ function usage ()\n\ {\n\ cat <<- EOT\n\ \n\ Usage : $${0:0} [options] [--] \n\ \n\ Options: \n\ -h|help Display this message\n\ -v|version Display script version\n\ \n\ EOT\n\ } # ---------- end of function usage ----------\n\ \n\ #-----------------------------------------------------------------------\n\ # Handle command line arguments\n\ #-----------------------------------------------------------------------\n\ \n\ while getopts \":hv\" opt\n\ do\n\ case $opt in\n\ \n\ h|help ) usage; exit 0 ;;\n\ \n\ v|version ) echo \"$${0:0} -- Version $__ScriptVersion\"; exit 0 ;;\n\ \n\ \\? ) echo -e \"\\n Option does not exist : $OPTARG\\n\"\n\ usage; exit 1 ;;\n\ \n\ esac # --- end of case ---\n\ done\n\ shift $(($OPTIND-1))\n\ \n\ "; exports.scope = "sh"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/sjs.js ================================================ ace.define("ace/snippets/sjs",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "sjs"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/smarty.js ================================================ ace.define("ace/snippets/smarty",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "smarty"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/snippets.js ================================================ ace.define("ace/snippets/snippets",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# snippets for making snippets :)\n\ snippet snip\n\ snippet ${1:trigger}\n\ ${2}\n\ snippet msnip\n\ snippet ${1:trigger} ${2:description}\n\ ${3}\n\ snippet v\n\ {VISUAL}\n\ "; exports.scope = "snippets"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/soy_template.js ================================================ ace.define("ace/snippets/soy_template",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "soy_template"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/space.js ================================================ ace.define("ace/snippets/space",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "space"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/sql.js ================================================ ace.define("ace/snippets/sql",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet tbl\n\ create table ${1:table} (\n\ ${2:columns}\n\ );\n\ snippet col\n\ ${1:name} ${2:type} ${3:default ''} ${4:not null}\n\ snippet ccol\n\ ${1:name} varchar2(${2:size}) ${3:default ''} ${4:not null}\n\ snippet ncol\n\ ${1:name} number ${3:default 0} ${4:not null}\n\ snippet dcol\n\ ${1:name} date ${3:default sysdate} ${4:not null}\n\ snippet ind\n\ create index ${3:$1_$2} on ${1:table}(${2:column});\n\ snippet uind\n\ create unique index ${1:name} on ${2:table}(${3:column});\n\ snippet tblcom\n\ comment on table ${1:table} is '${2:comment}';\n\ snippet colcom\n\ comment on column ${1:table}.${2:column} is '${3:comment}';\n\ snippet addcol\n\ alter table ${1:table} add (${2:column} ${3:type});\n\ snippet seq\n\ create sequence ${1:name} start with ${2:1} increment by ${3:1} minvalue ${4:1};\n\ snippet s*\n\ select * from ${1:table}\n\ "; exports.scope = "sql"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/stylus.js ================================================ ace.define("ace/snippets/stylus",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "stylus"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/svg.js ================================================ ace.define("ace/snippets/svg",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "svg"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/tcl.js ================================================ ace.define("ace/snippets/tcl",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# #!/usr/bin/env tclsh\n\ snippet #!\n\ #!/usr/bin/env tclsh\n\ \n\ # Process\n\ snippet pro\n\ proc ${1:function_name} {${2:args}} {\n\ ${3:#body ...}\n\ }\n\ #xif\n\ snippet xif\n\ ${1:expr}? ${2:true} : ${3:false}\n\ # Conditional\n\ snippet if\n\ if {${1}} {\n\ ${2:# body...}\n\ }\n\ # Conditional if..else\n\ snippet ife\n\ if {${1}} {\n\ ${2:# body...}\n\ } else {\n\ ${3:# else...}\n\ }\n\ # Conditional if..elsif..else\n\ snippet ifee\n\ if {${1}} {\n\ ${2:# body...}\n\ } elseif {${3}} {\n\ ${4:# elsif...}\n\ } else {\n\ ${5:# else...}\n\ }\n\ # If catch then\n\ snippet ifc\n\ if { [catch {${1:#do something...}} ${2:err}] } {\n\ ${3:# handle failure...}\n\ }\n\ # Catch\n\ snippet catch\n\ catch {${1}} ${2:err} ${3:options}\n\ # While Loop\n\ snippet wh\n\ while {${1}} {\n\ ${2:# body...}\n\ }\n\ # For Loop\n\ snippet for\n\ for {set ${2:var} 0} {$$2 < ${1:count}} {${3:incr} $2} {\n\ ${4:# body...}\n\ }\n\ # Foreach Loop\n\ snippet fore\n\ foreach ${1:x} {${2:#list}} {\n\ ${3:# body...}\n\ }\n\ # after ms script...\n\ snippet af\n\ after ${1:ms} ${2:#do something}\n\ # after cancel id\n\ snippet afc\n\ after cancel ${1:id or script}\n\ # after idle\n\ snippet afi\n\ after idle ${1:script}\n\ # after info id\n\ snippet afin\n\ after info ${1:id}\n\ # Expr\n\ snippet exp\n\ expr {${1:#expression here}}\n\ # Switch\n\ snippet sw\n\ switch ${1:var} {\n\ ${3:pattern 1} {\n\ ${4:#do something}\n\ }\n\ default {\n\ ${2:#do something}\n\ }\n\ }\n\ # Case\n\ snippet ca\n\ ${1:pattern} {\n\ ${2:#do something}\n\ }${3}\n\ # Namespace eval\n\ snippet ns\n\ namespace eval ${1:path} {${2:#script...}}\n\ # Namespace current\n\ snippet nsc\n\ namespace current\n\ "; exports.scope = "tcl"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/tex.js ================================================ ace.define("ace/snippets/tex",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "#PREAMBLE\n\ #newcommand\n\ snippet nc\n\ \\newcommand{\\${1:cmd}}[${2:opt}]{${3:realcmd}}${4}\n\ #usepackage\n\ snippet up\n\ \\usepackage[${1:[options}]{${2:package}}\n\ #newunicodechar\n\ snippet nuc\n\ \\newunicodechar{${1}}{${2:\\ensuremath}${3:tex-substitute}}}\n\ #DeclareMathOperator\n\ snippet dmo\n\ \\DeclareMathOperator{${1}}{${2}}\n\ \n\ #DOCUMENT\n\ # \\begin{}...\\end{}\n\ snippet begin\n\ \\begin{${1:env}}\n\ ${2}\n\ \\end{$1}\n\ # Tabular\n\ snippet tab\n\ \\begin{${1:tabular}}{${2:c}}\n\ ${3}\n\ \\end{$1}\n\ snippet thm\n\ \\begin[${1:author}]{${2:thm}}\n\ ${3}\n\ \\end{$1}\n\ snippet center\n\ \\begin{center}\n\ ${1}\n\ \\end{center}\n\ # Align(ed)\n\ snippet ali\n\ \\begin{align${1:ed}}\n\ ${2}\n\ \\end{align$1}\n\ # Gather(ed)\n\ snippet gat\n\ \\begin{gather${1:ed}}\n\ ${2}\n\ \\end{gather$1}\n\ # Equation\n\ snippet eq\n\ \\begin{equation}\n\ ${1}\n\ \\end{equation}\n\ # Equation\n\ snippet eq*\n\ \\begin{equation*}\n\ ${1}\n\ \\end{equation*}\n\ # Unnumbered Equation\n\ snippet \\\n\ \\[\n\ ${1}\n\ \\]\n\ # Enumerate\n\ snippet enum\n\ \\begin{enumerate}\n\ \\item ${1}\n\ \\end{enumerate}\n\ # Itemize\n\ snippet itemize\n\ \\begin{itemize}\n\ \\item ${1}\n\ \\end{itemize}\n\ # Description\n\ snippet desc\n\ \\begin{description}\n\ \\item[${1}] ${2}\n\ \\end{description}\n\ # Matrix\n\ snippet mat\n\ \\begin{${1:p/b/v/V/B/small}matrix}\n\ ${2}\n\ \\end{$1matrix}\n\ # Cases\n\ snippet cas\n\ \\begin{cases}\n\ ${1:equation}, &\\text{ if }${2:case}\\\\\n\ ${3}\n\ \\end{cases}\n\ # Split\n\ snippet spl\n\ \\begin{split}\n\ ${1}\n\ \\end{split}\n\ # Part\n\ snippet part\n\ \\part{${1:part name}} % (fold)\n\ \\label{prt:${2:$1}}\n\ ${3}\n\ % part $2 (end)\n\ # Chapter\n\ snippet cha\n\ \\chapter{${1:chapter name}}\n\ \\label{cha:${2:$1}}\n\ ${3}\n\ # Section\n\ snippet sec\n\ \\section{${1:section name}}\n\ \\label{sec:${2:$1}}\n\ ${3}\n\ # Sub Section\n\ snippet sub\n\ \\subsection{${1:subsection name}}\n\ \\label{sub:${2:$1}}\n\ ${3}\n\ # Sub Sub Section\n\ snippet subs\n\ \\subsubsection{${1:subsubsection name}}\n\ \\label{ssub:${2:$1}}\n\ ${3}\n\ # Paragraph\n\ snippet par\n\ \\paragraph{${1:paragraph name}}\n\ \\label{par:${2:$1}}\n\ ${3}\n\ # Sub Paragraph\n\ snippet subp\n\ \\subparagraph{${1:subparagraph name}}\n\ \\label{subp:${2:$1}}\n\ ${3}\n\ #References\n\ snippet itd\n\ \\item[${1:description}] ${2:item}\n\ snippet figure\n\ ${1:Figure}~\\ref{${2:fig:}}${3}\n\ snippet table\n\ ${1:Table}~\\ref{${2:tab:}}${3}\n\ snippet listing\n\ ${1:Listing}~\\ref{${2:list}}${3}\n\ snippet section\n\ ${1:Section}~\\ref{${2:sec:}}${3}\n\ snippet page\n\ ${1:page}~\\pageref{${2}}${3}\n\ snippet index\n\ \\index{${1:index}}${2}\n\ #Citations\n\ snippet cite\n\ \\cite[${1}]{${2}}${3}\n\ snippet fcite\n\ \\footcite[${1}]{${2}}${3}\n\ #Formating text: italic, bold, underline, small capital, emphase ..\n\ snippet it\n\ \\textit{${1:text}}\n\ snippet bf\n\ \\textbf{${1:text}}\n\ snippet under\n\ \\underline{${1:text}}\n\ snippet emp\n\ \\emph{${1:text}}\n\ snippet sc\n\ \\textsc{${1:text}}\n\ #Choosing font\n\ snippet sf\n\ \\textsf{${1:text}}\n\ snippet rm\n\ \\textrm{${1:text}}\n\ snippet tt\n\ \\texttt{${1:text}}\n\ #misc\n\ snippet ft\n\ \\footnote{${1:text}}\n\ snippet fig\n\ \\begin{figure}\n\ \\begin{center}\n\ \\includegraphics[scale=${1}]{Figures/${2}}\n\ \\end{center}\n\ \\caption{${3}}\n\ \\label{fig:${4}}\n\ \\end{figure}\n\ snippet tikz\n\ \\begin{figure}\n\ \\begin{center}\n\ \\begin{tikzpicture}[scale=${1:1}]\n\ ${2}\n\ \\end{tikzpicture}\n\ \\end{center}\n\ \\caption{${3}}\n\ \\label{fig:${4}}\n\ \\end{figure}\n\ #math\n\ snippet stackrel\n\ \\stackrel{${1:above}}{${2:below}} ${3}\n\ snippet frac\n\ \\frac{${1:num}}{${2:denom}}\n\ snippet sum\n\ \\sum^{${1:n}}_{${2:i=1}}{${3}}"; exports.scope = "tex"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/text.js ================================================ ace.define("ace/snippets/text",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "text"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/textile.js ================================================ ace.define("ace/snippets/textile",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# Jekyll post header\n\ snippet header\n\ ---\n\ title: ${1:title}\n\ layout: post\n\ date: ${2:date} ${3:hour:minute:second} -05:00\n\ ---\n\ \n\ # Image\n\ snippet img\n\ !${1:url}(${2:title}):${3:link}!\n\ \n\ # Table\n\ snippet |\n\ |${1}|${2}\n\ \n\ # Link\n\ snippet link\n\ \"${1:link text}\":${2:url}\n\ \n\ # Acronym\n\ snippet (\n\ (${1:Expand acronym})${2}\n\ \n\ # Footnote\n\ snippet fn\n\ [${1:ref number}] ${3}\n\ \n\ fn$1. ${2:footnote}\n\ \n\ "; exports.scope = "textile"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/toml.js ================================================ ace.define("ace/snippets/toml",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "toml"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/twig.js ================================================ ace.define("ace/snippets/twig",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "twig"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/typescript.js ================================================ ace.define("ace/snippets/typescript",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "typescript"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/vala.js ================================================ ace.define("ace/snippets/vala",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippets = [ { "content": "case ${1:condition}:\n\t$0\n\tbreak;\n", "name": "case", "scope": "vala", "tabTrigger": "case" }, { "content": "/**\n * ${6}\n */\n${1:public} class ${2:MethodName}${3: : GLib.Object} {\n\n\t/**\n\t * ${7}\n\t */\n\tpublic ${2}(${4}) {\n\t\t${5}\n\t}\n\n\t$0\n}", "name": "class", "scope": "vala", "tabTrigger": "class" }, { "content": "(${1}) => {\n\t${0}\n}\n", "name": "closure", "scope": "vala", "tabTrigger": "=>" }, { "content": "/*\n * $0\n */", "name": "Comment (multiline)", "scope": "vala", "tabTrigger": "/*" }, { "content": "Console.WriteLine($1);\n$0", "name": "Console.WriteLine (writeline)", "scope": "vala", "tabTrigger": "writeline" }, { "content": "[DBus(name = \"$0\")]", "name": "DBus annotation", "scope": "vala", "tabTrigger": "[DBus" }, { "content": "delegate ${1:void} ${2:DelegateName}($0);", "name": "delegate", "scope": "vala", "tabTrigger": "delegate" }, { "content": "do {\n\t$0\n} while ($1);\n", "name": "do while", "scope": "vala", "tabTrigger": "dowhile" }, { "content": "/**\n * $0\n */", "name": "DocBlock", "scope": "vala", "tabTrigger": "/**" }, { "content": "else if ($1) {\n\t$0\n}\n", "name": "else if (elseif)", "scope": "vala", "tabTrigger": "elseif" }, { "content": "else {\n\t$0\n}", "name": "else", "scope": "vala", "tabTrigger": "else" }, { "content": "enum {$1:EnumName} {\n\t$0\n}", "name": "enum", "scope": "vala", "tabTrigger": "enum" }, { "content": "public errordomain ${1:Error} {\n\t$0\n}", "name": "error domain", "scope": "vala", "tabTrigger": "errordomain" }, { "content": "for ($1;$2;$3) {\n\t$0\n}", "name": "for", "scope": "vala", "tabTrigger": "for" }, { "content": "foreach ($1 in $2) {\n\t$0\n}", "name": "foreach", "scope": "vala", "tabTrigger": "foreach" }, { "content": "Gee.ArrayList<${1:G}>($0);", "name": "Gee.ArrayList", "scope": "vala", "tabTrigger": "ArrayList" }, { "content": "Gee.HashMap<${1:K},${2:V}>($0);", "name": "Gee.HashMap", "scope": "vala", "tabTrigger": "HashMap" }, { "content": "Gee.HashSet<${1:G}>($0);", "name": "Gee.HashSet", "scope": "vala", "tabTrigger": "HashSet" }, { "content": "if ($1) {\n\t$0\n}", "name": "if", "scope": "vala", "tabTrigger": "if" }, { "content": "interface ${1:InterfaceName}{$2: : SuperInterface} {\n\t$0\n}", "name": "interface", "scope": "vala", "tabTrigger": "interface" }, { "content": "public static int main(string [] argv) {\n\t${0}\n\treturn 0;\n}", "name": "Main function", "scope": "vala", "tabTrigger": "main" }, { "content": "namespace $1 {\n\t$0\n}\n", "name": "namespace (ns)", "scope": "vala", "tabTrigger": "ns" }, { "content": "stdout.printf($0);", "name": "printf", "scope": "vala", "tabTrigger": "printf" }, { "content": "${1:public} ${2:Type} ${3:Name} {\n\tset {\n\t\t$0\n\t}\n\tget {\n\n\t}\n}", "name": "property (prop)", "scope": "vala", "tabTrigger": "prop" }, { "content": "${1:public} ${2:Type} ${3:Name} {\n\tget {\n\t\t$0\n\t}\n}", "name": "read-only property (roprop)", "scope": "vala", "tabTrigger": "roprop" }, { "content": "@\"${1:\\$var}\"", "name": "String template (@)", "scope": "vala", "tabTrigger": "@" }, { "content": "struct ${1:StructName} {\n\t$0\n}", "name": "struct", "scope": "vala", "tabTrigger": "struct" }, { "content": "switch ($1) {\n\t$0\n}", "name": "switch", "scope": "vala", "tabTrigger": "switch" }, { "content": "try {\n\t$2\n} catch (${1:Error} e) {\n\t$0\n}", "name": "try/catch", "scope": "vala", "tabTrigger": "try" }, { "content": "\"\"\"$0\"\"\";", "name": "Verbatim string (\"\"\")", "scope": "vala", "tabTrigger": "verbatim" }, { "content": "while ($1) {\n\t$0\n}", "name": "while", "scope": "vala", "tabTrigger": "while" } ]; exports.scope = ""; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/vbscript.js ================================================ ace.define("ace/snippets/vbscript",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "vbscript"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/velocity.js ================================================ ace.define("ace/snippets/velocity",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# macro\n\ snippet #macro\n\ #macro ( ${1:macroName} ${2:\\$var1, [\\$var2, ...]} )\n\ ${3:## macro code}\n\ #end\n\ # foreach\n\ snippet #foreach\n\ #foreach ( ${1:\\$item} in ${2:\\$collection} )\n\ ${3:## foreach code}\n\ #end\n\ # if\n\ snippet #if\n\ #if ( ${1:true} )\n\ ${0}\n\ #end\n\ # if ... else\n\ snippet #ife\n\ #if ( ${1:true} )\n\ ${2}\n\ #else\n\ ${0}\n\ #end\n\ #import\n\ snippet #import\n\ #import ( \"${1:path/to/velocity/format}\" )\n\ # set\n\ snippet #set\n\ #set ( $${1:var} = ${0} )\n\ "; exports.scope = "velocity"; exports.includeScopes = ["html", "javascript", "css"]; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/verilog.js ================================================ ace.define("ace/snippets/verilog",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "verilog"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/vhdl.js ================================================ ace.define("ace/snippets/vhdl",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "vhdl"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/xml.js ================================================ ace.define("ace/snippets/xml",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "xml"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/xquery.js ================================================ ace.define("ace/snippets/xquery",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet for\n\ for $${1:item} in ${2:expr}\n\ snippet return\n\ return ${1:expr}\n\ snippet import\n\ import module namespace ${1:ns} = \"${2:http://www.example.com/}\";\n\ snippet some\n\ some $${1:varname} in ${2:expr} satisfies ${3:expr}\n\ snippet every\n\ every $${1:varname} in ${2:expr} satisfies ${3:expr}\n\ snippet if\n\ if(${1:true}) then ${2:expr} else ${3:true}\n\ snippet switch\n\ switch(${1:\"foo\"})\n\ case ${2:\"foo\"}\n\ return ${3:true}\n\ default return ${4:false}\n\ snippet try\n\ try { ${1:expr} } catch ${2:*} { ${3:expr} }\n\ snippet tumbling\n\ for tumbling window $${1:varname} in ${2:expr}\n\ start at $${3:start} when ${4:expr}\n\ end at $${5:end} when ${6:expr}\n\ return ${7:expr}\n\ snippet sliding\n\ for sliding window $${1:varname} in ${2:expr}\n\ start at $${3:start} when ${4:expr}\n\ end at $${5:end} when ${6:expr}\n\ return ${7:expr}\n\ snippet let\n\ let $${1:varname} := ${2:expr}\n\ snippet group\n\ group by $${1:varname} := ${2:expr}\n\ snippet order\n\ order by ${1:expr} ${2:descending}\n\ snippet stable\n\ stable order by ${1:expr}\n\ snippet count\n\ count $${1:varname}\n\ snippet ordered\n\ ordered { ${1:expr} }\n\ snippet unordered\n\ unordered { ${1:expr} }\n\ snippet treat \n\ treat as ${1:expr}\n\ snippet castable\n\ castable as ${1:atomicType}\n\ snippet cast\n\ cast as ${1:atomicType}\n\ snippet typeswitch\n\ typeswitch(${1:expr})\n\ case ${2:type} return ${3:expr}\n\ default return ${4:expr}\n\ snippet var\n\ declare variable $${1:varname} := ${2:expr};\n\ snippet fn\n\ declare function ${1:ns}:${2:name}(){\n\ ${3:expr}\n\ };\n\ snippet module\n\ module namespace ${1:ns} = \"${2:http://www.example.com}\";\n\ "; exports.scope = "xquery"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/snippets/yaml.js ================================================ ace.define("ace/snippets/yaml",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "yaml"; }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-ambiance.js ================================================ ace.define("ace/theme/ambiance",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-ambiance"; exports.cssText = ".ace-ambiance .ace_gutter {\ background-color: #3d3d3d;\ background-image: -moz-linear-gradient(left, #3D3D3D, #333);\ background-image: -ms-linear-gradient(left, #3D3D3D, #333);\ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3D3D3D), to(#333));\ background-image: -webkit-linear-gradient(left, #3D3D3D, #333);\ background-image: -o-linear-gradient(left, #3D3D3D, #333);\ background-image: linear-gradient(left, #3D3D3D, #333);\ background-repeat: repeat-x;\ border-right: 1px solid #4d4d4d;\ text-shadow: 0px 1px 1px #4d4d4d;\ color: #222;\ }\ .ace-ambiance .ace_gutter-layer {\ background: repeat left top;\ }\ .ace-ambiance .ace_gutter-active-line {\ background-color: #3F3F3F;\ }\ .ace-ambiance .ace_fold-widget {\ text-align: center;\ }\ .ace-ambiance .ace_fold-widget:hover {\ color: #777;\ }\ .ace-ambiance .ace_fold-widget.ace_start,\ .ace-ambiance .ace_fold-widget.ace_end,\ .ace-ambiance .ace_fold-widget.ace_closed{\ background: none;\ border: none;\ box-shadow: none;\ }\ .ace-ambiance .ace_fold-widget.ace_start:after {\ content: '▾'\ }\ .ace-ambiance .ace_fold-widget.ace_end:after {\ content: '▴'\ }\ .ace-ambiance .ace_fold-widget.ace_closed:after {\ content: '‣'\ }\ .ace-ambiance .ace_print-margin {\ border-left: 1px dotted #2D2D2D;\ right: 0;\ background: #262626;\ }\ .ace-ambiance .ace_scroller {\ -webkit-box-shadow: inset 0 0 10px black;\ -moz-box-shadow: inset 0 0 10px black;\ -o-box-shadow: inset 0 0 10px black;\ box-shadow: inset 0 0 10px black;\ }\ .ace-ambiance {\ color: #E6E1DC;\ background-color: #202020;\ }\ .ace-ambiance .ace_cursor {\ border-left: 1px solid #7991E8;\ }\ .ace-ambiance .ace_overwrite-cursors .ace_cursor {\ border: 1px solid #FFE300;\ background: #766B13;\ }\ .ace-ambiance.normal-mode .ace_cursor-layer {\ z-index: 0;\ }\ .ace-ambiance .ace_marker-layer .ace_selection {\ background: rgba(221, 240, 255, 0.20);\ }\ .ace-ambiance .ace_marker-layer .ace_selected-word {\ border-radius: 4px;\ border: 8px solid #3f475d;\ box-shadow: 0 0 4px black;\ }\ .ace-ambiance .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ .ace-ambiance .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(255, 255, 255, 0.25);\ }\ .ace-ambiance .ace_marker-layer .ace_active-line {\ background: rgba(255, 255, 255, 0.031);\ }\ .ace-ambiance .ace_invisible {\ color: #333;\ }\ .ace-ambiance .ace_paren {\ color: #24C2C7;\ }\ .ace-ambiance .ace_keyword {\ color: #cda869;\ }\ .ace-ambiance .ace_keyword.ace_operator {\ color: #fa8d6a;\ }\ .ace-ambiance .ace_punctuation.ace_operator {\ color: #fa8d6a;\ }\ .ace-ambiance .ace_identifier {\ }\ .ace-ambiance .ace-statement {\ color: #cda869;\ }\ .ace-ambiance .ace_constant {\ color: #CF7EA9;\ }\ .ace-ambiance .ace_constant.ace_language {\ color: #CF7EA9;\ }\ .ace-ambiance .ace_constant.ace_library {\ }\ .ace-ambiance .ace_constant.ace_numeric {\ color: #78CF8A;\ }\ .ace-ambiance .ace_invalid {\ text-decoration: underline;\ }\ .ace-ambiance .ace_invalid.ace_illegal {\ color:#F8F8F8;\ background-color: rgba(86, 45, 86, 0.75);\ }\ .ace-ambiance .ace_invalid,\ .ace-ambiance .ace_deprecated {\ text-decoration: underline;\ font-style: italic;\ color: #D2A8A1;\ }\ .ace-ambiance .ace_support {\ color: #9B859D;\ }\ .ace-ambiance .ace_support.ace_function {\ color: #DAD085;\ }\ .ace-ambiance .ace_function.ace_buildin {\ color: #9b859d;\ }\ .ace-ambiance .ace_string {\ color: #8f9d6a;\ }\ .ace-ambiance .ace_string.ace_regexp {\ color: #DAD085;\ }\ .ace-ambiance .ace_comment {\ font-style: italic;\ color: #555;\ }\ .ace-ambiance .ace_comment.ace_doc {\ }\ .ace-ambiance .ace_comment.ace_doc.ace_tag {\ color: #666;\ font-style: normal;\ }\ .ace-ambiance .ace_definition,\ .ace-ambiance .ace_type {\ color: #aac6e3;\ }\ .ace-ambiance .ace_variable {\ color: #9999cc;\ }\ .ace-ambiance .ace_variable.ace_language {\ color: #9b859d;\ }\ .ace-ambiance .ace_xml-pe {\ color: #494949;\ }\ .ace-ambiance .ace_gutter-layer,\ .ace-ambiance .ace_text-layer {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\");\ }\ .ace-ambiance .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\") right repeat-y;\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-chaos.js ================================================ ace.define("ace/theme/chaos",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-chaos"; exports.cssText = ".ace-chaos .ace_gutter {\ background: #141414;\ color: #595959;\ border-right: 1px solid #282828;\ }\ .ace-chaos .ace_gutter-cell.ace_warning {\ background-image: none;\ background: #FC0;\ border-left: none;\ padding-left: 0;\ color: #000;\ }\ .ace-chaos .ace_gutter-cell.ace_error {\ background-position: -6px center;\ background-image: none;\ background: #F10;\ border-left: none;\ padding-left: 0;\ color: #000;\ }\ .ace-chaos .ace_print-margin {\ border-left: 1px solid #555;\ right: 0;\ background: #1D1D1D;\ }\ .ace-chaos {\ background-color: #161616;\ color: #E6E1DC;\ }\ .ace-chaos .ace_cursor {\ border-left: 2px solid #FFFFFF;\ }\ .ace-chaos .ace_cursor.ace_overwrite {\ border-left: 0px;\ border-bottom: 1px solid #FFFFFF;\ }\ .ace-chaos .ace_marker-layer .ace_selection {\ background: #494836;\ }\ .ace-chaos .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ .ace-chaos .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #FCE94F;\ }\ .ace-chaos .ace_marker-layer .ace_active-line {\ background: #333;\ }\ .ace-chaos .ace_gutter-active-line {\ background-color: #222;\ }\ .ace-chaos .ace_invisible {\ color: #404040;\ }\ .ace-chaos .ace_keyword {\ color:#00698F;\ }\ .ace-chaos .ace_keyword.ace_operator {\ color:#FF308F;\ }\ .ace-chaos .ace_constant {\ color:#1EDAFB;\ }\ .ace-chaos .ace_constant.ace_language {\ color:#FDC251;\ }\ .ace-chaos .ace_constant.ace_library {\ color:#8DFF0A;\ }\ .ace-chaos .ace_constant.ace_numeric {\ color:#58C554;\ }\ .ace-chaos .ace_invalid {\ color:#FFFFFF;\ background-color:#990000;\ }\ .ace-chaos .ace_invalid.ace_deprecated {\ color:#FFFFFF;\ background-color:#990000;\ }\ .ace-chaos .ace_support {\ color: #999;\ }\ .ace-chaos .ace_support.ace_function {\ color:#00AEEF;\ }\ .ace-chaos .ace_function {\ color:#00AEEF;\ }\ .ace-chaos .ace_string {\ color:#58C554;\ }\ .ace-chaos .ace_comment {\ color:#555;\ font-style:italic;\ padding-bottom: 0px;\ }\ .ace-chaos .ace_variable {\ color:#997744;\ }\ .ace-chaos .ace_meta.ace_tag {\ color:#BE53E6;\ }\ .ace-chaos .ace_entity.ace_other.ace_attribute-name {\ color:#FFFF89;\ }\ .ace-chaos .ace_markup.ace_underline {\ text-decoration: underline;\ }\ .ace-chaos .ace_fold-widget {\ text-align: center;\ }\ .ace-chaos .ace_fold-widget:hover {\ color: #777;\ }\ .ace-chaos .ace_fold-widget.ace_start,\ .ace-chaos .ace_fold-widget.ace_end,\ .ace-chaos .ace_fold-widget.ace_closed{\ background: none;\ border: none;\ box-shadow: none;\ }\ .ace-chaos .ace_fold-widget.ace_start:after {\ content: '▾'\ }\ .ace-chaos .ace_fold-widget.ace_end:after {\ content: '▴'\ }\ .ace-chaos .ace_fold-widget.ace_closed:after {\ content: '‣'\ }\ .ace-chaos .ace_indent-guide {\ border-right:1px dotted #333;\ margin-right:-1px;\ }\ .ace-chaos .ace_fold { \ background: #222; \ border-radius: 3px; \ color: #7AF; \ border: none; \ }\ .ace-chaos .ace_fold:hover {\ background: #CCC; \ color: #000;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-chrome.js ================================================ ace.define("ace/theme/chrome",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-chrome"; exports.cssText = ".ace-chrome .ace_gutter {\ background: #ebebeb;\ color: #333;\ overflow : hidden;\ }\ .ace-chrome .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-chrome {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-chrome .ace_cursor {\ color: black;\ }\ .ace-chrome .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-chrome .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-chrome .ace_constant.ace_language {\ color: rgb(88, 92, 246);\ }\ .ace-chrome .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-chrome .ace_invalid {\ background-color: rgb(153, 0, 0);\ color: white;\ }\ .ace-chrome .ace_fold {\ }\ .ace-chrome .ace_support.ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-chrome .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-chrome .ace_support.ace_type,\ .ace-chrome .ace_support.ace_class\ .ace-chrome .ace_support.ace_other {\ color: rgb(109, 121, 222);\ }\ .ace-chrome .ace_variable.ace_parameter {\ font-style:italic;\ color:#FD971F;\ }\ .ace-chrome .ace_keyword.ace_operator {\ color: rgb(104, 118, 135);\ }\ .ace-chrome .ace_comment {\ color: #236e24;\ }\ .ace-chrome .ace_comment.ace_doc {\ color: #236e24;\ }\ .ace-chrome .ace_comment.ace_doc.ace_tag {\ color: #236e24;\ }\ .ace-chrome .ace_constant.ace_numeric {\ color: rgb(0, 0, 205);\ }\ .ace-chrome .ace_variable {\ color: rgb(49, 132, 149);\ }\ .ace-chrome .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-chrome .ace_entity.ace_name.ace_function {\ color: #0000A2;\ }\ .ace-chrome .ace_heading {\ color: rgb(12, 7, 255);\ }\ .ace-chrome .ace_list {\ color:rgb(185, 6, 144);\ }\ .ace-chrome .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-chrome .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-chrome .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-chrome .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-chrome .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.07);\ }\ .ace-chrome .ace_gutter-active-line {\ background-color : #dcdcdc;\ }\ .ace-chrome .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-chrome .ace_storage,\ .ace-chrome .ace_keyword,\ .ace-chrome .ace_meta.ace_tag {\ color: rgb(147, 15, 128);\ }\ .ace-chrome .ace_string.ace_regex {\ color: rgb(255, 0, 0)\ }\ .ace-chrome .ace_string {\ color: #1A1AA6;\ }\ .ace-chrome .ace_entity.ace_other.ace_attribute-name {\ color: #994409;\ }\ .ace-chrome .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-clouds.js ================================================ ace.define("ace/theme/clouds",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-clouds"; exports.cssText = ".ace-clouds .ace_gutter {\ background: #ebebeb;\ color: #333\ }\ .ace-clouds .ace_print-margin {\ width: 1px;\ background: #e8e8e8\ }\ .ace-clouds {\ background-color: #FFFFFF;\ color: #000000\ }\ .ace-clouds .ace_cursor {\ color: #000000\ }\ .ace-clouds .ace_marker-layer .ace_selection {\ background: #BDD5FC\ }\ .ace-clouds.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #FFFFFF;\ border-radius: 2px\ }\ .ace-clouds .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0)\ }\ .ace-clouds .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #BFBFBF\ }\ .ace-clouds .ace_marker-layer .ace_active-line {\ background: #FFFBD1\ }\ .ace-clouds .ace_gutter-active-line {\ background-color : #dcdcdc\ }\ .ace-clouds .ace_marker-layer .ace_selected-word {\ border: 1px solid #BDD5FC\ }\ .ace-clouds .ace_invisible {\ color: #BFBFBF\ }\ .ace-clouds .ace_keyword,\ .ace-clouds .ace_meta,\ .ace-clouds .ace_support.ace_constant.ace_property-value {\ color: #AF956F\ }\ .ace-clouds .ace_keyword.ace_operator {\ color: #484848\ }\ .ace-clouds .ace_keyword.ace_other.ace_unit {\ color: #96DC5F\ }\ .ace-clouds .ace_constant.ace_language {\ color: #39946A\ }\ .ace-clouds .ace_constant.ace_numeric {\ color: #46A609\ }\ .ace-clouds .ace_constant.ace_character.ace_entity {\ color: #BF78CC\ }\ .ace-clouds .ace_invalid {\ background-color: #FF002A\ }\ .ace-clouds .ace_fold {\ background-color: #AF956F;\ border-color: #000000\ }\ .ace-clouds .ace_storage,\ .ace-clouds .ace_support.ace_class,\ .ace-clouds .ace_support.ace_function,\ .ace-clouds .ace_support.ace_other,\ .ace-clouds .ace_support.ace_type {\ color: #C52727\ }\ .ace-clouds .ace_string {\ color: #5D90CD\ }\ .ace-clouds .ace_comment {\ color: #BCC8BA\ }\ .ace-clouds .ace_entity.ace_name.ace_tag,\ .ace-clouds .ace_entity.ace_other.ace_attribute-name {\ color: #606060\ }\ .ace-clouds .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-clouds_midnight.js ================================================ ace.define("ace/theme/clouds_midnight",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-clouds-midnight"; exports.cssText = ".ace-clouds-midnight .ace_gutter {\ background: #232323;\ color: #929292\ }\ .ace-clouds-midnight .ace_print-margin {\ width: 1px;\ background: #232323\ }\ .ace-clouds-midnight {\ background-color: #191919;\ color: #929292\ }\ .ace-clouds-midnight .ace_cursor {\ color: #7DA5DC\ }\ .ace-clouds-midnight .ace_marker-layer .ace_selection {\ background: #000000\ }\ .ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #191919;\ border-radius: 2px\ }\ .ace-clouds-midnight .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-clouds-midnight .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #BFBFBF\ }\ .ace-clouds-midnight .ace_marker-layer .ace_active-line {\ background: rgba(215, 215, 215, 0.031)\ }\ .ace-clouds-midnight .ace_gutter-active-line {\ background-color: rgba(215, 215, 215, 0.031)\ }\ .ace-clouds-midnight .ace_marker-layer .ace_selected-word {\ border: 1px solid #000000\ }\ .ace-clouds-midnight .ace_invisible {\ color: #BFBFBF\ }\ .ace-clouds-midnight .ace_keyword,\ .ace-clouds-midnight .ace_meta,\ .ace-clouds-midnight .ace_support.ace_constant.ace_property-value {\ color: #927C5D\ }\ .ace-clouds-midnight .ace_keyword.ace_operator {\ color: #4B4B4B\ }\ .ace-clouds-midnight .ace_keyword.ace_other.ace_unit {\ color: #366F1A\ }\ .ace-clouds-midnight .ace_constant.ace_language {\ color: #39946A\ }\ .ace-clouds-midnight .ace_constant.ace_numeric {\ color: #46A609\ }\ .ace-clouds-midnight .ace_constant.ace_character.ace_entity {\ color: #A165AC\ }\ .ace-clouds-midnight .ace_invalid {\ color: #FFFFFF;\ background-color: #E92E2E\ }\ .ace-clouds-midnight .ace_fold {\ background-color: #927C5D;\ border-color: #929292\ }\ .ace-clouds-midnight .ace_storage,\ .ace-clouds-midnight .ace_support.ace_class,\ .ace-clouds-midnight .ace_support.ace_function,\ .ace-clouds-midnight .ace_support.ace_other,\ .ace-clouds-midnight .ace_support.ace_type {\ color: #E92E2E\ }\ .ace-clouds-midnight .ace_string {\ color: #5D90CD\ }\ .ace-clouds-midnight .ace_comment {\ color: #3C403B\ }\ .ace-clouds-midnight .ace_entity.ace_name.ace_tag,\ .ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {\ color: #606060\ }\ .ace-clouds-midnight .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-cobalt.js ================================================ ace.define("ace/theme/cobalt",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-cobalt"; exports.cssText = ".ace-cobalt .ace_gutter {\ background: #011e3a;\ color: rgb(128,145,160)\ }\ .ace-cobalt .ace_print-margin {\ width: 1px;\ background: #011e3a\ }\ .ace-cobalt {\ background-color: #002240;\ color: #FFFFFF\ }\ .ace-cobalt .ace_cursor {\ color: #FFFFFF\ }\ .ace-cobalt .ace_marker-layer .ace_selection {\ background: rgba(179, 101, 57, 0.75)\ }\ .ace-cobalt.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #002240;\ border-radius: 2px\ }\ .ace-cobalt .ace_marker-layer .ace_step {\ background: rgb(127, 111, 19)\ }\ .ace-cobalt .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(255, 255, 255, 0.15)\ }\ .ace-cobalt .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.35)\ }\ .ace-cobalt .ace_gutter-active-line {\ background-color: rgba(0, 0, 0, 0.35)\ }\ .ace-cobalt .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(179, 101, 57, 0.75)\ }\ .ace-cobalt .ace_invisible {\ color: rgba(255, 255, 255, 0.15)\ }\ .ace-cobalt .ace_keyword,\ .ace-cobalt .ace_meta {\ color: #FF9D00\ }\ .ace-cobalt .ace_constant,\ .ace-cobalt .ace_constant.ace_character,\ .ace-cobalt .ace_constant.ace_character.ace_escape,\ .ace-cobalt .ace_constant.ace_other {\ color: #FF628C\ }\ .ace-cobalt .ace_invalid {\ color: #F8F8F8;\ background-color: #800F00\ }\ .ace-cobalt .ace_support {\ color: #80FFBB\ }\ .ace-cobalt .ace_support.ace_constant {\ color: #EB939A\ }\ .ace-cobalt .ace_fold {\ background-color: #FF9D00;\ border-color: #FFFFFF\ }\ .ace-cobalt .ace_support.ace_function {\ color: #FFB054\ }\ .ace-cobalt .ace_storage {\ color: #FFEE80\ }\ .ace-cobalt .ace_entity {\ color: #FFDD00\ }\ .ace-cobalt .ace_string {\ color: #3AD900\ }\ .ace-cobalt .ace_string.ace_regexp {\ color: #80FFC2\ }\ .ace-cobalt .ace_comment {\ font-style: italic;\ color: #0088FF\ }\ .ace-cobalt .ace_heading,\ .ace-cobalt .ace_markup.ace_heading {\ color: #C8E4FD;\ background-color: #001221\ }\ .ace-cobalt .ace_list,\ .ace-cobalt .ace_markup.ace_list {\ background-color: #130D26\ }\ .ace-cobalt .ace_variable {\ color: #CCCCCC\ }\ .ace-cobalt .ace_variable.ace_language {\ color: #FF80E1\ }\ .ace-cobalt .ace_meta.ace_tag {\ color: #9EFFFF\ }\ .ace-cobalt .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHCLSvkPAAP3AgSDTRd4AAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-crimson_editor.js ================================================ ace.define("ace/theme/crimson_editor",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssText = ".ace-crimson-editor .ace_gutter {\ background: #ebebeb;\ color: #333;\ overflow : hidden;\ }\ .ace-crimson-editor .ace_gutter-layer {\ width: 100%;\ text-align: right;\ }\ .ace-crimson-editor .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-crimson-editor {\ background-color: #FFFFFF;\ color: rgb(64, 64, 64);\ }\ .ace-crimson-editor .ace_cursor {\ color: black;\ }\ .ace-crimson-editor .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-crimson-editor .ace_identifier {\ color: black;\ }\ .ace-crimson-editor .ace_keyword {\ color: blue;\ }\ .ace-crimson-editor .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-crimson-editor .ace_constant.ace_language {\ color: rgb(255, 156, 0);\ }\ .ace-crimson-editor .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-crimson-editor .ace_invalid {\ text-decoration: line-through;\ color: rgb(224, 0, 0);\ }\ .ace-crimson-editor .ace_fold {\ }\ .ace-crimson-editor .ace_support.ace_function {\ color: rgb(192, 0, 0);\ }\ .ace-crimson-editor .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-crimson-editor .ace_support.ace_type,\ .ace-crimson-editor .ace_support.ace_class {\ color: rgb(109, 121, 222);\ }\ .ace-crimson-editor .ace_keyword.ace_operator {\ color: rgb(49, 132, 149);\ }\ .ace-crimson-editor .ace_string {\ color: rgb(128, 0, 128);\ }\ .ace-crimson-editor .ace_comment {\ color: rgb(76, 136, 107);\ }\ .ace-crimson-editor .ace_comment.ace_doc {\ color: rgb(0, 102, 255);\ }\ .ace-crimson-editor .ace_comment.ace_doc.ace_tag {\ color: rgb(128, 159, 191);\ }\ .ace-crimson-editor .ace_constant.ace_numeric {\ color: rgb(0, 0, 64);\ }\ .ace-crimson-editor .ace_variable {\ color: rgb(0, 64, 128);\ }\ .ace-crimson-editor .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-crimson-editor .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-crimson-editor .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-crimson-editor .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-crimson-editor .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-crimson-editor .ace_marker-layer .ace_active-line {\ background: rgb(232, 242, 254);\ }\ .ace-crimson-editor .ace_gutter-active-line {\ background-color : #dcdcdc;\ }\ .ace-crimson-editor .ace_meta.ace_tag {\ color:rgb(28, 2, 255);\ }\ .ace-crimson-editor .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-crimson-editor .ace_string.ace_regex {\ color: rgb(192, 0, 192);\ }\ .ace-crimson-editor .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }"; exports.cssClass = "ace-crimson-editor"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-dawn.js ================================================ ace.define("ace/theme/dawn",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-dawn"; exports.cssText = ".ace-dawn .ace_gutter {\ background: #ebebeb;\ color: #333\ }\ .ace-dawn .ace_print-margin {\ width: 1px;\ background: #e8e8e8\ }\ .ace-dawn {\ background-color: #F9F9F9;\ color: #080808\ }\ .ace-dawn .ace_cursor {\ color: #000000\ }\ .ace-dawn .ace_marker-layer .ace_selection {\ background: rgba(39, 95, 255, 0.30)\ }\ .ace-dawn.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #F9F9F9;\ border-radius: 2px\ }\ .ace-dawn .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0)\ }\ .ace-dawn .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(75, 75, 126, 0.50)\ }\ .ace-dawn .ace_marker-layer .ace_active-line {\ background: rgba(36, 99, 180, 0.12)\ }\ .ace-dawn .ace_gutter-active-line {\ background-color : #dcdcdc\ }\ .ace-dawn .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(39, 95, 255, 0.30)\ }\ .ace-dawn .ace_invisible {\ color: rgba(75, 75, 126, 0.50)\ }\ .ace-dawn .ace_keyword,\ .ace-dawn .ace_meta {\ color: #794938\ }\ .ace-dawn .ace_constant,\ .ace-dawn .ace_constant.ace_character,\ .ace-dawn .ace_constant.ace_character.ace_escape,\ .ace-dawn .ace_constant.ace_other {\ color: #811F24\ }\ .ace-dawn .ace_invalid.ace_illegal {\ text-decoration: underline;\ font-style: italic;\ color: #F8F8F8;\ background-color: #B52A1D\ }\ .ace-dawn .ace_invalid.ace_deprecated {\ text-decoration: underline;\ font-style: italic;\ color: #B52A1D\ }\ .ace-dawn .ace_support {\ color: #691C97\ }\ .ace-dawn .ace_support.ace_constant {\ color: #B4371F\ }\ .ace-dawn .ace_fold {\ background-color: #794938;\ border-color: #080808\ }\ .ace-dawn .ace_list,\ .ace-dawn .ace_markup.ace_list,\ .ace-dawn .ace_support.ace_function {\ color: #693A17\ }\ .ace-dawn .ace_storage {\ font-style: italic;\ color: #A71D5D\ }\ .ace-dawn .ace_string {\ color: #0B6125\ }\ .ace-dawn .ace_string.ace_regexp {\ color: #CF5628\ }\ .ace-dawn .ace_comment {\ font-style: italic;\ color: #5A525F\ }\ .ace-dawn .ace_heading,\ .ace-dawn .ace_markup.ace_heading {\ color: #19356D\ }\ .ace-dawn .ace_variable {\ color: #234A97\ }\ .ace-dawn .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-dreamweaver.js ================================================ ace.define("ace/theme/dreamweaver",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-dreamweaver"; exports.cssText = ".ace-dreamweaver .ace_gutter {\ background: #e8e8e8;\ color: #333;\ }\ .ace-dreamweaver .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-dreamweaver {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-dreamweaver .ace_fold {\ background-color: #757AD8;\ }\ .ace-dreamweaver .ace_cursor {\ color: black;\ }\ .ace-dreamweaver .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-dreamweaver .ace_storage,\ .ace-dreamweaver .ace_keyword {\ color: blue;\ }\ .ace-dreamweaver .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-dreamweaver .ace_constant.ace_language {\ color: rgb(88, 92, 246);\ }\ .ace-dreamweaver .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-dreamweaver .ace_invalid {\ background-color: rgb(153, 0, 0);\ color: white;\ }\ .ace-dreamweaver .ace_support.ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-dreamweaver .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-dreamweaver .ace_support.ace_type,\ .ace-dreamweaver .ace_support.ace_class {\ color: #009;\ }\ .ace-dreamweaver .ace_support.ace_php_tag {\ color: #f00;\ }\ .ace-dreamweaver .ace_keyword.ace_operator {\ color: rgb(104, 118, 135);\ }\ .ace-dreamweaver .ace_string {\ color: #00F;\ }\ .ace-dreamweaver .ace_comment {\ color: rgb(76, 136, 107);\ }\ .ace-dreamweaver .ace_comment.ace_doc {\ color: rgb(0, 102, 255);\ }\ .ace-dreamweaver .ace_comment.ace_doc.ace_tag {\ color: rgb(128, 159, 191);\ }\ .ace-dreamweaver .ace_constant.ace_numeric {\ color: rgb(0, 0, 205);\ }\ .ace-dreamweaver .ace_variable {\ color: #06F\ }\ .ace-dreamweaver .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-dreamweaver .ace_entity.ace_name.ace_function {\ color: #00F;\ }\ .ace-dreamweaver .ace_heading {\ color: rgb(12, 7, 255);\ }\ .ace-dreamweaver .ace_list {\ color:rgb(185, 6, 144);\ }\ .ace-dreamweaver .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-dreamweaver .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-dreamweaver .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-dreamweaver .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-dreamweaver .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.07);\ }\ .ace-dreamweaver .ace_gutter-active-line {\ background-color : #DCDCDC;\ }\ .ace-dreamweaver .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-dreamweaver .ace_meta.ace_tag {\ color:#009;\ }\ .ace-dreamweaver .ace_meta.ace_tag.ace_anchor {\ color:#060;\ }\ .ace-dreamweaver .ace_meta.ace_tag.ace_form {\ color:#F90;\ }\ .ace-dreamweaver .ace_meta.ace_tag.ace_image {\ color:#909;\ }\ .ace-dreamweaver .ace_meta.ace_tag.ace_script {\ color:#900;\ }\ .ace-dreamweaver .ace_meta.ace_tag.ace_style {\ color:#909;\ }\ .ace-dreamweaver .ace_meta.ace_tag.ace_table {\ color:#099;\ }\ .ace-dreamweaver .ace_string.ace_regex {\ color: rgb(255, 0, 0)\ }\ .ace-dreamweaver .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-eclipse.js ================================================ ace.define("ace/theme/eclipse",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; exports.isDark = false; exports.cssText = ".ace-eclipse .ace_gutter {\ background: #ebebeb;\ border-right: 1px solid rgb(159, 159, 159);\ color: rgb(136, 136, 136);\ }\ .ace-eclipse .ace_print-margin {\ width: 1px;\ background: #ebebeb;\ }\ .ace-eclipse {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-eclipse .ace_fold {\ background-color: rgb(60, 76, 114);\ }\ .ace-eclipse .ace_cursor {\ color: black;\ }\ .ace-eclipse .ace_storage,\ .ace-eclipse .ace_keyword,\ .ace-eclipse .ace_variable {\ color: rgb(127, 0, 85);\ }\ .ace-eclipse .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-eclipse .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-eclipse .ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-eclipse .ace_string {\ color: rgb(42, 0, 255);\ }\ .ace-eclipse .ace_comment {\ color: rgb(113, 150, 130);\ }\ .ace-eclipse .ace_comment.ace_doc {\ color: rgb(63, 95, 191);\ }\ .ace-eclipse .ace_comment.ace_doc.ace_tag {\ color: rgb(127, 159, 191);\ }\ .ace-eclipse .ace_constant.ace_numeric {\ color: darkblue;\ }\ .ace-eclipse .ace_tag {\ color: rgb(25, 118, 116);\ }\ .ace-eclipse .ace_type {\ color: rgb(127, 0, 127);\ }\ .ace-eclipse .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-eclipse .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-eclipse .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-eclipse .ace_meta.ace_tag {\ color:rgb(25, 118, 116);\ }\ .ace-eclipse .ace_invisible {\ color: #ddd;\ }\ .ace-eclipse .ace_entity.ace_other.ace_attribute-name {\ color:rgb(127, 0, 127);\ }\ .ace-eclipse .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0);\ }\ .ace-eclipse .ace_active-line {\ background: rgb(232, 242, 254);\ }\ .ace-eclipse .ace_gutter-active-line {\ background-color : #DADADA;\ }\ .ace-eclipse .ace_marker-layer .ace_selected-word {\ border: 1px solid rgb(181, 213, 255);\ }\ .ace-eclipse .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }"; exports.cssClass = "ace-eclipse"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-github.js ================================================ ace.define("ace/theme/github",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-github"; exports.cssText = "\ .ace-github .ace_gutter {\ background: #e8e8e8;\ color: #AAA;\ }\ .ace-github {\ background: #fff;\ color: #000;\ }\ .ace-github .ace_keyword {\ font-weight: bold;\ }\ .ace-github .ace_string {\ color: #D14;\ }\ .ace-github .ace_variable.ace_class {\ color: teal;\ }\ .ace-github .ace_constant.ace_numeric {\ color: #099;\ }\ .ace-github .ace_constant.ace_buildin {\ color: #0086B3;\ }\ .ace-github .ace_support.ace_function {\ color: #0086B3;\ }\ .ace-github .ace_comment {\ color: #998;\ font-style: italic;\ }\ .ace-github .ace_variable.ace_language {\ color: #0086B3;\ }\ .ace-github .ace_paren {\ font-weight: bold;\ }\ .ace-github .ace_boolean {\ font-weight: bold;\ }\ .ace-github .ace_string.ace_regexp {\ color: #009926;\ font-weight: normal;\ }\ .ace-github .ace_variable.ace_instance {\ color: teal;\ }\ .ace-github .ace_constant.ace_language {\ font-weight: bold;\ }\ .ace-github .ace_cursor {\ color: black;\ }\ .ace-github .ace_marker-layer .ace_active-line {\ background: rgb(255, 255, 204);\ }\ .ace-github .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-github.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px white;\ border-radius: 2px;\ }\ .ace-github.ace_nobold .ace_line > span {\ font-weight: normal !important;\ }\ .ace-github .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-github .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-github .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-github .ace_gutter-active-line {\ background-color : rgba(0, 0, 0, 0.07);\ }\ .ace-github .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-github .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-github .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-idle_fingers.js ================================================ ace.define("ace/theme/idle_fingers",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-idle-fingers"; exports.cssText = ".ace-idle-fingers .ace_gutter {\ background: #3b3b3b;\ color: rgb(153,153,153)\ }\ .ace-idle-fingers .ace_print-margin {\ width: 1px;\ background: #3b3b3b\ }\ .ace-idle-fingers {\ background-color: #323232;\ color: #FFFFFF\ }\ .ace-idle-fingers .ace_cursor {\ color: #91FF00\ }\ .ace-idle-fingers .ace_marker-layer .ace_selection {\ background: rgba(90, 100, 126, 0.88)\ }\ .ace-idle-fingers.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #323232;\ border-radius: 2px\ }\ .ace-idle-fingers .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-idle-fingers .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #404040\ }\ .ace-idle-fingers .ace_marker-layer .ace_active-line {\ background: #353637\ }\ .ace-idle-fingers .ace_gutter-active-line {\ background-color: #353637\ }\ .ace-idle-fingers .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(90, 100, 126, 0.88)\ }\ .ace-idle-fingers .ace_invisible {\ color: #404040\ }\ .ace-idle-fingers .ace_keyword,\ .ace-idle-fingers .ace_meta {\ color: #CC7833\ }\ .ace-idle-fingers .ace_constant,\ .ace-idle-fingers .ace_constant.ace_character,\ .ace-idle-fingers .ace_constant.ace_character.ace_escape,\ .ace-idle-fingers .ace_constant.ace_other,\ .ace-idle-fingers .ace_support.ace_constant {\ color: #6C99BB\ }\ .ace-idle-fingers .ace_invalid {\ color: #FFFFFF;\ background-color: #FF0000\ }\ .ace-idle-fingers .ace_fold {\ background-color: #CC7833;\ border-color: #FFFFFF\ }\ .ace-idle-fingers .ace_support.ace_function {\ color: #B83426\ }\ .ace-idle-fingers .ace_variable.ace_parameter {\ font-style: italic\ }\ .ace-idle-fingers .ace_string {\ color: #A5C261\ }\ .ace-idle-fingers .ace_string.ace_regexp {\ color: #CCCC33\ }\ .ace-idle-fingers .ace_comment {\ font-style: italic;\ color: #BC9458\ }\ .ace-idle-fingers .ace_meta.ace_tag {\ color: #FFE5BB\ }\ .ace-idle-fingers .ace_entity.ace_name {\ color: #FFC66D\ }\ .ace-idle-fingers .ace_collab.ace_user1 {\ color: #323232;\ background-color: #FFF980\ }\ .ace-idle-fingers .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMwMjLyZYiPj/8PAAreAwAI1+g0AAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-katzenmilch.js ================================================ ace.define("ace/theme/katzenmilch",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-katzenmilch"; exports.cssText = ".ace-katzenmilch .ace_gutter,\ .ace-katzenmilch .ace_gutter {\ background: #e8e8e8;\ color: #333\ }\ .ace-katzenmilch .ace_print-margin {\ width: 1px;\ background: #e8e8e8\ }\ .ace-katzenmilch {\ background-color: #f3f2f3;\ color: rgba(15, 0, 9, 1.0)\ }\ .ace-katzenmilch .ace_cursor {\ border-left: 2px solid #100011\ }\ .ace-katzenmilch .ace_overwrite-cursors .ace_cursor {\ border-left: 0px;\ border-bottom: 1px solid #100011\ }\ .ace-katzenmilch .ace_marker-layer .ace_selection {\ background: rgba(100, 5, 208, 0.27)\ }\ .ace-katzenmilch.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #f3f2f3;\ border-radius: 2px\ }\ .ace-katzenmilch .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174)\ }\ .ace-katzenmilch .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #000000\ }\ .ace-katzenmilch .ace_marker-layer .ace_active-line {\ background: rgb(232, 242, 254)\ }\ .ace-katzenmilch .ace_gutter-active-line {\ background-color: rgb(232, 242, 254)\ }\ .ace-katzenmilch .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(100, 5, 208, 0.27)\ }\ .ace-katzenmilch .ace_fold {\ background-color: rgba(2, 95, 73, 0.97);\ border-color: rgba(15, 0, 9, 1.0)\ }\ .ace-katzenmilch .ace_keyword {\ color: #674Aa8;\ rbackground-color: rgba(163, 170, 216, 0.055)\ }\ .ace-katzenmilch .ace_constant.ace_language {\ color: #7D7e52;\ rbackground-color: rgba(189, 190, 130, 0.059)\ }\ .ace-katzenmilch .ace_constant.ace_numeric {\ color: rgba(79, 130, 123, 0.93);\ rbackground-color: rgba(119, 194, 187, 0.059)\ }\ .ace-katzenmilch .ace_constant.ace_character,\ .ace-katzenmilch .ace_constant.ace_other {\ color: rgba(2, 95, 105, 1.0);\ rbackground-color: rgba(127, 34, 153, 0.063)\ }\ .ace-katzenmilch .ace_support.ace_function {\ color: #9D7e62;\ rbackground-color: rgba(189, 190, 130, 0.039)\ }\ .ace-katzenmilch .ace_support.ace_class {\ color: rgba(239, 106, 167, 1.0);\ rbackground-color: rgba(239, 106, 167, 0.063)\ }\ .ace-katzenmilch .ace_storage {\ color: rgba(123, 92, 191, 1.0);\ rbackground-color: rgba(139, 93, 223, 0.051)\ }\ .ace-katzenmilch .ace_invalid {\ color: #DFDFD5;\ rbackground-color: #CC1B27\ }\ .ace-katzenmilch .ace_string {\ color: #5a5f9b;\ rbackground-color: rgba(170, 175, 219, 0.035)\ }\ .ace-katzenmilch .ace_comment {\ font-style: italic;\ color: rgba(64, 79, 80, 0.67);\ rbackground-color: rgba(95, 15, 255, 0.0078)\ }\ .ace-katzenmilch .ace_entity.ace_name.ace_function,\ .ace-katzenmilch .ace_variable {\ color: rgba(2, 95, 73, 0.97);\ rbackground-color: rgba(34, 255, 73, 0.12)\ }\ .ace-katzenmilch .ace_variable.ace_language {\ color: #316fcf;\ rbackground-color: rgba(58, 175, 255, 0.039)\ }\ .ace-katzenmilch .ace_variable.ace_parameter {\ font-style: italic;\ color: rgba(51, 150, 159, 0.87);\ rbackground-color: rgba(5, 214, 249, 0.043)\ }\ .ace-katzenmilch .ace_entity.ace_other.ace_attribute-name {\ color: rgba(73, 70, 194, 0.93);\ rbackground-color: rgba(73, 134, 194, 0.035)\ }\ .ace-katzenmilch .ace_entity.ace_name.ace_tag {\ color: #3976a2;\ rbackground-color: rgba(73, 166, 210, 0.039)\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-kr_theme.js ================================================ ace.define("ace/theme/kr_theme",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-kr-theme"; exports.cssText = ".ace-kr-theme .ace_gutter {\ background: #1c1917;\ color: #FCFFE0\ }\ .ace-kr-theme .ace_print-margin {\ width: 1px;\ background: #1c1917\ }\ .ace-kr-theme {\ background-color: #0B0A09;\ color: #FCFFE0\ }\ .ace-kr-theme .ace_cursor {\ color: #FF9900\ }\ .ace-kr-theme .ace_marker-layer .ace_selection {\ background: rgba(170, 0, 255, 0.45)\ }\ .ace-kr-theme.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #0B0A09;\ border-radius: 2px\ }\ .ace-kr-theme .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-kr-theme .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(255, 177, 111, 0.32)\ }\ .ace-kr-theme .ace_marker-layer .ace_active-line {\ background: #38403D\ }\ .ace-kr-theme .ace_gutter-active-line {\ background-color : #38403D\ }\ .ace-kr-theme .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(170, 0, 255, 0.45)\ }\ .ace-kr-theme .ace_invisible {\ color: rgba(255, 177, 111, 0.32)\ }\ .ace-kr-theme .ace_keyword,\ .ace-kr-theme .ace_meta {\ color: #949C8B\ }\ .ace-kr-theme .ace_constant,\ .ace-kr-theme .ace_constant.ace_character,\ .ace-kr-theme .ace_constant.ace_character.ace_escape,\ .ace-kr-theme .ace_constant.ace_other {\ color: rgba(210, 117, 24, 0.76)\ }\ .ace-kr-theme .ace_invalid {\ color: #F8F8F8;\ background-color: #A41300\ }\ .ace-kr-theme .ace_support {\ color: #9FC28A\ }\ .ace-kr-theme .ace_support.ace_constant {\ color: #C27E66\ }\ .ace-kr-theme .ace_fold {\ background-color: #949C8B;\ border-color: #FCFFE0\ }\ .ace-kr-theme .ace_support.ace_function {\ color: #85873A\ }\ .ace-kr-theme .ace_storage {\ color: #FFEE80\ }\ .ace-kr-theme .ace_string {\ color: rgba(164, 161, 181, 0.8)\ }\ .ace-kr-theme .ace_string.ace_regexp {\ color: rgba(125, 255, 192, 0.65)\ }\ .ace-kr-theme .ace_comment {\ font-style: italic;\ color: #706D5B\ }\ .ace-kr-theme .ace_variable {\ color: #D1A796\ }\ .ace-kr-theme .ace_list,\ .ace-kr-theme .ace_markup.ace_list {\ background-color: #0F0040\ }\ .ace-kr-theme .ace_variable.ace_language {\ color: #FF80E1\ }\ .ace-kr-theme .ace_meta.ace_tag {\ color: #BABD9C\ }\ .ace-kr-theme .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-kuroir.js ================================================ ace.define("ace/theme/kuroir",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-kuroir"; exports.cssText = "\ .ace-kuroir .ace_gutter {\ background: #e8e8e8;\ color: #333;\ }\ .ace-kuroir .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-kuroir {\ background-color: #E8E9E8;\ color: #363636;\ }\ .ace-kuroir .ace_cursor {\ color: #202020;\ }\ .ace-kuroir .ace_marker-layer .ace_selection {\ background: rgba(245, 170, 0, 0.57);\ }\ .ace-kuroir.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #E8E9E8;\ border-radius: 2px;\ }\ .ace-kuroir .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ .ace-kuroir .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(0, 0, 0, 0.29);\ }\ .ace-kuroir .ace_marker-layer .ace_active-line {\ background: rgba(203, 220, 47, 0.22);\ }\ .ace-kuroir .ace_gutter-active-line {\ background-color: rgba(203, 220, 47, 0.22);\ }\ .ace-kuroir .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(245, 170, 0, 0.57);\ }\ .ace-kuroir .ace_fold {\ border-color: #363636;\ }\ .ace-kuroir .ace_constant{color:#CD6839;}.ace-kuroir .ace_constant.ace_numeric{color:#9A5925;}.ace-kuroir .ace_support{color:#104E8B;}.ace-kuroir .ace_support.ace_function{color:#005273;}.ace-kuroir .ace_support.ace_constant{color:#CF6A4C;}.ace-kuroir .ace_storage{color:#A52A2A;}.ace-kuroir .ace_invalid.ace_illegal{color:#FD1224;\ background-color:rgba(255, 6, 0, 0.15);}.ace-kuroir .ace_invalid.ace_deprecated{text-decoration:underline;\ font-style:italic;\ color:#FD1732;\ background-color:#E8E9E8;}.ace-kuroir .ace_string{color:#639300;}.ace-kuroir .ace_string.ace_regexp{color:#417E00;\ background-color:#C9D4BE;}.ace-kuroir .ace_comment{color:rgba(148, 148, 148, 0.91);\ background-color:rgba(220, 220, 220, 0.56);}.ace-kuroir .ace_variable{color:#009ACD;}.ace-kuroir .ace_meta.ace_tag{color:#005273;}.ace-kuroir .ace_markup.ace_heading{color:#B8012D;\ background-color:rgba(191, 97, 51, 0.051);}.ace-kuroir .ace_markup.ace_list{color:#8F5B26;}\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-merbivore.js ================================================ ace.define("ace/theme/merbivore",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-merbivore"; exports.cssText = ".ace-merbivore .ace_gutter {\ background: #202020;\ color: #E6E1DC\ }\ .ace-merbivore .ace_print-margin {\ width: 1px;\ background: #555651\ }\ .ace-merbivore {\ background-color: #161616;\ color: #E6E1DC\ }\ .ace-merbivore .ace_cursor {\ color: #FFFFFF\ }\ .ace-merbivore .ace_marker-layer .ace_selection {\ background: #454545\ }\ .ace-merbivore.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #161616;\ border-radius: 2px\ }\ .ace-merbivore .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-merbivore .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #404040\ }\ .ace-merbivore .ace_marker-layer .ace_active-line {\ background: #333435\ }\ .ace-merbivore .ace_gutter-active-line {\ background-color: #333435\ }\ .ace-merbivore .ace_marker-layer .ace_selected-word {\ border: 1px solid #454545\ }\ .ace-merbivore .ace_invisible {\ color: #404040\ }\ .ace-merbivore .ace_entity.ace_name.ace_tag,\ .ace-merbivore .ace_keyword,\ .ace-merbivore .ace_meta,\ .ace-merbivore .ace_meta.ace_tag,\ .ace-merbivore .ace_storage,\ .ace-merbivore .ace_support.ace_function {\ color: #FC6F09\ }\ .ace-merbivore .ace_constant,\ .ace-merbivore .ace_constant.ace_character,\ .ace-merbivore .ace_constant.ace_character.ace_escape,\ .ace-merbivore .ace_constant.ace_other,\ .ace-merbivore .ace_support.ace_type {\ color: #1EDAFB\ }\ .ace-merbivore .ace_constant.ace_character.ace_escape {\ color: #519F50\ }\ .ace-merbivore .ace_constant.ace_language {\ color: #FDC251\ }\ .ace-merbivore .ace_constant.ace_library,\ .ace-merbivore .ace_string,\ .ace-merbivore .ace_support.ace_constant {\ color: #8DFF0A\ }\ .ace-merbivore .ace_constant.ace_numeric {\ color: #58C554\ }\ .ace-merbivore .ace_invalid {\ color: #FFFFFF;\ background-color: #990000\ }\ .ace-merbivore .ace_fold {\ background-color: #FC6F09;\ border-color: #E6E1DC\ }\ .ace-merbivore .ace_comment {\ font-style: italic;\ color: #AD2EA4\ }\ .ace-merbivore .ace_entity.ace_other.ace_attribute-name {\ color: #FFFF89\ }\ .ace-merbivore .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQFxf3ZXB1df0PAAdsAmERTkEHAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-merbivore_soft.js ================================================ ace.define("ace/theme/merbivore_soft",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-merbivore-soft"; exports.cssText = ".ace-merbivore-soft .ace_gutter {\ background: #262424;\ color: #E6E1DC\ }\ .ace-merbivore-soft .ace_print-margin {\ width: 1px;\ background: #262424\ }\ .ace-merbivore-soft {\ background-color: #1C1C1C;\ color: #E6E1DC\ }\ .ace-merbivore-soft .ace_cursor {\ color: #FFFFFF\ }\ .ace-merbivore-soft .ace_marker-layer .ace_selection {\ background: #494949\ }\ .ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #1C1C1C;\ border-radius: 2px\ }\ .ace-merbivore-soft .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-merbivore-soft .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #404040\ }\ .ace-merbivore-soft .ace_marker-layer .ace_active-line {\ background: #333435\ }\ .ace-merbivore-soft .ace_gutter-active-line {\ background-color: #333435\ }\ .ace-merbivore-soft .ace_marker-layer .ace_selected-word {\ border: 1px solid #494949\ }\ .ace-merbivore-soft .ace_invisible {\ color: #404040\ }\ .ace-merbivore-soft .ace_entity.ace_name.ace_tag,\ .ace-merbivore-soft .ace_keyword,\ .ace-merbivore-soft .ace_meta,\ .ace-merbivore-soft .ace_meta.ace_tag,\ .ace-merbivore-soft .ace_storage {\ color: #FC803A\ }\ .ace-merbivore-soft .ace_constant,\ .ace-merbivore-soft .ace_constant.ace_character,\ .ace-merbivore-soft .ace_constant.ace_character.ace_escape,\ .ace-merbivore-soft .ace_constant.ace_other,\ .ace-merbivore-soft .ace_support.ace_type {\ color: #68C1D8\ }\ .ace-merbivore-soft .ace_constant.ace_character.ace_escape {\ color: #B3E5B4\ }\ .ace-merbivore-soft .ace_constant.ace_language {\ color: #E1C582\ }\ .ace-merbivore-soft .ace_constant.ace_library,\ .ace-merbivore-soft .ace_string,\ .ace-merbivore-soft .ace_support.ace_constant {\ color: #8EC65F\ }\ .ace-merbivore-soft .ace_constant.ace_numeric {\ color: #7FC578\ }\ .ace-merbivore-soft .ace_invalid,\ .ace-merbivore-soft .ace_invalid.ace_deprecated {\ color: #FFFFFF;\ background-color: #FE3838\ }\ .ace-merbivore-soft .ace_fold {\ background-color: #FC803A;\ border-color: #E6E1DC\ }\ .ace-merbivore-soft .ace_comment,\ .ace-merbivore-soft .ace_meta {\ font-style: italic;\ color: #AC4BB8\ }\ .ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {\ color: #EAF1A3\ }\ .ace-merbivore-soft .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWOQkpLyZfD09PwPAAfYAnaStpHRAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-mono_industrial.js ================================================ ace.define("ace/theme/mono_industrial",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-mono-industrial"; exports.cssText = ".ace-mono-industrial .ace_gutter {\ background: #1d2521;\ color: #C5C9C9\ }\ .ace-mono-industrial .ace_print-margin {\ width: 1px;\ background: #555651\ }\ .ace-mono-industrial {\ background-color: #222C28;\ color: #FFFFFF\ }\ .ace-mono-industrial .ace_cursor {\ color: #FFFFFF\ }\ .ace-mono-industrial .ace_marker-layer .ace_selection {\ background: rgba(145, 153, 148, 0.40)\ }\ .ace-mono-industrial.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #222C28;\ border-radius: 2px\ }\ .ace-mono-industrial .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-mono-industrial .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(102, 108, 104, 0.50)\ }\ .ace-mono-industrial .ace_marker-layer .ace_active-line {\ background: rgba(12, 13, 12, 0.25)\ }\ .ace-mono-industrial .ace_gutter-active-line {\ background-color: rgba(12, 13, 12, 0.25)\ }\ .ace-mono-industrial .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(145, 153, 148, 0.40)\ }\ .ace-mono-industrial .ace_invisible {\ color: rgba(102, 108, 104, 0.50)\ }\ .ace-mono-industrial .ace_string {\ background-color: #151C19;\ color: #FFFFFF\ }\ .ace-mono-industrial .ace_keyword,\ .ace-mono-industrial .ace_meta {\ color: #A39E64\ }\ .ace-mono-industrial .ace_constant,\ .ace-mono-industrial .ace_constant.ace_character,\ .ace-mono-industrial .ace_constant.ace_character.ace_escape,\ .ace-mono-industrial .ace_constant.ace_numeric,\ .ace-mono-industrial .ace_constant.ace_other {\ color: #E98800\ }\ .ace-mono-industrial .ace_entity.ace_name.ace_function,\ .ace-mono-industrial .ace_keyword.ace_operator,\ .ace-mono-industrial .ace_variable {\ color: #A8B3AB\ }\ .ace-mono-industrial .ace_invalid {\ color: #FFFFFF;\ background-color: rgba(153, 0, 0, 0.68)\ }\ .ace-mono-industrial .ace_support.ace_constant {\ color: #C87500\ }\ .ace-mono-industrial .ace_fold {\ background-color: #A8B3AB;\ border-color: #FFFFFF\ }\ .ace-mono-industrial .ace_support.ace_function {\ color: #588E60\ }\ .ace-mono-industrial .ace_entity.ace_name,\ .ace-mono-industrial .ace_support.ace_class,\ .ace-mono-industrial .ace_support.ace_type {\ color: #5778B6\ }\ .ace-mono-industrial .ace_storage {\ color: #C23B00\ }\ .ace-mono-industrial .ace_variable.ace_language,\ .ace-mono-industrial .ace_variable.ace_parameter {\ color: #648BD2\ }\ .ace-mono-industrial .ace_comment {\ color: #666C68;\ background-color: #151C19\ }\ .ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {\ color: #909993\ }\ .ace-mono-industrial .ace_entity.ace_name.ace_tag {\ color: #A65EFF\ }\ .ace-mono-industrial .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ1NbwZfALD/4PAAlTArlEC4r/AAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-monokai.js ================================================ ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-monokai"; exports.cssText = ".ace-monokai .ace_gutter {\ background: #2F3129;\ color: #8F908A\ }\ .ace-monokai .ace_print-margin {\ width: 1px;\ background: #555651\ }\ .ace-monokai {\ background-color: #272822;\ color: #F8F8F2\ }\ .ace-monokai .ace_cursor {\ color: #F8F8F0\ }\ .ace-monokai .ace_marker-layer .ace_selection {\ background: #49483E\ }\ .ace-monokai.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #272822;\ border-radius: 2px\ }\ .ace-monokai .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-monokai .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #49483E\ }\ .ace-monokai .ace_marker-layer .ace_active-line {\ background: #202020\ }\ .ace-monokai .ace_gutter-active-line {\ background-color: #272727\ }\ .ace-monokai .ace_marker-layer .ace_selected-word {\ border: 1px solid #49483E\ }\ .ace-monokai .ace_invisible {\ color: #52524d\ }\ .ace-monokai .ace_entity.ace_name.ace_tag,\ .ace-monokai .ace_keyword,\ .ace-monokai .ace_meta.ace_tag,\ .ace-monokai .ace_storage {\ color: #F92672\ }\ .ace-monokai .ace_punctuation,\ .ace-monokai .ace_punctuation.ace_tag {\ color: #fff\ }\ .ace-monokai .ace_constant.ace_character,\ .ace-monokai .ace_constant.ace_language,\ .ace-monokai .ace_constant.ace_numeric,\ .ace-monokai .ace_constant.ace_other {\ color: #AE81FF\ }\ .ace-monokai .ace_invalid {\ color: #F8F8F0;\ background-color: #F92672\ }\ .ace-monokai .ace_invalid.ace_deprecated {\ color: #F8F8F0;\ background-color: #AE81FF\ }\ .ace-monokai .ace_support.ace_constant,\ .ace-monokai .ace_support.ace_function {\ color: #66D9EF\ }\ .ace-monokai .ace_fold {\ background-color: #A6E22E;\ border-color: #F8F8F2\ }\ .ace-monokai .ace_storage.ace_type,\ .ace-monokai .ace_support.ace_class,\ .ace-monokai .ace_support.ace_type {\ font-style: italic;\ color: #66D9EF\ }\ .ace-monokai .ace_entity.ace_name.ace_function,\ .ace-monokai .ace_entity.ace_other,\ .ace-monokai .ace_entity.ace_other.ace_attribute-name,\ .ace-monokai .ace_variable {\ color: #A6E22E\ }\ .ace-monokai .ace_variable.ace_parameter {\ font-style: italic;\ color: #FD971F\ }\ .ace-monokai .ace_string {\ color: #E6DB74\ }\ .ace-monokai .ace_comment {\ color: #75715E\ }\ .ace-monokai .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-pastel_on_dark.js ================================================ ace.define("ace/theme/pastel_on_dark",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-pastel-on-dark"; exports.cssText = ".ace-pastel-on-dark .ace_gutter {\ background: #353030;\ color: #8F938F\ }\ .ace-pastel-on-dark .ace_print-margin {\ width: 1px;\ background: #353030\ }\ .ace-pastel-on-dark {\ background-color: #2C2828;\ color: #8F938F\ }\ .ace-pastel-on-dark .ace_cursor {\ color: #A7A7A7\ }\ .ace-pastel-on-dark .ace_marker-layer .ace_selection {\ background: rgba(221, 240, 255, 0.20)\ }\ .ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #2C2828;\ border-radius: 2px\ }\ .ace-pastel-on-dark .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-pastel-on-dark .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(255, 255, 255, 0.25)\ }\ .ace-pastel-on-dark .ace_marker-layer .ace_active-line {\ background: rgba(255, 255, 255, 0.031)\ }\ .ace-pastel-on-dark .ace_gutter-active-line {\ background-color: rgba(255, 255, 255, 0.031)\ }\ .ace-pastel-on-dark .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(221, 240, 255, 0.20)\ }\ .ace-pastel-on-dark .ace_invisible {\ color: rgba(255, 255, 255, 0.25)\ }\ .ace-pastel-on-dark .ace_keyword,\ .ace-pastel-on-dark .ace_meta {\ color: #757aD8\ }\ .ace-pastel-on-dark .ace_constant,\ .ace-pastel-on-dark .ace_constant.ace_character,\ .ace-pastel-on-dark .ace_constant.ace_character.ace_escape,\ .ace-pastel-on-dark .ace_constant.ace_other {\ color: #4FB7C5\ }\ .ace-pastel-on-dark .ace_keyword.ace_operator {\ color: #797878\ }\ .ace-pastel-on-dark .ace_constant.ace_character {\ color: #AFA472\ }\ .ace-pastel-on-dark .ace_constant.ace_language {\ color: #DE8E30\ }\ .ace-pastel-on-dark .ace_constant.ace_numeric {\ color: #CCCCCC\ }\ .ace-pastel-on-dark .ace_invalid,\ .ace-pastel-on-dark .ace_invalid.ace_illegal {\ color: #F8F8F8;\ background-color: rgba(86, 45, 86, 0.75)\ }\ .ace-pastel-on-dark .ace_invalid.ace_deprecated {\ text-decoration: underline;\ font-style: italic;\ color: #D2A8A1\ }\ .ace-pastel-on-dark .ace_fold {\ background-color: #757aD8;\ border-color: #8F938F\ }\ .ace-pastel-on-dark .ace_support.ace_function {\ color: #AEB2F8\ }\ .ace-pastel-on-dark .ace_string {\ color: #66A968\ }\ .ace-pastel-on-dark .ace_string.ace_regexp {\ color: #E9C062\ }\ .ace-pastel-on-dark .ace_comment {\ color: #A6C6FF\ }\ .ace-pastel-on-dark .ace_variable {\ color: #BEBF55\ }\ .ace-pastel-on-dark .ace_variable.ace_language {\ color: #C1C144\ }\ .ace-pastel-on-dark .ace_xml-pe {\ color: #494949\ }\ .ace-pastel-on-dark .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYIiPj/8PAARgAh2NTMh8AAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-solarized_dark.js ================================================ ace.define("ace/theme/solarized_dark",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-solarized-dark"; exports.cssText = ".ace-solarized-dark .ace_gutter {\ background: #01313f;\ color: #d0edf7\ }\ .ace-solarized-dark .ace_print-margin {\ width: 1px;\ background: #33555E\ }\ .ace-solarized-dark {\ background-color: #002B36;\ color: #93A1A1\ }\ .ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,\ .ace-solarized-dark .ace_storage {\ color: #93A1A1\ }\ .ace-solarized-dark .ace_cursor,\ .ace-solarized-dark .ace_string.ace_regexp {\ color: #D30102\ }\ .ace-solarized-dark .ace_marker-layer .ace_active-line,\ .ace-solarized-dark .ace_marker-layer .ace_selection {\ background: rgba(255, 255, 255, 0.1)\ }\ .ace-solarized-dark.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #002B36;\ border-radius: 2px\ }\ .ace-solarized-dark .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-solarized-dark .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(147, 161, 161, 0.50)\ }\ .ace-solarized-dark .ace_gutter-active-line {\ background-color: #0d3440\ }\ .ace-solarized-dark .ace_marker-layer .ace_selected-word {\ border: 1px solid #073642\ }\ .ace-solarized-dark .ace_invisible {\ color: rgba(147, 161, 161, 0.50)\ }\ .ace-solarized-dark .ace_keyword,\ .ace-solarized-dark .ace_meta,\ .ace-solarized-dark .ace_support.ace_class,\ .ace-solarized-dark .ace_support.ace_type {\ color: #859900\ }\ .ace-solarized-dark .ace_constant.ace_character,\ .ace-solarized-dark .ace_constant.ace_other {\ color: #CB4B16\ }\ .ace-solarized-dark .ace_constant.ace_language {\ color: #B58900\ }\ .ace-solarized-dark .ace_constant.ace_numeric {\ color: #D33682\ }\ .ace-solarized-dark .ace_fold {\ background-color: #268BD2;\ border-color: #93A1A1\ }\ .ace-solarized-dark .ace_entity.ace_name.ace_function,\ .ace-solarized-dark .ace_entity.ace_name.ace_tag,\ .ace-solarized-dark .ace_support.ace_function,\ .ace-solarized-dark .ace_variable,\ .ace-solarized-dark .ace_variable.ace_language {\ color: #268BD2\ }\ .ace-solarized-dark .ace_string {\ color: #2AA198\ }\ .ace-solarized-dark .ace_comment {\ font-style: italic;\ color: #657B83\ }\ .ace-solarized-dark .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-solarized_light.js ================================================ ace.define("ace/theme/solarized_light",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-solarized-light"; exports.cssText = ".ace-solarized-light .ace_gutter {\ background: #fbf1d3;\ color: #333\ }\ .ace-solarized-light .ace_print-margin {\ width: 1px;\ background: #e8e8e8\ }\ .ace-solarized-light {\ background-color: #FDF6E3;\ color: #586E75\ }\ .ace-solarized-light .ace_cursor {\ color: #000000\ }\ .ace-solarized-light .ace_marker-layer .ace_selection {\ background: rgba(7, 54, 67, 0.09)\ }\ .ace-solarized-light.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #FDF6E3;\ border-radius: 2px\ }\ .ace-solarized-light .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0)\ }\ .ace-solarized-light .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(147, 161, 161, 0.50)\ }\ .ace-solarized-light .ace_marker-layer .ace_active-line {\ background: #EEE8D5\ }\ .ace-solarized-light .ace_gutter-active-line {\ background-color : #EDE5C1\ }\ .ace-solarized-light .ace_marker-layer .ace_selected-word {\ border: 1px solid #073642\ }\ .ace-solarized-light .ace_invisible {\ color: rgba(147, 161, 161, 0.50)\ }\ .ace-solarized-light .ace_keyword,\ .ace-solarized-light .ace_meta,\ .ace-solarized-light .ace_support.ace_class,\ .ace-solarized-light .ace_support.ace_type {\ color: #859900\ }\ .ace-solarized-light .ace_constant.ace_character,\ .ace-solarized-light .ace_constant.ace_other {\ color: #CB4B16\ }\ .ace-solarized-light .ace_constant.ace_language {\ color: #B58900\ }\ .ace-solarized-light .ace_constant.ace_numeric {\ color: #D33682\ }\ .ace-solarized-light .ace_fold {\ background-color: #268BD2;\ border-color: #586E75\ }\ .ace-solarized-light .ace_entity.ace_name.ace_function,\ .ace-solarized-light .ace_entity.ace_name.ace_tag,\ .ace-solarized-light .ace_support.ace_function,\ .ace-solarized-light .ace_variable,\ .ace-solarized-light .ace_variable.ace_language {\ color: #268BD2\ }\ .ace-solarized-light .ace_storage {\ color: #073642\ }\ .ace-solarized-light .ace_string {\ color: #2AA198\ }\ .ace-solarized-light .ace_string.ace_regexp {\ color: #D30102\ }\ .ace-solarized-light .ace_comment,\ .ace-solarized-light .ace_entity.ace_other.ace_attribute-name {\ color: #93A1A1\ }\ .ace-solarized-light .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-terminal.js ================================================ ace.define("ace/theme/terminal",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-terminal-theme"; exports.cssText = ".ace-terminal-theme .ace_gutter {\ background: #1a0005;\ color: steelblue\ }\ .ace-terminal-theme .ace_print-margin {\ width: 1px;\ background: #1a1a1a\ }\ .ace-terminal-theme {\ background-color: black;\ color: #DEDEDE\ }\ .ace-terminal-theme .ace_cursor {\ color: #9F9F9F\ }\ .ace-terminal-theme .ace_marker-layer .ace_selection {\ background: #424242\ }\ .ace-terminal-theme.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px black;\ border-radius: 2px\ }\ .ace-terminal-theme .ace_marker-layer .ace_step {\ background: rgb(0, 0, 0)\ }\ .ace-terminal-theme .ace_marker-layer .ace_bracket {\ background: #090;\ }\ .ace-terminal-theme .ace_marker-layer .ace_bracket-start {\ background: #090;\ }\ .ace-terminal-theme .ace_marker-layer .ace_bracket-unmatched {\ margin: -1px 0 0 -1px;\ border: 1px solid #900\ }\ .ace-terminal-theme .ace_marker-layer .ace_active-line {\ background: #2A2A2A\ }\ .ace-terminal-theme .ace_gutter-active-line {\ background-color: #2A112A\ }\ .ace-terminal-theme .ace_marker-layer .ace_selected-word {\ border: 1px solid #424242\ }\ .ace-terminal-theme .ace_invisible {\ color: #343434\ }\ .ace-terminal-theme .ace_keyword,\ .ace-terminal-theme .ace_meta,\ .ace-terminal-theme .ace_storage,\ .ace-terminal-theme .ace_storage.ace_type,\ .ace-terminal-theme .ace_support.ace_type {\ color: tomato\ }\ .ace-terminal-theme .ace_keyword.ace_operator {\ color: deeppink\ }\ .ace-terminal-theme .ace_constant.ace_character,\ .ace-terminal-theme .ace_constant.ace_language,\ .ace-terminal-theme .ace_constant.ace_numeric,\ .ace-terminal-theme .ace_keyword.ace_other.ace_unit,\ .ace-terminal-theme .ace_support.ace_constant,\ .ace-terminal-theme .ace_variable.ace_parameter {\ color: #E78C45\ }\ .ace-terminal-theme .ace_constant.ace_other {\ color: gold\ }\ .ace-terminal-theme .ace_invalid {\ color: yellow;\ background-color: red\ }\ .ace-terminal-theme .ace_invalid.ace_deprecated {\ color: #CED2CF;\ background-color: #B798BF\ }\ .ace-terminal-theme .ace_fold {\ background-color: #7AA6DA;\ border-color: #DEDEDE\ }\ .ace-terminal-theme .ace_entity.ace_name.ace_function,\ .ace-terminal-theme .ace_support.ace_function,\ .ace-terminal-theme .ace_variable {\ color: #7AA6DA\ }\ .ace-terminal-theme .ace_support.ace_class,\ .ace-terminal-theme .ace_support.ace_type {\ color: #E7C547\ }\ .ace-terminal-theme .ace_heading,\ .ace-terminal-theme .ace_string {\ color: #B9CA4A\ }\ .ace-terminal-theme .ace_entity.ace_name.ace_tag,\ .ace-terminal-theme .ace_entity.ace_other.ace_attribute-name,\ .ace-terminal-theme .ace_meta.ace_tag,\ .ace-terminal-theme .ace_string.ace_regexp,\ .ace-terminal-theme .ace_variable {\ color: #D54E53\ }\ .ace-terminal-theme .ace_comment {\ color: orangered\ }\ .ace-terminal-theme .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLBWV/8PAAK4AYnhiq+xAAAAAElFTkSuQmCC) right repeat-y;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-textmate.js ================================================ ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; exports.isDark = false; exports.cssClass = "ace-tm"; exports.cssText = ".ace-tm .ace_gutter {\ background: #f0f0f0;\ color: #333;\ }\ .ace-tm .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-tm .ace_fold {\ background-color: #6B72E6;\ }\ .ace-tm {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-tm .ace_cursor {\ color: black;\ }\ .ace-tm .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-tm .ace_storage,\ .ace-tm .ace_keyword {\ color: blue;\ }\ .ace-tm .ace_constant {\ color: rgb(197, 6, 11);\ }\ .ace-tm .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-tm .ace_constant.ace_language {\ color: rgb(88, 92, 246);\ }\ .ace-tm .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_invalid {\ background-color: rgba(255, 0, 0, 0.1);\ color: red;\ }\ .ace-tm .ace_support.ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-tm .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_support.ace_type,\ .ace-tm .ace_support.ace_class {\ color: rgb(109, 121, 222);\ }\ .ace-tm .ace_keyword.ace_operator {\ color: rgb(104, 118, 135);\ }\ .ace-tm .ace_string {\ color: rgb(3, 106, 7);\ }\ .ace-tm .ace_comment {\ color: rgb(76, 136, 107);\ }\ .ace-tm .ace_comment.ace_doc {\ color: rgb(0, 102, 255);\ }\ .ace-tm .ace_comment.ace_doc.ace_tag {\ color: rgb(128, 159, 191);\ }\ .ace-tm .ace_constant.ace_numeric {\ color: rgb(0, 0, 205);\ }\ .ace-tm .ace_variable {\ color: rgb(49, 132, 149);\ }\ .ace-tm .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-tm .ace_entity.ace_name.ace_function {\ color: #0000A2;\ }\ .ace-tm .ace_heading {\ color: rgb(12, 7, 255);\ }\ .ace-tm .ace_list {\ color:rgb(185, 6, 144);\ }\ .ace-tm .ace_meta.ace_tag {\ color:rgb(0, 22, 142);\ }\ .ace-tm .ace_string.ace_regex {\ color: rgb(255, 0, 0)\ }\ .ace-tm .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-tm.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px white;\ border-radius: 2px;\ }\ .ace-tm .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-tm .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-tm .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-tm .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.07);\ }\ .ace-tm .ace_gutter-active-line {\ background-color : #dcdcdc;\ }\ .ace-tm .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-tm .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-tomorrow.js ================================================ ace.define("ace/theme/tomorrow",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-tomorrow"; exports.cssText = ".ace-tomorrow .ace_gutter {\ background: #f6f6f6;\ color: #4D4D4C\ }\ .ace-tomorrow .ace_print-margin {\ width: 1px;\ background: #f6f6f6\ }\ .ace-tomorrow {\ background-color: #FFFFFF;\ color: #4D4D4C\ }\ .ace-tomorrow .ace_cursor {\ color: #AEAFAD\ }\ .ace-tomorrow .ace_marker-layer .ace_selection {\ background: #D6D6D6\ }\ .ace-tomorrow.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #FFFFFF;\ border-radius: 2px\ }\ .ace-tomorrow .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0)\ }\ .ace-tomorrow .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #D1D1D1\ }\ .ace-tomorrow .ace_marker-layer .ace_active-line {\ background: #EFEFEF\ }\ .ace-tomorrow .ace_gutter-active-line {\ background-color : #dcdcdc\ }\ .ace-tomorrow .ace_marker-layer .ace_selected-word {\ border: 1px solid #D6D6D6\ }\ .ace-tomorrow .ace_invisible {\ color: #D1D1D1\ }\ .ace-tomorrow .ace_keyword,\ .ace-tomorrow .ace_meta,\ .ace-tomorrow .ace_storage,\ .ace-tomorrow .ace_storage.ace_type,\ .ace-tomorrow .ace_support.ace_type {\ color: #8959A8\ }\ .ace-tomorrow .ace_keyword.ace_operator {\ color: #3E999F\ }\ .ace-tomorrow .ace_constant.ace_character,\ .ace-tomorrow .ace_constant.ace_language,\ .ace-tomorrow .ace_constant.ace_numeric,\ .ace-tomorrow .ace_keyword.ace_other.ace_unit,\ .ace-tomorrow .ace_support.ace_constant,\ .ace-tomorrow .ace_variable.ace_parameter {\ color: #F5871F\ }\ .ace-tomorrow .ace_constant.ace_other {\ color: #666969\ }\ .ace-tomorrow .ace_invalid {\ color: #FFFFFF;\ background-color: #C82829\ }\ .ace-tomorrow .ace_invalid.ace_deprecated {\ color: #FFFFFF;\ background-color: #8959A8\ }\ .ace-tomorrow .ace_fold {\ background-color: #4271AE;\ border-color: #4D4D4C\ }\ .ace-tomorrow .ace_entity.ace_name.ace_function,\ .ace-tomorrow .ace_support.ace_function,\ .ace-tomorrow .ace_variable {\ color: #4271AE\ }\ .ace-tomorrow .ace_support.ace_class,\ .ace-tomorrow .ace_support.ace_type {\ color: #C99E00\ }\ .ace-tomorrow .ace_heading,\ .ace-tomorrow .ace_markup.ace_heading,\ .ace-tomorrow .ace_string {\ color: #718C00\ }\ .ace-tomorrow .ace_entity.ace_name.ace_tag,\ .ace-tomorrow .ace_entity.ace_other.ace_attribute-name,\ .ace-tomorrow .ace_meta.ace_tag,\ .ace-tomorrow .ace_string.ace_regexp,\ .ace-tomorrow .ace_variable {\ color: #C82829\ }\ .ace-tomorrow .ace_comment {\ color: #8E908C\ }\ .ace-tomorrow .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-tomorrow_night.js ================================================ ace.define("ace/theme/tomorrow_night",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-tomorrow-night"; exports.cssText = ".ace-tomorrow-night .ace_gutter {\ background: #25282c;\ color: #C5C8C6\ }\ .ace-tomorrow-night .ace_print-margin {\ width: 1px;\ background: #25282c\ }\ .ace-tomorrow-night {\ background-color: #1D1F21;\ color: #C5C8C6\ }\ .ace-tomorrow-night .ace_cursor {\ color: #AEAFAD\ }\ .ace-tomorrow-night .ace_marker-layer .ace_selection {\ background: #373B41\ }\ .ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #1D1F21;\ border-radius: 2px\ }\ .ace-tomorrow-night .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-tomorrow-night .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #4B4E55\ }\ .ace-tomorrow-night .ace_marker-layer .ace_active-line {\ background: #282A2E\ }\ .ace-tomorrow-night .ace_gutter-active-line {\ background-color: #282A2E\ }\ .ace-tomorrow-night .ace_marker-layer .ace_selected-word {\ border: 1px solid #373B41\ }\ .ace-tomorrow-night .ace_invisible {\ color: #4B4E55\ }\ .ace-tomorrow-night .ace_keyword,\ .ace-tomorrow-night .ace_meta,\ .ace-tomorrow-night .ace_storage,\ .ace-tomorrow-night .ace_storage.ace_type,\ .ace-tomorrow-night .ace_support.ace_type {\ color: #B294BB\ }\ .ace-tomorrow-night .ace_keyword.ace_operator {\ color: #8ABEB7\ }\ .ace-tomorrow-night .ace_constant.ace_character,\ .ace-tomorrow-night .ace_constant.ace_language,\ .ace-tomorrow-night .ace_constant.ace_numeric,\ .ace-tomorrow-night .ace_keyword.ace_other.ace_unit,\ .ace-tomorrow-night .ace_support.ace_constant,\ .ace-tomorrow-night .ace_variable.ace_parameter {\ color: #DE935F\ }\ .ace-tomorrow-night .ace_constant.ace_other {\ color: #CED1CF\ }\ .ace-tomorrow-night .ace_invalid {\ color: #CED2CF;\ background-color: #DF5F5F\ }\ .ace-tomorrow-night .ace_invalid.ace_deprecated {\ color: #CED2CF;\ background-color: #B798BF\ }\ .ace-tomorrow-night .ace_fold {\ background-color: #81A2BE;\ border-color: #C5C8C6\ }\ .ace-tomorrow-night .ace_entity.ace_name.ace_function,\ .ace-tomorrow-night .ace_support.ace_function,\ .ace-tomorrow-night .ace_variable {\ color: #81A2BE\ }\ .ace-tomorrow-night .ace_support.ace_class,\ .ace-tomorrow-night .ace_support.ace_type {\ color: #F0C674\ }\ .ace-tomorrow-night .ace_heading,\ .ace-tomorrow-night .ace_markup.ace_heading,\ .ace-tomorrow-night .ace_string {\ color: #B5BD68\ }\ .ace-tomorrow-night .ace_entity.ace_name.ace_tag,\ .ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,\ .ace-tomorrow-night .ace_meta.ace_tag,\ .ace-tomorrow-night .ace_string.ace_regexp,\ .ace-tomorrow-night .ace_variable {\ color: #CC6666\ }\ .ace-tomorrow-night .ace_comment {\ color: #969896\ }\ .ace-tomorrow-night .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-tomorrow_night_blue.js ================================================ ace.define("ace/theme/tomorrow_night_blue",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-tomorrow-night-blue"; exports.cssText = ".ace-tomorrow-night-blue .ace_gutter {\ background: #00204b;\ color: #7388b5\ }\ .ace-tomorrow-night-blue .ace_print-margin {\ width: 1px;\ background: #00204b\ }\ .ace-tomorrow-night-blue {\ background-color: #002451;\ color: #FFFFFF\ }\ .ace-tomorrow-night-blue .ace_constant.ace_other,\ .ace-tomorrow-night-blue .ace_cursor {\ color: #FFFFFF\ }\ .ace-tomorrow-night-blue .ace_marker-layer .ace_selection {\ background: #003F8E\ }\ .ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #002451;\ border-radius: 2px\ }\ .ace-tomorrow-night-blue .ace_marker-layer .ace_step {\ background: rgb(127, 111, 19)\ }\ .ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #404F7D\ }\ .ace-tomorrow-night-blue .ace_marker-layer .ace_active-line {\ background: #00346E\ }\ .ace-tomorrow-night-blue .ace_gutter-active-line {\ background-color: #022040\ }\ .ace-tomorrow-night-blue .ace_marker-layer .ace_selected-word {\ border: 1px solid #003F8E\ }\ .ace-tomorrow-night-blue .ace_invisible {\ color: #404F7D\ }\ .ace-tomorrow-night-blue .ace_keyword,\ .ace-tomorrow-night-blue .ace_meta,\ .ace-tomorrow-night-blue .ace_storage,\ .ace-tomorrow-night-blue .ace_storage.ace_type,\ .ace-tomorrow-night-blue .ace_support.ace_type {\ color: #EBBBFF\ }\ .ace-tomorrow-night-blue .ace_keyword.ace_operator {\ color: #99FFFF\ }\ .ace-tomorrow-night-blue .ace_constant.ace_character,\ .ace-tomorrow-night-blue .ace_constant.ace_language,\ .ace-tomorrow-night-blue .ace_constant.ace_numeric,\ .ace-tomorrow-night-blue .ace_keyword.ace_other.ace_unit,\ .ace-tomorrow-night-blue .ace_support.ace_constant,\ .ace-tomorrow-night-blue .ace_variable.ace_parameter {\ color: #FFC58F\ }\ .ace-tomorrow-night-blue .ace_invalid {\ color: #FFFFFF;\ background-color: #F99DA5\ }\ .ace-tomorrow-night-blue .ace_invalid.ace_deprecated {\ color: #FFFFFF;\ background-color: #EBBBFF\ }\ .ace-tomorrow-night-blue .ace_fold {\ background-color: #BBDAFF;\ border-color: #FFFFFF\ }\ .ace-tomorrow-night-blue .ace_entity.ace_name.ace_function,\ .ace-tomorrow-night-blue .ace_support.ace_function,\ .ace-tomorrow-night-blue .ace_variable {\ color: #BBDAFF\ }\ .ace-tomorrow-night-blue .ace_support.ace_class,\ .ace-tomorrow-night-blue .ace_support.ace_type {\ color: #FFEEAD\ }\ .ace-tomorrow-night-blue .ace_heading,\ .ace-tomorrow-night-blue .ace_markup.ace_heading,\ .ace-tomorrow-night-blue .ace_string {\ color: #D1F1A9\ }\ .ace-tomorrow-night-blue .ace_entity.ace_name.ace_tag,\ .ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name,\ .ace-tomorrow-night-blue .ace_meta.ace_tag,\ .ace-tomorrow-night-blue .ace_string.ace_regexp,\ .ace-tomorrow-night-blue .ace_variable {\ color: #FF9DA4\ }\ .ace-tomorrow-night-blue .ace_comment {\ color: #7285B7\ }\ .ace-tomorrow-night-blue .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-tomorrow_night_bright.js ================================================ ace.define("ace/theme/tomorrow_night_bright",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-tomorrow-night-bright"; exports.cssText = ".ace-tomorrow-night-bright .ace_gutter {\ background: #1a1a1a;\ color: #DEDEDE\ }\ .ace-tomorrow-night-bright .ace_print-margin {\ width: 1px;\ background: #1a1a1a\ }\ .ace-tomorrow-night-bright {\ background-color: #000000;\ color: #DEDEDE\ }\ .ace-tomorrow-night-bright .ace_cursor {\ color: #9F9F9F\ }\ .ace-tomorrow-night-bright .ace_marker-layer .ace_selection {\ background: #424242\ }\ .ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #000000;\ border-radius: 2px\ }\ .ace-tomorrow-night-bright .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #888888\ }\ .ace-tomorrow-night-bright .ace_marker-layer .ace_highlight {\ border: 1px solid rgb(110, 119, 0);\ border-bottom: 0;\ box-shadow: inset 0 -1px rgb(110, 119, 0);\ margin: -1px 0 0 -1px;\ background: rgba(255, 235, 0, 0.1)\ }\ .ace-tomorrow-night-bright .ace_marker-layer .ace_active-line {\ background: #2A2A2A\ }\ .ace-tomorrow-night-bright .ace_gutter-active-line {\ background-color: #2A2A2A\ }\ .ace-tomorrow-night-bright .ace_stack {\ background-color: rgb(66, 90, 44)\ }\ .ace-tomorrow-night-bright .ace_marker-layer .ace_selected-word {\ border: 1px solid #888888\ }\ .ace-tomorrow-night-bright .ace_invisible {\ color: #343434\ }\ .ace-tomorrow-night-bright .ace_keyword,\ .ace-tomorrow-night-bright .ace_meta,\ .ace-tomorrow-night-bright .ace_storage,\ .ace-tomorrow-night-bright .ace_storage.ace_type,\ .ace-tomorrow-night-bright .ace_support.ace_type {\ color: #C397D8\ }\ .ace-tomorrow-night-bright .ace_keyword.ace_operator {\ color: #70C0B1\ }\ .ace-tomorrow-night-bright .ace_constant.ace_character,\ .ace-tomorrow-night-bright .ace_constant.ace_language,\ .ace-tomorrow-night-bright .ace_constant.ace_numeric,\ .ace-tomorrow-night-bright .ace_keyword.ace_other.ace_unit,\ .ace-tomorrow-night-bright .ace_support.ace_constant,\ .ace-tomorrow-night-bright .ace_variable.ace_parameter {\ color: #E78C45\ }\ .ace-tomorrow-night-bright .ace_constant.ace_other {\ color: #EEEEEE\ }\ .ace-tomorrow-night-bright .ace_invalid {\ color: #CED2CF;\ background-color: #DF5F5F\ }\ .ace-tomorrow-night-bright .ace_invalid.ace_deprecated {\ color: #CED2CF;\ background-color: #B798BF\ }\ .ace-tomorrow-night-bright .ace_fold {\ background-color: #7AA6DA;\ border-color: #DEDEDE\ }\ .ace-tomorrow-night-bright .ace_entity.ace_name.ace_function,\ .ace-tomorrow-night-bright .ace_support.ace_function,\ .ace-tomorrow-night-bright .ace_variable {\ color: #7AA6DA\ }\ .ace-tomorrow-night-bright .ace_support.ace_class,\ .ace-tomorrow-night-bright .ace_support.ace_type {\ color: #E7C547\ }\ .ace-tomorrow-night-bright .ace_heading,\ .ace-tomorrow-night-bright .ace_markup.ace_heading,\ .ace-tomorrow-night-bright .ace_string {\ color: #B9CA4A\ }\ .ace-tomorrow-night-bright .ace_entity.ace_name.ace_tag,\ .ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name,\ .ace-tomorrow-night-bright .ace_meta.ace_tag,\ .ace-tomorrow-night-bright .ace_string.ace_regexp,\ .ace-tomorrow-night-bright .ace_variable {\ color: #D54E53\ }\ .ace-tomorrow-night-bright .ace_comment {\ color: #969896\ }\ .ace-tomorrow-night-bright .ace_c9searchresults.ace_keyword {\ color: #C2C280\ }\ .ace-tomorrow-night-bright .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-tomorrow_night_eighties.js ================================================ ace.define("ace/theme/tomorrow_night_eighties",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-tomorrow-night-eighties"; exports.cssText = ".ace-tomorrow-night-eighties .ace_gutter {\ background: #272727;\ color: #CCC\ }\ .ace-tomorrow-night-eighties .ace_print-margin {\ width: 1px;\ background: #272727\ }\ .ace-tomorrow-night-eighties {\ background-color: #2D2D2D;\ color: #CCCCCC\ }\ .ace-tomorrow-night-eighties .ace_constant.ace_other,\ .ace-tomorrow-night-eighties .ace_cursor {\ color: #CCCCCC\ }\ .ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {\ background: #515151\ }\ .ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #2D2D2D;\ border-radius: 2px\ }\ .ace-tomorrow-night-eighties .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #6A6A6A\ }\ .ace-tomorrow-night-bright .ace_stack {\ background: rgb(66, 90, 44)\ }\ .ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {\ background: #393939\ }\ .ace-tomorrow-night-eighties .ace_gutter-active-line {\ background-color: #393939\ }\ .ace-tomorrow-night-eighties .ace_marker-layer .ace_selected-word {\ border: 1px solid #515151\ }\ .ace-tomorrow-night-eighties .ace_invisible {\ color: #6A6A6A\ }\ .ace-tomorrow-night-eighties .ace_keyword,\ .ace-tomorrow-night-eighties .ace_meta,\ .ace-tomorrow-night-eighties .ace_storage,\ .ace-tomorrow-night-eighties .ace_storage.ace_type,\ .ace-tomorrow-night-eighties .ace_support.ace_type {\ color: #CC99CC\ }\ .ace-tomorrow-night-eighties .ace_keyword.ace_operator {\ color: #66CCCC\ }\ .ace-tomorrow-night-eighties .ace_constant.ace_character,\ .ace-tomorrow-night-eighties .ace_constant.ace_language,\ .ace-tomorrow-night-eighties .ace_constant.ace_numeric,\ .ace-tomorrow-night-eighties .ace_keyword.ace_other.ace_unit,\ .ace-tomorrow-night-eighties .ace_support.ace_constant,\ .ace-tomorrow-night-eighties .ace_variable.ace_parameter {\ color: #F99157\ }\ .ace-tomorrow-night-eighties .ace_invalid {\ color: #CDCDCD;\ background-color: #F2777A\ }\ .ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {\ color: #CDCDCD;\ background-color: #CC99CC\ }\ .ace-tomorrow-night-eighties .ace_fold {\ background-color: #6699CC;\ border-color: #CCCCCC\ }\ .ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function,\ .ace-tomorrow-night-eighties .ace_support.ace_function,\ .ace-tomorrow-night-eighties .ace_variable {\ color: #6699CC\ }\ .ace-tomorrow-night-eighties .ace_support.ace_class,\ .ace-tomorrow-night-eighties .ace_support.ace_type {\ color: #FFCC66\ }\ .ace-tomorrow-night-eighties .ace_heading,\ .ace-tomorrow-night-eighties .ace_markup.ace_heading,\ .ace-tomorrow-night-eighties .ace_string {\ color: #99CC99\ }\ .ace-tomorrow-night-eighties .ace_comment {\ color: #999999\ }\ .ace-tomorrow-night-eighties .ace_entity.ace_name.ace_tag,\ .ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name,\ .ace-tomorrow-night-eighties .ace_meta.ace_tag,\ .ace-tomorrow-night-eighties .ace_variable {\ color: #F2777A\ }\ .ace-tomorrow-night-eighties .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-twilight.js ================================================ ace.define("ace/theme/twilight",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-twilight"; exports.cssText = ".ace-twilight .ace_gutter {\ background: #232323;\ color: #E2E2E2\ }\ .ace-twilight .ace_print-margin {\ width: 1px;\ background: #232323\ }\ .ace-twilight {\ background-color: #141414;\ color: #F8F8F8\ }\ .ace-twilight .ace_cursor {\ color: #A7A7A7\ }\ .ace-twilight .ace_marker-layer .ace_selection {\ background: rgba(221, 240, 255, 0.20)\ }\ .ace-twilight.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #141414;\ border-radius: 2px\ }\ .ace-twilight .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-twilight .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(255, 255, 255, 0.25)\ }\ .ace-twilight .ace_marker-layer .ace_active-line {\ background: rgba(255, 255, 255, 0.031)\ }\ .ace-twilight .ace_gutter-active-line {\ background-color: rgba(255, 255, 255, 0.031)\ }\ .ace-twilight .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(221, 240, 255, 0.20)\ }\ .ace-twilight .ace_invisible {\ color: rgba(255, 255, 255, 0.25)\ }\ .ace-twilight .ace_keyword,\ .ace-twilight .ace_meta {\ color: #CDA869\ }\ .ace-twilight .ace_constant,\ .ace-twilight .ace_constant.ace_character,\ .ace-twilight .ace_constant.ace_character.ace_escape,\ .ace-twilight .ace_constant.ace_other,\ .ace-twilight .ace_heading,\ .ace-twilight .ace_markup.ace_heading,\ .ace-twilight .ace_support.ace_constant {\ color: #CF6A4C\ }\ .ace-twilight .ace_invalid.ace_illegal {\ color: #F8F8F8;\ background-color: rgba(86, 45, 86, 0.75)\ }\ .ace-twilight .ace_invalid.ace_deprecated {\ text-decoration: underline;\ font-style: italic;\ color: #D2A8A1\ }\ .ace-twilight .ace_support {\ color: #9B859D\ }\ .ace-twilight .ace_fold {\ background-color: #AC885B;\ border-color: #F8F8F8\ }\ .ace-twilight .ace_support.ace_function {\ color: #DAD085\ }\ .ace-twilight .ace_list,\ .ace-twilight .ace_markup.ace_list,\ .ace-twilight .ace_storage {\ color: #F9EE98\ }\ .ace-twilight .ace_entity.ace_name.ace_function,\ .ace-twilight .ace_meta.ace_tag,\ .ace-twilight .ace_variable {\ color: #AC885B\ }\ .ace-twilight .ace_string {\ color: #8F9D6A\ }\ .ace-twilight .ace_string.ace_regexp {\ color: #E9C062\ }\ .ace-twilight .ace_comment {\ font-style: italic;\ color: #5F5A60\ }\ .ace-twilight .ace_variable {\ color: #7587A6\ }\ .ace-twilight .ace_xml-pe {\ color: #494949\ }\ .ace-twilight .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-vibrant_ink.js ================================================ ace.define("ace/theme/vibrant_ink",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-vibrant-ink"; exports.cssText = ".ace-vibrant-ink .ace_gutter {\ background: #1a1a1a;\ color: #BEBEBE\ }\ .ace-vibrant-ink .ace_print-margin {\ width: 1px;\ background: #1a1a1a\ }\ .ace-vibrant-ink {\ background-color: #0F0F0F;\ color: #FFFFFF\ }\ .ace-vibrant-ink .ace_cursor {\ color: #FFFFFF\ }\ .ace-vibrant-ink .ace_marker-layer .ace_selection {\ background: #6699CC\ }\ .ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #0F0F0F;\ border-radius: 2px\ }\ .ace-vibrant-ink .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-vibrant-ink .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #404040\ }\ .ace-vibrant-ink .ace_marker-layer .ace_active-line {\ background: #333333\ }\ .ace-vibrant-ink .ace_gutter-active-line {\ background-color: #333333\ }\ .ace-vibrant-ink .ace_marker-layer .ace_selected-word {\ border: 1px solid #6699CC\ }\ .ace-vibrant-ink .ace_invisible {\ color: #404040\ }\ .ace-vibrant-ink .ace_keyword,\ .ace-vibrant-ink .ace_meta {\ color: #FF6600\ }\ .ace-vibrant-ink .ace_constant,\ .ace-vibrant-ink .ace_constant.ace_character,\ .ace-vibrant-ink .ace_constant.ace_character.ace_escape,\ .ace-vibrant-ink .ace_constant.ace_other {\ color: #339999\ }\ .ace-vibrant-ink .ace_constant.ace_numeric {\ color: #99CC99\ }\ .ace-vibrant-ink .ace_invalid,\ .ace-vibrant-ink .ace_invalid.ace_deprecated {\ color: #CCFF33;\ background-color: #000000\ }\ .ace-vibrant-ink .ace_fold {\ background-color: #FFCC00;\ border-color: #FFFFFF\ }\ .ace-vibrant-ink .ace_entity.ace_name.ace_function,\ .ace-vibrant-ink .ace_support.ace_function,\ .ace-vibrant-ink .ace_variable {\ color: #FFCC00\ }\ .ace-vibrant-ink .ace_variable.ace_parameter {\ font-style: italic\ }\ .ace-vibrant-ink .ace_string {\ color: #66FF00\ }\ .ace-vibrant-ink .ace_string.ace_regexp {\ color: #44B4CC\ }\ .ace-vibrant-ink .ace_comment {\ color: #9933CC\ }\ .ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {\ font-style: italic;\ color: #99CC99\ }\ .ace-vibrant-ink .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYNDTc/oPAALPAZ7hxlbYAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/theme-xcode.js ================================================ ace.define("ace/theme/xcode",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-xcode"; exports.cssText = "\ .ace-xcode .ace_gutter {\ background: #e8e8e8;\ color: #333\ }\ .ace-xcode .ace_print-margin {\ width: 1px;\ background: #e8e8e8\ }\ .ace-xcode {\ background-color: #FFFFFF;\ color: #000000\ }\ .ace-xcode .ace_cursor {\ color: #000000\ }\ .ace-xcode .ace_marker-layer .ace_selection {\ background: #B5D5FF\ }\ .ace-xcode.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #FFFFFF;\ border-radius: 2px\ }\ .ace-xcode .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174)\ }\ .ace-xcode .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #BFBFBF\ }\ .ace-xcode .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.071)\ }\ .ace-xcode .ace_gutter-active-line {\ background-color: rgba(0, 0, 0, 0.071)\ }\ .ace-xcode .ace_marker-layer .ace_selected-word {\ border: 1px solid #B5D5FF\ }\ .ace-xcode .ace_constant.ace_language,\ .ace-xcode .ace_keyword,\ .ace-xcode .ace_meta,\ .ace-xcode .ace_variable.ace_language {\ color: #C800A4\ }\ .ace-xcode .ace_invisible {\ color: #BFBFBF\ }\ .ace-xcode .ace_constant.ace_character,\ .ace-xcode .ace_constant.ace_other {\ color: #275A5E\ }\ .ace-xcode .ace_constant.ace_numeric {\ color: #3A00DC\ }\ .ace-xcode .ace_entity.ace_other.ace_attribute-name,\ .ace-xcode .ace_support.ace_constant,\ .ace-xcode .ace_support.ace_function {\ color: #450084\ }\ .ace-xcode .ace_fold {\ background-color: #C800A4;\ border-color: #000000\ }\ .ace-xcode .ace_entity.ace_name.ace_tag,\ .ace-xcode .ace_support.ace_class,\ .ace-xcode .ace_support.ace_type {\ color: #790EAD\ }\ .ace-xcode .ace_storage {\ color: #C900A4\ }\ .ace-xcode .ace_string {\ color: #DF0002\ }\ .ace-xcode .ace_comment {\ color: #008E00\ }\ .ace-xcode .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: browser/plugins/ace/src-noconflict/worker-coffee.js ================================================ "no use strict"; ;(function(window) { if (typeof window.window != "undefined" && window.document) { return; } window.console = function() { var msgs = Array.prototype.slice.call(arguments, 0); postMessage({type: "log", data: msgs}); }; window.console.error = window.console.warn = window.console.log = window.console.trace = window.console; window.window = window; window.ace = window; window.onerror = function(message, file, line, col, err) { postMessage({type: "error", data: { message: message, file: file, line: line, col: col, stack: err.stack }}); }; window.normalizeModule = function(parentId, moduleName) { // normalize plugin requires if (moduleName.indexOf("!") !== -1) { var chunks = moduleName.split("!"); return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]); } // normalize relative requires if (moduleName.charAt(0) == ".") { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = (base ? base + "/" : "") + moduleName; while(moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } } return moduleName; }; window.require = function(parentId, id) { if (!id) { id = parentId; parentId = null; } if (!id.charAt) throw new Error("worker.js require() accepts only (parentId, id) as arguments"); id = window.normalizeModule(parentId, id); var module = window.require.modules[id]; if (module) { if (!module.initialized) { module.initialized = true; module.exports = module.factory().exports; } return module.exports; } var chunks = id.split("/"); if (!window.require.tlns) return console.log("unable to load " + id); chunks[0] = window.require.tlns[chunks[0]] || chunks[0]; var path = chunks.join("/") + ".js"; window.require.id = id; importScripts(path); return window.require(parentId, id); }; window.require.modules = {}; window.require.tlns = {}; window.define = function(id, deps, factory) { if (arguments.length == 2) { factory = deps; if (typeof id != "string") { deps = id; id = window.require.id; } } else if (arguments.length == 1) { factory = id; deps = []; id = window.require.id; } if (typeof factory != "function") { window.require.modules[id] = { exports: factory, initialized: true }; return; } if (!deps.length) // If there is no dependencies, we inject 'require', 'exports' and // 'module' as dependencies, to provide CommonJS compatibility. deps = ['require', 'exports', 'module']; var req = function(childId) { return window.require(id, childId); }; window.require.modules[id] = { exports: {}, factory: function() { var module = this; var returnExports = factory.apply(this, deps.map(function(dep) { switch(dep) { // Because 'require', 'exports' and 'module' aren't actual // dependencies, we must handle them seperately. case 'require': return req; case 'exports': return module.exports; case 'module': return module; // But for all other dependencies, we can just go ahead and // require them. default: return req(dep); } })); if (returnExports) module.exports = returnExports; return module; } }; }; window.define.amd = {}; window.initBaseUrls = function initBaseUrls(topLevelNamespaces) { require.tlns = topLevelNamespaces; }; window.initSender = function initSender() { var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter; var oop = window.require("ace/lib/oop"); var Sender = function() {}; (function() { oop.implement(this, EventEmitter); this.callback = function(data, callbackId) { postMessage({ type: "call", id: callbackId, data: data }); }; this.emit = function(name, data) { postMessage({ type: "event", name: name, data: data }); }; }).call(Sender.prototype); return new Sender(); }; var main = window.main = null; var sender = window.sender = null; window.onmessage = function(e) { var msg = e.data; if (msg.command) { if (main[msg.command]) main[msg.command].apply(main, msg.args); else throw new Error("Unknown command:" + msg.command); } else if (msg.init) { initBaseUrls(msg.tlns); require("ace/lib/es5-shim"); sender = window.sender = initSender(); var clazz = require(msg.module)[msg.classname]; main = window.main = new clazz(sender); } else if (msg.event && sender) { sender._signal(msg.event, msg.data); } }; })(this); ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module) { "use strict"; exports.inherits = function(ctor, superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; exports.mixin = function(obj, mixin) { for (var key in mixin) { obj[key] = mixin[key]; } return obj; }; exports.implement = function(proto, mixin) { exports.mixin(proto, mixin); }; }); ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { "use strict"; var EventEmitter = {}; var stopPropagation = function() { this.propagationStopped = true; }; var preventDefault = function() { this.defaultPrevented = true; }; EventEmitter._emit = EventEmitter._dispatchEvent = function(eventName, e) { this._eventRegistry || (this._eventRegistry = {}); this._defaultHandlers || (this._defaultHandlers = {}); var listeners = this._eventRegistry[eventName] || []; var defaultHandler = this._defaultHandlers[eventName]; if (!listeners.length && !defaultHandler) return; if (typeof e != "object" || !e) e = {}; if (!e.type) e.type = eventName; if (!e.stopPropagation) e.stopPropagation = stopPropagation; if (!e.preventDefault) e.preventDefault = preventDefault; listeners = listeners.slice(); for (var i=0; i [" + this.end.row + "/" + this.end.column + "]"); }; this.contains = function(row, column) { return this.compare(row, column) == 0; }; this.compareRange = function(range) { var cmp, end = range.end, start = range.start; cmp = this.compare(end.row, end.column); if (cmp == 1) { cmp = this.compare(start.row, start.column); if (cmp == 1) { return 2; } else if (cmp == 0) { return 1; } else { return 0; } } else if (cmp == -1) { return -2; } else { cmp = this.compare(start.row, start.column); if (cmp == -1) { return -1; } else if (cmp == 1) { return 42; } else { return 0; } } }; this.comparePoint = function(p) { return this.compare(p.row, p.column); }; this.containsRange = function(range) { return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; }; this.intersects = function(range) { var cmp = this.compareRange(range); return (cmp == -1 || cmp == 0 || cmp == 1); }; this.isEnd = function(row, column) { return this.end.row == row && this.end.column == column; }; this.isStart = function(row, column) { return this.start.row == row && this.start.column == column; }; this.setStart = function(row, column) { if (typeof row == "object") { this.start.column = row.column; this.start.row = row.row; } else { this.start.row = row; this.start.column = column; } }; this.setEnd = function(row, column) { if (typeof row == "object") { this.end.column = row.column; this.end.row = row.row; } else { this.end.row = row; this.end.column = column; } }; this.inside = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column) || this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.insideStart = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column)) { return false; } else { return true; } } return false; }; this.insideEnd = function(row, column) { if (this.compare(row, column) == 0) { if (this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.compare = function(row, column) { if (!this.isMultiLine()) { if (row === this.start.row) { return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); }; } if (row < this.start.row) return -1; if (row > this.end.row) return 1; if (this.start.row === row) return column >= this.start.column ? 0 : -1; if (this.end.row === row) return column <= this.end.column ? 0 : 1; return 0; }; this.compareStart = function(row, column) { if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.compareEnd = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else { return this.compare(row, column); } }; this.compareInside = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.clipRows = function(firstRow, lastRow) { if (this.end.row > lastRow) var end = {row: lastRow + 1, column: 0}; else if (this.end.row < firstRow) var end = {row: firstRow, column: 0}; if (this.start.row > lastRow) var start = {row: lastRow + 1, column: 0}; else if (this.start.row < firstRow) var start = {row: firstRow, column: 0}; return Range.fromPoints(start || this.start, end || this.end); }; this.extend = function(row, column) { var cmp = this.compare(row, column); if (cmp == 0) return this; else if (cmp == -1) var start = {row: row, column: column}; else var end = {row: row, column: column}; return Range.fromPoints(start || this.start, end || this.end); }; this.isEmpty = function() { return (this.start.row === this.end.row && this.start.column === this.end.column); }; this.isMultiLine = function() { return (this.start.row !== this.end.row); }; this.clone = function() { return Range.fromPoints(this.start, this.end); }; this.collapseRows = function() { if (this.end.column == 0) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0) else return new Range(this.start.row, 0, this.end.row, 0) }; this.toScreenRange = function(session) { var screenPosStart = session.documentToScreenPosition(this.start); var screenPosEnd = session.documentToScreenPosition(this.end); return new Range( screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column ); }; this.moveBy = function(row, column) { this.start.row += row; this.start.column += column; this.end.row += row; this.end.column += column; }; }).call(Range.prototype); Range.fromPoints = function(start, end) { return new Range(start.row, start.column, end.row, end.column); }; Range.comparePoints = comparePoints; Range.comparePoints = function(p1, p2) { return p1.row - p2.row || p1.column - p2.column; }; exports.Range = Range; }); ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Anchor = exports.Anchor = function(doc, row, column) { this.$onChange = this.onChange.bind(this); this.attach(doc); if (typeof column == "undefined") this.setPosition(row.row, row.column); else this.setPosition(row, column); }; (function() { oop.implement(this, EventEmitter); this.getPosition = function() { return this.$clipPositionToDocument(this.row, this.column); }; this.getDocument = function() { return this.document; }; this.$insertRight = false; this.onChange = function(e) { var delta = e.data; var range = delta.range; if (range.start.row == range.end.row && range.start.row != this.row) return; if (range.start.row > this.row) return; if (range.start.row == this.row && range.start.column > this.column) return; var row = this.row; var column = this.column; var start = range.start; var end = range.end; if (delta.action === "insertText") { if (start.row === row && start.column <= column) { if (start.column === column && this.$insertRight) { } else if (start.row === end.row) { column += end.column - start.column; } else { column -= start.column; row += end.row - start.row; } } else if (start.row !== end.row && start.row < row) { row += end.row - start.row; } } else if (delta.action === "insertLines") { if (start.row === row && column === 0 && this.$insertRight) { } else if (start.row <= row) { row += end.row - start.row; } } else if (delta.action === "removeText") { if (start.row === row && start.column < column) { if (end.column >= column) column = start.column; else column = Math.max(0, column - (end.column - start.column)); } else if (start.row !== end.row && start.row < row) { if (end.row === row) column = Math.max(0, column - end.column) + start.column; row -= (end.row - start.row); } else if (end.row === row) { row -= end.row - start.row; column = Math.max(0, column - end.column) + start.column; } } else if (delta.action == "removeLines") { if (start.row <= row) { if (end.row <= row) row -= end.row - start.row; else { row = start.row; column = 0; } } } this.setPosition(row, column, true); }; this.setPosition = function(row, column, noClip) { var pos; if (noClip) { pos = { row: row, column: column }; } else { pos = this.$clipPositionToDocument(row, column); } if (this.row == pos.row && this.column == pos.column) return; var old = { row: this.row, column: this.column }; this.row = pos.row; this.column = pos.column; this._signal("change", { old: old, value: pos }); }; this.detach = function() { this.document.removeEventListener("change", this.$onChange); }; this.attach = function(doc) { this.document = doc || this.document; this.document.on("change", this.$onChange); }; this.$clipPositionToDocument = function(row, column) { var pos = {}; if (row >= this.document.getLength()) { pos.row = Math.max(0, this.document.getLength() - 1); pos.column = this.document.getLine(pos.row).length; } else if (row < 0) { pos.row = 0; pos.column = 0; } else { pos.row = row; pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); } if (column < 0) pos.column = 0; return pos; }; }).call(Anchor.prototype); }); ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var Document = function(text) { this.$lines = []; if (text.length === 0) { this.$lines = [""]; } else if (Array.isArray(text)) { this._insertLines(0, text); } else { this.insert({row: 0, column:0}, text); } }; (function() { oop.implement(this, EventEmitter); this.setValue = function(text) { var len = this.getLength(); this.remove(new Range(0, 0, len, this.getLine(len-1).length)); this.insert({row: 0, column:0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); }; this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; if ("aaa".split(/a/).length === 0) this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; else this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; this.$detectNewLine = function(text) { var match = text.match(/^.*?(\r\n|\r|\n)/m); this.$autoNewLine = match ? match[1] : "\n"; this._signal("changeNewLineMode"); }; this.getNewLineCharacter = function() { switch (this.$newLineMode) { case "windows": return "\r\n"; case "unix": return "\n"; default: return this.$autoNewLine || "\n"; } }; this.$autoNewLine = ""; this.$newLineMode = "auto"; this.setNewLineMode = function(newLineMode) { if (this.$newLineMode === newLineMode) return; this.$newLineMode = newLineMode; this._signal("changeNewLineMode"); }; this.getNewLineMode = function() { return this.$newLineMode; }; this.isNewLine = function(text) { return (text == "\r\n" || text == "\r" || text == "\n"); }; this.getLine = function(row) { return this.$lines[row] || ""; }; this.getLines = function(firstRow, lastRow) { return this.$lines.slice(firstRow, lastRow + 1); }; this.getAllLines = function() { return this.getLines(0, this.getLength()); }; this.getLength = function() { return this.$lines.length; }; this.getTextRange = function(range) { if (range.start.row == range.end.row) { return this.getLine(range.start.row) .substring(range.start.column, range.end.column); } var lines = this.getLines(range.start.row, range.end.row); lines[0] = (lines[0] || "").substring(range.start.column); var l = lines.length - 1; if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column); return lines.join(this.getNewLineCharacter()); }; this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); position.column = this.getLine(length-1).length; } else if (position.row < 0) position.row = 0; return position; }; this.insert = function(position, text) { if (!text || text.length === 0) return position; position = this.$clipPosition(position); if (this.getLength() <= 1) this.$detectNewLine(text); var lines = this.$split(text); var firstLine = lines.splice(0, 1)[0]; var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0]; position = this.insertInLine(position, firstLine); if (lastLine !== null) { position = this.insertNewLine(position); // terminate first line position = this._insertLines(position.row, lines); position = this.insertInLine(position, lastLine || ""); } return position; }; this.insertLines = function(row, lines) { if (row >= this.getLength()) return this.insert({row: row, column: 0}, "\n" + lines.join("\n")); return this._insertLines(Math.max(row, 0), lines); }; this._insertLines = function(row, lines) { if (lines.length == 0) return {row: row, column: 0}; while (lines.length > 0xF000) { var end = this._insertLines(row, lines.slice(0, 0xF000)); lines = lines.slice(0xF000); row = end.row; } var args = [row, 0]; args.push.apply(args, lines); this.$lines.splice.apply(this.$lines, args); var range = new Range(row, 0, row + lines.length, 0); var delta = { action: "insertLines", range: range, lines: lines }; this._signal("change", { data: delta }); return range.end; }; this.insertNewLine = function(position) { position = this.$clipPosition(position); var line = this.$lines[position.row] || ""; this.$lines[position.row] = line.substring(0, position.column); this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length)); var end = { row : position.row + 1, column : 0 }; var delta = { action: "insertText", range: Range.fromPoints(position, end), text: this.getNewLineCharacter() }; this._signal("change", { data: delta }); return end; }; this.insertInLine = function(position, text) { if (text.length == 0) return position; var line = this.$lines[position.row] || ""; this.$lines[position.row] = line.substring(0, position.column) + text + line.substring(position.column); var end = { row : position.row, column : position.column + text.length }; var delta = { action: "insertText", range: Range.fromPoints(position, end), text: text }; this._signal("change", { data: delta }); return end; }; this.remove = function(range) { if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end); range.start = this.$clipPosition(range.start); range.end = this.$clipPosition(range.end); if (range.isEmpty()) return range.start; var firstRow = range.start.row; var lastRow = range.end.row; if (range.isMultiLine()) { var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1; var lastFullRow = lastRow - 1; if (range.end.column > 0) this.removeInLine(lastRow, 0, range.end.column); if (lastFullRow >= firstFullRow) this._removeLines(firstFullRow, lastFullRow); if (firstFullRow != firstRow) { this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length); this.removeNewLine(range.start.row); } } else { this.removeInLine(firstRow, range.start.column, range.end.column); } return range.start; }; this.removeInLine = function(row, startColumn, endColumn) { if (startColumn == endColumn) return; var range = new Range(row, startColumn, row, endColumn); var line = this.getLine(row); var removed = line.substring(startColumn, endColumn); var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length); this.$lines.splice(row, 1, newLine); var delta = { action: "removeText", range: range, text: removed }; this._signal("change", { data: delta }); return range.start; }; this.removeLines = function(firstRow, lastRow) { if (firstRow < 0 || lastRow >= this.getLength()) return this.remove(new Range(firstRow, 0, lastRow + 1, 0)); return this._removeLines(firstRow, lastRow); }; this._removeLines = function(firstRow, lastRow) { var range = new Range(firstRow, 0, lastRow + 1, 0); var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1); var delta = { action: "removeLines", range: range, nl: this.getNewLineCharacter(), lines: removed }; this._signal("change", { data: delta }); return removed; }; this.removeNewLine = function(row) { var firstLine = this.getLine(row); var secondLine = this.getLine(row+1); var range = new Range(row, firstLine.length, row+1, 0); var line = firstLine + secondLine; this.$lines.splice(row, 2, line); var delta = { action: "removeText", range: range, text: this.getNewLineCharacter() }; this._signal("change", { data: delta }); }; this.replace = function(range, text) { if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end); if (text.length == 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); if (text) { var end = this.insert(range.start, text); } else { end = range.start; } return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { var delta = deltas[i]; var range = Range.fromPoints(delta.range.start, delta.range.end); if (delta.action == "insertLines") this._removeLines(range.start.row, range.end.row - 1); else if (delta.action == "insertText") this.remove(range); else if (delta.action == "removeLines") this._insertLines(range.start.row, delta.lines); else if (delta.action == "removeText") this.insert(range.start, delta.text); } }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; for (var i = startRow || 0, l = lines.length; i < l; i++) { index -= lines[i].length + newlineLength; if (index < 0) return {row: i, column: index + lines[i].length + newlineLength}; } return {row: l-1, column: lines[l-1].length}; }; this.positionToIndex = function(pos, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; var index = 0; var row = Math.min(pos.row, lines.length); for (var i = startRow || 0; i < row; ++i) index += lines[i].length + newlineLength; return index + pos.column; }; }).call(Document.prototype); exports.Document = Document; }); ace.define("ace/lib/lang",["require","exports","module"], function(require, exports, module) { "use strict"; exports.last = function(a) { return a[a.length - 1]; }; exports.stringReverse = function(string) { return string.split("").reverse().join(""); }; exports.stringRepeat = function (string, count) { var result = ''; while (count > 0) { if (count & 1) result += string; if (count >>= 1) string += string; } return result; }; var trimBeginRegexp = /^\s\s*/; var trimEndRegexp = /\s\s*$/; exports.stringTrimLeft = function (string) { return string.replace(trimBeginRegexp, ''); }; exports.stringTrimRight = function (string) { return string.replace(trimEndRegexp, ''); }; exports.copyObject = function(obj) { var copy = {}; for (var key in obj) { copy[key] = obj[key]; } return copy; }; exports.copyArray = function(array){ var copy = []; for (var i=0, l=array.length; i= 0) { levels += 1; } else if (_ref1 = token[0], __indexOf.call(EXPRESSION_END, _ref1) >= 0) { levels -= 1; } i += 1; } return i - 1; }; Rewriter.prototype.removeLeadingNewlines = function() { var i, tag, _i, _len, _ref; _ref = this.tokens; for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { tag = _ref[i][0]; if (tag !== 'TERMINATOR') { break; } } if (i) { return this.tokens.splice(0, i); } }; Rewriter.prototype.closeOpenCalls = function() { var action, condition; condition = function(token, i) { var _ref; return ((_ref = token[0]) === ')' || _ref === 'CALL_END') || token[0] === 'OUTDENT' && this.tag(i - 1) === ')'; }; action = function(token, i) { return this.tokens[token[0] === 'OUTDENT' ? i - 1 : i][0] = 'CALL_END'; }; return this.scanTokens(function(token, i) { if (token[0] === 'CALL_START') { this.detectEnd(i + 1, condition, action); } return 1; }); }; Rewriter.prototype.closeOpenIndexes = function() { var action, condition; condition = function(token, i) { var _ref; return (_ref = token[0]) === ']' || _ref === 'INDEX_END'; }; action = function(token, i) { return token[0] = 'INDEX_END'; }; return this.scanTokens(function(token, i) { if (token[0] === 'INDEX_START') { this.detectEnd(i + 1, condition, action); } return 1; }); }; Rewriter.prototype.matchTags = function() { var fuzz, i, j, pattern, _i, _ref, _ref1; i = arguments[0], pattern = 2 <= arguments.length ? __slice.call(arguments, 1) : []; fuzz = 0; for (j = _i = 0, _ref = pattern.length; 0 <= _ref ? _i < _ref : _i > _ref; j = 0 <= _ref ? ++_i : --_i) { while (this.tag(i + j + fuzz) === 'HERECOMMENT') { fuzz += 2; } if (pattern[j] == null) { continue; } if (typeof pattern[j] === 'string') { pattern[j] = [pattern[j]]; } if (_ref1 = this.tag(i + j + fuzz), __indexOf.call(pattern[j], _ref1) < 0) { return false; } } return true; }; Rewriter.prototype.looksObjectish = function(j) { return this.matchTags(j, '@', null, ':') || this.matchTags(j, null, ':'); }; Rewriter.prototype.findTagsBackwards = function(i, tags) { var backStack, _ref, _ref1, _ref2, _ref3, _ref4, _ref5; backStack = []; while (i >= 0 && (backStack.length || (_ref2 = this.tag(i), __indexOf.call(tags, _ref2) < 0) && ((_ref3 = this.tag(i), __indexOf.call(EXPRESSION_START, _ref3) < 0) || this.tokens[i].generated) && (_ref4 = this.tag(i), __indexOf.call(LINEBREAKS, _ref4) < 0))) { if (_ref = this.tag(i), __indexOf.call(EXPRESSION_END, _ref) >= 0) { backStack.push(this.tag(i)); } if ((_ref1 = this.tag(i), __indexOf.call(EXPRESSION_START, _ref1) >= 0) && backStack.length) { backStack.pop(); } i -= 1; } return _ref5 = this.tag(i), __indexOf.call(tags, _ref5) >= 0; }; Rewriter.prototype.addImplicitBracesAndParens = function() { var stack; stack = []; return this.scanTokens(function(token, i, tokens) { var endAllImplicitCalls, endImplicitCall, endImplicitObject, forward, inImplicit, inImplicitCall, inImplicitControl, inImplicitObject, nextTag, offset, prevTag, prevToken, s, sameLine, stackIdx, stackTag, stackTop, startIdx, startImplicitCall, startImplicitObject, startsLine, tag, _ref, _ref1, _ref2, _ref3, _ref4, _ref5; tag = token[0]; prevTag = (prevToken = i > 0 ? tokens[i - 1] : [])[0]; nextTag = (i < tokens.length - 1 ? tokens[i + 1] : [])[0]; stackTop = function() { return stack[stack.length - 1]; }; startIdx = i; forward = function(n) { return i - startIdx + n; }; inImplicit = function() { var _ref, _ref1; return (_ref = stackTop()) != null ? (_ref1 = _ref[2]) != null ? _ref1.ours : void 0 : void 0; }; inImplicitCall = function() { var _ref; return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '('; }; inImplicitObject = function() { var _ref; return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '{'; }; inImplicitControl = function() { var _ref; return inImplicit && ((_ref = stackTop()) != null ? _ref[0] : void 0) === 'CONTROL'; }; startImplicitCall = function(j) { var idx; idx = j != null ? j : i; stack.push([ '(', idx, { ours: true } ]); tokens.splice(idx, 0, generate('CALL_START', '(')); if (j == null) { return i += 1; } }; endImplicitCall = function() { stack.pop(); tokens.splice(i, 0, generate('CALL_END', ')')); return i += 1; }; endAllImplicitCalls = function() { while (inImplicitCall()) { endImplicitCall(); } }; startImplicitObject = function(j, startsLine) { var idx; if (startsLine == null) { startsLine = true; } idx = j != null ? j : i; stack.push([ '{', idx, { sameLine: true, startsLine: startsLine, ours: true } ]); tokens.splice(idx, 0, generate('{', generate(new String('{')))); if (j == null) { return i += 1; } }; endImplicitObject = function(j) { j = j != null ? j : i; stack.pop(); tokens.splice(j, 0, generate('}', '}')); return i += 1; }; if (inImplicitCall() && (tag === 'IF' || tag === 'TRY' || tag === 'FINALLY' || tag === 'CATCH' || tag === 'CLASS' || tag === 'SWITCH')) { stack.push([ 'CONTROL', i, { ours: true } ]); return forward(1); } if (tag === 'INDENT' && inImplicit()) { if (prevTag !== '=>' && prevTag !== '->' && prevTag !== '[' && prevTag !== '(' && prevTag !== ',' && prevTag !== '{' && prevTag !== 'TRY' && prevTag !== 'ELSE' && prevTag !== '=') { while (inImplicitCall()) { endImplicitCall(); } } if (inImplicitControl()) { stack.pop(); } stack.push([tag, i]); return forward(1); } if (__indexOf.call(EXPRESSION_START, tag) >= 0) { stack.push([tag, i]); return forward(1); } if (__indexOf.call(EXPRESSION_END, tag) >= 0) { while (inImplicit()) { if (inImplicitCall()) { endImplicitCall(); } else if (inImplicitObject()) { endImplicitObject(); } else { stack.pop(); } } stack.pop(); } if ((__indexOf.call(IMPLICIT_FUNC, tag) >= 0 && token.spaced && !token.stringEnd || tag === '?' && i > 0 && !tokens[i - 1].spaced) && (__indexOf.call(IMPLICIT_CALL, nextTag) >= 0 || __indexOf.call(IMPLICIT_UNSPACED_CALL, nextTag) >= 0 && !((_ref = tokens[i + 1]) != null ? _ref.spaced : void 0) && !((_ref1 = tokens[i + 1]) != null ? _ref1.newLine : void 0))) { if (tag === '?') { tag = token[0] = 'FUNC_EXIST'; } startImplicitCall(i + 1); return forward(2); } if (__indexOf.call(IMPLICIT_FUNC, tag) >= 0 && this.matchTags(i + 1, 'INDENT', null, ':') && !this.findTagsBackwards(i, ['CLASS', 'EXTENDS', 'IF', 'CATCH', 'SWITCH', 'LEADING_WHEN', 'FOR', 'WHILE', 'UNTIL'])) { startImplicitCall(i + 1); stack.push(['INDENT', i + 2]); return forward(3); } if (tag === ':') { if (this.tag(i - 2) === '@') { s = i - 2; } else { s = i - 1; } while (this.tag(s - 2) === 'HERECOMMENT') { s -= 2; } startsLine = s === 0 || (_ref2 = this.tag(s - 1), __indexOf.call(LINEBREAKS, _ref2) >= 0) || tokens[s - 1].newLine; if (stackTop()) { _ref3 = stackTop(), stackTag = _ref3[0], stackIdx = _ref3[1]; if ((stackTag === '{' || stackTag === 'INDENT' && this.tag(stackIdx - 1) === '{') && (startsLine || this.tag(s - 1) === ',' || this.tag(s - 1) === '{')) { return forward(1); } } startImplicitObject(s, !!startsLine); return forward(2); } if (inImplicitCall() && __indexOf.call(CALL_CLOSERS, tag) >= 0) { if (prevTag === 'OUTDENT') { endImplicitCall(); return forward(1); } if (prevToken.newLine) { endAllImplicitCalls(); return forward(1); } } if (inImplicitObject() && __indexOf.call(LINEBREAKS, tag) >= 0) { stackTop()[2].sameLine = false; } if (__indexOf.call(IMPLICIT_END, tag) >= 0) { while (inImplicit()) { _ref4 = stackTop(), stackTag = _ref4[0], stackIdx = _ref4[1], (_ref5 = _ref4[2], sameLine = _ref5.sameLine, startsLine = _ref5.startsLine); if (inImplicitCall() && prevTag !== ',') { endImplicitCall(); } else if (inImplicitObject() && sameLine && !startsLine) { endImplicitObject(); } else if (inImplicitObject() && tag === 'TERMINATOR' && prevTag !== ',' && !(startsLine && this.looksObjectish(i + 1))) { endImplicitObject(); } else { break; } } } if (tag === ',' && !this.looksObjectish(i + 1) && inImplicitObject() && (nextTag !== 'TERMINATOR' || !this.looksObjectish(i + 2))) { offset = nextTag === 'OUTDENT' ? 1 : 0; while (inImplicitObject()) { endImplicitObject(i + offset); } } return forward(1); }); }; Rewriter.prototype.addLocationDataToGeneratedTokens = function() { return this.scanTokens(function(token, i, tokens) { var column, line, nextLocation, prevLocation, _ref, _ref1; if (token[2]) { return 1; } if (!(token.generated || token.explicit)) { return 1; } if (token[0] === '{' && (nextLocation = (_ref = tokens[i + 1]) != null ? _ref[2] : void 0)) { line = nextLocation.first_line, column = nextLocation.first_column; } else if (prevLocation = (_ref1 = tokens[i - 1]) != null ? _ref1[2] : void 0) { line = prevLocation.last_line, column = prevLocation.last_column; } else { line = column = 0; } token[2] = { first_line: line, first_column: column, last_line: line, last_column: column }; return 1; }); }; Rewriter.prototype.normalizeLines = function() { var action, condition, indent, outdent, starter; starter = indent = outdent = null; condition = function(token, i) { var _ref, _ref1, _ref2, _ref3; return token[1] !== ';' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === 'TERMINATOR' && (_ref1 = this.tag(i + 1), __indexOf.call(EXPRESSION_CLOSE, _ref1) >= 0)) && !(token[0] === 'ELSE' && starter !== 'THEN') && !(((_ref2 = token[0]) === 'CATCH' || _ref2 === 'FINALLY') && (starter === '->' || starter === '=>')) || (_ref3 = token[0], __indexOf.call(CALL_CLOSERS, _ref3) >= 0) && this.tokens[i - 1].newLine; }; action = function(token, i) { return this.tokens.splice((this.tag(i - 1) === ',' ? i - 1 : i), 0, outdent); }; return this.scanTokens(function(token, i, tokens) { var j, tag, _i, _ref, _ref1, _ref2; tag = token[0]; if (tag === 'TERMINATOR') { if (this.tag(i + 1) === 'ELSE' && this.tag(i - 1) !== 'OUTDENT') { tokens.splice.apply(tokens, [i, 1].concat(__slice.call(this.indentation()))); return 1; } if (_ref = this.tag(i + 1), __indexOf.call(EXPRESSION_CLOSE, _ref) >= 0) { tokens.splice(i, 1); return 0; } } if (tag === 'CATCH') { for (j = _i = 1; _i <= 2; j = ++_i) { if (!((_ref1 = this.tag(i + j)) === 'OUTDENT' || _ref1 === 'TERMINATOR' || _ref1 === 'FINALLY')) { continue; } tokens.splice.apply(tokens, [i + j, 0].concat(__slice.call(this.indentation()))); return 2 + j; } } if (__indexOf.call(SINGLE_LINERS, tag) >= 0 && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) { starter = tag; _ref2 = this.indentation(true), indent = _ref2[0], outdent = _ref2[1]; if (starter === 'THEN') { indent.fromThen = true; } tokens.splice(i + 1, 0, indent); this.detectEnd(i + 2, condition, action); if (tag === 'THEN') { tokens.splice(i, 1); } return 1; } return 1; }); }; Rewriter.prototype.tagPostfixConditionals = function() { var action, condition, original; original = null; condition = function(token, i) { var prevTag, tag; tag = token[0]; prevTag = this.tokens[i - 1][0]; return tag === 'TERMINATOR' || (tag === 'INDENT' && __indexOf.call(SINGLE_LINERS, prevTag) < 0); }; action = function(token, i) { if (token[0] !== 'INDENT' || (token.generated && !token.fromThen)) { return original[0] = 'POST_' + original[0]; } }; return this.scanTokens(function(token, i) { if (token[0] !== 'IF') { return 1; } original = token; this.detectEnd(i + 1, condition, action); return 1; }); }; Rewriter.prototype.indentation = function(implicit) { var indent, outdent; if (implicit == null) { implicit = false; } indent = ['INDENT', 2]; outdent = ['OUTDENT', 2]; if (implicit) { indent.generated = outdent.generated = true; } if (!implicit) { indent.explicit = outdent.explicit = true; } return [indent, outdent]; }; Rewriter.prototype.generate = generate; Rewriter.prototype.tag = function(i) { var _ref; return (_ref = this.tokens[i]) != null ? _ref[0] : void 0; }; return Rewriter; })(); BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], ['INDENT', 'OUTDENT'], ['CALL_START', 'CALL_END'], ['PARAM_START', 'PARAM_END'], ['INDEX_START', 'INDEX_END']]; exports.INVERSES = INVERSES = {}; EXPRESSION_START = []; EXPRESSION_END = []; for (_i = 0, _len = BALANCED_PAIRS.length; _i < _len; _i++) { _ref = BALANCED_PAIRS[_i], left = _ref[0], rite = _ref[1]; EXPRESSION_START.push(INVERSES[rite] = left); EXPRESSION_END.push(INVERSES[left] = rite); } EXPRESSION_CLOSE = ['CATCH', 'THEN', 'ELSE', 'FINALLY'].concat(EXPRESSION_END); IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS']; IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'NULL', 'UNDEFINED', 'UNARY', 'SUPER', 'THROW', '@', '->', '=>', '[', '(', '{', '--', '++']; IMPLICIT_UNSPACED_CALL = ['+', '-']; IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR']; SINGLE_LINERS = ['ELSE', '->', '=>', 'TRY', 'FINALLY', 'THEN']; SINGLE_CLOSERS = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN']; LINEBREAKS = ['TERMINATOR', 'INDENT', 'OUTDENT']; CALL_CLOSERS = ['.', '?.', '::', '?::']; }); ace.define("ace/mode/coffee/helpers",["require","exports","module"], function(require, exports, module) { var buildLocationData, extend, flatten, last, repeat, syntaxErrorToString, _ref; exports.starts = function(string, literal, start) { return literal === string.substr(start, literal.length); }; exports.ends = function(string, literal, back) { var len; len = literal.length; return literal === string.substr(string.length - len - (back || 0), len); }; exports.repeat = repeat = function(str, n) { var res; res = ''; while (n > 0) { if (n & 1) { res += str; } n >>>= 1; str += str; } return res; }; exports.compact = function(array) { var item, _i, _len, _results; _results = []; for (_i = 0, _len = array.length; _i < _len; _i++) { item = array[_i]; if (item) { _results.push(item); } } return _results; }; exports.count = function(string, substr) { var num, pos; num = pos = 0; if (!substr.length) { return 1 / 0; } while (pos = 1 + string.indexOf(substr, pos)) { num++; } return num; }; exports.merge = function(options, overrides) { return extend(extend({}, options), overrides); }; extend = exports.extend = function(object, properties) { var key, val; for (key in properties) { val = properties[key]; object[key] = val; } return object; }; exports.flatten = flatten = function(array) { var element, flattened, _i, _len; flattened = []; for (_i = 0, _len = array.length; _i < _len; _i++) { element = array[_i]; if (element instanceof Array) { flattened = flattened.concat(flatten(element)); } else { flattened.push(element); } } return flattened; }; exports.del = function(obj, key) { var val; val = obj[key]; delete obj[key]; return val; }; exports.last = last = function(array, back) { return array[array.length - (back || 0) - 1]; }; exports.some = (_ref = Array.prototype.some) != null ? _ref : function(fn) { var e, _i, _len; for (_i = 0, _len = this.length; _i < _len; _i++) { e = this[_i]; if (fn(e)) { return true; } } return false; }; exports.invertLiterate = function(code) { var line, lines, maybe_code; maybe_code = true; lines = (function() { var _i, _len, _ref1, _results; _ref1 = code.split('\n'); _results = []; for (_i = 0, _len = _ref1.length; _i < _len; _i++) { line = _ref1[_i]; if (maybe_code && /^([ ]{4}|[ ]{0,3}\t)/.test(line)) { _results.push(line); } else if (maybe_code = /^\s*$/.test(line)) { _results.push(line); } else { _results.push('# ' + line); } } return _results; })(); return lines.join('\n'); }; buildLocationData = function(first, last) { if (!last) { return first; } else { return { first_line: first.first_line, first_column: first.first_column, last_line: last.last_line, last_column: last.last_column }; } }; exports.addLocationDataFn = function(first, last) { return function(obj) { if (((typeof obj) === 'object') && (!!obj['updateLocationDataIfMissing'])) { obj.updateLocationDataIfMissing(buildLocationData(first, last)); } return obj; }; }; exports.locationDataToString = function(obj) { var locationData; if (("2" in obj) && ("first_line" in obj[2])) { locationData = obj[2]; } else if ("first_line" in obj) { locationData = obj; } if (locationData) { return ("" + (locationData.first_line + 1) + ":" + (locationData.first_column + 1) + "-") + ("" + (locationData.last_line + 1) + ":" + (locationData.last_column + 1)); } else { return "No location data"; } }; exports.baseFileName = function(file, stripExt, useWinPathSep) { var parts, pathSep; if (stripExt == null) { stripExt = false; } if (useWinPathSep == null) { useWinPathSep = false; } pathSep = useWinPathSep ? /\\|\// : /\//; parts = file.split(pathSep); file = parts[parts.length - 1]; if (!(stripExt && file.indexOf('.') >= 0)) { return file; } parts = file.split('.'); parts.pop(); if (parts[parts.length - 1] === 'coffee' && parts.length > 1) { parts.pop(); } return parts.join('.'); }; exports.isCoffee = function(file) { return /\.((lit)?coffee|coffee\.md)$/.test(file); }; exports.isLiterate = function(file) { return /\.(litcoffee|coffee\.md)$/.test(file); }; exports.throwSyntaxError = function(message, location) { var error; if (location.last_line == null) { location.last_line = location.first_line; } if (location.last_column == null) { location.last_column = location.first_column; } error = new SyntaxError(message); error.location = location; error.toString = syntaxErrorToString; error.stack = error.toString(); throw error; }; exports.updateSyntaxError = function(error, code, filename) { if (error.toString === syntaxErrorToString) { error.code || (error.code = code); error.filename || (error.filename = filename); error.stack = error.toString(); } return error; }; syntaxErrorToString = function() { var codeLine, colorize, colorsEnabled, end, filename, first_column, first_line, last_column, last_line, marker, start, _ref1, _ref2; if (!(this.code && this.location)) { return Error.prototype.toString.call(this); } _ref1 = this.location, first_line = _ref1.first_line, first_column = _ref1.first_column, last_line = _ref1.last_line, last_column = _ref1.last_column; if (last_line == null) { last_line = first_line; } if (last_column == null) { last_column = first_column; } filename = this.filename || '[stdin]'; codeLine = this.code.split('\n')[first_line]; start = first_column; end = first_line === last_line ? last_column + 1 : codeLine.length; marker = repeat(' ', start) + repeat('^', end - start); if (typeof process !== "undefined" && process !== null) { colorsEnabled = process.stdout.isTTY && !process.env.NODE_DISABLE_COLORS; } if ((_ref2 = this.colorful) != null ? _ref2 : colorsEnabled) { colorize = function(str) { return "\x1B[1;31m" + str + "\x1B[0m"; }; codeLine = codeLine.slice(0, start) + colorize(codeLine.slice(start, end)) + codeLine.slice(end); marker = colorize(marker); } return "" + filename + ":" + (first_line + 1) + ":" + (first_column + 1) + ": error: " + this.message + "\n" + codeLine + "\n" + marker; }; }); ace.define("ace/mode/coffee/lexer",["require","exports","module","ace/mode/coffee/rewriter","ace/mode/coffee/helpers"], function(require, exports, module) { var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, invertLiterate, key, last, locationDataToString, repeat, starts, throwSyntaxError, _ref, _ref1, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; _ref = require('./rewriter'), Rewriter = _ref.Rewriter, INVERSES = _ref.INVERSES; _ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last, repeat = _ref1.repeat, invertLiterate = _ref1.invertLiterate, locationDataToString = _ref1.locationDataToString, throwSyntaxError = _ref1.throwSyntaxError; exports.Lexer = Lexer = (function() { function Lexer() {} Lexer.prototype.tokenize = function(code, opts) { var consumed, i, tag, _ref2; if (opts == null) { opts = {}; } this.literate = opts.literate; this.indent = 0; this.baseIndent = 0; this.indebt = 0; this.outdebt = 0; this.indents = []; this.ends = []; this.tokens = []; this.chunkLine = opts.line || 0; this.chunkColumn = opts.column || 0; code = this.clean(code); i = 0; while (this.chunk = code.slice(i)) { consumed = this.identifierToken() || this.commentToken() || this.whitespaceToken() || this.lineToken() || this.heredocToken() || this.stringToken() || this.numberToken() || this.regexToken() || this.jsToken() || this.literalToken(); _ref2 = this.getLineAndColumnFromChunk(consumed), this.chunkLine = _ref2[0], this.chunkColumn = _ref2[1]; i += consumed; } this.closeIndentation(); if (tag = this.ends.pop()) { this.error("missing " + tag); } if (opts.rewrite === false) { return this.tokens; } return (new Rewriter).rewrite(this.tokens); }; Lexer.prototype.clean = function(code) { if (code.charCodeAt(0) === BOM) { code = code.slice(1); } code = code.replace(/\r/g, '').replace(TRAILING_SPACES, ''); if (WHITESPACE.test(code)) { code = "\n" + code; this.chunkLine--; } if (this.literate) { code = invertLiterate(code); } return code; }; Lexer.prototype.identifierToken = function() { var colon, colonOffset, forcedIdentifier, id, idLength, input, match, poppedToken, prev, tag, tagToken, _ref2, _ref3, _ref4; if (!(match = IDENTIFIER.exec(this.chunk))) { return 0; } input = match[0], id = match[1], colon = match[2]; idLength = id.length; poppedToken = void 0; if (id === 'own' && this.tag() === 'FOR') { this.token('OWN', id); return id.length; } forcedIdentifier = colon || (prev = last(this.tokens)) && (((_ref2 = prev[0]) === '.' || _ref2 === '?.' || _ref2 === '::' || _ref2 === '?::') || !prev.spaced && prev[0] === '@'); tag = 'IDENTIFIER'; if (!forcedIdentifier && (__indexOf.call(JS_KEYWORDS, id) >= 0 || __indexOf.call(COFFEE_KEYWORDS, id) >= 0)) { tag = id.toUpperCase(); if (tag === 'WHEN' && (_ref3 = this.tag(), __indexOf.call(LINE_BREAK, _ref3) >= 0)) { tag = 'LEADING_WHEN'; } else if (tag === 'FOR') { this.seenFor = true; } else if (tag === 'UNLESS') { tag = 'IF'; } else if (__indexOf.call(UNARY, tag) >= 0) { tag = 'UNARY'; } else if (__indexOf.call(RELATION, tag) >= 0) { if (tag !== 'INSTANCEOF' && this.seenFor) { tag = 'FOR' + tag; this.seenFor = false; } else { tag = 'RELATION'; if (this.value() === '!') { poppedToken = this.tokens.pop(); id = '!' + id; } } } } if (__indexOf.call(JS_FORBIDDEN, id) >= 0) { if (forcedIdentifier) { tag = 'IDENTIFIER'; id = new String(id); id.reserved = true; } else if (__indexOf.call(RESERVED, id) >= 0) { this.error("reserved word \"" + id + "\""); } } if (!forcedIdentifier) { if (__indexOf.call(COFFEE_ALIASES, id) >= 0) { id = COFFEE_ALIAS_MAP[id]; } tag = (function() { switch (id) { case '!': return 'UNARY'; case '==': case '!=': return 'COMPARE'; case '&&': case '||': return 'LOGIC'; case 'true': case 'false': return 'BOOL'; case 'break': case 'continue': return 'STATEMENT'; default: return tag; } })(); } tagToken = this.token(tag, id, 0, idLength); if (poppedToken) { _ref4 = [poppedToken[2].first_line, poppedToken[2].first_column], tagToken[2].first_line = _ref4[0], tagToken[2].first_column = _ref4[1]; } if (colon) { colonOffset = input.lastIndexOf(':'); this.token(':', ':', colonOffset, colon.length); } return input.length; }; Lexer.prototype.numberToken = function() { var binaryLiteral, lexedLength, match, number, octalLiteral; if (!(match = NUMBER.exec(this.chunk))) { return 0; } number = match[0]; if (/^0[BOX]/.test(number)) { this.error("radix prefix '" + number + "' must be lowercase"); } else if (/E/.test(number) && !/^0x/.test(number)) { this.error("exponential notation '" + number + "' must be indicated with a lowercase 'e'"); } else if (/^0\d*[89]/.test(number)) { this.error("decimal literal '" + number + "' must not be prefixed with '0'"); } else if (/^0\d+/.test(number)) { this.error("octal literal '" + number + "' must be prefixed with '0o'"); } lexedLength = number.length; if (octalLiteral = /^0o([0-7]+)/.exec(number)) { number = '0x' + parseInt(octalLiteral[1], 8).toString(16); } if (binaryLiteral = /^0b([01]+)/.exec(number)) { number = '0x' + parseInt(binaryLiteral[1], 2).toString(16); } this.token('NUMBER', number, 0, lexedLength); return lexedLength; }; Lexer.prototype.stringToken = function() { var octalEsc, quote, string, trimmed; switch (quote = this.chunk.charAt(0)) { case "'": string = SIMPLESTR.exec(this.chunk)[0]; break; case '"': string = this.balancedString(this.chunk, '"'); } if (!string) { return 0; } trimmed = this.removeNewlines(string.slice(1, -1)); if (quote === '"' && 0 < string.indexOf('#{', 1)) { this.interpolateString(trimmed, { strOffset: 1, lexedLength: string.length }); } else { this.token('STRING', quote + this.escapeLines(trimmed) + quote, 0, string.length); } if (octalEsc = /^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test(string)) { this.error("octal escape sequences " + string + " are not allowed"); } return string.length; }; Lexer.prototype.heredocToken = function() { var doc, heredoc, match, quote; if (!(match = HEREDOC.exec(this.chunk))) { return 0; } heredoc = match[0]; quote = heredoc.charAt(0); doc = this.sanitizeHeredoc(match[2], { quote: quote, indent: null }); if (quote === '"' && 0 <= doc.indexOf('#{')) { this.interpolateString(doc, { heredoc: true, strOffset: 3, lexedLength: heredoc.length }); } else { this.token('STRING', this.makeString(doc, quote, true), 0, heredoc.length); } return heredoc.length; }; Lexer.prototype.commentToken = function() { var comment, here, match; if (!(match = this.chunk.match(COMMENT))) { return 0; } comment = match[0], here = match[1]; if (here) { this.token('HERECOMMENT', this.sanitizeHeredoc(here, { herecomment: true, indent: repeat(' ', this.indent) }), 0, comment.length); } return comment.length; }; Lexer.prototype.jsToken = function() { var match, script; if (!(this.chunk.charAt(0) === '`' && (match = JSTOKEN.exec(this.chunk)))) { return 0; } this.token('JS', (script = match[0]).slice(1, -1), 0, script.length); return script.length; }; Lexer.prototype.regexToken = function() { var flags, length, match, prev, regex, _ref2, _ref3; if (this.chunk.charAt(0) !== '/') { return 0; } if (match = HEREGEX.exec(this.chunk)) { length = this.heregexToken(match); return length; } prev = last(this.tokens); if (prev && (_ref2 = prev[0], __indexOf.call((prev.spaced ? NOT_REGEX : NOT_SPACED_REGEX), _ref2) >= 0)) { return 0; } if (!(match = REGEX.exec(this.chunk))) { return 0; } _ref3 = match, match = _ref3[0], regex = _ref3[1], flags = _ref3[2]; if (regex.slice(0, 2) === '/*') { this.error('regular expressions cannot begin with `*`'); } if (regex === '//') { regex = '/(?:)/'; } this.token('REGEX', "" + regex + flags, 0, match.length); return match.length; }; Lexer.prototype.heregexToken = function(match) { var body, flags, flagsOffset, heregex, plusToken, prev, re, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4; heregex = match[0], body = match[1], flags = match[2]; if (0 > body.indexOf('#{')) { re = this.escapeLines(body.replace(HEREGEX_OMIT, '$1$2').replace(/\//g, '\\/'), true); if (re.match(/^\*/)) { this.error('regular expressions cannot begin with `*`'); } this.token('REGEX', "/" + (re || '(?:)') + "/" + flags, 0, heregex.length); return heregex.length; } this.token('IDENTIFIER', 'RegExp', 0, 0); this.token('CALL_START', '(', 0, 0); tokens = []; _ref2 = this.interpolateString(body, { regex: true }); for (_i = 0, _len = _ref2.length; _i < _len; _i++) { token = _ref2[_i]; tag = token[0], value = token[1]; if (tag === 'TOKENS') { tokens.push.apply(tokens, value); } else if (tag === 'NEOSTRING') { if (!(value = value.replace(HEREGEX_OMIT, '$1$2'))) { continue; } value = value.replace(/\\/g, '\\\\'); token[0] = 'STRING'; token[1] = this.makeString(value, '"', true); tokens.push(token); } else { this.error("Unexpected " + tag); } prev = last(this.tokens); plusToken = ['+', '+']; plusToken[2] = prev[2]; tokens.push(plusToken); } tokens.pop(); if (((_ref3 = tokens[0]) != null ? _ref3[0] : void 0) !== 'STRING') { this.token('STRING', '""', 0, 0); this.token('+', '+', 0, 0); } (_ref4 = this.tokens).push.apply(_ref4, tokens); if (flags) { flagsOffset = heregex.lastIndexOf(flags); this.token(',', ',', flagsOffset, 0); this.token('STRING', '"' + flags + '"', flagsOffset, flags.length); } this.token(')', ')', heregex.length - 1, 0); return heregex.length; }; Lexer.prototype.lineToken = function() { var diff, indent, match, noNewlines, size; if (!(match = MULTI_DENT.exec(this.chunk))) { return 0; } indent = match[0]; this.seenFor = false; size = indent.length - 1 - indent.lastIndexOf('\n'); noNewlines = this.unfinished(); if (size - this.indebt === this.indent) { if (noNewlines) { this.suppressNewlines(); } else { this.newlineToken(0); } return indent.length; } if (size > this.indent) { if (noNewlines) { this.indebt = size - this.indent; this.suppressNewlines(); return indent.length; } if (!this.tokens.length) { this.baseIndent = this.indent = size; return indent.length; } diff = size - this.indent + this.outdebt; this.token('INDENT', diff, indent.length - size, size); this.indents.push(diff); this.ends.push('OUTDENT'); this.outdebt = this.indebt = 0; } else if (size < this.baseIndent) { this.error('missing indentation', indent.length); } else { this.indebt = 0; this.outdentToken(this.indent - size, noNewlines, indent.length); } this.indent = size; return indent.length; }; Lexer.prototype.outdentToken = function(moveOut, noNewlines, outdentLength) { var dent, len; while (moveOut > 0) { len = this.indents.length - 1; if (this.indents[len] === void 0) { moveOut = 0; } else if (this.indents[len] === this.outdebt) { moveOut -= this.outdebt; this.outdebt = 0; } else if (this.indents[len] < this.outdebt) { this.outdebt -= this.indents[len]; moveOut -= this.indents[len]; } else { dent = this.indents.pop() + this.outdebt; moveOut -= dent; this.outdebt = 0; this.pair('OUTDENT'); this.token('OUTDENT', dent, 0, outdentLength); } } if (dent) { this.outdebt -= moveOut; } while (this.value() === ';') { this.tokens.pop(); } if (!(this.tag() === 'TERMINATOR' || noNewlines)) { this.token('TERMINATOR', '\n', outdentLength, 0); } return this; }; Lexer.prototype.whitespaceToken = function() { var match, nline, prev; if (!((match = WHITESPACE.exec(this.chunk)) || (nline = this.chunk.charAt(0) === '\n'))) { return 0; } prev = last(this.tokens); if (prev) { prev[match ? 'spaced' : 'newLine'] = true; } if (match) { return match[0].length; } else { return 0; } }; Lexer.prototype.newlineToken = function(offset) { while (this.value() === ';') { this.tokens.pop(); } if (this.tag() !== 'TERMINATOR') { this.token('TERMINATOR', '\n', offset, 0); } return this; }; Lexer.prototype.suppressNewlines = function() { if (this.value() === '\\') { this.tokens.pop(); } return this; }; Lexer.prototype.literalToken = function() { var match, prev, tag, value, _ref2, _ref3, _ref4, _ref5; if (match = OPERATOR.exec(this.chunk)) { value = match[0]; if (CODE.test(value)) { this.tagParameters(); } } else { value = this.chunk.charAt(0); } tag = value; prev = last(this.tokens); if (value === '=' && prev) { if (!prev[1].reserved && (_ref2 = prev[1], __indexOf.call(JS_FORBIDDEN, _ref2) >= 0)) { this.error("reserved word \"" + (this.value()) + "\" can't be assigned"); } if ((_ref3 = prev[1]) === '||' || _ref3 === '&&') { prev[0] = 'COMPOUND_ASSIGN'; prev[1] += '='; return value.length; } } if (value === ';') { this.seenFor = false; tag = 'TERMINATOR'; } else if (__indexOf.call(MATH, value) >= 0) { tag = 'MATH'; } else if (__indexOf.call(COMPARE, value) >= 0) { tag = 'COMPARE'; } else if (__indexOf.call(COMPOUND_ASSIGN, value) >= 0) { tag = 'COMPOUND_ASSIGN'; } else if (__indexOf.call(UNARY, value) >= 0) { tag = 'UNARY'; } else if (__indexOf.call(SHIFT, value) >= 0) { tag = 'SHIFT'; } else if (__indexOf.call(LOGIC, value) >= 0 || value === '?' && (prev != null ? prev.spaced : void 0)) { tag = 'LOGIC'; } else if (prev && !prev.spaced) { if (value === '(' && (_ref4 = prev[0], __indexOf.call(CALLABLE, _ref4) >= 0)) { if (prev[0] === '?') { prev[0] = 'FUNC_EXIST'; } tag = 'CALL_START'; } else if (value === '[' && (_ref5 = prev[0], __indexOf.call(INDEXABLE, _ref5) >= 0)) { tag = 'INDEX_START'; switch (prev[0]) { case '?': prev[0] = 'INDEX_SOAK'; } } } switch (value) { case '(': case '{': case '[': this.ends.push(INVERSES[value]); break; case ')': case '}': case ']': this.pair(value); } this.token(tag, value); return value.length; }; Lexer.prototype.sanitizeHeredoc = function(doc, options) { var attempt, herecomment, indent, match, _ref2; indent = options.indent, herecomment = options.herecomment; if (herecomment) { if (HEREDOC_ILLEGAL.test(doc)) { this.error("block comment cannot contain \"*/\", starting"); } if (doc.indexOf('\n') < 0) { return doc; } } else { while (match = HEREDOC_INDENT.exec(doc)) { attempt = match[1]; if (indent === null || (0 < (_ref2 = attempt.length) && _ref2 < indent.length)) { indent = attempt; } } } if (indent) { doc = doc.replace(RegExp("\\n" + indent, "g"), '\n'); } if (!herecomment) { doc = doc.replace(/^\n/, ''); } return doc; }; Lexer.prototype.tagParameters = function() { var i, stack, tok, tokens; if (this.tag() !== ')') { return this; } stack = []; tokens = this.tokens; i = tokens.length; tokens[--i][0] = 'PARAM_END'; while (tok = tokens[--i]) { switch (tok[0]) { case ')': stack.push(tok); break; case '(': case 'CALL_START': if (stack.length) { stack.pop(); } else if (tok[0] === '(') { tok[0] = 'PARAM_START'; return this; } else { return this; } } } return this; }; Lexer.prototype.closeIndentation = function() { return this.outdentToken(this.indent); }; Lexer.prototype.balancedString = function(str, end) { var continueCount, i, letter, match, prev, stack, _i, _ref2; continueCount = 0; stack = [end]; for (i = _i = 1, _ref2 = str.length; 1 <= _ref2 ? _i < _ref2 : _i > _ref2; i = 1 <= _ref2 ? ++_i : --_i) { if (continueCount) { --continueCount; continue; } switch (letter = str.charAt(i)) { case '\\': ++continueCount; continue; case end: stack.pop(); if (!stack.length) { return str.slice(0, +i + 1 || 9e9); } end = stack[stack.length - 1]; continue; } if (end === '}' && (letter === '"' || letter === "'")) { stack.push(end = letter); } else if (end === '}' && letter === '/' && (match = HEREGEX.exec(str.slice(i)) || REGEX.exec(str.slice(i)))) { continueCount += match[0].length - 1; } else if (end === '}' && letter === '{') { stack.push(end = '}'); } else if (end === '"' && prev === '#' && letter === '{') { stack.push(end = '}'); } prev = letter; } return this.error("missing " + (stack.pop()) + ", starting"); }; Lexer.prototype.interpolateString = function(str, options) { var column, expr, heredoc, i, inner, interpolated, len, letter, lexedLength, line, locationToken, nested, offsetInChunk, pi, plusToken, popped, regex, rparen, strOffset, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4; if (options == null) { options = {}; } heredoc = options.heredoc, regex = options.regex, offsetInChunk = options.offsetInChunk, strOffset = options.strOffset, lexedLength = options.lexedLength; offsetInChunk = offsetInChunk || 0; strOffset = strOffset || 0; lexedLength = lexedLength || str.length; tokens = []; pi = 0; i = -1; while (letter = str.charAt(i += 1)) { if (letter === '\\') { i += 1; continue; } if (!(letter === '#' && str.charAt(i + 1) === '{' && (expr = this.balancedString(str.slice(i + 1), '}')))) { continue; } if (pi < i) { tokens.push(this.makeToken('NEOSTRING', str.slice(pi, i), strOffset + pi)); } inner = expr.slice(1, -1); if (inner.length) { _ref2 = this.getLineAndColumnFromChunk(strOffset + i + 1), line = _ref2[0], column = _ref2[1]; nested = new Lexer().tokenize(inner, { line: line, column: column, rewrite: false }); popped = nested.pop(); if (((_ref3 = nested[0]) != null ? _ref3[0] : void 0) === 'TERMINATOR') { popped = nested.shift(); } if (len = nested.length) { if (len > 1) { nested.unshift(this.makeToken('(', '(', strOffset + i + 1, 0)); nested.push(this.makeToken(')', ')', strOffset + i + 1 + inner.length, 0)); } tokens.push(['TOKENS', nested]); } } i += expr.length; pi = i + 1; } if ((i > pi && pi < str.length)) { tokens.push(this.makeToken('NEOSTRING', str.slice(pi), strOffset + pi)); } if (regex) { return tokens; } if (!tokens.length) { return this.token('STRING', '""', offsetInChunk, lexedLength); } if (tokens[0][0] !== 'NEOSTRING') { tokens.unshift(this.makeToken('NEOSTRING', '', offsetInChunk)); } if (interpolated = tokens.length > 1) { this.token('(', '(', offsetInChunk, 0); } for (i = _i = 0, _len = tokens.length; _i < _len; i = ++_i) { token = tokens[i]; tag = token[0], value = token[1]; if (i) { if (i) { plusToken = this.token('+', '+'); } locationToken = tag === 'TOKENS' ? value[0] : token; plusToken[2] = { first_line: locationToken[2].first_line, first_column: locationToken[2].first_column, last_line: locationToken[2].first_line, last_column: locationToken[2].first_column }; } if (tag === 'TOKENS') { (_ref4 = this.tokens).push.apply(_ref4, value); } else if (tag === 'NEOSTRING') { token[0] = 'STRING'; token[1] = this.makeString(value, '"', heredoc); this.tokens.push(token); } else { this.error("Unexpected " + tag); } } if (interpolated) { rparen = this.makeToken(')', ')', offsetInChunk + lexedLength, 0); rparen.stringEnd = true; this.tokens.push(rparen); } return tokens; }; Lexer.prototype.pair = function(tag) { var size, wanted; if (tag !== (wanted = last(this.ends))) { if ('OUTDENT' !== wanted) { this.error("unmatched " + tag); } this.indent -= size = last(this.indents); this.outdentToken(size, true); return this.pair(tag); } return this.ends.pop(); }; Lexer.prototype.getLineAndColumnFromChunk = function(offset) { var column, lineCount, lines, string; if (offset === 0) { return [this.chunkLine, this.chunkColumn]; } if (offset >= this.chunk.length) { string = this.chunk; } else { string = this.chunk.slice(0, +(offset - 1) + 1 || 9e9); } lineCount = count(string, '\n'); column = this.chunkColumn; if (lineCount > 0) { lines = string.split('\n'); column = last(lines).length; } else { column += string.length; } return [this.chunkLine + lineCount, column]; }; Lexer.prototype.makeToken = function(tag, value, offsetInChunk, length) { var lastCharacter, locationData, token, _ref2, _ref3; if (offsetInChunk == null) { offsetInChunk = 0; } if (length == null) { length = value.length; } locationData = {}; _ref2 = this.getLineAndColumnFromChunk(offsetInChunk), locationData.first_line = _ref2[0], locationData.first_column = _ref2[1]; lastCharacter = Math.max(0, length - 1); _ref3 = this.getLineAndColumnFromChunk(offsetInChunk + lastCharacter), locationData.last_line = _ref3[0], locationData.last_column = _ref3[1]; token = [tag, value, locationData]; return token; }; Lexer.prototype.token = function(tag, value, offsetInChunk, length) { var token; token = this.makeToken(tag, value, offsetInChunk, length); this.tokens.push(token); return token; }; Lexer.prototype.tag = function(index, tag) { var tok; return (tok = last(this.tokens, index)) && (tag ? tok[0] = tag : tok[0]); }; Lexer.prototype.value = function(index, val) { var tok; return (tok = last(this.tokens, index)) && (val ? tok[1] = val : tok[1]); }; Lexer.prototype.unfinished = function() { var _ref2; return LINE_CONTINUER.test(this.chunk) || ((_ref2 = this.tag()) === '\\' || _ref2 === '.' || _ref2 === '?.' || _ref2 === '?::' || _ref2 === 'UNARY' || _ref2 === 'MATH' || _ref2 === '+' || _ref2 === '-' || _ref2 === 'SHIFT' || _ref2 === 'RELATION' || _ref2 === 'COMPARE' || _ref2 === 'LOGIC' || _ref2 === 'THROW' || _ref2 === 'EXTENDS'); }; Lexer.prototype.removeNewlines = function(str) { return str.replace(/^\s*\n\s*/, '').replace(/([^\\]|\\\\)\s*\n\s*$/, '$1'); }; Lexer.prototype.escapeLines = function(str, heredoc) { str = str.replace(/\\[^\S\n]*(\n|\\)\s*/g, function(escaped, character) { if (character === '\n') { return ''; } else { return escaped; } }); if (heredoc) { return str.replace(MULTILINER, '\\n'); } else { return str.replace(/\s*\n\s*/g, ' '); } }; Lexer.prototype.makeString = function(body, quote, heredoc) { if (!body) { return quote + quote; } body = body.replace(RegExp("\\\\(" + quote + "|\\\\)", "g"), function(match, contents) { if (contents === quote) { return contents; } else { return match; } }); body = body.replace(RegExp("" + quote, "g"), '\\$&'); return quote + this.escapeLines(body, heredoc) + quote; }; Lexer.prototype.error = function(message, offset) { var first_column, first_line, _ref2; if (offset == null) { offset = 0; } _ref2 = this.getLineAndColumnFromChunk(offset), first_line = _ref2[0], first_column = _ref2[1]; return throwSyntaxError(message, { first_line: first_line, first_column: first_column }); }; return Lexer; })(); JS_KEYWORDS = ['true', 'false', 'null', 'this', 'new', 'delete', 'typeof', 'in', 'instanceof', 'return', 'throw', 'break', 'continue', 'debugger', 'if', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally', 'class', 'extends', 'super']; COFFEE_KEYWORDS = ['undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when']; COFFEE_ALIAS_MAP = { and: '&&', or: '||', is: '==', isnt: '!=', not: '!', yes: 'true', no: 'false', on: 'true', off: 'false' }; COFFEE_ALIASES = (function() { var _results; _results = []; for (key in COFFEE_ALIAS_MAP) { _results.push(key); } return _results; })(); COFFEE_KEYWORDS = COFFEE_KEYWORDS.concat(COFFEE_ALIASES); RESERVED = ['case', 'default', 'function', 'var', 'void', 'with', 'const', 'let', 'enum', 'export', 'import', 'native', '__hasProp', '__extends', '__slice', '__bind', '__indexOf', 'implements', 'interface', 'package', 'private', 'protected', 'public', 'static', 'yield']; STRICT_PROSCRIBED = ['arguments', 'eval']; JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED).concat(STRICT_PROSCRIBED); exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS).concat(STRICT_PROSCRIBED); exports.STRICT_PROSCRIBED = STRICT_PROSCRIBED; BOM = 65279; IDENTIFIER = /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/; NUMBER = /^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i; HEREDOC = /^("""|''')((?:\\[\s\S]|[^\\])*?)(?:\n[^\n\S]*)?\1/; OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?(\.|::)|\.{2,3})/; WHITESPACE = /^[^\n\S]+/; COMMENT = /^###([^#][\s\S]*?)(?:###[^\n\S]*|###$)|^(?:\s*#(?!##[^#]).*)+/; CODE = /^[-=]>/; MULTI_DENT = /^(?:\n[^\n\S]*)+/; SIMPLESTR = /^'[^\\']*(?:\\[\s\S][^\\']*)*'/; JSTOKEN = /^`[^\\`]*(?:\\.[^\\`]*)*`/; REGEX = /^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/; HEREGEX = /^\/{3}((?:\\?[\s\S])+?)\/{3}([imgy]{0,4})(?!\w)/; HEREGEX_OMIT = /((?:\\\\)+)|\\(\s|\/)|\s+(?:#.*)?/g; MULTILINER = /\n/g; HEREDOC_INDENT = /\n+([^\n\S]*)/g; HEREDOC_ILLEGAL = /\*\//; LINE_CONTINUER = /^\s*(?:,|\??\.(?![.\d])|::)/; TRAILING_SPACES = /\s+$/; COMPOUND_ASSIGN = ['-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|=']; UNARY = ['!', '~', 'NEW', 'TYPEOF', 'DELETE', 'DO']; LOGIC = ['&&', '||', '&', '|', '^']; SHIFT = ['<<', '>>', '>>>']; COMPARE = ['==', '!=', '<', '>', '<=', '>=']; MATH = ['*', '/', '%']; RELATION = ['IN', 'OF', 'INSTANCEOF']; BOOL = ['TRUE', 'FALSE']; NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--']; NOT_SPACED_REGEX = NOT_REGEX.concat(')', '}', 'THIS', 'IDENTIFIER', 'STRING', ']'); CALLABLE = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER']; INDEXABLE = CALLABLE.concat('NUMBER', 'BOOL', 'NULL', 'UNDEFINED'); LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR']; }); ace.define("ace/mode/coffee/parser",["require","exports","module"], function(require, exports, module) { var parser = {trace: function trace() { }, yy: {}, symbols_: {"error":2,"Root":3,"Body":4,"Line":5,"TERMINATOR":6,"Expression":7,"Statement":8,"Return":9,"Comment":10,"STATEMENT":11,"Value":12,"Invocation":13,"Code":14,"Operation":15,"Assign":16,"If":17,"Try":18,"While":19,"For":20,"Switch":21,"Class":22,"Throw":23,"Block":24,"INDENT":25,"OUTDENT":26,"Identifier":27,"IDENTIFIER":28,"AlphaNumeric":29,"NUMBER":30,"STRING":31,"Literal":32,"JS":33,"REGEX":34,"DEBUGGER":35,"UNDEFINED":36,"NULL":37,"BOOL":38,"Assignable":39,"=":40,"AssignObj":41,"ObjAssignable":42,":":43,"ThisProperty":44,"RETURN":45,"HERECOMMENT":46,"PARAM_START":47,"ParamList":48,"PARAM_END":49,"FuncGlyph":50,"->":51,"=>":52,"OptComma":53,",":54,"Param":55,"ParamVar":56,"...":57,"Array":58,"Object":59,"Splat":60,"SimpleAssignable":61,"Accessor":62,"Parenthetical":63,"Range":64,"This":65,".":66,"?.":67,"::":68,"?::":69,"Index":70,"INDEX_START":71,"IndexValue":72,"INDEX_END":73,"INDEX_SOAK":74,"Slice":75,"{":76,"AssignList":77,"}":78,"CLASS":79,"EXTENDS":80,"OptFuncExist":81,"Arguments":82,"SUPER":83,"FUNC_EXIST":84,"CALL_START":85,"CALL_END":86,"ArgList":87,"THIS":88,"@":89,"[":90,"]":91,"RangeDots":92,"..":93,"Arg":94,"SimpleArgs":95,"TRY":96,"Catch":97,"FINALLY":98,"CATCH":99,"THROW":100,"(":101,")":102,"WhileSource":103,"WHILE":104,"WHEN":105,"UNTIL":106,"Loop":107,"LOOP":108,"ForBody":109,"FOR":110,"ForStart":111,"ForSource":112,"ForVariables":113,"OWN":114,"ForValue":115,"FORIN":116,"FOROF":117,"BY":118,"SWITCH":119,"Whens":120,"ELSE":121,"When":122,"LEADING_WHEN":123,"IfBlock":124,"IF":125,"POST_IF":126,"UNARY":127,"-":128,"+":129,"--":130,"++":131,"?":132,"MATH":133,"SHIFT":134,"COMPARE":135,"LOGIC":136,"RELATION":137,"COMPOUND_ASSIGN":138,"$accept":0,"$end":1}, terminals_: {2:"error",6:"TERMINATOR",11:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",69:"?::",71:"INDEX_START",73:"INDEX_END",74:"INDEX_SOAK",76:"{",78:"}",79:"CLASS",80:"EXTENDS",83:"SUPER",84:"FUNC_EXIST",85:"CALL_START",86:"CALL_END",88:"THIS",89:"@",90:"[",91:"]",93:"..",96:"TRY",98:"FINALLY",99:"CATCH",100:"THROW",101:"(",102:")",104:"WHILE",105:"WHEN",106:"UNTIL",108:"LOOP",110:"FOR",114:"OWN",116:"FORIN",117:"FOROF",118:"BY",119:"SWITCH",121:"ELSE",123:"LEADING_WHEN",125:"IF",126:"POST_IF",127:"UNARY",128:"-",129:"+",130:"--",131:"++",132:"?",133:"MATH",134:"SHIFT",135:"COMPARE",136:"LOGIC",137:"RELATION",138:"COMPOUND_ASSIGN"}, productions_: [0,[3,0],[3,1],[4,1],[4,3],[4,2],[5,1],[5,1],[8,1],[8,1],[8,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[24,2],[24,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[16,3],[16,4],[16,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[9,2],[9,1],[10,1],[14,5],[14,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[12,1],[12,1],[12,1],[12,1],[12,1],[62,2],[62,2],[62,2],[62,2],[62,1],[62,1],[70,3],[70,2],[72,1],[72,1],[59,4],[77,0],[77,1],[77,3],[77,4],[77,6],[22,1],[22,2],[22,3],[22,4],[22,2],[22,3],[22,4],[22,5],[13,3],[13,3],[13,1],[13,2],[81,0],[81,1],[82,2],[82,4],[65,1],[65,1],[44,2],[58,2],[58,4],[92,1],[92,1],[64,5],[75,3],[75,2],[75,2],[75,1],[87,1],[87,3],[87,4],[87,4],[87,6],[94,1],[94,1],[95,1],[95,3],[18,2],[18,3],[18,4],[18,5],[97,3],[97,3],[97,2],[23,2],[63,3],[63,5],[103,2],[103,4],[103,2],[103,4],[19,2],[19,2],[19,2],[19,1],[107,2],[107,2],[20,2],[20,2],[20,2],[109,2],[109,2],[111,2],[111,3],[115,1],[115,1],[115,1],[115,1],[113,1],[113,3],[112,2],[112,2],[112,4],[112,4],[112,4],[112,6],[112,6],[21,5],[21,7],[21,4],[21,6],[120,1],[120,2],[122,3],[122,4],[124,3],[124,5],[17,1],[17,3],[17,3],[17,3],[15,2],[15,2],[15,2],[15,2],[15,2],[15,2],[15,2],[15,2],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,5],[15,4],[15,3]], performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { var $0 = $$.length - 1; switch (yystate) { case 1:return this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Block); break; case 2:return this.$ = $$[$0]; break; case 3:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(yy.Block.wrap([$$[$0]])); break; case 4:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].push($$[$0])); break; case 5:this.$ = $$[$0-1]; break; case 6:this.$ = $$[$0]; break; case 7:this.$ = $$[$0]; break; case 8:this.$ = $$[$0]; break; case 9:this.$ = $$[$0]; break; case 10:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0])); break; case 11:this.$ = $$[$0]; break; case 12:this.$ = $$[$0]; break; case 13:this.$ = $$[$0]; break; case 14:this.$ = $$[$0]; break; case 15:this.$ = $$[$0]; break; case 16:this.$ = $$[$0]; break; case 17:this.$ = $$[$0]; break; case 18:this.$ = $$[$0]; break; case 19:this.$ = $$[$0]; break; case 20:this.$ = $$[$0]; break; case 21:this.$ = $$[$0]; break; case 22:this.$ = $$[$0]; break; case 23:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Block); break; case 24:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-1]); break; case 25:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0])); break; case 26:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0])); break; case 27:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0])); break; case 28:this.$ = $$[$0]; break; case 29:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0])); break; case 30:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0])); break; case 31:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0])); break; case 32:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Undefined); break; case 33:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Null); break; case 34:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Bool($$[$0])); break; case 35:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0])); break; case 36:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0])); break; case 37:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1])); break; case 38:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0])); break; case 39:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-2])(new yy.Value($$[$0-2])), $$[$0], 'object')); break; case 40:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-4])(new yy.Value($$[$0-4])), $$[$0-1], 'object')); break; case 41:this.$ = $$[$0]; break; case 42:this.$ = $$[$0]; break; case 43:this.$ = $$[$0]; break; case 44:this.$ = $$[$0]; break; case 45:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Return($$[$0])); break; case 46:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Return); break; case 47:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Comment($$[$0])); break; case 48:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Code($$[$0-3], $$[$0], $$[$0-1])); break; case 49:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Code([], $$[$0], $$[$0-1])); break; case 50:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('func'); break; case 51:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('boundfunc'); break; case 52:this.$ = $$[$0]; break; case 53:this.$ = $$[$0]; break; case 54:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([]); break; case 55:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]); break; case 56:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0])); break; case 57:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0])); break; case 58:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2])); break; case 59:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Param($$[$0])); break; case 60:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Param($$[$0-1], null, true)); break; case 61:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Param($$[$0-2], $$[$0])); break; case 62:this.$ = $$[$0]; break; case 63:this.$ = $$[$0]; break; case 64:this.$ = $$[$0]; break; case 65:this.$ = $$[$0]; break; case 66:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Splat($$[$0-1])); break; case 67:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0])); break; case 68:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].add($$[$0])); break; case 69:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value($$[$0-1], [].concat($$[$0]))); break; case 70:this.$ = $$[$0]; break; case 71:this.$ = $$[$0]; break; case 72:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0])); break; case 73:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0])); break; case 74:this.$ = $$[$0]; break; case 75:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0])); break; case 76:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0])); break; case 77:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0])); break; case 78:this.$ = $$[$0]; break; case 79:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0])); break; case 80:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0], 'soak')); break; case 81:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal('prototype'))), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]); break; case 82:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal('prototype'), 'soak')), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]); break; case 83:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Access(new yy.Literal('prototype'))); break; case 84:this.$ = $$[$0]; break; case 85:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-1]); break; case 86:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(yy.extend($$[$0], { soak: true })); break; case 87:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Index($$[$0])); break; case 88:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Slice($$[$0])); break; case 89:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Obj($$[$0-2], $$[$0-3].generated)); break; case 90:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([]); break; case 91:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]); break; case 92:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0])); break; case 93:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0])); break; case 94:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2])); break; case 95:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Class); break; case 96:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class(null, null, $$[$0])); break; case 97:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class(null, $$[$0])); break; case 98:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class(null, $$[$0-1], $$[$0])); break; case 99:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class($$[$0])); break; case 100:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class($$[$0-1], null, $$[$0])); break; case 101:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class($$[$0-2], $$[$0])); break; case 102:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Class($$[$0-3], $$[$0-1], $$[$0])); break; case 103:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Call($$[$0-2], $$[$0], $$[$0-1])); break; case 104:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Call($$[$0-2], $$[$0], $$[$0-1])); break; case 105:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Call('super', [new yy.Splat(new yy.Literal('arguments'))])); break; case 106:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Call('super', $$[$0])); break; case 107:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(false); break; case 108:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(true); break; case 109:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([]); break; case 110:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-2]); break; case 111:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value(new yy.Literal('this'))); break; case 112:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value(new yy.Literal('this'))); break; case 113:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('this')), [yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))], 'this')); break; case 114:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Arr([])); break; case 115:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Arr($$[$0-2])); break; case 116:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('inclusive'); break; case 117:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('exclusive'); break; case 118:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Range($$[$0-3], $$[$0-1], $$[$0-2])); break; case 119:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Range($$[$0-2], $$[$0], $$[$0-1])); break; case 120:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range($$[$0-1], null, $$[$0])); break; case 121:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range(null, $$[$0], $$[$0-1])); break; case 122:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Range(null, null, $$[$0])); break; case 123:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]); break; case 124:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0])); break; case 125:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0])); break; case 126:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-2]); break; case 127:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2])); break; case 128:this.$ = $$[$0]; break; case 129:this.$ = $$[$0]; break; case 130:this.$ = $$[$0]; break; case 131:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([].concat($$[$0-2], $$[$0])); break; case 132:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Try($$[$0])); break; case 133:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Try($$[$0-1], $$[$0][0], $$[$0][1])); break; case 134:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Try($$[$0-2], null, null, $$[$0])); break; case 135:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Try($$[$0-3], $$[$0-2][0], $$[$0-2][1], $$[$0])); break; case 136:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-1], $$[$0]]); break; case 137:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Value($$[$0-1])), $$[$0]]); break; case 138:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([null, $$[$0]]); break; case 139:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Throw($$[$0])); break; case 140:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Parens($$[$0-1])); break; case 141:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Parens($$[$0-2])); break; case 142:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0])); break; case 143:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], { guard: $$[$0] })); break; case 144:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0], { invert: true })); break; case 145:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], { invert: true, guard: $$[$0] })); break; case 146:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].addBody($$[$0])); break; case 147:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]])))); break; case 148:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]])))); break; case 149:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])($$[$0]); break; case 150:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody($$[$0])); break; case 151:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody(yy.addLocationDataFn(_$[$0])(yy.Block.wrap([$$[$0]])))); break; case 152:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0])); break; case 153:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0])); break; case 154:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0], $$[$0-1])); break; case 155:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({ source: yy.addLocationDataFn(_$[$0])(new yy.Value($$[$0])) }); break; case 156:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])((function () { $$[$0].own = $$[$0-1].own; $$[$0].name = $$[$0-1][0]; $$[$0].index = $$[$0-1][1]; return $$[$0]; }())); break; case 157:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0]); break; case 158:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () { $$[$0].own = true; return $$[$0]; }())); break; case 159:this.$ = $$[$0]; break; case 160:this.$ = $$[$0]; break; case 161:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0])); break; case 162:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0])); break; case 163:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]); break; case 164:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-2], $$[$0]]); break; case 165:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({ source: $$[$0] }); break; case 166:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({ source: $$[$0], object: true }); break; case 167:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({ source: $$[$0-2], guard: $$[$0] }); break; case 168:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({ source: $$[$0-2], guard: $$[$0], object: true }); break; case 169:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({ source: $$[$0-2], step: $$[$0] }); break; case 170:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({ source: $$[$0-4], guard: $$[$0-2], step: $$[$0] }); break; case 171:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({ source: $$[$0-4], step: $$[$0-2], guard: $$[$0] }); break; case 172:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Switch($$[$0-3], $$[$0-1])); break; case 173:this.$ = yy.addLocationDataFn(_$[$0-6], _$[$0])(new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1])); break; case 174:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Switch(null, $$[$0-1])); break; case 175:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])(new yy.Switch(null, $$[$0-3], $$[$0-1])); break; case 176:this.$ = $$[$0]; break; case 177:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].concat($$[$0])); break; case 178:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([[$$[$0-1], $$[$0]]]); break; case 179:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])([[$$[$0-2], $$[$0-1]]]); break; case 180:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], { type: $$[$0-2] })); break; case 181:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])($$[$0-4].addElse(yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], { type: $$[$0-2] })))); break; case 182:this.$ = $$[$0]; break; case 183:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].addElse($$[$0])); break; case 184:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), { type: $$[$0-1], statement: true })); break; case 185:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), { type: $$[$0-1], statement: true })); break; case 186:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op($$[$0-1], $$[$0])); break; case 187:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('-', $$[$0])); break; case 188:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('+', $$[$0])); break; case 189:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0])); break; case 190:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0])); break; case 191:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0-1], null, true)); break; case 192:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0-1], null, true)); break; case 193:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Existence($$[$0-1])); break; case 194:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('+', $$[$0-2], $$[$0])); break; case 195:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('-', $$[$0-2], $$[$0])); break; case 196:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0])); break; case 197:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0])); break; case 198:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0])); break; case 199:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0])); break; case 200:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () { if ($$[$0-1].charAt(0) === '!') { return new yy.Op($$[$0-1].slice(1), $$[$0-2], $$[$0]).invert(); } else { return new yy.Op($$[$0-1], $$[$0-2], $$[$0]); } }())); break; case 201:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0], $$[$0-1])); break; case 202:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3])); break; case 203:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0], $$[$0-2])); break; case 204:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Extends($$[$0-2], $$[$0])); break; } }, table: [{1:[2,1],3:1,4:2,5:3,7:4,8:5,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[3]},{1:[2,2],6:[1,72]},{1:[2,3],6:[2,3],26:[2,3],102:[2,3]},{1:[2,6],6:[2,6],26:[2,6],102:[2,6],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,7],6:[2,7],26:[2,7],102:[2,7],103:85,104:[1,63],106:[1,64],109:86,110:[1,66],111:67,126:[1,84]},{1:[2,11],6:[2,11],25:[2,11],26:[2,11],49:[2,11],54:[2,11],57:[2,11],62:88,66:[1,90],67:[1,91],68:[1,92],69:[1,93],70:94,71:[1,95],73:[2,11],74:[1,96],78:[2,11],81:87,84:[1,89],85:[2,107],86:[2,11],91:[2,11],93:[2,11],102:[2,11],104:[2,11],105:[2,11],106:[2,11],110:[2,11],118:[2,11],126:[2,11],128:[2,11],129:[2,11],132:[2,11],133:[2,11],134:[2,11],135:[2,11],136:[2,11],137:[2,11]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:98,66:[1,90],67:[1,91],68:[1,92],69:[1,93],70:94,71:[1,95],73:[2,12],74:[1,96],78:[2,12],81:97,84:[1,89],85:[2,107],86:[2,12],91:[2,12],93:[2,12],102:[2,12],104:[2,12],105:[2,12],106:[2,12],110:[2,12],118:[2,12],126:[2,12],128:[2,12],129:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12],137:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],73:[2,13],78:[2,13],86:[2,13],91:[2,13],93:[2,13],102:[2,13],104:[2,13],105:[2,13],106:[2,13],110:[2,13],118:[2,13],126:[2,13],128:[2,13],129:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13],137:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],73:[2,14],78:[2,14],86:[2,14],91:[2,14],93:[2,14],102:[2,14],104:[2,14],105:[2,14],106:[2,14],110:[2,14],118:[2,14],126:[2,14],128:[2,14],129:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14],137:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],73:[2,15],78:[2,15],86:[2,15],91:[2,15],93:[2,15],102:[2,15],104:[2,15],105:[2,15],106:[2,15],110:[2,15],118:[2,15],126:[2,15],128:[2,15],129:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15],137:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],73:[2,16],78:[2,16],86:[2,16],91:[2,16],93:[2,16],102:[2,16],104:[2,16],105:[2,16],106:[2,16],110:[2,16],118:[2,16],126:[2,16],128:[2,16],129:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16],137:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],73:[2,17],78:[2,17],86:[2,17],91:[2,17],93:[2,17],102:[2,17],104:[2,17],105:[2,17],106:[2,17],110:[2,17],118:[2,17],126:[2,17],128:[2,17],129:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17],137:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],73:[2,18],78:[2,18],86:[2,18],91:[2,18],93:[2,18],102:[2,18],104:[2,18],105:[2,18],106:[2,18],110:[2,18],118:[2,18],126:[2,18],128:[2,18],129:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18],137:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],73:[2,19],78:[2,19],86:[2,19],91:[2,19],93:[2,19],102:[2,19],104:[2,19],105:[2,19],106:[2,19],110:[2,19],118:[2,19],126:[2,19],128:[2,19],129:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19],137:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],73:[2,20],78:[2,20],86:[2,20],91:[2,20],93:[2,20],102:[2,20],104:[2,20],105:[2,20],106:[2,20],110:[2,20],118:[2,20],126:[2,20],128:[2,20],129:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20],137:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],73:[2,21],78:[2,21],86:[2,21],91:[2,21],93:[2,21],102:[2,21],104:[2,21],105:[2,21],106:[2,21],110:[2,21],118:[2,21],126:[2,21],128:[2,21],129:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21],137:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],73:[2,22],78:[2,22],86:[2,22],91:[2,22],93:[2,22],102:[2,22],104:[2,22],105:[2,22],106:[2,22],110:[2,22],118:[2,22],126:[2,22],128:[2,22],129:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22],137:[2,22]},{1:[2,8],6:[2,8],26:[2,8],102:[2,8],104:[2,8],106:[2,8],110:[2,8],126:[2,8]},{1:[2,9],6:[2,9],26:[2,9],102:[2,9],104:[2,9],106:[2,9],110:[2,9],126:[2,9]},{1:[2,10],6:[2,10],26:[2,10],102:[2,10],104:[2,10],106:[2,10],110:[2,10],126:[2,10]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[1,99],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],69:[2,74],71:[2,74],73:[2,74],74:[2,74],78:[2,74],84:[2,74],85:[2,74],86:[2,74],91:[2,74],93:[2,74],102:[2,74],104:[2,74],105:[2,74],106:[2,74],110:[2,74],118:[2,74],126:[2,74],128:[2,74],129:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74],137:[2,74]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],73:[2,75],74:[2,75],78:[2,75],84:[2,75],85:[2,75],86:[2,75],91:[2,75],93:[2,75],102:[2,75],104:[2,75],105:[2,75],106:[2,75],110:[2,75],118:[2,75],126:[2,75],128:[2,75],129:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75],137:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],69:[2,76],71:[2,76],73:[2,76],74:[2,76],78:[2,76],84:[2,76],85:[2,76],86:[2,76],91:[2,76],93:[2,76],102:[2,76],104:[2,76],105:[2,76],106:[2,76],110:[2,76],118:[2,76],126:[2,76],128:[2,76],129:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76],137:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],69:[2,77],71:[2,77],73:[2,77],74:[2,77],78:[2,77],84:[2,77],85:[2,77],86:[2,77],91:[2,77],93:[2,77],102:[2,77],104:[2,77],105:[2,77],106:[2,77],110:[2,77],118:[2,77],126:[2,77],128:[2,77],129:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77],137:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],69:[2,78],71:[2,78],73:[2,78],74:[2,78],78:[2,78],84:[2,78],85:[2,78],86:[2,78],91:[2,78],93:[2,78],102:[2,78],104:[2,78],105:[2,78],106:[2,78],110:[2,78],118:[2,78],126:[2,78],128:[2,78],129:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78],137:[2,78]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],69:[2,105],71:[2,105],73:[2,105],74:[2,105],78:[2,105],82:100,84:[2,105],85:[1,101],86:[2,105],91:[2,105],93:[2,105],102:[2,105],104:[2,105],105:[2,105],106:[2,105],110:[2,105],118:[2,105],126:[2,105],128:[2,105],129:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105],137:[2,105]},{6:[2,54],25:[2,54],27:105,28:[1,71],44:106,48:102,49:[2,54],54:[2,54],55:103,56:104,58:107,59:108,76:[1,68],89:[1,109],90:[1,110]},{24:111,25:[1,112]},{7:113,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:115,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:116,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{12:118,13:119,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:120,44:61,58:45,59:46,61:117,63:23,64:24,65:25,76:[1,68],83:[1,26],88:[1,56],89:[1,57],90:[1,55],101:[1,54]},{12:118,13:119,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:120,44:61,58:45,59:46,61:121,63:23,64:24,65:25,76:[1,68],83:[1,26],88:[1,56],89:[1,57],90:[1,55],101:[1,54]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,71],74:[2,71],78:[2,71],80:[1,125],84:[2,71],85:[2,71],86:[2,71],91:[2,71],93:[2,71],102:[2,71],104:[2,71],105:[2,71],106:[2,71],110:[2,71],118:[2,71],126:[2,71],128:[2,71],129:[2,71],130:[1,122],131:[1,123],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71],138:[1,124]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],73:[2,182],78:[2,182],86:[2,182],91:[2,182],93:[2,182],102:[2,182],104:[2,182],105:[2,182],106:[2,182],110:[2,182],118:[2,182],121:[1,126],126:[2,182],128:[2,182],129:[2,182],132:[2,182],133:[2,182],134:[2,182],135:[2,182],136:[2,182],137:[2,182]},{24:127,25:[1,112]},{24:128,25:[1,112]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],73:[2,149],78:[2,149],86:[2,149],91:[2,149],93:[2,149],102:[2,149],104:[2,149],105:[2,149],106:[2,149],110:[2,149],118:[2,149],126:[2,149],128:[2,149],129:[2,149],132:[2,149],133:[2,149],134:[2,149],135:[2,149],136:[2,149],137:[2,149]},{24:129,25:[1,112]},{7:130,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,131],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,95],6:[2,95],12:118,13:119,24:132,25:[1,112],26:[2,95],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:120,44:61,49:[2,95],54:[2,95],57:[2,95],58:45,59:46,61:134,63:23,64:24,65:25,73:[2,95],76:[1,68],78:[2,95],80:[1,133],83:[1,26],86:[2,95],88:[1,56],89:[1,57],90:[1,55],91:[2,95],93:[2,95],101:[1,54],102:[2,95],104:[2,95],105:[2,95],106:[2,95],110:[2,95],118:[2,95],126:[2,95],128:[2,95],129:[2,95],132:[2,95],133:[2,95],134:[2,95],135:[2,95],136:[2,95],137:[2,95]},{7:135,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,46],6:[2,46],7:136,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,26:[2,46],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],102:[2,46],103:37,104:[2,46],106:[2,46],107:38,108:[1,65],109:39,110:[2,46],111:67,119:[1,40],124:35,125:[1,62],126:[2,46],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,47],6:[2,47],25:[2,47],26:[2,47],54:[2,47],78:[2,47],102:[2,47],104:[2,47],106:[2,47],110:[2,47],126:[2,47]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,72],74:[2,72],78:[2,72],84:[2,72],85:[2,72],86:[2,72],91:[2,72],93:[2,72],102:[2,72],104:[2,72],105:[2,72],106:[2,72],110:[2,72],118:[2,72],126:[2,72],128:[2,72],129:[2,72],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[2,72]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],69:[2,73],71:[2,73],73:[2,73],74:[2,73],78:[2,73],84:[2,73],85:[2,73],86:[2,73],91:[2,73],93:[2,73],102:[2,73],104:[2,73],105:[2,73],106:[2,73],110:[2,73],118:[2,73],126:[2,73],128:[2,73],129:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73],137:[2,73]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],69:[2,28],71:[2,28],73:[2,28],74:[2,28],78:[2,28],84:[2,28],85:[2,28],86:[2,28],91:[2,28],93:[2,28],102:[2,28],104:[2,28],105:[2,28],106:[2,28],110:[2,28],118:[2,28],126:[2,28],128:[2,28],129:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28],137:[2,28]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],69:[2,29],71:[2,29],73:[2,29],74:[2,29],78:[2,29],84:[2,29],85:[2,29],86:[2,29],91:[2,29],93:[2,29],102:[2,29],104:[2,29],105:[2,29],106:[2,29],110:[2,29],118:[2,29],126:[2,29],128:[2,29],129:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29],137:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],69:[2,30],71:[2,30],73:[2,30],74:[2,30],78:[2,30],84:[2,30],85:[2,30],86:[2,30],91:[2,30],93:[2,30],102:[2,30],104:[2,30],105:[2,30],106:[2,30],110:[2,30],118:[2,30],126:[2,30],128:[2,30],129:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30],137:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],69:[2,31],71:[2,31],73:[2,31],74:[2,31],78:[2,31],84:[2,31],85:[2,31],86:[2,31],91:[2,31],93:[2,31],102:[2,31],104:[2,31],105:[2,31],106:[2,31],110:[2,31],118:[2,31],126:[2,31],128:[2,31],129:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31],137:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],69:[2,32],71:[2,32],73:[2,32],74:[2,32],78:[2,32],84:[2,32],85:[2,32],86:[2,32],91:[2,32],93:[2,32],102:[2,32],104:[2,32],105:[2,32],106:[2,32],110:[2,32],118:[2,32],126:[2,32],128:[2,32],129:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32],137:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],69:[2,33],71:[2,33],73:[2,33],74:[2,33],78:[2,33],84:[2,33],85:[2,33],86:[2,33],91:[2,33],93:[2,33],102:[2,33],104:[2,33],105:[2,33],106:[2,33],110:[2,33],118:[2,33],126:[2,33],128:[2,33],129:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33],137:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],69:[2,34],71:[2,34],73:[2,34],74:[2,34],78:[2,34],84:[2,34],85:[2,34],86:[2,34],91:[2,34],93:[2,34],102:[2,34],104:[2,34],105:[2,34],106:[2,34],110:[2,34],118:[2,34],126:[2,34],128:[2,34],129:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34],137:[2,34]},{4:137,5:3,7:4,8:5,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,138],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:139,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,143],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],87:141,88:[1,56],89:[1,57],90:[1,55],91:[1,140],94:142,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],69:[2,111],71:[2,111],73:[2,111],74:[2,111],78:[2,111],84:[2,111],85:[2,111],86:[2,111],91:[2,111],93:[2,111],102:[2,111],104:[2,111],105:[2,111],106:[2,111],110:[2,111],118:[2,111],126:[2,111],128:[2,111],129:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111],137:[2,111]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],27:145,28:[1,71],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],69:[2,112],71:[2,112],73:[2,112],74:[2,112],78:[2,112],84:[2,112],85:[2,112],86:[2,112],91:[2,112],93:[2,112],102:[2,112],104:[2,112],105:[2,112],106:[2,112],110:[2,112],118:[2,112],126:[2,112],128:[2,112],129:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112],137:[2,112]},{25:[2,50]},{25:[2,51]},{1:[2,67],6:[2,67],25:[2,67],26:[2,67],40:[2,67],49:[2,67],54:[2,67],57:[2,67],66:[2,67],67:[2,67],68:[2,67],69:[2,67],71:[2,67],73:[2,67],74:[2,67],78:[2,67],80:[2,67],84:[2,67],85:[2,67],86:[2,67],91:[2,67],93:[2,67],102:[2,67],104:[2,67],105:[2,67],106:[2,67],110:[2,67],118:[2,67],126:[2,67],128:[2,67],129:[2,67],130:[2,67],131:[2,67],132:[2,67],133:[2,67],134:[2,67],135:[2,67],136:[2,67],137:[2,67],138:[2,67]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],69:[2,70],71:[2,70],73:[2,70],74:[2,70],78:[2,70],80:[2,70],84:[2,70],85:[2,70],86:[2,70],91:[2,70],93:[2,70],102:[2,70],104:[2,70],105:[2,70],106:[2,70],110:[2,70],118:[2,70],126:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70],138:[2,70]},{7:146,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:147,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:148,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:150,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:149,25:[1,112],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{27:155,28:[1,71],44:156,58:157,59:158,64:151,76:[1,68],89:[1,109],90:[1,55],113:152,114:[1,153],115:154},{112:159,116:[1,160],117:[1,161]},{6:[2,90],10:165,25:[2,90],27:166,28:[1,71],29:167,30:[1,69],31:[1,70],41:163,42:164,44:168,46:[1,44],54:[2,90],77:162,78:[2,90],89:[1,109]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],69:[2,26],71:[2,26],73:[2,26],74:[2,26],78:[2,26],84:[2,26],85:[2,26],86:[2,26],91:[2,26],93:[2,26],102:[2,26],104:[2,26],105:[2,26],106:[2,26],110:[2,26],118:[2,26],126:[2,26],128:[2,26],129:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],69:[2,27],71:[2,27],73:[2,27],74:[2,27],78:[2,27],84:[2,27],85:[2,27],86:[2,27],91:[2,27],93:[2,27],102:[2,27],104:[2,27],105:[2,27],106:[2,27],110:[2,27],118:[2,27],126:[2,27],128:[2,27],129:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27],137:[2,27]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],40:[2,25],43:[2,25],49:[2,25],54:[2,25],57:[2,25],66:[2,25],67:[2,25],68:[2,25],69:[2,25],71:[2,25],73:[2,25],74:[2,25],78:[2,25],80:[2,25],84:[2,25],85:[2,25],86:[2,25],91:[2,25],93:[2,25],102:[2,25],104:[2,25],105:[2,25],106:[2,25],110:[2,25],116:[2,25],117:[2,25],118:[2,25],126:[2,25],128:[2,25],129:[2,25],130:[2,25],131:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25],137:[2,25],138:[2,25]},{1:[2,5],5:169,6:[2,5],7:4,8:5,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,26:[2,5],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],102:[2,5],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],73:[2,193],78:[2,193],86:[2,193],91:[2,193],93:[2,193],102:[2,193],104:[2,193],105:[2,193],106:[2,193],110:[2,193],118:[2,193],126:[2,193],128:[2,193],129:[2,193],132:[2,193],133:[2,193],134:[2,193],135:[2,193],136:[2,193],137:[2,193]},{7:170,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:171,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:172,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:173,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:174,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:175,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:176,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:177,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],73:[2,148],78:[2,148],86:[2,148],91:[2,148],93:[2,148],102:[2,148],104:[2,148],105:[2,148],106:[2,148],110:[2,148],118:[2,148],126:[2,148],128:[2,148],129:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148],137:[2,148]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],73:[2,153],78:[2,153],86:[2,153],91:[2,153],93:[2,153],102:[2,153],104:[2,153],105:[2,153],106:[2,153],110:[2,153],118:[2,153],126:[2,153],128:[2,153],129:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153],137:[2,153]},{7:178,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],73:[2,147],78:[2,147],86:[2,147],91:[2,147],93:[2,147],102:[2,147],104:[2,147],105:[2,147],106:[2,147],110:[2,147],118:[2,147],126:[2,147],128:[2,147],129:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147],137:[2,147]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],73:[2,152],78:[2,152],86:[2,152],91:[2,152],93:[2,152],102:[2,152],104:[2,152],105:[2,152],106:[2,152],110:[2,152],118:[2,152],126:[2,152],128:[2,152],129:[2,152],132:[2,152],133:[2,152],134:[2,152],135:[2,152],136:[2,152],137:[2,152]},{82:179,85:[1,101]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],69:[2,68],71:[2,68],73:[2,68],74:[2,68],78:[2,68],80:[2,68],84:[2,68],85:[2,68],86:[2,68],91:[2,68],93:[2,68],102:[2,68],104:[2,68],105:[2,68],106:[2,68],110:[2,68],118:[2,68],126:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68],138:[2,68]},{85:[2,108]},{27:180,28:[1,71]},{27:181,28:[1,71]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],27:182,28:[1,71],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],69:[2,83],71:[2,83],73:[2,83],74:[2,83],78:[2,83],80:[2,83],84:[2,83],85:[2,83],86:[2,83],91:[2,83],93:[2,83],102:[2,83],104:[2,83],105:[2,83],106:[2,83],110:[2,83],118:[2,83],126:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83],138:[2,83]},{27:183,28:[1,71]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],69:[2,84],71:[2,84],73:[2,84],74:[2,84],78:[2,84],80:[2,84],84:[2,84],85:[2,84],86:[2,84],91:[2,84],93:[2,84],102:[2,84],104:[2,84],105:[2,84],106:[2,84],110:[2,84],118:[2,84],126:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84],138:[2,84]},{7:185,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],57:[1,189],58:45,59:46,61:34,63:23,64:24,65:25,72:184,75:186,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],92:187,93:[1,188],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{70:190,71:[1,95],74:[1,96]},{82:191,85:[1,101]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],69:[2,69],71:[2,69],73:[2,69],74:[2,69],78:[2,69],80:[2,69],84:[2,69],85:[2,69],86:[2,69],91:[2,69],93:[2,69],102:[2,69],104:[2,69],105:[2,69],106:[2,69],110:[2,69],118:[2,69],126:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69],138:[2,69]},{6:[1,193],7:192,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,194],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],69:[2,106],71:[2,106],73:[2,106],74:[2,106],78:[2,106],84:[2,106],85:[2,106],86:[2,106],91:[2,106],93:[2,106],102:[2,106],104:[2,106],105:[2,106],106:[2,106],110:[2,106],118:[2,106],126:[2,106],128:[2,106],129:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106],137:[2,106]},{7:197,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,143],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],86:[1,195],87:196,88:[1,56],89:[1,57],90:[1,55],94:142,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,52],25:[2,52],49:[1,198],53:200,54:[1,199]},{6:[2,55],25:[2,55],26:[2,55],49:[2,55],54:[2,55]},{6:[2,59],25:[2,59],26:[2,59],40:[1,202],49:[2,59],54:[2,59],57:[1,201]},{6:[2,62],25:[2,62],26:[2,62],40:[2,62],49:[2,62],54:[2,62],57:[2,62]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{27:145,28:[1,71]},{7:197,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,143],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],87:141,88:[1,56],89:[1,57],90:[1,55],91:[1,140],94:142,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],73:[2,49],78:[2,49],86:[2,49],91:[2,49],93:[2,49],102:[2,49],104:[2,49],105:[2,49],106:[2,49],110:[2,49],118:[2,49],126:[2,49],128:[2,49],129:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49],137:[2,49]},{4:204,5:3,7:4,8:5,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,26:[1,203],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],73:[2,186],78:[2,186],86:[2,186],91:[2,186],93:[2,186],102:[2,186],103:82,104:[2,186],105:[2,186],106:[2,186],109:83,110:[2,186],111:67,118:[2,186],126:[2,186],128:[2,186],129:[2,186],132:[1,73],133:[2,186],134:[2,186],135:[2,186],136:[2,186],137:[2,186]},{103:85,104:[1,63],106:[1,64],109:86,110:[1,66],111:67,126:[1,84]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],73:[2,187],78:[2,187],86:[2,187],91:[2,187],93:[2,187],102:[2,187],103:82,104:[2,187],105:[2,187],106:[2,187],109:83,110:[2,187],111:67,118:[2,187],126:[2,187],128:[2,187],129:[2,187],132:[1,73],133:[2,187],134:[2,187],135:[2,187],136:[2,187],137:[2,187]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],73:[2,188],78:[2,188],86:[2,188],91:[2,188],93:[2,188],102:[2,188],103:82,104:[2,188],105:[2,188],106:[2,188],109:83,110:[2,188],111:67,118:[2,188],126:[2,188],128:[2,188],129:[2,188],132:[1,73],133:[2,188],134:[2,188],135:[2,188],136:[2,188],137:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,189],74:[2,71],78:[2,189],84:[2,71],85:[2,71],86:[2,189],91:[2,189],93:[2,189],102:[2,189],104:[2,189],105:[2,189],106:[2,189],110:[2,189],118:[2,189],126:[2,189],128:[2,189],129:[2,189],132:[2,189],133:[2,189],134:[2,189],135:[2,189],136:[2,189],137:[2,189]},{62:88,66:[1,90],67:[1,91],68:[1,92],69:[1,93],70:94,71:[1,95],74:[1,96],81:87,84:[1,89],85:[2,107]},{62:98,66:[1,90],67:[1,91],68:[1,92],69:[1,93],70:94,71:[1,95],74:[1,96],81:97,84:[1,89],85:[2,107]},{66:[2,74],67:[2,74],68:[2,74],69:[2,74],71:[2,74],74:[2,74],84:[2,74],85:[2,74]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,190],74:[2,71],78:[2,190],84:[2,71],85:[2,71],86:[2,190],91:[2,190],93:[2,190],102:[2,190],104:[2,190],105:[2,190],106:[2,190],110:[2,190],118:[2,190],126:[2,190],128:[2,190],129:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190],137:[2,190]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],73:[2,191],78:[2,191],86:[2,191],91:[2,191],93:[2,191],102:[2,191],104:[2,191],105:[2,191],106:[2,191],110:[2,191],118:[2,191],126:[2,191],128:[2,191],129:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191],137:[2,191]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],73:[2,192],78:[2,192],86:[2,192],91:[2,192],93:[2,192],102:[2,192],104:[2,192],105:[2,192],106:[2,192],110:[2,192],118:[2,192],126:[2,192],128:[2,192],129:[2,192],132:[2,192],133:[2,192],134:[2,192],135:[2,192],136:[2,192],137:[2,192]},{6:[1,207],7:205,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,206],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:208,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{24:209,25:[1,112],125:[1,210]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],49:[2,132],54:[2,132],57:[2,132],73:[2,132],78:[2,132],86:[2,132],91:[2,132],93:[2,132],97:211,98:[1,212],99:[1,213],102:[2,132],104:[2,132],105:[2,132],106:[2,132],110:[2,132],118:[2,132],126:[2,132],128:[2,132],129:[2,132],132:[2,132],133:[2,132],134:[2,132],135:[2,132],136:[2,132],137:[2,132]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],73:[2,146],78:[2,146],86:[2,146],91:[2,146],93:[2,146],102:[2,146],104:[2,146],105:[2,146],106:[2,146],110:[2,146],118:[2,146],126:[2,146],128:[2,146],129:[2,146],132:[2,146],133:[2,146],134:[2,146],135:[2,146],136:[2,146],137:[2,146]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],73:[2,154],78:[2,154],86:[2,154],91:[2,154],93:[2,154],102:[2,154],104:[2,154],105:[2,154],106:[2,154],110:[2,154],118:[2,154],126:[2,154],128:[2,154],129:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154],137:[2,154]},{25:[1,214],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{120:215,122:216,123:[1,217]},{1:[2,96],6:[2,96],25:[2,96],26:[2,96],49:[2,96],54:[2,96],57:[2,96],73:[2,96],78:[2,96],86:[2,96],91:[2,96],93:[2,96],102:[2,96],104:[2,96],105:[2,96],106:[2,96],110:[2,96],118:[2,96],126:[2,96],128:[2,96],129:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96],137:[2,96]},{7:218,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,99],6:[2,99],24:219,25:[1,112],26:[2,99],49:[2,99],54:[2,99],57:[2,99],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,99],74:[2,71],78:[2,99],80:[1,220],84:[2,71],85:[2,71],86:[2,99],91:[2,99],93:[2,99],102:[2,99],104:[2,99],105:[2,99],106:[2,99],110:[2,99],118:[2,99],126:[2,99],128:[2,99],129:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99],137:[2,99]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],73:[2,139],78:[2,139],86:[2,139],91:[2,139],93:[2,139],102:[2,139],103:82,104:[2,139],105:[2,139],106:[2,139],109:83,110:[2,139],111:67,118:[2,139],126:[2,139],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,45],6:[2,45],26:[2,45],102:[2,45],103:82,104:[2,45],106:[2,45],109:83,110:[2,45],111:67,126:[2,45],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[1,72],102:[1,221]},{4:222,5:3,7:4,8:5,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,128],25:[2,128],54:[2,128],57:[1,224],91:[2,128],92:223,93:[1,188],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],69:[2,114],71:[2,114],73:[2,114],74:[2,114],78:[2,114],84:[2,114],85:[2,114],86:[2,114],91:[2,114],93:[2,114],102:[2,114],104:[2,114],105:[2,114],106:[2,114],110:[2,114],116:[2,114],117:[2,114],118:[2,114],126:[2,114],128:[2,114],129:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114],137:[2,114]},{6:[2,52],25:[2,52],53:225,54:[1,226],91:[2,52]},{6:[2,123],25:[2,123],26:[2,123],54:[2,123],86:[2,123],91:[2,123]},{7:197,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,143],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],87:227,88:[1,56],89:[1,57],90:[1,55],94:142,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],86:[2,129],91:[2,129]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],40:[2,113],43:[2,113],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],69:[2,113],71:[2,113],73:[2,113],74:[2,113],78:[2,113],80:[2,113],84:[2,113],85:[2,113],86:[2,113],91:[2,113],93:[2,113],102:[2,113],104:[2,113],105:[2,113],106:[2,113],110:[2,113],116:[2,113],117:[2,113],118:[2,113],126:[2,113],128:[2,113],129:[2,113],130:[2,113],131:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113],138:[2,113]},{24:228,25:[1,112],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],73:[2,142],78:[2,142],86:[2,142],91:[2,142],93:[2,142],102:[2,142],103:82,104:[1,63],105:[1,229],106:[1,64],109:83,110:[1,66],111:67,118:[2,142],126:[2,142],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],73:[2,144],78:[2,144],86:[2,144],91:[2,144],93:[2,144],102:[2,144],103:82,104:[1,63],105:[1,230],106:[1,64],109:83,110:[1,66],111:67,118:[2,144],126:[2,144],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],73:[2,150],78:[2,150],86:[2,150],91:[2,150],93:[2,150],102:[2,150],104:[2,150],105:[2,150],106:[2,150],110:[2,150],118:[2,150],126:[2,150],128:[2,150],129:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150],137:[2,150]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],73:[2,151],78:[2,151],86:[2,151],91:[2,151],93:[2,151],102:[2,151],103:82,104:[1,63],105:[2,151],106:[1,64],109:83,110:[1,66],111:67,118:[2,151],126:[2,151],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,155],6:[2,155],25:[2,155],26:[2,155],49:[2,155],54:[2,155],57:[2,155],73:[2,155],78:[2,155],86:[2,155],91:[2,155],93:[2,155],102:[2,155],104:[2,155],105:[2,155],106:[2,155],110:[2,155],118:[2,155],126:[2,155],128:[2,155],129:[2,155],132:[2,155],133:[2,155],134:[2,155],135:[2,155],136:[2,155],137:[2,155]},{116:[2,157],117:[2,157]},{27:155,28:[1,71],44:156,58:157,59:158,76:[1,68],89:[1,109],90:[1,110],113:231,115:154},{54:[1,232],116:[2,163],117:[2,163]},{54:[2,159],116:[2,159],117:[2,159]},{54:[2,160],116:[2,160],117:[2,160]},{54:[2,161],116:[2,161],117:[2,161]},{54:[2,162],116:[2,162],117:[2,162]},{1:[2,156],6:[2,156],25:[2,156],26:[2,156],49:[2,156],54:[2,156],57:[2,156],73:[2,156],78:[2,156],86:[2,156],91:[2,156],93:[2,156],102:[2,156],104:[2,156],105:[2,156],106:[2,156],110:[2,156],118:[2,156],126:[2,156],128:[2,156],129:[2,156],132:[2,156],133:[2,156],134:[2,156],135:[2,156],136:[2,156],137:[2,156]},{7:233,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:234,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,52],25:[2,52],53:235,54:[1,236],78:[2,52]},{6:[2,91],25:[2,91],26:[2,91],54:[2,91],78:[2,91]},{6:[2,38],25:[2,38],26:[2,38],43:[1,237],54:[2,38],78:[2,38]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],78:[2,41]},{6:[2,42],25:[2,42],26:[2,42],43:[2,42],54:[2,42],78:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],78:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],78:[2,44]},{1:[2,4],6:[2,4],26:[2,4],102:[2,4]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],73:[2,194],78:[2,194],86:[2,194],91:[2,194],93:[2,194],102:[2,194],103:82,104:[2,194],105:[2,194],106:[2,194],109:83,110:[2,194],111:67,118:[2,194],126:[2,194],128:[2,194],129:[2,194],132:[1,73],133:[1,76],134:[2,194],135:[2,194],136:[2,194],137:[2,194]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],73:[2,195],78:[2,195],86:[2,195],91:[2,195],93:[2,195],102:[2,195],103:82,104:[2,195],105:[2,195],106:[2,195],109:83,110:[2,195],111:67,118:[2,195],126:[2,195],128:[2,195],129:[2,195],132:[1,73],133:[1,76],134:[2,195],135:[2,195],136:[2,195],137:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],73:[2,196],78:[2,196],86:[2,196],91:[2,196],93:[2,196],102:[2,196],103:82,104:[2,196],105:[2,196],106:[2,196],109:83,110:[2,196],111:67,118:[2,196],126:[2,196],128:[2,196],129:[2,196],132:[1,73],133:[2,196],134:[2,196],135:[2,196],136:[2,196],137:[2,196]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],73:[2,197],78:[2,197],86:[2,197],91:[2,197],93:[2,197],102:[2,197],103:82,104:[2,197],105:[2,197],106:[2,197],109:83,110:[2,197],111:67,118:[2,197],126:[2,197],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[2,197],135:[2,197],136:[2,197],137:[2,197]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],73:[2,198],78:[2,198],86:[2,198],91:[2,198],93:[2,198],102:[2,198],103:82,104:[2,198],105:[2,198],106:[2,198],109:83,110:[2,198],111:67,118:[2,198],126:[2,198],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[2,198],136:[2,198],137:[1,80]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],73:[2,199],78:[2,199],86:[2,199],91:[2,199],93:[2,199],102:[2,199],103:82,104:[2,199],105:[2,199],106:[2,199],109:83,110:[2,199],111:67,118:[2,199],126:[2,199],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[2,199],137:[1,80]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],73:[2,200],78:[2,200],86:[2,200],91:[2,200],93:[2,200],102:[2,200],103:82,104:[2,200],105:[2,200],106:[2,200],109:83,110:[2,200],111:67,118:[2,200],126:[2,200],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[2,200],136:[2,200],137:[2,200]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],73:[2,185],78:[2,185],86:[2,185],91:[2,185],93:[2,185],102:[2,185],103:82,104:[1,63],105:[2,185],106:[1,64],109:83,110:[1,66],111:67,118:[2,185],126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],73:[2,184],78:[2,184],86:[2,184],91:[2,184],93:[2,184],102:[2,184],103:82,104:[1,63],105:[2,184],106:[1,64],109:83,110:[1,66],111:67,118:[2,184],126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],66:[2,103],67:[2,103],68:[2,103],69:[2,103],71:[2,103],73:[2,103],74:[2,103],78:[2,103],84:[2,103],85:[2,103],86:[2,103],91:[2,103],93:[2,103],102:[2,103],104:[2,103],105:[2,103],106:[2,103],110:[2,103],118:[2,103],126:[2,103],128:[2,103],129:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103],137:[2,103]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],40:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],69:[2,79],71:[2,79],73:[2,79],74:[2,79],78:[2,79],80:[2,79],84:[2,79],85:[2,79],86:[2,79],91:[2,79],93:[2,79],102:[2,79],104:[2,79],105:[2,79],106:[2,79],110:[2,79],118:[2,79],126:[2,79],128:[2,79],129:[2,79],130:[2,79],131:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79],137:[2,79],138:[2,79]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],69:[2,80],71:[2,80],73:[2,80],74:[2,80],78:[2,80],80:[2,80],84:[2,80],85:[2,80],86:[2,80],91:[2,80],93:[2,80],102:[2,80],104:[2,80],105:[2,80],106:[2,80],110:[2,80],118:[2,80],126:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80],138:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],69:[2,81],71:[2,81],73:[2,81],74:[2,81],78:[2,81],80:[2,81],84:[2,81],85:[2,81],86:[2,81],91:[2,81],93:[2,81],102:[2,81],104:[2,81],105:[2,81],106:[2,81],110:[2,81],118:[2,81],126:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81],138:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],69:[2,82],71:[2,82],73:[2,82],74:[2,82],78:[2,82],80:[2,82],84:[2,82],85:[2,82],86:[2,82],91:[2,82],93:[2,82],102:[2,82],104:[2,82],105:[2,82],106:[2,82],110:[2,82],118:[2,82],126:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82],138:[2,82]},{73:[1,238]},{57:[1,189],73:[2,87],92:239,93:[1,188],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{73:[2,88]},{7:240,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,73:[2,122],76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{11:[2,116],28:[2,116],30:[2,116],31:[2,116],33:[2,116],34:[2,116],35:[2,116],36:[2,116],37:[2,116],38:[2,116],45:[2,116],46:[2,116],47:[2,116],51:[2,116],52:[2,116],73:[2,116],76:[2,116],79:[2,116],83:[2,116],88:[2,116],89:[2,116],90:[2,116],96:[2,116],100:[2,116],101:[2,116],104:[2,116],106:[2,116],108:[2,116],110:[2,116],119:[2,116],125:[2,116],127:[2,116],128:[2,116],129:[2,116],130:[2,116],131:[2,116]},{11:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],73:[2,117],76:[2,117],79:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],96:[2,117],100:[2,117],101:[2,117],104:[2,117],106:[2,117],108:[2,117],110:[2,117],119:[2,117],125:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117],131:[2,117]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],69:[2,86],71:[2,86],73:[2,86],74:[2,86],78:[2,86],80:[2,86],84:[2,86],85:[2,86],86:[2,86],91:[2,86],93:[2,86],102:[2,86],104:[2,86],105:[2,86],106:[2,86],110:[2,86],118:[2,86],126:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86],138:[2,86]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],69:[2,104],71:[2,104],73:[2,104],74:[2,104],78:[2,104],84:[2,104],85:[2,104],86:[2,104],91:[2,104],93:[2,104],102:[2,104],104:[2,104],105:[2,104],106:[2,104],110:[2,104],118:[2,104],126:[2,104],128:[2,104],129:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104],137:[2,104]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],73:[2,35],78:[2,35],86:[2,35],91:[2,35],93:[2,35],102:[2,35],103:82,104:[2,35],105:[2,35],106:[2,35],109:83,110:[2,35],111:67,118:[2,35],126:[2,35],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{7:241,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:242,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],49:[2,109],54:[2,109],57:[2,109],66:[2,109],67:[2,109],68:[2,109],69:[2,109],71:[2,109],73:[2,109],74:[2,109],78:[2,109],84:[2,109],85:[2,109],86:[2,109],91:[2,109],93:[2,109],102:[2,109],104:[2,109],105:[2,109],106:[2,109],110:[2,109],118:[2,109],126:[2,109],128:[2,109],129:[2,109],132:[2,109],133:[2,109],134:[2,109],135:[2,109],136:[2,109],137:[2,109]},{6:[2,52],25:[2,52],53:243,54:[1,226],86:[2,52]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],57:[1,244],86:[2,128],91:[2,128],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{50:245,51:[1,58],52:[1,59]},{6:[2,53],25:[2,53],26:[2,53],27:105,28:[1,71],44:106,55:246,56:104,58:107,59:108,76:[1,68],89:[1,109],90:[1,110]},{6:[1,247],25:[1,248]},{6:[2,60],25:[2,60],26:[2,60],49:[2,60],54:[2,60]},{7:249,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],73:[2,23],78:[2,23],86:[2,23],91:[2,23],93:[2,23],98:[2,23],99:[2,23],102:[2,23],104:[2,23],105:[2,23],106:[2,23],110:[2,23],118:[2,23],121:[2,23],123:[2,23],126:[2,23],128:[2,23],129:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23],137:[2,23]},{6:[1,72],26:[1,250]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],73:[2,201],78:[2,201],86:[2,201],91:[2,201],93:[2,201],102:[2,201],103:82,104:[2,201],105:[2,201],106:[2,201],109:83,110:[2,201],111:67,118:[2,201],126:[2,201],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{7:251,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:252,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,204],6:[2,204],25:[2,204],26:[2,204],49:[2,204],54:[2,204],57:[2,204],73:[2,204],78:[2,204],86:[2,204],91:[2,204],93:[2,204],102:[2,204],103:82,104:[2,204],105:[2,204],106:[2,204],109:83,110:[2,204],111:67,118:[2,204],126:[2,204],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],73:[2,183],78:[2,183],86:[2,183],91:[2,183],93:[2,183],102:[2,183],104:[2,183],105:[2,183],106:[2,183],110:[2,183],118:[2,183],126:[2,183],128:[2,183],129:[2,183],132:[2,183],133:[2,183],134:[2,183],135:[2,183],136:[2,183],137:[2,183]},{7:253,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],73:[2,133],78:[2,133],86:[2,133],91:[2,133],93:[2,133],98:[1,254],102:[2,133],104:[2,133],105:[2,133],106:[2,133],110:[2,133],118:[2,133],126:[2,133],128:[2,133],129:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133],137:[2,133]},{24:255,25:[1,112]},{24:258,25:[1,112],27:256,28:[1,71],59:257,76:[1,68]},{120:259,122:216,123:[1,217]},{26:[1,260],121:[1,261],122:262,123:[1,217]},{26:[2,176],121:[2,176],123:[2,176]},{7:264,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],95:263,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,97],6:[2,97],24:265,25:[1,112],26:[2,97],49:[2,97],54:[2,97],57:[2,97],73:[2,97],78:[2,97],86:[2,97],91:[2,97],93:[2,97],102:[2,97],103:82,104:[1,63],105:[2,97],106:[1,64],109:83,110:[1,66],111:67,118:[2,97],126:[2,97],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],49:[2,100],54:[2,100],57:[2,100],73:[2,100],78:[2,100],86:[2,100],91:[2,100],93:[2,100],102:[2,100],104:[2,100],105:[2,100],106:[2,100],110:[2,100],118:[2,100],126:[2,100],128:[2,100],129:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100],137:[2,100]},{7:266,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],66:[2,140],67:[2,140],68:[2,140],69:[2,140],71:[2,140],73:[2,140],74:[2,140],78:[2,140],84:[2,140],85:[2,140],86:[2,140],91:[2,140],93:[2,140],102:[2,140],104:[2,140],105:[2,140],106:[2,140],110:[2,140],118:[2,140],126:[2,140],128:[2,140],129:[2,140],132:[2,140],133:[2,140],134:[2,140],135:[2,140],136:[2,140],137:[2,140]},{6:[1,72],26:[1,267]},{7:268,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,66],11:[2,117],25:[2,66],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],54:[2,66],76:[2,117],79:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],91:[2,66],96:[2,117],100:[2,117],101:[2,117],104:[2,117],106:[2,117],108:[2,117],110:[2,117],119:[2,117],125:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117],131:[2,117]},{6:[1,270],25:[1,271],91:[1,269]},{6:[2,53],7:197,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[2,53],26:[2,53],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],86:[2,53],88:[1,56],89:[1,57],90:[1,55],91:[2,53],94:272,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,52],25:[2,52],26:[2,52],53:273,54:[1,226]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],49:[2,180],54:[2,180],57:[2,180],73:[2,180],78:[2,180],86:[2,180],91:[2,180],93:[2,180],102:[2,180],104:[2,180],105:[2,180],106:[2,180],110:[2,180],118:[2,180],121:[2,180],126:[2,180],128:[2,180],129:[2,180],132:[2,180],133:[2,180],134:[2,180],135:[2,180],136:[2,180],137:[2,180]},{7:274,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:275,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{116:[2,158],117:[2,158]},{27:155,28:[1,71],44:156,58:157,59:158,76:[1,68],89:[1,109],90:[1,110],115:276},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],49:[2,165],54:[2,165],57:[2,165],73:[2,165],78:[2,165],86:[2,165],91:[2,165],93:[2,165],102:[2,165],103:82,104:[2,165],105:[1,277],106:[2,165],109:83,110:[2,165],111:67,118:[1,278],126:[2,165],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],73:[2,166],78:[2,166],86:[2,166],91:[2,166],93:[2,166],102:[2,166],103:82,104:[2,166],105:[1,279],106:[2,166],109:83,110:[2,166],111:67,118:[2,166],126:[2,166],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[1,281],25:[1,282],78:[1,280]},{6:[2,53],10:165,25:[2,53],26:[2,53],27:166,28:[1,71],29:167,30:[1,69],31:[1,70],41:283,42:164,44:168,46:[1,44],78:[2,53],89:[1,109]},{7:284,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,285],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],69:[2,85],71:[2,85],73:[2,85],74:[2,85],78:[2,85],80:[2,85],84:[2,85],85:[2,85],86:[2,85],91:[2,85],93:[2,85],102:[2,85],104:[2,85],105:[2,85],106:[2,85],110:[2,85],118:[2,85],126:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85],138:[2,85]},{7:286,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,73:[2,120],76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{73:[2,121],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],73:[2,36],78:[2,36],86:[2,36],91:[2,36],93:[2,36],102:[2,36],103:82,104:[2,36],105:[2,36],106:[2,36],109:83,110:[2,36],111:67,118:[2,36],126:[2,36],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{26:[1,287],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[1,270],25:[1,271],86:[1,288]},{6:[2,66],25:[2,66],26:[2,66],54:[2,66],86:[2,66],91:[2,66]},{24:289,25:[1,112]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{27:105,28:[1,71],44:106,55:290,56:104,58:107,59:108,76:[1,68],89:[1,109],90:[1,110]},{6:[2,54],25:[2,54],26:[2,54],27:105,28:[1,71],44:106,48:291,54:[2,54],55:103,56:104,58:107,59:108,76:[1,68],89:[1,109],90:[1,110]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],73:[2,24],78:[2,24],86:[2,24],91:[2,24],93:[2,24],98:[2,24],99:[2,24],102:[2,24],104:[2,24],105:[2,24],106:[2,24],110:[2,24],118:[2,24],121:[2,24],123:[2,24],126:[2,24],128:[2,24],129:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24],137:[2,24]},{26:[1,292],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,203],6:[2,203],25:[2,203],26:[2,203],49:[2,203],54:[2,203],57:[2,203],73:[2,203],78:[2,203],86:[2,203],91:[2,203],93:[2,203],102:[2,203],103:82,104:[2,203],105:[2,203],106:[2,203],109:83,110:[2,203],111:67,118:[2,203],126:[2,203],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{24:293,25:[1,112],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{24:294,25:[1,112]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],73:[2,134],78:[2,134],86:[2,134],91:[2,134],93:[2,134],102:[2,134],104:[2,134],105:[2,134],106:[2,134],110:[2,134],118:[2,134],126:[2,134],128:[2,134],129:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134],137:[2,134]},{24:295,25:[1,112]},{24:296,25:[1,112]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],73:[2,138],78:[2,138],86:[2,138],91:[2,138],93:[2,138],98:[2,138],102:[2,138],104:[2,138],105:[2,138],106:[2,138],110:[2,138],118:[2,138],126:[2,138],128:[2,138],129:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138],137:[2,138]},{26:[1,297],121:[1,298],122:262,123:[1,217]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],49:[2,174],54:[2,174],57:[2,174],73:[2,174],78:[2,174],86:[2,174],91:[2,174],93:[2,174],102:[2,174],104:[2,174],105:[2,174],106:[2,174],110:[2,174],118:[2,174],126:[2,174],128:[2,174],129:[2,174],132:[2,174],133:[2,174],134:[2,174],135:[2,174],136:[2,174],137:[2,174]},{24:299,25:[1,112]},{26:[2,177],121:[2,177],123:[2,177]},{24:300,25:[1,112],54:[1,301]},{25:[2,130],54:[2,130],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],49:[2,98],54:[2,98],57:[2,98],73:[2,98],78:[2,98],86:[2,98],91:[2,98],93:[2,98],102:[2,98],104:[2,98],105:[2,98],106:[2,98],110:[2,98],118:[2,98],126:[2,98],128:[2,98],129:[2,98],132:[2,98],133:[2,98],134:[2,98],135:[2,98],136:[2,98],137:[2,98]},{1:[2,101],6:[2,101],24:302,25:[1,112],26:[2,101],49:[2,101],54:[2,101],57:[2,101],73:[2,101],78:[2,101],86:[2,101],91:[2,101],93:[2,101],102:[2,101],103:82,104:[1,63],105:[2,101],106:[1,64],109:83,110:[1,66],111:67,118:[2,101],126:[2,101],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{102:[1,303]},{91:[1,304],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],69:[2,115],71:[2,115],73:[2,115],74:[2,115],78:[2,115],84:[2,115],85:[2,115],86:[2,115],91:[2,115],93:[2,115],102:[2,115],104:[2,115],105:[2,115],106:[2,115],110:[2,115],116:[2,115],117:[2,115],118:[2,115],126:[2,115],128:[2,115],129:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115],137:[2,115]},{7:197,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],94:305,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:197,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,143],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],87:306,88:[1,56],89:[1,57],90:[1,55],94:142,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],86:[2,124],91:[2,124]},{6:[1,270],25:[1,271],26:[1,307]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],73:[2,143],78:[2,143],86:[2,143],91:[2,143],93:[2,143],102:[2,143],103:82,104:[1,63],105:[2,143],106:[1,64],109:83,110:[1,66],111:67,118:[2,143],126:[2,143],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],73:[2,145],78:[2,145],86:[2,145],91:[2,145],93:[2,145],102:[2,145],103:82,104:[1,63],105:[2,145],106:[1,64],109:83,110:[1,66],111:67,118:[2,145],126:[2,145],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{116:[2,164],117:[2,164]},{7:308,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:309,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:310,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,89],6:[2,89],25:[2,89],26:[2,89],40:[2,89],49:[2,89],54:[2,89],57:[2,89],66:[2,89],67:[2,89],68:[2,89],69:[2,89],71:[2,89],73:[2,89],74:[2,89],78:[2,89],84:[2,89],85:[2,89],86:[2,89],91:[2,89],93:[2,89],102:[2,89],104:[2,89],105:[2,89],106:[2,89],110:[2,89],116:[2,89],117:[2,89],118:[2,89],126:[2,89],128:[2,89],129:[2,89],132:[2,89],133:[2,89],134:[2,89],135:[2,89],136:[2,89],137:[2,89]},{10:165,27:166,28:[1,71],29:167,30:[1,69],31:[1,70],41:311,42:164,44:168,46:[1,44],89:[1,109]},{6:[2,90],10:165,25:[2,90],26:[2,90],27:166,28:[1,71],29:167,30:[1,69],31:[1,70],41:163,42:164,44:168,46:[1,44],54:[2,90],77:312,89:[1,109]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],78:[2,92]},{6:[2,39],25:[2,39],26:[2,39],54:[2,39],78:[2,39],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{7:313,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{73:[2,119],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],73:[2,37],78:[2,37],86:[2,37],91:[2,37],93:[2,37],102:[2,37],104:[2,37],105:[2,37],106:[2,37],110:[2,37],118:[2,37],126:[2,37],128:[2,37],129:[2,37],132:[2,37],133:[2,37],134:[2,37],135:[2,37],136:[2,37],137:[2,37]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],69:[2,110],71:[2,110],73:[2,110],74:[2,110],78:[2,110],84:[2,110],85:[2,110],86:[2,110],91:[2,110],93:[2,110],102:[2,110],104:[2,110],105:[2,110],106:[2,110],110:[2,110],118:[2,110],126:[2,110],128:[2,110],129:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110],137:[2,110]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],49:[2,48],54:[2,48],57:[2,48],73:[2,48],78:[2,48],86:[2,48],91:[2,48],93:[2,48],102:[2,48],104:[2,48],105:[2,48],106:[2,48],110:[2,48],118:[2,48],126:[2,48],128:[2,48],129:[2,48],132:[2,48],133:[2,48],134:[2,48],135:[2,48],136:[2,48],137:[2,48]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{6:[2,52],25:[2,52],26:[2,52],53:314,54:[1,199]},{1:[2,202],6:[2,202],25:[2,202],26:[2,202],49:[2,202],54:[2,202],57:[2,202],73:[2,202],78:[2,202],86:[2,202],91:[2,202],93:[2,202],102:[2,202],104:[2,202],105:[2,202],106:[2,202],110:[2,202],118:[2,202],126:[2,202],128:[2,202],129:[2,202],132:[2,202],133:[2,202],134:[2,202],135:[2,202],136:[2,202],137:[2,202]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],73:[2,181],78:[2,181],86:[2,181],91:[2,181],93:[2,181],102:[2,181],104:[2,181],105:[2,181],106:[2,181],110:[2,181],118:[2,181],121:[2,181],126:[2,181],128:[2,181],129:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181],137:[2,181]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],73:[2,135],78:[2,135],86:[2,135],91:[2,135],93:[2,135],102:[2,135],104:[2,135],105:[2,135],106:[2,135],110:[2,135],118:[2,135],126:[2,135],128:[2,135],129:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135],137:[2,135]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],73:[2,136],78:[2,136],86:[2,136],91:[2,136],93:[2,136],98:[2,136],102:[2,136],104:[2,136],105:[2,136],106:[2,136],110:[2,136],118:[2,136],126:[2,136],128:[2,136],129:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136],137:[2,136]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],73:[2,137],78:[2,137],86:[2,137],91:[2,137],93:[2,137],98:[2,137],102:[2,137],104:[2,137],105:[2,137],106:[2,137],110:[2,137],118:[2,137],126:[2,137],128:[2,137],129:[2,137],132:[2,137],133:[2,137],134:[2,137],135:[2,137],136:[2,137],137:[2,137]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],73:[2,172],78:[2,172],86:[2,172],91:[2,172],93:[2,172],102:[2,172],104:[2,172],105:[2,172],106:[2,172],110:[2,172],118:[2,172],126:[2,172],128:[2,172],129:[2,172],132:[2,172],133:[2,172],134:[2,172],135:[2,172],136:[2,172],137:[2,172]},{24:315,25:[1,112]},{26:[1,316]},{6:[1,317],26:[2,178],121:[2,178],123:[2,178]},{7:318,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,102],6:[2,102],25:[2,102],26:[2,102],49:[2,102],54:[2,102],57:[2,102],73:[2,102],78:[2,102],86:[2,102],91:[2,102],93:[2,102],102:[2,102],104:[2,102],105:[2,102],106:[2,102],110:[2,102],118:[2,102],126:[2,102],128:[2,102],129:[2,102],132:[2,102],133:[2,102],134:[2,102],135:[2,102],136:[2,102],137:[2,102]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],66:[2,141],67:[2,141],68:[2,141],69:[2,141],71:[2,141],73:[2,141],74:[2,141],78:[2,141],84:[2,141],85:[2,141],86:[2,141],91:[2,141],93:[2,141],102:[2,141],104:[2,141],105:[2,141],106:[2,141],110:[2,141],118:[2,141],126:[2,141],128:[2,141],129:[2,141],132:[2,141],133:[2,141],134:[2,141],135:[2,141],136:[2,141],137:[2,141]},{1:[2,118],6:[2,118],25:[2,118],26:[2,118],49:[2,118],54:[2,118],57:[2,118],66:[2,118],67:[2,118],68:[2,118],69:[2,118],71:[2,118],73:[2,118],74:[2,118],78:[2,118],84:[2,118],85:[2,118],86:[2,118],91:[2,118],93:[2,118],102:[2,118],104:[2,118],105:[2,118],106:[2,118],110:[2,118],118:[2,118],126:[2,118],128:[2,118],129:[2,118],132:[2,118],133:[2,118],134:[2,118],135:[2,118],136:[2,118],137:[2,118]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],86:[2,125],91:[2,125]},{6:[2,52],25:[2,52],26:[2,52],53:319,54:[1,226]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],86:[2,126],91:[2,126]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],73:[2,167],78:[2,167],86:[2,167],91:[2,167],93:[2,167],102:[2,167],103:82,104:[2,167],105:[2,167],106:[2,167],109:83,110:[2,167],111:67,118:[1,320],126:[2,167],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],73:[2,169],78:[2,169],86:[2,169],91:[2,169],93:[2,169],102:[2,169],103:82,104:[2,169],105:[1,321],106:[2,169],109:83,110:[2,169],111:67,118:[2,169],126:[2,169],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],73:[2,168],78:[2,168],86:[2,168],91:[2,168],93:[2,168],102:[2,168],103:82,104:[2,168],105:[2,168],106:[2,168],109:83,110:[2,168],111:67,118:[2,168],126:[2,168],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],78:[2,93]},{6:[2,52],25:[2,52],26:[2,52],53:322,54:[1,236]},{26:[1,323],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[1,247],25:[1,248],26:[1,324]},{26:[1,325]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],49:[2,175],54:[2,175],57:[2,175],73:[2,175],78:[2,175],86:[2,175],91:[2,175],93:[2,175],102:[2,175],104:[2,175],105:[2,175],106:[2,175],110:[2,175],118:[2,175],126:[2,175],128:[2,175],129:[2,175],132:[2,175],133:[2,175],134:[2,175],135:[2,175],136:[2,175],137:[2,175]},{26:[2,179],121:[2,179],123:[2,179]},{25:[2,131],54:[2,131],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[1,270],25:[1,271],26:[1,326]},{7:327,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:328,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[1,281],25:[1,282],26:[1,329]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],78:[2,40]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],73:[2,173],78:[2,173],86:[2,173],91:[2,173],93:[2,173],102:[2,173],104:[2,173],105:[2,173],106:[2,173],110:[2,173],118:[2,173],126:[2,173],128:[2,173],129:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173],137:[2,173]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],86:[2,127],91:[2,127]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],73:[2,170],78:[2,170],86:[2,170],91:[2,170],93:[2,170],102:[2,170],103:82,104:[2,170],105:[2,170],106:[2,170],109:83,110:[2,170],111:67,118:[2,170],126:[2,170],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],73:[2,171],78:[2,171],86:[2,171],91:[2,171],93:[2,171],102:[2,171],103:82,104:[2,171],105:[2,171],106:[2,171],109:83,110:[2,171],111:67,118:[2,171],126:[2,171],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],78:[2,94]}], defaultActions: {58:[2,50],59:[2,51],89:[2,108],186:[2,88]}, parseError: function parseError(str, hash) { if (hash.recoverable) { this.trace(str); } else { var e = new Error(str) e.location = hash.loc throw e; } }, parse: function parse(input) { var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; this.lexer.setInput(input); this.lexer.yy = this.yy; this.yy.lexer = this.lexer; this.yy.parser = this; if (typeof this.lexer.yylloc == 'undefined') { this.lexer.yylloc = {}; } var yyloc = this.lexer.yylloc; lstack.push(yyloc); var ranges = this.lexer.options && this.lexer.options.ranges; if (typeof this.yy.parseError === 'function') { this.parseError = this.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n) { stack.length = stack.length - 2 * n; vstack.length = vstack.length - n; lstack.length = lstack.length - n; } function lex() { var token; token = self.lexer.lex() || EOF; if (typeof token !== 'number') { token = self.symbols_[token] || token; } return token; } var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; while (true) { state = stack[stack.length - 1]; if (this.defaultActions[state]) { action = this.defaultActions[state]; } else { if (symbol === null || typeof symbol == 'undefined') { symbol = lex(); } action = table[state] && table[state][symbol]; } if (typeof action === 'undefined' || !action.length || !action[0]) { var errStr = ''; expected = []; for (p in table[state]) { if (this.terminals_[p] && p > TERROR) { expected.push('\'' + this.terminals_[p] + '\''); } } if (this.lexer.showPosition) { errStr = 'Expecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; } else { errStr = 'Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); } if (this.lexer.yylloc.first_line !== yyloc.first_line) yyloc = this.lexer.yylloc; this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(this.lexer.yytext); lstack.push(this.lexer.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = this.lexer.yyleng; yytext = this.lexer.yytext; yylineno = this.lexer.yylineno; yyloc = this.lexer.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); if (typeof r !== 'undefined') { return r; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState); break; case 3: return true; } } return true; }}; undefined function Parser () { this.yy = {}; } Parser.prototype = parser;parser.Parser = Parser; module.exports = new Parser; }); ace.define("ace/mode/coffee/scope",["require","exports","module","ace/mode/coffee/helpers"], function(require, exports, module) { var Scope, extend, last, _ref; _ref = require('./helpers'), extend = _ref.extend, last = _ref.last; exports.Scope = Scope = (function() { Scope.root = null; function Scope(parent, expressions, method) { this.parent = parent; this.expressions = expressions; this.method = method; this.variables = [ { name: 'arguments', type: 'arguments' } ]; this.positions = {}; if (!this.parent) { Scope.root = this; } } Scope.prototype.add = function(name, type, immediate) { if (this.shared && !immediate) { return this.parent.add(name, type, immediate); } if (Object.prototype.hasOwnProperty.call(this.positions, name)) { return this.variables[this.positions[name]].type = type; } else { return this.positions[name] = this.variables.push({ name: name, type: type }) - 1; } }; Scope.prototype.namedMethod = function() { var _ref1; if (((_ref1 = this.method) != null ? _ref1.name : void 0) || !this.parent) { return this.method; } return this.parent.namedMethod(); }; Scope.prototype.find = function(name) { if (this.check(name)) { return true; } this.add(name, 'var'); return false; }; Scope.prototype.parameter = function(name) { if (this.shared && this.parent.check(name, true)) { return; } return this.add(name, 'param'); }; Scope.prototype.check = function(name) { var _ref1; return !!(this.type(name) || ((_ref1 = this.parent) != null ? _ref1.check(name) : void 0)); }; Scope.prototype.temporary = function(name, index) { if (name.length > 1) { return '_' + name + (index > 1 ? index - 1 : ''); } else { return '_' + (index + parseInt(name, 36)).toString(36).replace(/\d/g, 'a'); } }; Scope.prototype.type = function(name) { var v, _i, _len, _ref1; _ref1 = this.variables; for (_i = 0, _len = _ref1.length; _i < _len; _i++) { v = _ref1[_i]; if (v.name === name) { return v.type; } } return null; }; Scope.prototype.freeVariable = function(name, reserve) { var index, temp; if (reserve == null) { reserve = true; } index = 0; while (this.check((temp = this.temporary(name, index)))) { index++; } if (reserve) { this.add(temp, 'var', true); } return temp; }; Scope.prototype.assign = function(name, value) { this.add(name, { value: value, assigned: true }, true); return this.hasAssignments = true; }; Scope.prototype.hasDeclarations = function() { return !!this.declaredVariables().length; }; Scope.prototype.declaredVariables = function() { var realVars, tempVars, v, _i, _len, _ref1; realVars = []; tempVars = []; _ref1 = this.variables; for (_i = 0, _len = _ref1.length; _i < _len; _i++) { v = _ref1[_i]; if (v.type === 'var') { (v.name.charAt(0) === '_' ? tempVars : realVars).push(v.name); } } return realVars.sort().concat(tempVars.sort()); }; Scope.prototype.assignedVariables = function() { var v, _i, _len, _ref1, _results; _ref1 = this.variables; _results = []; for (_i = 0, _len = _ref1.length; _i < _len; _i++) { v = _ref1[_i]; if (v.type.assigned) { _results.push("" + v.name + " = " + v.type.value); } } return _results; }; return Scope; })(); }); ace.define("ace/mode/coffee/nodes",["require","exports","module","ace/mode/coffee/scope","ace/mode/coffee/lexer","ace/mode/coffee/helpers"], function(require, exports, module) { var Access, Arr, Assign, Base, Block, Call, Class, Code, CodeFragment, Comment, Existence, Extends, For, HEXNUM, IDENTIFIER, IDENTIFIER_STR, IS_REGEX, IS_STRING, If, In, Index, LEVEL_ACCESS, LEVEL_COND, LEVEL_LIST, LEVEL_OP, LEVEL_PAREN, LEVEL_TOP, Literal, METHOD_DEF, NEGATE, NO, NUMBER, Obj, Op, Param, Parens, RESERVED, Range, Return, SIMPLENUM, STRICT_PROSCRIBED, Scope, Slice, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, addLocationDataFn, compact, del, ends, extend, flatten, fragmentsToText, isLiteralArguments, isLiteralThis, last, locationDataToString, merge, multident, parseNum, some, starts, throwSyntaxError, unfoldSoak, utility, _ref, _ref1, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __slice = [].slice; Error.stackTraceLimit = Infinity; Scope = require('./scope').Scope; _ref = require('./lexer'), RESERVED = _ref.RESERVED, STRICT_PROSCRIBED = _ref.STRICT_PROSCRIBED; _ref1 = require('./helpers'), compact = _ref1.compact, flatten = _ref1.flatten, extend = _ref1.extend, merge = _ref1.merge, del = _ref1.del, starts = _ref1.starts, ends = _ref1.ends, last = _ref1.last, some = _ref1.some, addLocationDataFn = _ref1.addLocationDataFn, locationDataToString = _ref1.locationDataToString, throwSyntaxError = _ref1.throwSyntaxError; exports.extend = extend; exports.addLocationDataFn = addLocationDataFn; YES = function() { return true; }; NO = function() { return false; }; THIS = function() { return this; }; NEGATE = function() { this.negated = !this.negated; return this; }; exports.CodeFragment = CodeFragment = (function() { function CodeFragment(parent, code) { var _ref2; this.code = "" + code; this.locationData = parent != null ? parent.locationData : void 0; this.type = (parent != null ? (_ref2 = parent.constructor) != null ? _ref2.name : void 0 : void 0) || 'unknown'; } CodeFragment.prototype.toString = function() { return "" + this.code + (this.locationData ? ": " + locationDataToString(this.locationData) : ''); }; return CodeFragment; })(); fragmentsToText = function(fragments) { var fragment; return ((function() { var _i, _len, _results; _results = []; for (_i = 0, _len = fragments.length; _i < _len; _i++) { fragment = fragments[_i]; _results.push(fragment.code); } return _results; })()).join(''); }; exports.Base = Base = (function() { function Base() {} Base.prototype.compile = function(o, lvl) { return fragmentsToText(this.compileToFragments(o, lvl)); }; Base.prototype.compileToFragments = function(o, lvl) { var node; o = extend({}, o); if (lvl) { o.level = lvl; } node = this.unfoldSoak(o) || this; node.tab = o.indent; if (o.level === LEVEL_TOP || !node.isStatement(o)) { return node.compileNode(o); } else { return node.compileClosure(o); } }; Base.prototype.compileClosure = function(o) { var args, argumentsNode, func, jumpNode, meth; if (jumpNode = this.jumps()) { jumpNode.error('cannot use a pure statement in an expression'); } o.sharedScope = true; func = new Code([], Block.wrap([this])); args = []; if ((argumentsNode = this.contains(isLiteralArguments)) || this.contains(isLiteralThis)) { args = [new Literal('this')]; if (argumentsNode) { meth = 'apply'; args.push(new Literal('arguments')); } else { meth = 'call'; } func = new Value(func, [new Access(new Literal(meth))]); } return (new Call(func, args)).compileNode(o); }; Base.prototype.cache = function(o, level, reused) { var ref, sub; if (!this.isComplex()) { ref = level ? this.compileToFragments(o, level) : this; return [ref, ref]; } else { ref = new Literal(reused || o.scope.freeVariable('ref')); sub = new Assign(ref, this); if (level) { return [sub.compileToFragments(o, level), [this.makeCode(ref.value)]]; } else { return [sub, ref]; } } }; Base.prototype.cacheToCodeFragments = function(cacheValues) { return [fragmentsToText(cacheValues[0]), fragmentsToText(cacheValues[1])]; }; Base.prototype.makeReturn = function(res) { var me; me = this.unwrapAll(); if (res) { return new Call(new Literal("" + res + ".push"), [me]); } else { return new Return(me); } }; Base.prototype.contains = function(pred) { var node; node = void 0; this.traverseChildren(false, function(n) { if (pred(n)) { node = n; return false; } }); return node; }; Base.prototype.lastNonComment = function(list) { var i; i = list.length; while (i--) { if (!(list[i] instanceof Comment)) { return list[i]; } } return null; }; Base.prototype.toString = function(idt, name) { var tree; if (idt == null) { idt = ''; } if (name == null) { name = this.constructor.name; } tree = '\n' + idt + name; if (this.soak) { tree += '?'; } this.eachChild(function(node) { return tree += node.toString(idt + TAB); }); return tree; }; Base.prototype.eachChild = function(func) { var attr, child, _i, _j, _len, _len1, _ref2, _ref3; if (!this.children) { return this; } _ref2 = this.children; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { attr = _ref2[_i]; if (this[attr]) { _ref3 = flatten([this[attr]]); for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) { child = _ref3[_j]; if (func(child) === false) { return this; } } } } return this; }; Base.prototype.traverseChildren = function(crossScope, func) { return this.eachChild(function(child) { var recur; recur = func(child); if (recur !== false) { return child.traverseChildren(crossScope, func); } }); }; Base.prototype.invert = function() { return new Op('!', this); }; Base.prototype.unwrapAll = function() { var node; node = this; while (node !== (node = node.unwrap())) { continue; } return node; }; Base.prototype.children = []; Base.prototype.isStatement = NO; Base.prototype.jumps = NO; Base.prototype.isComplex = YES; Base.prototype.isChainable = NO; Base.prototype.isAssignable = NO; Base.prototype.unwrap = THIS; Base.prototype.unfoldSoak = NO; Base.prototype.assigns = NO; Base.prototype.updateLocationDataIfMissing = function(locationData) { if (this.locationData) { return this; } this.locationData = locationData; return this.eachChild(function(child) { return child.updateLocationDataIfMissing(locationData); }); }; Base.prototype.error = function(message) { return throwSyntaxError(message, this.locationData); }; Base.prototype.makeCode = function(code) { return new CodeFragment(this, code); }; Base.prototype.wrapInBraces = function(fragments) { return [].concat(this.makeCode('('), fragments, this.makeCode(')')); }; Base.prototype.joinFragmentArrays = function(fragmentsList, joinStr) { var answer, fragments, i, _i, _len; answer = []; for (i = _i = 0, _len = fragmentsList.length; _i < _len; i = ++_i) { fragments = fragmentsList[i]; if (i) { answer.push(this.makeCode(joinStr)); } answer = answer.concat(fragments); } return answer; }; return Base; })(); exports.Block = Block = (function(_super) { __extends(Block, _super); function Block(nodes) { this.expressions = compact(flatten(nodes || [])); } Block.prototype.children = ['expressions']; Block.prototype.push = function(node) { this.expressions.push(node); return this; }; Block.prototype.pop = function() { return this.expressions.pop(); }; Block.prototype.unshift = function(node) { this.expressions.unshift(node); return this; }; Block.prototype.unwrap = function() { if (this.expressions.length === 1) { return this.expressions[0]; } else { return this; } }; Block.prototype.isEmpty = function() { return !this.expressions.length; }; Block.prototype.isStatement = function(o) { var exp, _i, _len, _ref2; _ref2 = this.expressions; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { exp = _ref2[_i]; if (exp.isStatement(o)) { return true; } } return false; }; Block.prototype.jumps = function(o) { var exp, jumpNode, _i, _len, _ref2; _ref2 = this.expressions; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { exp = _ref2[_i]; if (jumpNode = exp.jumps(o)) { return jumpNode; } } }; Block.prototype.makeReturn = function(res) { var expr, len; len = this.expressions.length; while (len--) { expr = this.expressions[len]; if (!(expr instanceof Comment)) { this.expressions[len] = expr.makeReturn(res); if (expr instanceof Return && !expr.expression) { this.expressions.splice(len, 1); } break; } } return this; }; Block.prototype.compileToFragments = function(o, level) { if (o == null) { o = {}; } if (o.scope) { return Block.__super__.compileToFragments.call(this, o, level); } else { return this.compileRoot(o); } }; Block.prototype.compileNode = function(o) { var answer, compiledNodes, fragments, index, node, top, _i, _len, _ref2; this.tab = o.indent; top = o.level === LEVEL_TOP; compiledNodes = []; _ref2 = this.expressions; for (index = _i = 0, _len = _ref2.length; _i < _len; index = ++_i) { node = _ref2[index]; node = node.unwrapAll(); node = node.unfoldSoak(o) || node; if (node instanceof Block) { compiledNodes.push(node.compileNode(o)); } else if (top) { node.front = true; fragments = node.compileToFragments(o); if (!node.isStatement(o)) { fragments.unshift(this.makeCode("" + this.tab)); fragments.push(this.makeCode(";")); } compiledNodes.push(fragments); } else { compiledNodes.push(node.compileToFragments(o, LEVEL_LIST)); } } if (top) { if (this.spaced) { return [].concat(this.joinFragmentArrays(compiledNodes, '\n\n'), this.makeCode("\n")); } else { return this.joinFragmentArrays(compiledNodes, '\n'); } } if (compiledNodes.length) { answer = this.joinFragmentArrays(compiledNodes, ', '); } else { answer = [this.makeCode("void 0")]; } if (compiledNodes.length > 1 && o.level >= LEVEL_LIST) { return this.wrapInBraces(answer); } else { return answer; } }; Block.prototype.compileRoot = function(o) { var exp, fragments, i, name, prelude, preludeExps, rest, _i, _len, _ref2; o.indent = o.bare ? '' : TAB; o.level = LEVEL_TOP; this.spaced = true; o.scope = new Scope(null, this, null); _ref2 = o.locals || []; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { name = _ref2[_i]; o.scope.parameter(name); } prelude = []; if (!o.bare) { preludeExps = (function() { var _j, _len1, _ref3, _results; _ref3 = this.expressions; _results = []; for (i = _j = 0, _len1 = _ref3.length; _j < _len1; i = ++_j) { exp = _ref3[i]; if (!(exp.unwrap() instanceof Comment)) { break; } _results.push(exp); } return _results; }).call(this); rest = this.expressions.slice(preludeExps.length); this.expressions = preludeExps; if (preludeExps.length) { prelude = this.compileNode(merge(o, { indent: '' })); prelude.push(this.makeCode("\n")); } this.expressions = rest; } fragments = this.compileWithDeclarations(o); if (o.bare) { return fragments; } return [].concat(prelude, this.makeCode("(function() {\n"), fragments, this.makeCode("\n}).call(this);\n")); }; Block.prototype.compileWithDeclarations = function(o) { var assigns, declars, exp, fragments, i, post, rest, scope, spaced, _i, _len, _ref2, _ref3, _ref4; fragments = []; post = []; _ref2 = this.expressions; for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) { exp = _ref2[i]; exp = exp.unwrap(); if (!(exp instanceof Comment || exp instanceof Literal)) { break; } } o = merge(o, { level: LEVEL_TOP }); if (i) { rest = this.expressions.splice(i, 9e9); _ref3 = [this.spaced, false], spaced = _ref3[0], this.spaced = _ref3[1]; _ref4 = [this.compileNode(o), spaced], fragments = _ref4[0], this.spaced = _ref4[1]; this.expressions = rest; } post = this.compileNode(o); scope = o.scope; if (scope.expressions === this) { declars = o.scope.hasDeclarations(); assigns = scope.hasAssignments; if (declars || assigns) { if (i) { fragments.push(this.makeCode('\n')); } fragments.push(this.makeCode("" + this.tab + "var ")); if (declars) { fragments.push(this.makeCode(scope.declaredVariables().join(', '))); } if (assigns) { if (declars) { fragments.push(this.makeCode(",\n" + (this.tab + TAB))); } fragments.push(this.makeCode(scope.assignedVariables().join(",\n" + (this.tab + TAB)))); } fragments.push(this.makeCode(";\n" + (this.spaced ? '\n' : ''))); } else if (fragments.length && post.length) { fragments.push(this.makeCode("\n")); } } return fragments.concat(post); }; Block.wrap = function(nodes) { if (nodes.length === 1 && nodes[0] instanceof Block) { return nodes[0]; } return new Block(nodes); }; return Block; })(Base); exports.Literal = Literal = (function(_super) { __extends(Literal, _super); function Literal(value) { this.value = value; } Literal.prototype.makeReturn = function() { if (this.isStatement()) { return this; } else { return Literal.__super__.makeReturn.apply(this, arguments); } }; Literal.prototype.isAssignable = function() { return IDENTIFIER.test(this.value); }; Literal.prototype.isStatement = function() { var _ref2; return (_ref2 = this.value) === 'break' || _ref2 === 'continue' || _ref2 === 'debugger'; }; Literal.prototype.isComplex = NO; Literal.prototype.assigns = function(name) { return name === this.value; }; Literal.prototype.jumps = function(o) { if (this.value === 'break' && !((o != null ? o.loop : void 0) || (o != null ? o.block : void 0))) { return this; } if (this.value === 'continue' && !(o != null ? o.loop : void 0)) { return this; } }; Literal.prototype.compileNode = function(o) { var answer, code, _ref2; code = this.value === 'this' ? ((_ref2 = o.scope.method) != null ? _ref2.bound : void 0) ? o.scope.method.context : this.value : this.value.reserved ? "\"" + this.value + "\"" : this.value; answer = this.isStatement() ? "" + this.tab + code + ";" : code; return [this.makeCode(answer)]; }; Literal.prototype.toString = function() { return ' "' + this.value + '"'; }; return Literal; })(Base); exports.Undefined = (function(_super) { __extends(Undefined, _super); function Undefined() { return Undefined.__super__.constructor.apply(this, arguments); } Undefined.prototype.isAssignable = NO; Undefined.prototype.isComplex = NO; Undefined.prototype.compileNode = function(o) { return [this.makeCode(o.level >= LEVEL_ACCESS ? '(void 0)' : 'void 0')]; }; return Undefined; })(Base); exports.Null = (function(_super) { __extends(Null, _super); function Null() { return Null.__super__.constructor.apply(this, arguments); } Null.prototype.isAssignable = NO; Null.prototype.isComplex = NO; Null.prototype.compileNode = function() { return [this.makeCode("null")]; }; return Null; })(Base); exports.Bool = (function(_super) { __extends(Bool, _super); Bool.prototype.isAssignable = NO; Bool.prototype.isComplex = NO; Bool.prototype.compileNode = function() { return [this.makeCode(this.val)]; }; function Bool(val) { this.val = val; } return Bool; })(Base); exports.Return = Return = (function(_super) { __extends(Return, _super); function Return(expr) { if (expr && !expr.unwrap().isUndefined) { this.expression = expr; } } Return.prototype.children = ['expression']; Return.prototype.isStatement = YES; Return.prototype.makeReturn = THIS; Return.prototype.jumps = THIS; Return.prototype.compileToFragments = function(o, level) { var expr, _ref2; expr = (_ref2 = this.expression) != null ? _ref2.makeReturn() : void 0; if (expr && !(expr instanceof Return)) { return expr.compileToFragments(o, level); } else { return Return.__super__.compileToFragments.call(this, o, level); } }; Return.prototype.compileNode = function(o) { var answer; answer = []; answer.push(this.makeCode(this.tab + ("return" + (this.expression ? " " : "")))); if (this.expression) { answer = answer.concat(this.expression.compileToFragments(o, LEVEL_PAREN)); } answer.push(this.makeCode(";")); return answer; }; return Return; })(Base); exports.Value = Value = (function(_super) { __extends(Value, _super); function Value(base, props, tag) { if (!props && base instanceof Value) { return base; } this.base = base; this.properties = props || []; if (tag) { this[tag] = true; } return this; } Value.prototype.children = ['base', 'properties']; Value.prototype.add = function(props) { this.properties = this.properties.concat(props); return this; }; Value.prototype.hasProperties = function() { return !!this.properties.length; }; Value.prototype.bareLiteral = function(type) { return !this.properties.length && this.base instanceof type; }; Value.prototype.isArray = function() { return this.bareLiteral(Arr); }; Value.prototype.isRange = function() { return this.bareLiteral(Range); }; Value.prototype.isComplex = function() { return this.hasProperties() || this.base.isComplex(); }; Value.prototype.isAssignable = function() { return this.hasProperties() || this.base.isAssignable(); }; Value.prototype.isSimpleNumber = function() { return this.bareLiteral(Literal) && SIMPLENUM.test(this.base.value); }; Value.prototype.isString = function() { return this.bareLiteral(Literal) && IS_STRING.test(this.base.value); }; Value.prototype.isRegex = function() { return this.bareLiteral(Literal) && IS_REGEX.test(this.base.value); }; Value.prototype.isAtomic = function() { var node, _i, _len, _ref2; _ref2 = this.properties.concat(this.base); for (_i = 0, _len = _ref2.length; _i < _len; _i++) { node = _ref2[_i]; if (node.soak || node instanceof Call) { return false; } } return true; }; Value.prototype.isNotCallable = function() { return this.isSimpleNumber() || this.isString() || this.isRegex() || this.isArray() || this.isRange() || this.isSplice() || this.isObject(); }; Value.prototype.isStatement = function(o) { return !this.properties.length && this.base.isStatement(o); }; Value.prototype.assigns = function(name) { return !this.properties.length && this.base.assigns(name); }; Value.prototype.jumps = function(o) { return !this.properties.length && this.base.jumps(o); }; Value.prototype.isObject = function(onlyGenerated) { if (this.properties.length) { return false; } return (this.base instanceof Obj) && (!onlyGenerated || this.base.generated); }; Value.prototype.isSplice = function() { return last(this.properties) instanceof Slice; }; Value.prototype.looksStatic = function(className) { var _ref2; return this.base.value === className && this.properties.length && ((_ref2 = this.properties[0].name) != null ? _ref2.value : void 0) !== 'prototype'; }; Value.prototype.unwrap = function() { if (this.properties.length) { return this; } else { return this.base; } }; Value.prototype.cacheReference = function(o) { var base, bref, name, nref; name = last(this.properties); if (this.properties.length < 2 && !this.base.isComplex() && !(name != null ? name.isComplex() : void 0)) { return [this, this]; } base = new Value(this.base, this.properties.slice(0, -1)); if (base.isComplex()) { bref = new Literal(o.scope.freeVariable('base')); base = new Value(new Parens(new Assign(bref, base))); } if (!name) { return [base, bref]; } if (name.isComplex()) { nref = new Literal(o.scope.freeVariable('name')); name = new Index(new Assign(nref, name.index)); nref = new Index(nref); } return [base.add(name), new Value(bref || base.base, [nref || name])]; }; Value.prototype.compileNode = function(o) { var fragments, prop, props, _i, _len; this.base.front = this.front; props = this.properties; fragments = this.base.compileToFragments(o, (props.length ? LEVEL_ACCESS : null)); if ((this.base instanceof Parens || props.length) && SIMPLENUM.test(fragmentsToText(fragments))) { fragments.push(this.makeCode('.')); } for (_i = 0, _len = props.length; _i < _len; _i++) { prop = props[_i]; fragments.push.apply(fragments, prop.compileToFragments(o)); } return fragments; }; Value.prototype.unfoldSoak = function(o) { return this.unfoldedSoak != null ? this.unfoldedSoak : this.unfoldedSoak = (function(_this) { return function() { var fst, i, ifn, prop, ref, snd, _i, _len, _ref2, _ref3; if (ifn = _this.base.unfoldSoak(o)) { (_ref2 = ifn.body.properties).push.apply(_ref2, _this.properties); return ifn; } _ref3 = _this.properties; for (i = _i = 0, _len = _ref3.length; _i < _len; i = ++_i) { prop = _ref3[i]; if (!prop.soak) { continue; } prop.soak = false; fst = new Value(_this.base, _this.properties.slice(0, i)); snd = new Value(_this.base, _this.properties.slice(i)); if (fst.isComplex()) { ref = new Literal(o.scope.freeVariable('ref')); fst = new Parens(new Assign(ref, fst)); snd.base = ref; } return new If(new Existence(fst), snd, { soak: true }); } return false; }; })(this)(); }; return Value; })(Base); exports.Comment = Comment = (function(_super) { __extends(Comment, _super); function Comment(comment) { this.comment = comment; } Comment.prototype.isStatement = YES; Comment.prototype.makeReturn = THIS; Comment.prototype.compileNode = function(o, level) { var code, comment; comment = this.comment.replace(/^(\s*)#/gm, "$1 *"); code = "/*" + (multident(comment, this.tab)) + (__indexOf.call(comment, '\n') >= 0 ? "\n" + this.tab : '') + " */"; if ((level || o.level) === LEVEL_TOP) { code = o.indent + code; } return [this.makeCode("\n"), this.makeCode(code)]; }; return Comment; })(Base); exports.Call = Call = (function(_super) { __extends(Call, _super); function Call(variable, args, soak) { this.args = args != null ? args : []; this.soak = soak; this.isNew = false; this.isSuper = variable === 'super'; this.variable = this.isSuper ? null : variable; if (variable instanceof Value && variable.isNotCallable()) { variable.error("literal is not a function"); } } Call.prototype.children = ['variable', 'args']; Call.prototype.newInstance = function() { var base, _ref2; base = ((_ref2 = this.variable) != null ? _ref2.base : void 0) || this.variable; if (base instanceof Call && !base.isNew) { base.newInstance(); } else { this.isNew = true; } return this; }; Call.prototype.superReference = function(o) { var accesses, method; method = o.scope.namedMethod(); if (method != null ? method.klass : void 0) { accesses = [new Access(new Literal('__super__'))]; if (method["static"]) { accesses.push(new Access(new Literal('constructor'))); } accesses.push(new Access(new Literal(method.name))); return (new Value(new Literal(method.klass), accesses)).compile(o); } else if (method != null ? method.ctor : void 0) { return "" + method.name + ".__super__.constructor"; } else { return this.error('cannot call super outside of an instance method.'); } }; Call.prototype.superThis = function(o) { var method; method = o.scope.method; return (method && !method.klass && method.context) || "this"; }; Call.prototype.unfoldSoak = function(o) { var call, ifn, left, list, rite, _i, _len, _ref2, _ref3; if (this.soak) { if (this.variable) { if (ifn = unfoldSoak(o, this, 'variable')) { return ifn; } _ref2 = new Value(this.variable).cacheReference(o), left = _ref2[0], rite = _ref2[1]; } else { left = new Literal(this.superReference(o)); rite = new Value(left); } rite = new Call(rite, this.args); rite.isNew = this.isNew; left = new Literal("typeof " + (left.compile(o)) + " === \"function\""); return new If(left, new Value(rite), { soak: true }); } call = this; list = []; while (true) { if (call.variable instanceof Call) { list.push(call); call = call.variable; continue; } if (!(call.variable instanceof Value)) { break; } list.push(call); if (!((call = call.variable.base) instanceof Call)) { break; } } _ref3 = list.reverse(); for (_i = 0, _len = _ref3.length; _i < _len; _i++) { call = _ref3[_i]; if (ifn) { if (call.variable instanceof Call) { call.variable = ifn; } else { call.variable.base = ifn; } } ifn = unfoldSoak(o, call, 'variable'); } return ifn; }; Call.prototype.compileNode = function(o) { var arg, argIndex, compiledArgs, compiledArray, fragments, preface, _i, _len, _ref2, _ref3; if ((_ref2 = this.variable) != null) { _ref2.front = this.front; } compiledArray = Splat.compileSplattedArray(o, this.args, true); if (compiledArray.length) { return this.compileSplat(o, compiledArray); } compiledArgs = []; _ref3 = this.args; for (argIndex = _i = 0, _len = _ref3.length; _i < _len; argIndex = ++_i) { arg = _ref3[argIndex]; if (argIndex) { compiledArgs.push(this.makeCode(", ")); } compiledArgs.push.apply(compiledArgs, arg.compileToFragments(o, LEVEL_LIST)); } fragments = []; if (this.isSuper) { preface = this.superReference(o) + (".call(" + (this.superThis(o))); if (compiledArgs.length) { preface += ", "; } fragments.push(this.makeCode(preface)); } else { if (this.isNew) { fragments.push(this.makeCode('new ')); } fragments.push.apply(fragments, this.variable.compileToFragments(o, LEVEL_ACCESS)); fragments.push(this.makeCode("(")); } fragments.push.apply(fragments, compiledArgs); fragments.push(this.makeCode(")")); return fragments; }; Call.prototype.compileSplat = function(o, splatArgs) { var answer, base, fun, idt, name, ref; if (this.isSuper) { return [].concat(this.makeCode("" + (this.superReference(o)) + ".apply(" + (this.superThis(o)) + ", "), splatArgs, this.makeCode(")")); } if (this.isNew) { idt = this.tab + TAB; return [].concat(this.makeCode("(function(func, args, ctor) {\n" + idt + "ctor.prototype = func.prototype;\n" + idt + "var child = new ctor, result = func.apply(child, args);\n" + idt + "return Object(result) === result ? result : child;\n" + this.tab + "})("), this.variable.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), splatArgs, this.makeCode(", function(){})")); } answer = []; base = new Value(this.variable); if ((name = base.properties.pop()) && base.isComplex()) { ref = o.scope.freeVariable('ref'); answer = answer.concat(this.makeCode("(" + ref + " = "), base.compileToFragments(o, LEVEL_LIST), this.makeCode(")"), name.compileToFragments(o)); } else { fun = base.compileToFragments(o, LEVEL_ACCESS); if (SIMPLENUM.test(fragmentsToText(fun))) { fun = this.wrapInBraces(fun); } if (name) { ref = fragmentsToText(fun); fun.push.apply(fun, name.compileToFragments(o)); } else { ref = 'null'; } answer = answer.concat(fun); } return answer = answer.concat(this.makeCode(".apply(" + ref + ", "), splatArgs, this.makeCode(")")); }; return Call; })(Base); exports.Extends = Extends = (function(_super) { __extends(Extends, _super); function Extends(child, parent) { this.child = child; this.parent = parent; } Extends.prototype.children = ['child', 'parent']; Extends.prototype.compileToFragments = function(o) { return new Call(new Value(new Literal(utility('extends'))), [this.child, this.parent]).compileToFragments(o); }; return Extends; })(Base); exports.Access = Access = (function(_super) { __extends(Access, _super); function Access(name, tag) { this.name = name; this.name.asKey = true; this.soak = tag === 'soak'; } Access.prototype.children = ['name']; Access.prototype.compileToFragments = function(o) { var name; name = this.name.compileToFragments(o); if (IDENTIFIER.test(fragmentsToText(name))) { name.unshift(this.makeCode(".")); } else { name.unshift(this.makeCode("[")); name.push(this.makeCode("]")); } return name; }; Access.prototype.isComplex = NO; return Access; })(Base); exports.Index = Index = (function(_super) { __extends(Index, _super); function Index(index) { this.index = index; } Index.prototype.children = ['index']; Index.prototype.compileToFragments = function(o) { return [].concat(this.makeCode("["), this.index.compileToFragments(o, LEVEL_PAREN), this.makeCode("]")); }; Index.prototype.isComplex = function() { return this.index.isComplex(); }; return Index; })(Base); exports.Range = Range = (function(_super) { __extends(Range, _super); Range.prototype.children = ['from', 'to']; function Range(from, to, tag) { this.from = from; this.to = to; this.exclusive = tag === 'exclusive'; this.equals = this.exclusive ? '' : '='; } Range.prototype.compileVariables = function(o) { var step, _ref2, _ref3, _ref4, _ref5; o = merge(o, { top: true }); _ref2 = this.cacheToCodeFragments(this.from.cache(o, LEVEL_LIST)), this.fromC = _ref2[0], this.fromVar = _ref2[1]; _ref3 = this.cacheToCodeFragments(this.to.cache(o, LEVEL_LIST)), this.toC = _ref3[0], this.toVar = _ref3[1]; if (step = del(o, 'step')) { _ref4 = this.cacheToCodeFragments(step.cache(o, LEVEL_LIST)), this.step = _ref4[0], this.stepVar = _ref4[1]; } _ref5 = [this.fromVar.match(NUMBER), this.toVar.match(NUMBER)], this.fromNum = _ref5[0], this.toNum = _ref5[1]; if (this.stepVar) { return this.stepNum = this.stepVar.match(NUMBER); } }; Range.prototype.compileNode = function(o) { var cond, condPart, from, gt, idx, idxName, known, lt, namedIndex, stepPart, to, varPart, _ref2, _ref3; if (!this.fromVar) { this.compileVariables(o); } if (!o.index) { return this.compileArray(o); } known = this.fromNum && this.toNum; idx = del(o, 'index'); idxName = del(o, 'name'); namedIndex = idxName && idxName !== idx; varPart = "" + idx + " = " + this.fromC; if (this.toC !== this.toVar) { varPart += ", " + this.toC; } if (this.step !== this.stepVar) { varPart += ", " + this.step; } _ref2 = ["" + idx + " <" + this.equals, "" + idx + " >" + this.equals], lt = _ref2[0], gt = _ref2[1]; condPart = this.stepNum ? parseNum(this.stepNum[0]) > 0 ? "" + lt + " " + this.toVar : "" + gt + " " + this.toVar : known ? ((_ref3 = [parseNum(this.fromNum[0]), parseNum(this.toNum[0])], from = _ref3[0], to = _ref3[1], _ref3), from <= to ? "" + lt + " " + to : "" + gt + " " + to) : (cond = this.stepVar ? "" + this.stepVar + " > 0" : "" + this.fromVar + " <= " + this.toVar, "" + cond + " ? " + lt + " " + this.toVar + " : " + gt + " " + this.toVar); stepPart = this.stepVar ? "" + idx + " += " + this.stepVar : known ? namedIndex ? from <= to ? "++" + idx : "--" + idx : from <= to ? "" + idx + "++" : "" + idx + "--" : namedIndex ? "" + cond + " ? ++" + idx + " : --" + idx : "" + cond + " ? " + idx + "++ : " + idx + "--"; if (namedIndex) { varPart = "" + idxName + " = " + varPart; } if (namedIndex) { stepPart = "" + idxName + " = " + stepPart; } return [this.makeCode("" + varPart + "; " + condPart + "; " + stepPart)]; }; Range.prototype.compileArray = function(o) { var args, body, cond, hasArgs, i, idt, post, pre, range, result, vars, _i, _ref2, _ref3, _results; if (this.fromNum && this.toNum && Math.abs(this.fromNum - this.toNum) <= 20) { range = (function() { _results = []; for (var _i = _ref2 = +this.fromNum, _ref3 = +this.toNum; _ref2 <= _ref3 ? _i <= _ref3 : _i >= _ref3; _ref2 <= _ref3 ? _i++ : _i--){ _results.push(_i); } return _results; }).apply(this); if (this.exclusive) { range.pop(); } return [this.makeCode("[" + (range.join(', ')) + "]")]; } idt = this.tab + TAB; i = o.scope.freeVariable('i'); result = o.scope.freeVariable('results'); pre = "\n" + idt + result + " = [];"; if (this.fromNum && this.toNum) { o.index = i; body = fragmentsToText(this.compileNode(o)); } else { vars = ("" + i + " = " + this.fromC) + (this.toC !== this.toVar ? ", " + this.toC : ''); cond = "" + this.fromVar + " <= " + this.toVar; body = "var " + vars + "; " + cond + " ? " + i + " <" + this.equals + " " + this.toVar + " : " + i + " >" + this.equals + " " + this.toVar + "; " + cond + " ? " + i + "++ : " + i + "--"; } post = "{ " + result + ".push(" + i + "); }\n" + idt + "return " + result + ";\n" + o.indent; hasArgs = function(node) { return node != null ? node.contains(isLiteralArguments) : void 0; }; if (hasArgs(this.from) || hasArgs(this.to)) { args = ', arguments'; } return [this.makeCode("(function() {" + pre + "\n" + idt + "for (" + body + ")" + post + "}).apply(this" + (args != null ? args : '') + ")")]; }; return Range; })(Base); exports.Slice = Slice = (function(_super) { __extends(Slice, _super); Slice.prototype.children = ['range']; function Slice(range) { this.range = range; Slice.__super__.constructor.call(this); } Slice.prototype.compileNode = function(o) { var compiled, compiledText, from, fromCompiled, to, toStr, _ref2; _ref2 = this.range, to = _ref2.to, from = _ref2.from; fromCompiled = from && from.compileToFragments(o, LEVEL_PAREN) || [this.makeCode('0')]; if (to) { compiled = to.compileToFragments(o, LEVEL_PAREN); compiledText = fragmentsToText(compiled); if (!(!this.range.exclusive && +compiledText === -1)) { toStr = ', ' + (this.range.exclusive ? compiledText : SIMPLENUM.test(compiledText) ? "" + (+compiledText + 1) : (compiled = to.compileToFragments(o, LEVEL_ACCESS), "+" + (fragmentsToText(compiled)) + " + 1 || 9e9")); } } return [this.makeCode(".slice(" + (fragmentsToText(fromCompiled)) + (toStr || '') + ")")]; }; return Slice; })(Base); exports.Obj = Obj = (function(_super) { __extends(Obj, _super); function Obj(props, generated) { this.generated = generated != null ? generated : false; this.objects = this.properties = props || []; } Obj.prototype.children = ['properties']; Obj.prototype.compileNode = function(o) { var answer, i, idt, indent, join, lastNoncom, node, prop, props, _i, _j, _len, _len1; props = this.properties; if (!props.length) { return [this.makeCode(this.front ? '({})' : '{}')]; } if (this.generated) { for (_i = 0, _len = props.length; _i < _len; _i++) { node = props[_i]; if (node instanceof Value) { node.error('cannot have an implicit value in an implicit object'); } } } idt = o.indent += TAB; lastNoncom = this.lastNonComment(this.properties); answer = []; for (i = _j = 0, _len1 = props.length; _j < _len1; i = ++_j) { prop = props[i]; join = i === props.length - 1 ? '' : prop === lastNoncom || prop instanceof Comment ? '\n' : ',\n'; indent = prop instanceof Comment ? '' : idt; if (prop instanceof Assign && prop.variable instanceof Value && prop.variable.hasProperties()) { prop.variable.error('Invalid object key'); } if (prop instanceof Value && prop["this"]) { prop = new Assign(prop.properties[0].name, prop, 'object'); } if (!(prop instanceof Comment)) { if (!(prop instanceof Assign)) { prop = new Assign(prop, prop, 'object'); } (prop.variable.base || prop.variable).asKey = true; } if (indent) { answer.push(this.makeCode(indent)); } answer.push.apply(answer, prop.compileToFragments(o, LEVEL_TOP)); if (join) { answer.push(this.makeCode(join)); } } answer.unshift(this.makeCode("{" + (props.length && '\n'))); answer.push(this.makeCode("" + (props.length && '\n' + this.tab) + "}")); if (this.front) { return this.wrapInBraces(answer); } else { return answer; } }; Obj.prototype.assigns = function(name) { var prop, _i, _len, _ref2; _ref2 = this.properties; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { prop = _ref2[_i]; if (prop.assigns(name)) { return true; } } return false; }; return Obj; })(Base); exports.Arr = Arr = (function(_super) { __extends(Arr, _super); function Arr(objs) { this.objects = objs || []; } Arr.prototype.children = ['objects']; Arr.prototype.compileNode = function(o) { var answer, compiledObjs, fragments, index, obj, _i, _len; if (!this.objects.length) { return [this.makeCode('[]')]; } o.indent += TAB; answer = Splat.compileSplattedArray(o, this.objects); if (answer.length) { return answer; } answer = []; compiledObjs = (function() { var _i, _len, _ref2, _results; _ref2 = this.objects; _results = []; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { obj = _ref2[_i]; _results.push(obj.compileToFragments(o, LEVEL_LIST)); } return _results; }).call(this); for (index = _i = 0, _len = compiledObjs.length; _i < _len; index = ++_i) { fragments = compiledObjs[index]; if (index) { answer.push(this.makeCode(", ")); } answer.push.apply(answer, fragments); } if (fragmentsToText(answer).indexOf('\n') >= 0) { answer.unshift(this.makeCode("[\n" + o.indent)); answer.push(this.makeCode("\n" + this.tab + "]")); } else { answer.unshift(this.makeCode("[")); answer.push(this.makeCode("]")); } return answer; }; Arr.prototype.assigns = function(name) { var obj, _i, _len, _ref2; _ref2 = this.objects; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { obj = _ref2[_i]; if (obj.assigns(name)) { return true; } } return false; }; return Arr; })(Base); exports.Class = Class = (function(_super) { __extends(Class, _super); function Class(variable, parent, body) { this.variable = variable; this.parent = parent; this.body = body != null ? body : new Block; this.boundFuncs = []; this.body.classBody = true; } Class.prototype.children = ['variable', 'parent', 'body']; Class.prototype.determineName = function() { var decl, tail; if (!this.variable) { return null; } decl = (tail = last(this.variable.properties)) ? tail instanceof Access && tail.name.value : this.variable.base.value; if (__indexOf.call(STRICT_PROSCRIBED, decl) >= 0) { this.variable.error("class variable name may not be " + decl); } return decl && (decl = IDENTIFIER.test(decl) && decl); }; Class.prototype.setContext = function(name) { return this.body.traverseChildren(false, function(node) { if (node.classBody) { return false; } if (node instanceof Literal && node.value === 'this') { return node.value = name; } else if (node instanceof Code) { node.klass = name; if (node.bound) { return node.context = name; } } }); }; Class.prototype.addBoundFunctions = function(o) { var bvar, lhs, _i, _len, _ref2; _ref2 = this.boundFuncs; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { bvar = _ref2[_i]; lhs = (new Value(new Literal("this"), [new Access(bvar)])).compile(o); this.ctor.body.unshift(new Literal("" + lhs + " = " + (utility('bind')) + "(" + lhs + ", this)")); } }; Class.prototype.addProperties = function(node, name, o) { var assign, base, exprs, func, props; props = node.base.properties.slice(0); exprs = (function() { var _results; _results = []; while (assign = props.shift()) { if (assign instanceof Assign) { base = assign.variable.base; delete assign.context; func = assign.value; if (base.value === 'constructor') { if (this.ctor) { assign.error('cannot define more than one constructor in a class'); } if (func.bound) { assign.error('cannot define a constructor as a bound function'); } if (func instanceof Code) { assign = this.ctor = func; } else { this.externalCtor = o.classScope.freeVariable('class'); assign = new Assign(new Literal(this.externalCtor), func); } } else { if (assign.variable["this"]) { func["static"] = true; } else { assign.variable = new Value(new Literal(name), [new Access(new Literal('prototype')), new Access(base)]); if (func instanceof Code && func.bound) { this.boundFuncs.push(base); func.bound = false; } } } } _results.push(assign); } return _results; }).call(this); return compact(exprs); }; Class.prototype.walkBody = function(name, o) { return this.traverseChildren(false, (function(_this) { return function(child) { var cont, exps, i, node, _i, _len, _ref2; cont = true; if (child instanceof Class) { return false; } if (child instanceof Block) { _ref2 = exps = child.expressions; for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) { node = _ref2[i]; if (node instanceof Assign && node.variable.looksStatic(name)) { node.value["static"] = true; } else if (node instanceof Value && node.isObject(true)) { cont = false; exps[i] = _this.addProperties(node, name, o); } } child.expressions = exps = flatten(exps); } return cont && !(child instanceof Class); }; })(this)); }; Class.prototype.hoistDirectivePrologue = function() { var expressions, index, node; index = 0; expressions = this.body.expressions; while ((node = expressions[index]) && node instanceof Comment || node instanceof Value && node.isString()) { ++index; } return this.directives = expressions.splice(0, index); }; Class.prototype.ensureConstructor = function(name) { if (!this.ctor) { this.ctor = new Code; if (this.externalCtor) { this.ctor.body.push(new Literal("" + this.externalCtor + ".apply(this, arguments)")); } else if (this.parent) { this.ctor.body.push(new Literal("" + name + ".__super__.constructor.apply(this, arguments)")); } this.ctor.body.makeReturn(); this.body.expressions.unshift(this.ctor); } this.ctor.ctor = this.ctor.name = name; this.ctor.klass = null; return this.ctor.noReturn = true; }; Class.prototype.compileNode = function(o) { var args, argumentsNode, func, jumpNode, klass, lname, name, superClass, _ref2; if (jumpNode = this.body.jumps()) { jumpNode.error('Class bodies cannot contain pure statements'); } if (argumentsNode = this.body.contains(isLiteralArguments)) { argumentsNode.error("Class bodies shouldn't reference arguments"); } name = this.determineName() || '_Class'; if (name.reserved) { name = "_" + name; } lname = new Literal(name); func = new Code([], Block.wrap([this.body])); args = []; o.classScope = func.makeScope(o.scope); this.hoistDirectivePrologue(); this.setContext(name); this.walkBody(name, o); this.ensureConstructor(name); this.addBoundFunctions(o); this.body.spaced = true; this.body.expressions.push(lname); if (this.parent) { superClass = new Literal(o.classScope.freeVariable('super', false)); this.body.expressions.unshift(new Extends(lname, superClass)); func.params.push(new Param(superClass)); args.push(this.parent); } (_ref2 = this.body.expressions).unshift.apply(_ref2, this.directives); klass = new Parens(new Call(func, args)); if (this.variable) { klass = new Assign(this.variable, klass); } return klass.compileToFragments(o); }; return Class; })(Base); exports.Assign = Assign = (function(_super) { __extends(Assign, _super); function Assign(variable, value, context, options) { var forbidden, name, _ref2; this.variable = variable; this.value = value; this.context = context; this.param = options && options.param; this.subpattern = options && options.subpattern; forbidden = (_ref2 = (name = this.variable.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0); if (forbidden && this.context !== 'object') { this.variable.error("variable name may not be \"" + name + "\""); } } Assign.prototype.children = ['variable', 'value']; Assign.prototype.isStatement = function(o) { return (o != null ? o.level : void 0) === LEVEL_TOP && (this.context != null) && __indexOf.call(this.context, "?") >= 0; }; Assign.prototype.assigns = function(name) { return this[this.context === 'object' ? 'value' : 'variable'].assigns(name); }; Assign.prototype.unfoldSoak = function(o) { return unfoldSoak(o, this, 'variable'); }; Assign.prototype.compileNode = function(o) { var answer, compiledName, isValue, match, name, val, varBase, _ref2, _ref3, _ref4; if (isValue = this.variable instanceof Value) { if (this.variable.isArray() || this.variable.isObject()) { return this.compilePatternMatch(o); } if (this.variable.isSplice()) { return this.compileSplice(o); } if ((_ref2 = this.context) === '||=' || _ref2 === '&&=' || _ref2 === '?=') { return this.compileConditional(o); } } compiledName = this.variable.compileToFragments(o, LEVEL_LIST); name = fragmentsToText(compiledName); if (!this.context) { varBase = this.variable.unwrapAll(); if (!varBase.isAssignable()) { this.variable.error("\"" + (this.variable.compile(o)) + "\" cannot be assigned"); } if (!(typeof varBase.hasProperties === "function" ? varBase.hasProperties() : void 0)) { if (this.param) { o.scope.add(name, 'var'); } else { o.scope.find(name); } } } if (this.value instanceof Code && (match = METHOD_DEF.exec(name))) { if (match[2]) { this.value.klass = match[1]; } this.value.name = (_ref3 = (_ref4 = match[3]) != null ? _ref4 : match[4]) != null ? _ref3 : match[5]; } val = this.value.compileToFragments(o, LEVEL_LIST); if (this.context === 'object') { return compiledName.concat(this.makeCode(": "), val); } answer = compiledName.concat(this.makeCode(" " + (this.context || '=') + " "), val); if (o.level <= LEVEL_LIST) { return answer; } else { return this.wrapInBraces(answer); } }; Assign.prototype.compilePatternMatch = function(o) { var acc, assigns, code, fragments, i, idx, isObject, ivar, name, obj, objects, olen, ref, rest, splat, top, val, value, vvar, vvarText, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7; top = o.level === LEVEL_TOP; value = this.value; objects = this.variable.base.objects; if (!(olen = objects.length)) { code = value.compileToFragments(o); if (o.level >= LEVEL_OP) { return this.wrapInBraces(code); } else { return code; } } isObject = this.variable.isObject(); if (top && olen === 1 && !((obj = objects[0]) instanceof Splat)) { if (obj instanceof Assign) { _ref2 = obj, (_ref3 = _ref2.variable, idx = _ref3.base), obj = _ref2.value; } else { idx = isObject ? obj["this"] ? obj.properties[0].name : obj : new Literal(0); } acc = IDENTIFIER.test(idx.unwrap().value || 0); value = new Value(value); value.properties.push(new (acc ? Access : Index)(idx)); if (_ref4 = obj.unwrap().value, __indexOf.call(RESERVED, _ref4) >= 0) { obj.error("assignment to a reserved word: " + (obj.compile(o))); } return new Assign(obj, value, null, { param: this.param }).compileToFragments(o, LEVEL_TOP); } vvar = value.compileToFragments(o, LEVEL_LIST); vvarText = fragmentsToText(vvar); assigns = []; splat = false; if (!IDENTIFIER.test(vvarText) || this.variable.assigns(vvarText)) { assigns.push([this.makeCode("" + (ref = o.scope.freeVariable('ref')) + " = ")].concat(__slice.call(vvar))); vvar = [this.makeCode(ref)]; vvarText = ref; } for (i = _i = 0, _len = objects.length; _i < _len; i = ++_i) { obj = objects[i]; idx = i; if (isObject) { if (obj instanceof Assign) { _ref5 = obj, (_ref6 = _ref5.variable, idx = _ref6.base), obj = _ref5.value; } else { if (obj.base instanceof Parens) { _ref7 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref7[0], idx = _ref7[1]; } else { idx = obj["this"] ? obj.properties[0].name : obj; } } } if (!splat && obj instanceof Splat) { name = obj.name.unwrap().value; obj = obj.unwrap(); val = "" + olen + " <= " + vvarText + ".length ? " + (utility('slice')) + ".call(" + vvarText + ", " + i; if (rest = olen - i - 1) { ivar = o.scope.freeVariable('i'); val += ", " + ivar + " = " + vvarText + ".length - " + rest + ") : (" + ivar + " = " + i + ", [])"; } else { val += ") : []"; } val = new Literal(val); splat = "" + ivar + "++"; } else { name = obj.unwrap().value; if (obj instanceof Splat) { obj.error("multiple splats are disallowed in an assignment"); } if (typeof idx === 'number') { idx = new Literal(splat || idx); acc = false; } else { acc = isObject && IDENTIFIER.test(idx.unwrap().value || 0); } val = new Value(new Literal(vvarText), [new (acc ? Access : Index)(idx)]); } if ((name != null) && __indexOf.call(RESERVED, name) >= 0) { obj.error("assignment to a reserved word: " + (obj.compile(o))); } assigns.push(new Assign(obj, val, null, { param: this.param, subpattern: true }).compileToFragments(o, LEVEL_LIST)); } if (!(top || this.subpattern)) { assigns.push(vvar); } fragments = this.joinFragmentArrays(assigns, ', '); if (o.level < LEVEL_LIST) { return fragments; } else { return this.wrapInBraces(fragments); } }; Assign.prototype.compileConditional = function(o) { var fragments, left, right, _ref2; _ref2 = this.variable.cacheReference(o), left = _ref2[0], right = _ref2[1]; if (!left.properties.length && left.base instanceof Literal && left.base.value !== "this" && !o.scope.check(left.base.value)) { this.variable.error("the variable \"" + left.base.value + "\" can't be assigned with " + this.context + " because it has not been declared before"); } if (__indexOf.call(this.context, "?") >= 0) { o.isExistentialEquals = true; return new If(new Existence(left), right, { type: 'if' }).addElse(new Assign(right, this.value, '=')).compileToFragments(o); } else { fragments = new Op(this.context.slice(0, -1), left, new Assign(right, this.value, '=')).compileToFragments(o); if (o.level <= LEVEL_LIST) { return fragments; } else { return this.wrapInBraces(fragments); } } }; Assign.prototype.compileSplice = function(o) { var answer, exclusive, from, fromDecl, fromRef, name, to, valDef, valRef, _ref2, _ref3, _ref4; _ref2 = this.variable.properties.pop().range, from = _ref2.from, to = _ref2.to, exclusive = _ref2.exclusive; name = this.variable.compile(o); if (from) { _ref3 = this.cacheToCodeFragments(from.cache(o, LEVEL_OP)), fromDecl = _ref3[0], fromRef = _ref3[1]; } else { fromDecl = fromRef = '0'; } if (to) { if (from instanceof Value && from.isSimpleNumber() && to instanceof Value && to.isSimpleNumber()) { to = to.compile(o) - fromRef; if (!exclusive) { to += 1; } } else { to = to.compile(o, LEVEL_ACCESS) + ' - ' + fromRef; if (!exclusive) { to += ' + 1'; } } } else { to = "9e9"; } _ref4 = this.value.cache(o, LEVEL_LIST), valDef = _ref4[0], valRef = _ref4[1]; answer = [].concat(this.makeCode("[].splice.apply(" + name + ", [" + fromDecl + ", " + to + "].concat("), valDef, this.makeCode(")), "), valRef); if (o.level > LEVEL_TOP) { return this.wrapInBraces(answer); } else { return answer; } }; return Assign; })(Base); exports.Code = Code = (function(_super) { __extends(Code, _super); function Code(params, body, tag) { this.params = params || []; this.body = body || new Block; this.bound = tag === 'boundfunc'; } Code.prototype.children = ['params', 'body']; Code.prototype.isStatement = function() { return !!this.ctor; }; Code.prototype.jumps = NO; Code.prototype.makeScope = function(parentScope) { return new Scope(parentScope, this.body, this); }; Code.prototype.compileNode = function(o) { var answer, boundfunc, code, exprs, i, lit, p, param, params, ref, splats, uniqs, val, wasEmpty, wrapper, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _m, _n, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7; if (this.bound && ((_ref2 = o.scope.method) != null ? _ref2.bound : void 0)) { this.context = o.scope.method.context; } if (this.bound && !this.context) { this.context = '_this'; wrapper = new Code([new Param(new Literal(this.context))], new Block([this])); boundfunc = new Call(wrapper, [new Literal('this')]); boundfunc.updateLocationDataIfMissing(this.locationData); return boundfunc.compileNode(o); } o.scope = del(o, 'classScope') || this.makeScope(o.scope); o.scope.shared = del(o, 'sharedScope'); o.indent += TAB; delete o.bare; delete o.isExistentialEquals; params = []; exprs = []; _ref3 = this.params; for (_i = 0, _len = _ref3.length; _i < _len; _i++) { param = _ref3[_i]; o.scope.parameter(param.asReference(o)); } _ref4 = this.params; for (_j = 0, _len1 = _ref4.length; _j < _len1; _j++) { param = _ref4[_j]; if (!param.splat) { continue; } _ref5 = this.params; for (_k = 0, _len2 = _ref5.length; _k < _len2; _k++) { p = _ref5[_k].name; if (p["this"]) { p = p.properties[0].name; } if (p.value) { o.scope.add(p.value, 'var', true); } } splats = new Assign(new Value(new Arr((function() { var _l, _len3, _ref6, _results; _ref6 = this.params; _results = []; for (_l = 0, _len3 = _ref6.length; _l < _len3; _l++) { p = _ref6[_l]; _results.push(p.asReference(o)); } return _results; }).call(this))), new Value(new Literal('arguments'))); break; } _ref6 = this.params; for (_l = 0, _len3 = _ref6.length; _l < _len3; _l++) { param = _ref6[_l]; if (param.isComplex()) { val = ref = param.asReference(o); if (param.value) { val = new Op('?', ref, param.value); } exprs.push(new Assign(new Value(param.name), val, '=', { param: true })); } else { ref = param; if (param.value) { lit = new Literal(ref.name.value + ' == null'); val = new Assign(new Value(param.name), param.value, '='); exprs.push(new If(lit, val)); } } if (!splats) { params.push(ref); } } wasEmpty = this.body.isEmpty(); if (splats) { exprs.unshift(splats); } if (exprs.length) { (_ref7 = this.body.expressions).unshift.apply(_ref7, exprs); } for (i = _m = 0, _len4 = params.length; _m < _len4; i = ++_m) { p = params[i]; params[i] = p.compileToFragments(o); o.scope.parameter(fragmentsToText(params[i])); } uniqs = []; this.eachParamName(function(name, node) { if (__indexOf.call(uniqs, name) >= 0) { node.error("multiple parameters named '" + name + "'"); } return uniqs.push(name); }); if (!(wasEmpty || this.noReturn)) { this.body.makeReturn(); } code = 'function'; if (this.ctor) { code += ' ' + this.name; } code += '('; answer = [this.makeCode(code)]; for (i = _n = 0, _len5 = params.length; _n < _len5; i = ++_n) { p = params[i]; if (i) { answer.push(this.makeCode(", ")); } answer.push.apply(answer, p); } answer.push(this.makeCode(') {')); if (!this.body.isEmpty()) { answer = answer.concat(this.makeCode("\n"), this.body.compileWithDeclarations(o), this.makeCode("\n" + this.tab)); } answer.push(this.makeCode('}')); if (this.ctor) { return [this.makeCode(this.tab)].concat(__slice.call(answer)); } if (this.front || (o.level >= LEVEL_ACCESS)) { return this.wrapInBraces(answer); } else { return answer; } }; Code.prototype.eachParamName = function(iterator) { var param, _i, _len, _ref2, _results; _ref2 = this.params; _results = []; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { param = _ref2[_i]; _results.push(param.eachName(iterator)); } return _results; }; Code.prototype.traverseChildren = function(crossScope, func) { if (crossScope) { return Code.__super__.traverseChildren.call(this, crossScope, func); } }; return Code; })(Base); exports.Param = Param = (function(_super) { __extends(Param, _super); function Param(name, value, splat) { var _ref2; this.name = name; this.value = value; this.splat = splat; if (_ref2 = (name = this.name.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0) { this.name.error("parameter name \"" + name + "\" is not allowed"); } } Param.prototype.children = ['name', 'value']; Param.prototype.compileToFragments = function(o) { return this.name.compileToFragments(o, LEVEL_LIST); }; Param.prototype.asReference = function(o) { var node; if (this.reference) { return this.reference; } node = this.name; if (node["this"]) { node = node.properties[0].name; if (node.value.reserved) { node = new Literal(o.scope.freeVariable(node.value)); } } else if (node.isComplex()) { node = new Literal(o.scope.freeVariable('arg')); } node = new Value(node); if (this.splat) { node = new Splat(node); } node.updateLocationDataIfMissing(this.locationData); return this.reference = node; }; Param.prototype.isComplex = function() { return this.name.isComplex(); }; Param.prototype.eachName = function(iterator, name) { var atParam, node, obj, _i, _len, _ref2; if (name == null) { name = this.name; } atParam = function(obj) { var node; node = obj.properties[0].name; if (!node.value.reserved) { return iterator(node.value, node); } }; if (name instanceof Literal) { return iterator(name.value, name); } if (name instanceof Value) { return atParam(name); } _ref2 = name.objects; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { obj = _ref2[_i]; if (obj instanceof Assign) { this.eachName(iterator, obj.value.unwrap()); } else if (obj instanceof Splat) { node = obj.name.unwrap(); iterator(node.value, node); } else if (obj instanceof Value) { if (obj.isArray() || obj.isObject()) { this.eachName(iterator, obj.base); } else if (obj["this"]) { atParam(obj); } else { iterator(obj.base.value, obj.base); } } else { obj.error("illegal parameter " + (obj.compile())); } } }; return Param; })(Base); exports.Splat = Splat = (function(_super) { __extends(Splat, _super); Splat.prototype.children = ['name']; Splat.prototype.isAssignable = YES; function Splat(name) { this.name = name.compile ? name : new Literal(name); } Splat.prototype.assigns = function(name) { return this.name.assigns(name); }; Splat.prototype.compileToFragments = function(o) { return this.name.compileToFragments(o); }; Splat.prototype.unwrap = function() { return this.name; }; Splat.compileSplattedArray = function(o, list, apply) { var args, base, compiledNode, concatPart, fragments, i, index, node, _i, _len; index = -1; while ((node = list[++index]) && !(node instanceof Splat)) { continue; } if (index >= list.length) { return []; } if (list.length === 1) { node = list[0]; fragments = node.compileToFragments(o, LEVEL_LIST); if (apply) { return fragments; } return [].concat(node.makeCode("" + (utility('slice')) + ".call("), fragments, node.makeCode(")")); } args = list.slice(index); for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) { node = args[i]; compiledNode = node.compileToFragments(o, LEVEL_LIST); args[i] = node instanceof Splat ? [].concat(node.makeCode("" + (utility('slice')) + ".call("), compiledNode, node.makeCode(")")) : [].concat(node.makeCode("["), compiledNode, node.makeCode("]")); } if (index === 0) { node = list[0]; concatPart = node.joinFragmentArrays(args.slice(1), ', '); return args[0].concat(node.makeCode(".concat("), concatPart, node.makeCode(")")); } base = (function() { var _j, _len1, _ref2, _results; _ref2 = list.slice(0, index); _results = []; for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { node = _ref2[_j]; _results.push(node.compileToFragments(o, LEVEL_LIST)); } return _results; })(); base = list[0].joinFragmentArrays(base, ', '); concatPart = list[index].joinFragmentArrays(args, ', '); return [].concat(list[0].makeCode("["), base, list[index].makeCode("].concat("), concatPart, (last(list)).makeCode(")")); }; return Splat; })(Base); exports.While = While = (function(_super) { __extends(While, _super); function While(condition, options) { this.condition = (options != null ? options.invert : void 0) ? condition.invert() : condition; this.guard = options != null ? options.guard : void 0; } While.prototype.children = ['condition', 'guard', 'body']; While.prototype.isStatement = YES; While.prototype.makeReturn = function(res) { if (res) { return While.__super__.makeReturn.apply(this, arguments); } else { this.returns = !this.jumps({ loop: true }); return this; } }; While.prototype.addBody = function(body) { this.body = body; return this; }; While.prototype.jumps = function() { var expressions, jumpNode, node, _i, _len; expressions = this.body.expressions; if (!expressions.length) { return false; } for (_i = 0, _len = expressions.length; _i < _len; _i++) { node = expressions[_i]; if (jumpNode = node.jumps({ loop: true })) { return jumpNode; } } return false; }; While.prototype.compileNode = function(o) { var answer, body, rvar, set; o.indent += TAB; set = ''; body = this.body; if (body.isEmpty()) { body = this.makeCode(''); } else { if (this.returns) { body.makeReturn(rvar = o.scope.freeVariable('results')); set = "" + this.tab + rvar + " = [];\n"; } if (this.guard) { if (body.expressions.length > 1) { body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue"))); } else { if (this.guard) { body = Block.wrap([new If(this.guard, body)]); } } } body = [].concat(this.makeCode("\n"), body.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab)); } answer = [].concat(this.makeCode(set + this.tab + "while ("), this.condition.compileToFragments(o, LEVEL_PAREN), this.makeCode(") {"), body, this.makeCode("}")); if (this.returns) { answer.push(this.makeCode("\n" + this.tab + "return " + rvar + ";")); } return answer; }; return While; })(Base); exports.Op = Op = (function(_super) { var CONVERSIONS, INVERSIONS; __extends(Op, _super); function Op(op, first, second, flip) { if (op === 'in') { return new In(first, second); } if (op === 'do') { return this.generateDo(first); } if (op === 'new') { if (first instanceof Call && !first["do"] && !first.isNew) { return first.newInstance(); } if (first instanceof Code && first.bound || first["do"]) { first = new Parens(first); } } this.operator = CONVERSIONS[op] || op; this.first = first; this.second = second; this.flip = !!flip; return this; } CONVERSIONS = { '==': '===', '!=': '!==', 'of': 'in' }; INVERSIONS = { '!==': '===', '===': '!==' }; Op.prototype.children = ['first', 'second']; Op.prototype.isSimpleNumber = NO; Op.prototype.isUnary = function() { return !this.second; }; Op.prototype.isComplex = function() { var _ref2; return !(this.isUnary() && ((_ref2 = this.operator) === '+' || _ref2 === '-')) || this.first.isComplex(); }; Op.prototype.isChainable = function() { var _ref2; return (_ref2 = this.operator) === '<' || _ref2 === '>' || _ref2 === '>=' || _ref2 === '<=' || _ref2 === '===' || _ref2 === '!=='; }; Op.prototype.invert = function() { var allInvertable, curr, fst, op, _ref2; if (this.isChainable() && this.first.isChainable()) { allInvertable = true; curr = this; while (curr && curr.operator) { allInvertable && (allInvertable = curr.operator in INVERSIONS); curr = curr.first; } if (!allInvertable) { return new Parens(this).invert(); } curr = this; while (curr && curr.operator) { curr.invert = !curr.invert; curr.operator = INVERSIONS[curr.operator]; curr = curr.first; } return this; } else if (op = INVERSIONS[this.operator]) { this.operator = op; if (this.first.unwrap() instanceof Op) { this.first.invert(); } return this; } else if (this.second) { return new Parens(this).invert(); } else if (this.operator === '!' && (fst = this.first.unwrap()) instanceof Op && ((_ref2 = fst.operator) === '!' || _ref2 === 'in' || _ref2 === 'instanceof')) { return fst; } else { return new Op('!', this); } }; Op.prototype.unfoldSoak = function(o) { var _ref2; return ((_ref2 = this.operator) === '++' || _ref2 === '--' || _ref2 === 'delete') && unfoldSoak(o, this, 'first'); }; Op.prototype.generateDo = function(exp) { var call, func, param, passedParams, ref, _i, _len, _ref2; passedParams = []; func = exp instanceof Assign && (ref = exp.value.unwrap()) instanceof Code ? ref : exp; _ref2 = func.params || []; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { param = _ref2[_i]; if (param.value) { passedParams.push(param.value); delete param.value; } else { passedParams.push(param); } } call = new Call(exp, passedParams); call["do"] = true; return call; }; Op.prototype.compileNode = function(o) { var answer, isChain, _ref2, _ref3; isChain = this.isChainable() && this.first.isChainable(); if (!isChain) { this.first.front = this.front; } if (this.operator === 'delete' && o.scope.check(this.first.unwrapAll().value)) { this.error('delete operand may not be argument or var'); } if (((_ref2 = this.operator) === '--' || _ref2 === '++') && (_ref3 = this.first.unwrapAll().value, __indexOf.call(STRICT_PROSCRIBED, _ref3) >= 0)) { this.error("cannot increment/decrement \"" + (this.first.unwrapAll().value) + "\""); } if (this.isUnary()) { return this.compileUnary(o); } if (isChain) { return this.compileChain(o); } if (this.operator === '?') { return this.compileExistence(o); } answer = [].concat(this.first.compileToFragments(o, LEVEL_OP), this.makeCode(' ' + this.operator + ' '), this.second.compileToFragments(o, LEVEL_OP)); if (o.level <= LEVEL_OP) { return answer; } else { return this.wrapInBraces(answer); } }; Op.prototype.compileChain = function(o) { var fragments, fst, shared, _ref2; _ref2 = this.first.second.cache(o), this.first.second = _ref2[0], shared = _ref2[1]; fst = this.first.compileToFragments(o, LEVEL_OP); fragments = fst.concat(this.makeCode(" " + (this.invert ? '&&' : '||') + " "), shared.compileToFragments(o), this.makeCode(" " + this.operator + " "), this.second.compileToFragments(o, LEVEL_OP)); return this.wrapInBraces(fragments); }; Op.prototype.compileExistence = function(o) { var fst, ref; if (this.first.isComplex()) { ref = new Literal(o.scope.freeVariable('ref')); fst = new Parens(new Assign(ref, this.first)); } else { fst = this.first; ref = fst; } return new If(new Existence(fst), ref, { type: 'if' }).addElse(this.second).compileToFragments(o); }; Op.prototype.compileUnary = function(o) { var op, parts, plusMinus; parts = []; op = this.operator; parts.push([this.makeCode(op)]); if (op === '!' && this.first instanceof Existence) { this.first.negated = !this.first.negated; return this.first.compileToFragments(o); } if (o.level >= LEVEL_ACCESS) { return (new Parens(this)).compileToFragments(o); } plusMinus = op === '+' || op === '-'; if ((op === 'new' || op === 'typeof' || op === 'delete') || plusMinus && this.first instanceof Op && this.first.operator === op) { parts.push([this.makeCode(' ')]); } if ((plusMinus && this.first instanceof Op) || (op === 'new' && this.first.isStatement(o))) { this.first = new Parens(this.first); } parts.push(this.first.compileToFragments(o, LEVEL_OP)); if (this.flip) { parts.reverse(); } return this.joinFragmentArrays(parts, ''); }; Op.prototype.toString = function(idt) { return Op.__super__.toString.call(this, idt, this.constructor.name + ' ' + this.operator); }; return Op; })(Base); exports.In = In = (function(_super) { __extends(In, _super); function In(object, array) { this.object = object; this.array = array; } In.prototype.children = ['object', 'array']; In.prototype.invert = NEGATE; In.prototype.compileNode = function(o) { var hasSplat, obj, _i, _len, _ref2; if (this.array instanceof Value && this.array.isArray()) { _ref2 = this.array.base.objects; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { obj = _ref2[_i]; if (!(obj instanceof Splat)) { continue; } hasSplat = true; break; } if (!hasSplat) { return this.compileOrTest(o); } } return this.compileLoopTest(o); }; In.prototype.compileOrTest = function(o) { var cmp, cnj, i, item, ref, sub, tests, _i, _len, _ref2, _ref3, _ref4; if (this.array.base.objects.length === 0) { return [this.makeCode("" + (!!this.negated))]; } _ref2 = this.object.cache(o, LEVEL_OP), sub = _ref2[0], ref = _ref2[1]; _ref3 = this.negated ? [' !== ', ' && '] : [' === ', ' || '], cmp = _ref3[0], cnj = _ref3[1]; tests = []; _ref4 = this.array.base.objects; for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) { item = _ref4[i]; if (i) { tests.push(this.makeCode(cnj)); } tests = tests.concat((i ? ref : sub), this.makeCode(cmp), item.compileToFragments(o, LEVEL_ACCESS)); } if (o.level < LEVEL_OP) { return tests; } else { return this.wrapInBraces(tests); } }; In.prototype.compileLoopTest = function(o) { var fragments, ref, sub, _ref2; _ref2 = this.object.cache(o, LEVEL_LIST), sub = _ref2[0], ref = _ref2[1]; fragments = [].concat(this.makeCode(utility('indexOf') + ".call("), this.array.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), ref, this.makeCode(") " + (this.negated ? '< 0' : '>= 0'))); if (fragmentsToText(sub) === fragmentsToText(ref)) { return fragments; } fragments = sub.concat(this.makeCode(', '), fragments); if (o.level < LEVEL_LIST) { return fragments; } else { return this.wrapInBraces(fragments); } }; In.prototype.toString = function(idt) { return In.__super__.toString.call(this, idt, this.constructor.name + (this.negated ? '!' : '')); }; return In; })(Base); exports.Try = Try = (function(_super) { __extends(Try, _super); function Try(attempt, errorVariable, recovery, ensure) { this.attempt = attempt; this.errorVariable = errorVariable; this.recovery = recovery; this.ensure = ensure; } Try.prototype.children = ['attempt', 'recovery', 'ensure']; Try.prototype.isStatement = YES; Try.prototype.jumps = function(o) { var _ref2; return this.attempt.jumps(o) || ((_ref2 = this.recovery) != null ? _ref2.jumps(o) : void 0); }; Try.prototype.makeReturn = function(res) { if (this.attempt) { this.attempt = this.attempt.makeReturn(res); } if (this.recovery) { this.recovery = this.recovery.makeReturn(res); } return this; }; Try.prototype.compileNode = function(o) { var catchPart, ensurePart, placeholder, tryPart; o.indent += TAB; tryPart = this.attempt.compileToFragments(o, LEVEL_TOP); catchPart = this.recovery ? (placeholder = new Literal('_error'), this.errorVariable ? this.recovery.unshift(new Assign(this.errorVariable, placeholder)) : void 0, [].concat(this.makeCode(" catch ("), placeholder.compileToFragments(o), this.makeCode(") {\n"), this.recovery.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}"))) : !(this.ensure || this.recovery) ? [this.makeCode(' catch (_error) {}')] : []; ensurePart = this.ensure ? [].concat(this.makeCode(" finally {\n"), this.ensure.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}")) : []; return [].concat(this.makeCode("" + this.tab + "try {\n"), tryPart, this.makeCode("\n" + this.tab + "}"), catchPart, ensurePart); }; return Try; })(Base); exports.Throw = Throw = (function(_super) { __extends(Throw, _super); function Throw(expression) { this.expression = expression; } Throw.prototype.children = ['expression']; Throw.prototype.isStatement = YES; Throw.prototype.jumps = NO; Throw.prototype.makeReturn = THIS; Throw.prototype.compileNode = function(o) { return [].concat(this.makeCode(this.tab + "throw "), this.expression.compileToFragments(o), this.makeCode(";")); }; return Throw; })(Base); exports.Existence = Existence = (function(_super) { __extends(Existence, _super); function Existence(expression) { this.expression = expression; } Existence.prototype.children = ['expression']; Existence.prototype.invert = NEGATE; Existence.prototype.compileNode = function(o) { var cmp, cnj, code, _ref2; this.expression.front = this.front; code = this.expression.compile(o, LEVEL_OP); if (IDENTIFIER.test(code) && !o.scope.check(code)) { _ref2 = this.negated ? ['===', '||'] : ['!==', '&&'], cmp = _ref2[0], cnj = _ref2[1]; code = "typeof " + code + " " + cmp + " \"undefined\" " + cnj + " " + code + " " + cmp + " null"; } else { code = "" + code + " " + (this.negated ? '==' : '!=') + " null"; } return [this.makeCode(o.level <= LEVEL_COND ? code : "(" + code + ")")]; }; return Existence; })(Base); exports.Parens = Parens = (function(_super) { __extends(Parens, _super); function Parens(body) { this.body = body; } Parens.prototype.children = ['body']; Parens.prototype.unwrap = function() { return this.body; }; Parens.prototype.isComplex = function() { return this.body.isComplex(); }; Parens.prototype.compileNode = function(o) { var bare, expr, fragments; expr = this.body.unwrap(); if (expr instanceof Value && expr.isAtomic()) { expr.front = this.front; return expr.compileToFragments(o); } fragments = expr.compileToFragments(o, LEVEL_PAREN); bare = o.level < LEVEL_OP && (expr instanceof Op || expr instanceof Call || (expr instanceof For && expr.returns)); if (bare) { return fragments; } else { return this.wrapInBraces(fragments); } }; return Parens; })(Base); exports.For = For = (function(_super) { __extends(For, _super); function For(body, source) { var _ref2; this.source = source.source, this.guard = source.guard, this.step = source.step, this.name = source.name, this.index = source.index; this.body = Block.wrap([body]); this.own = !!source.own; this.object = !!source.object; if (this.object) { _ref2 = [this.index, this.name], this.name = _ref2[0], this.index = _ref2[1]; } if (this.index instanceof Value) { this.index.error('index cannot be a pattern matching expression'); } this.range = this.source instanceof Value && this.source.base instanceof Range && !this.source.properties.length; this.pattern = this.name instanceof Value; if (this.range && this.index) { this.index.error('indexes do not apply to range loops'); } if (this.range && this.pattern) { this.name.error('cannot pattern match over range loops'); } if (this.own && !this.object) { this.name.error('cannot use own with for-in'); } this.returns = false; } For.prototype.children = ['body', 'source', 'guard', 'step']; For.prototype.compileNode = function(o) { var body, bodyFragments, compare, compareDown, declare, declareDown, defPart, defPartFragments, down, forPartFragments, guardPart, idt1, increment, index, ivar, kvar, kvarAssign, lastJumps, lvar, name, namePart, ref, resultPart, returnResult, rvar, scope, source, step, stepNum, stepVar, svar, varPart, _ref2, _ref3; body = Block.wrap([this.body]); lastJumps = (_ref2 = last(body.expressions)) != null ? _ref2.jumps() : void 0; if (lastJumps && lastJumps instanceof Return) { this.returns = false; } source = this.range ? this.source.base : this.source; scope = o.scope; name = this.name && (this.name.compile(o, LEVEL_LIST)); index = this.index && (this.index.compile(o, LEVEL_LIST)); if (name && !this.pattern) { scope.find(name); } if (index) { scope.find(index); } if (this.returns) { rvar = scope.freeVariable('results'); } ivar = (this.object && index) || scope.freeVariable('i'); kvar = (this.range && name) || index || ivar; kvarAssign = kvar !== ivar ? "" + kvar + " = " : ""; if (this.step && !this.range) { _ref3 = this.cacheToCodeFragments(this.step.cache(o, LEVEL_LIST)), step = _ref3[0], stepVar = _ref3[1]; stepNum = stepVar.match(NUMBER); } if (this.pattern) { name = ivar; } varPart = ''; guardPart = ''; defPart = ''; idt1 = this.tab + TAB; if (this.range) { forPartFragments = source.compileToFragments(merge(o, { index: ivar, name: name, step: this.step })); } else { svar = this.source.compile(o, LEVEL_LIST); if ((name || this.own) && !IDENTIFIER.test(svar)) { defPart += "" + this.tab + (ref = scope.freeVariable('ref')) + " = " + svar + ";\n"; svar = ref; } if (name && !this.pattern) { namePart = "" + name + " = " + svar + "[" + kvar + "]"; } if (!this.object) { if (step !== stepVar) { defPart += "" + this.tab + step + ";\n"; } if (!(this.step && stepNum && (down = parseNum(stepNum[0]) < 0))) { lvar = scope.freeVariable('len'); } declare = "" + kvarAssign + ivar + " = 0, " + lvar + " = " + svar + ".length"; declareDown = "" + kvarAssign + ivar + " = " + svar + ".length - 1"; compare = "" + ivar + " < " + lvar; compareDown = "" + ivar + " >= 0"; if (this.step) { if (stepNum) { if (down) { compare = compareDown; declare = declareDown; } } else { compare = "" + stepVar + " > 0 ? " + compare + " : " + compareDown; declare = "(" + stepVar + " > 0 ? (" + declare + ") : " + declareDown + ")"; } increment = "" + ivar + " += " + stepVar; } else { increment = "" + (kvar !== ivar ? "++" + ivar : "" + ivar + "++"); } forPartFragments = [this.makeCode("" + declare + "; " + compare + "; " + kvarAssign + increment)]; } } if (this.returns) { resultPart = "" + this.tab + rvar + " = [];\n"; returnResult = "\n" + this.tab + "return " + rvar + ";"; body.makeReturn(rvar); } if (this.guard) { if (body.expressions.length > 1) { body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue"))); } else { if (this.guard) { body = Block.wrap([new If(this.guard, body)]); } } } if (this.pattern) { body.expressions.unshift(new Assign(this.name, new Literal("" + svar + "[" + kvar + "]"))); } defPartFragments = [].concat(this.makeCode(defPart), this.pluckDirectCall(o, body)); if (namePart) { varPart = "\n" + idt1 + namePart + ";"; } if (this.object) { forPartFragments = [this.makeCode("" + kvar + " in " + svar)]; if (this.own) { guardPart = "\n" + idt1 + "if (!" + (utility('hasProp')) + ".call(" + svar + ", " + kvar + ")) continue;"; } } bodyFragments = body.compileToFragments(merge(o, { indent: idt1 }), LEVEL_TOP); if (bodyFragments && (bodyFragments.length > 0)) { bodyFragments = [].concat(this.makeCode("\n"), bodyFragments, this.makeCode("\n")); } return [].concat(defPartFragments, this.makeCode("" + (resultPart || '') + this.tab + "for ("), forPartFragments, this.makeCode(") {" + guardPart + varPart), bodyFragments, this.makeCode("" + this.tab + "}" + (returnResult || ''))); }; For.prototype.pluckDirectCall = function(o, body) { var base, defs, expr, fn, idx, ref, val, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8; defs = []; _ref2 = body.expressions; for (idx = _i = 0, _len = _ref2.length; _i < _len; idx = ++_i) { expr = _ref2[idx]; expr = expr.unwrapAll(); if (!(expr instanceof Call)) { continue; } val = (_ref3 = expr.variable) != null ? _ref3.unwrapAll() : void 0; if (!((val instanceof Code) || (val instanceof Value && ((_ref4 = val.base) != null ? _ref4.unwrapAll() : void 0) instanceof Code && val.properties.length === 1 && ((_ref5 = (_ref6 = val.properties[0].name) != null ? _ref6.value : void 0) === 'call' || _ref5 === 'apply')))) { continue; } fn = ((_ref7 = val.base) != null ? _ref7.unwrapAll() : void 0) || val; ref = new Literal(o.scope.freeVariable('fn')); base = new Value(ref); if (val.base) { _ref8 = [base, val], val.base = _ref8[0], base = _ref8[1]; } body.expressions[idx] = new Call(base, expr.args); defs = defs.concat(this.makeCode(this.tab), new Assign(ref, fn).compileToFragments(o, LEVEL_TOP), this.makeCode(';\n')); } return defs; }; return For; })(While); exports.Switch = Switch = (function(_super) { __extends(Switch, _super); function Switch(subject, cases, otherwise) { this.subject = subject; this.cases = cases; this.otherwise = otherwise; } Switch.prototype.children = ['subject', 'cases', 'otherwise']; Switch.prototype.isStatement = YES; Switch.prototype.jumps = function(o) { var block, conds, jumpNode, _i, _len, _ref2, _ref3, _ref4; if (o == null) { o = { block: true }; } _ref2 = this.cases; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { _ref3 = _ref2[_i], conds = _ref3[0], block = _ref3[1]; if (jumpNode = block.jumps(o)) { return jumpNode; } } return (_ref4 = this.otherwise) != null ? _ref4.jumps(o) : void 0; }; Switch.prototype.makeReturn = function(res) { var pair, _i, _len, _ref2, _ref3; _ref2 = this.cases; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { pair = _ref2[_i]; pair[1].makeReturn(res); } if (res) { this.otherwise || (this.otherwise = new Block([new Literal('void 0')])); } if ((_ref3 = this.otherwise) != null) { _ref3.makeReturn(res); } return this; }; Switch.prototype.compileNode = function(o) { var block, body, cond, conditions, expr, fragments, i, idt1, idt2, _i, _j, _len, _len1, _ref2, _ref3, _ref4; idt1 = o.indent + TAB; idt2 = o.indent = idt1 + TAB; fragments = [].concat(this.makeCode(this.tab + "switch ("), (this.subject ? this.subject.compileToFragments(o, LEVEL_PAREN) : this.makeCode("false")), this.makeCode(") {\n")); _ref2 = this.cases; for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) { _ref3 = _ref2[i], conditions = _ref3[0], block = _ref3[1]; _ref4 = flatten([conditions]); for (_j = 0, _len1 = _ref4.length; _j < _len1; _j++) { cond = _ref4[_j]; if (!this.subject) { cond = cond.invert(); } fragments = fragments.concat(this.makeCode(idt1 + "case "), cond.compileToFragments(o, LEVEL_PAREN), this.makeCode(":\n")); } if ((body = block.compileToFragments(o, LEVEL_TOP)).length > 0) { fragments = fragments.concat(body, this.makeCode('\n')); } if (i === this.cases.length - 1 && !this.otherwise) { break; } expr = this.lastNonComment(block.expressions); if (expr instanceof Return || (expr instanceof Literal && expr.jumps() && expr.value !== 'debugger')) { continue; } fragments.push(cond.makeCode(idt2 + 'break;\n')); } if (this.otherwise && this.otherwise.expressions.length) { fragments.push.apply(fragments, [this.makeCode(idt1 + "default:\n")].concat(__slice.call(this.otherwise.compileToFragments(o, LEVEL_TOP)), [this.makeCode("\n")])); } fragments.push(this.makeCode(this.tab + '}')); return fragments; }; return Switch; })(Base); exports.If = If = (function(_super) { __extends(If, _super); function If(condition, body, options) { this.body = body; if (options == null) { options = {}; } this.condition = options.type === 'unless' ? condition.invert() : condition; this.elseBody = null; this.isChain = false; this.soak = options.soak; } If.prototype.children = ['condition', 'body', 'elseBody']; If.prototype.bodyNode = function() { var _ref2; return (_ref2 = this.body) != null ? _ref2.unwrap() : void 0; }; If.prototype.elseBodyNode = function() { var _ref2; return (_ref2 = this.elseBody) != null ? _ref2.unwrap() : void 0; }; If.prototype.addElse = function(elseBody) { if (this.isChain) { this.elseBodyNode().addElse(elseBody); } else { this.isChain = elseBody instanceof If; this.elseBody = this.ensureBlock(elseBody); this.elseBody.updateLocationDataIfMissing(elseBody.locationData); } return this; }; If.prototype.isStatement = function(o) { var _ref2; return (o != null ? o.level : void 0) === LEVEL_TOP || this.bodyNode().isStatement(o) || ((_ref2 = this.elseBodyNode()) != null ? _ref2.isStatement(o) : void 0); }; If.prototype.jumps = function(o) { var _ref2; return this.body.jumps(o) || ((_ref2 = this.elseBody) != null ? _ref2.jumps(o) : void 0); }; If.prototype.compileNode = function(o) { if (this.isStatement(o)) { return this.compileStatement(o); } else { return this.compileExpression(o); } }; If.prototype.makeReturn = function(res) { if (res) { this.elseBody || (this.elseBody = new Block([new Literal('void 0')])); } this.body && (this.body = new Block([this.body.makeReturn(res)])); this.elseBody && (this.elseBody = new Block([this.elseBody.makeReturn(res)])); return this; }; If.prototype.ensureBlock = function(node) { if (node instanceof Block) { return node; } else { return new Block([node]); } }; If.prototype.compileStatement = function(o) { var answer, body, child, cond, exeq, ifPart, indent; child = del(o, 'chainChild'); exeq = del(o, 'isExistentialEquals'); if (exeq) { return new If(this.condition.invert(), this.elseBodyNode(), { type: 'if' }).compileToFragments(o); } indent = o.indent + TAB; cond = this.condition.compileToFragments(o, LEVEL_PAREN); body = this.ensureBlock(this.body).compileToFragments(merge(o, { indent: indent })); ifPart = [].concat(this.makeCode("if ("), cond, this.makeCode(") {\n"), body, this.makeCode("\n" + this.tab + "}")); if (!child) { ifPart.unshift(this.makeCode(this.tab)); } if (!this.elseBody) { return ifPart; } answer = ifPart.concat(this.makeCode(' else ')); if (this.isChain) { o.chainChild = true; answer = answer.concat(this.elseBody.unwrap().compileToFragments(o, LEVEL_TOP)); } else { answer = answer.concat(this.makeCode("{\n"), this.elseBody.compileToFragments(merge(o, { indent: indent }), LEVEL_TOP), this.makeCode("\n" + this.tab + "}")); } return answer; }; If.prototype.compileExpression = function(o) { var alt, body, cond, fragments; cond = this.condition.compileToFragments(o, LEVEL_COND); body = this.bodyNode().compileToFragments(o, LEVEL_LIST); alt = this.elseBodyNode() ? this.elseBodyNode().compileToFragments(o, LEVEL_LIST) : [this.makeCode('void 0')]; fragments = cond.concat(this.makeCode(" ? "), body, this.makeCode(" : "), alt); if (o.level >= LEVEL_COND) { return this.wrapInBraces(fragments); } else { return fragments; } }; If.prototype.unfoldSoak = function() { return this.soak && this; }; return If; })(Base); UTILITIES = { "extends": function() { return "function(child, parent) { for (var key in parent) { if (" + (utility('hasProp')) + ".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }"; }, bind: function() { return 'function(fn, me){ return function(){ return fn.apply(me, arguments); }; }'; }, indexOf: function() { return "[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }"; }, hasProp: function() { return '{}.hasOwnProperty'; }, slice: function() { return '[].slice'; } }; LEVEL_TOP = 1; LEVEL_PAREN = 2; LEVEL_LIST = 3; LEVEL_COND = 4; LEVEL_OP = 5; LEVEL_ACCESS = 6; TAB = ' '; IDENTIFIER_STR = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*"; IDENTIFIER = RegExp("^" + IDENTIFIER_STR + "$"); SIMPLENUM = /^[+-]?\d+$/; HEXNUM = /^[+-]?0x[\da-f]+/i; NUMBER = /^[+-]?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)$/i; METHOD_DEF = RegExp("^(" + IDENTIFIER_STR + ")(\\.prototype)?(?:\\.(" + IDENTIFIER_STR + ")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\])$"); IS_STRING = /^['"]/; IS_REGEX = /^\//; utility = function(name) { var ref; ref = "__" + name; Scope.root.assign(ref, UTILITIES[name]()); return ref; }; multident = function(code, tab) { code = code.replace(/\n/g, '$&' + tab); return code.replace(/\s+$/, ''); }; parseNum = function(x) { if (x == null) { return 0; } else if (x.match(HEXNUM)) { return parseInt(x, 16); } else { return parseFloat(x); } }; isLiteralArguments = function(node) { return node instanceof Literal && node.value === 'arguments' && !node.asKey; }; isLiteralThis = function(node) { return (node instanceof Literal && node.value === 'this' && !node.asKey) || (node instanceof Code && node.bound) || (node instanceof Call && node.isSuper); }; unfoldSoak = function(o, parent, name) { var ifn; if (!(ifn = parent[name].unfoldSoak(o))) { return; } parent[name] = ifn.body; ifn.body = new Value(parent); return ifn; }; }); ace.define("ace/mode/coffee/coffee-script",["require","exports","module","ace/mode/coffee/lexer","ace/mode/coffee/parser","ace/mode/coffee/nodes"], function(require, exports, module) { var Lexer = require("./lexer").Lexer; var parser = require("./parser"); var lexer = new Lexer(); parser.lexer = { lex: function() { var tag, token; token = this.tokens[this.pos++]; if (token) { tag = token[0], this.yytext = token[1], this.yylloc = token[2]; this.yylineno = this.yylloc.first_line; } else { tag = ''; } return tag; }, setInput: function(tokens) { this.tokens = tokens; return this.pos = 0; }, upcomingInput: function() { return ""; } }; parser.yy = require('./nodes'); exports.parse = function(code) { return parser.parse(lexer.tokenize(code)); }; }); ace.define("ace/mode/coffee_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/coffee/coffee-script"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var Mirror = require("../worker/mirror").Mirror; var coffee = require("../mode/coffee/coffee-script"); window.addEventListener = function() {}; var Worker = exports.Worker = function(sender) { Mirror.call(this, sender); this.setTimeout(250); }; oop.inherits(Worker, Mirror); (function() { this.onUpdate = function() { var value = this.doc.getValue(); try { coffee.parse(value).compile(); } catch(e) { var loc = e.location; if (loc) { this.sender.emit("error", { row: loc.first_line, column: loc.first_column, endRow: loc.last_line, endColumn: loc.last_column, text: e.message, type: "error" }); } return; } this.sender.emit("ok"); }; }).call(Worker.prototype); }); ace.define("ace/lib/es5-shim",["require","exports","module"], function(require, exports, module) { function Empty() {} if (!Function.prototype.bind) { Function.prototype.bind = function bind(that) { // .length is 1 var target = this; if (typeof target != "function") { throw new TypeError("Function.prototype.bind called on incompatible " + target); } var args = slice.call(arguments, 1); // for normal call var bound = function () { if (this instanceof bound) { var result = target.apply( this, args.concat(slice.call(arguments)) ); if (Object(result) === result) { return result; } return this; } else { return target.apply( that, args.concat(slice.call(arguments)) ); } }; if(target.prototype) { Empty.prototype = target.prototype; bound.prototype = new Empty(); Empty.prototype = null; } return bound; }; } var call = Function.prototype.call; var prototypeOfArray = Array.prototype; var prototypeOfObject = Object.prototype; var slice = prototypeOfArray.slice; var _toString = call.bind(prototypeOfObject.toString); var owns = call.bind(prototypeOfObject.hasOwnProperty); var defineGetter; var defineSetter; var lookupGetter; var lookupSetter; var supportsAccessors; if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { defineGetter = call.bind(prototypeOfObject.__defineGetter__); defineSetter = call.bind(prototypeOfObject.__defineSetter__); lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); } if ([1,2].splice(0).length != 2) { if(function() { // test IE < 9 to splice bug - see issue #138 function makeArray(l) { var a = new Array(l+2); a[0] = a[1] = 0; return a; } var array = [], lengthBefore; array.splice.apply(array, makeArray(20)); array.splice.apply(array, makeArray(26)); lengthBefore = array.length; //46 array.splice(5, 0, "XXX"); // add one element lengthBefore + 1 == array.length if (lengthBefore + 1 == array.length) { return true;// has right splice implementation without bugs } }()) {//IE 6/7 var array_splice = Array.prototype.splice; Array.prototype.splice = function(start, deleteCount) { if (!arguments.length) { return []; } else { return array_splice.apply(this, [ start === void 0 ? 0 : start, deleteCount === void 0 ? (this.length - start) : deleteCount ].concat(slice.call(arguments, 2))) } }; } else {//IE8 Array.prototype.splice = function(pos, removeCount){ var length = this.length; if (pos > 0) { if (pos > length) pos = length; } else if (pos == void 0) { pos = 0; } else if (pos < 0) { pos = Math.max(length + pos, 0); } if (!(pos+removeCount < length)) removeCount = length - pos; var removed = this.slice(pos, pos+removeCount); var insert = slice.call(arguments, 2); var add = insert.length; if (pos === length) { if (add) { this.push.apply(this, insert); } } else { var remove = Math.min(removeCount, length - pos); var tailOldPos = pos + remove; var tailNewPos = tailOldPos + add - remove; var tailCount = length - tailOldPos; var lengthAfterRemove = length - remove; if (tailNewPos < tailOldPos) { // case A for (var i = 0; i < tailCount; ++i) { this[tailNewPos+i] = this[tailOldPos+i]; } } else if (tailNewPos > tailOldPos) { // case B for (i = tailCount; i--; ) { this[tailNewPos+i] = this[tailOldPos+i]; } } // else, add == remove (nothing to do) if (add && pos === lengthAfterRemove) { this.length = lengthAfterRemove; // truncate array this.push.apply(this, insert); } else { this.length = lengthAfterRemove + add; // reserves space for (i = 0; i < add; ++i) { this[pos+i] = insert[i]; } } } return removed; }; } } if (!Array.isArray) { Array.isArray = function isArray(obj) { return _toString(obj) == "[object Array]"; }; } var boxedString = Object("a"), splitString = boxedString[0] != "a" || !(0 in boxedString); if (!Array.prototype.forEach) { Array.prototype.forEach = function forEach(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, thisp = arguments[1], i = -1, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(); // TODO message } while (++i < length) { if (i in self) { fun.call(thisp, self[i], i, object); } } }; } if (!Array.prototype.map) { Array.prototype.map = function map(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = Array(length), thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) result[i] = fun.call(thisp, self[i], i, object); } return result; }; } if (!Array.prototype.filter) { Array.prototype.filter = function filter(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = [], value, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) { value = self[i]; if (fun.call(thisp, value, i, object)) { result.push(value); } } } return result; }; } if (!Array.prototype.every) { Array.prototype.every = function every(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && !fun.call(thisp, self[i], i, object)) { return false; } } return true; }; } if (!Array.prototype.some) { Array.prototype.some = function some(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && fun.call(thisp, self[i], i, object)) { return true; } } return false; }; } if (!Array.prototype.reduce) { Array.prototype.reduce = function reduce(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduce of empty array with no initial value"); } var i = 0; var result; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i++]; break; } if (++i >= length) { throw new TypeError("reduce of empty array with no initial value"); } } while (true); } for (; i < length; i++) { if (i in self) { result = fun.call(void 0, result, self[i], i, object); } } return result; }; } if (!Array.prototype.reduceRight) { Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduceRight of empty array with no initial value"); } var result, i = length - 1; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i--]; break; } if (--i < 0) { throw new TypeError("reduceRight of empty array with no initial value"); } } while (true); } do { if (i in this) { result = fun.call(void 0, result, self[i], i, object); } } while (i--); return result; }; } if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) { Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = 0; if (arguments.length > 1) { i = toInteger(arguments[1]); } i = i >= 0 ? i : Math.max(0, length + i); for (; i < length; i++) { if (i in self && self[i] === sought) { return i; } } return -1; }; } if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) { Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = length - 1; if (arguments.length > 1) { i = Math.min(i, toInteger(arguments[1])); } i = i >= 0 ? i : length - Math.abs(i); for (; i >= 0; i--) { if (i in self && sought === self[i]) { return i; } } return -1; }; } if (!Object.getPrototypeOf) { Object.getPrototypeOf = function getPrototypeOf(object) { return object.__proto__ || ( object.constructor ? object.constructor.prototype : prototypeOfObject ); }; } if (!Object.getOwnPropertyDescriptor) { var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " + "non-object: "; Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT + object); if (!owns(object, property)) return; var descriptor, getter, setter; descriptor = { enumerable: true, configurable: true }; if (supportsAccessors) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; var getter = lookupGetter(object, property); var setter = lookupSetter(object, property); object.__proto__ = prototype; if (getter || setter) { if (getter) descriptor.get = getter; if (setter) descriptor.set = setter; return descriptor; } } descriptor.value = object[property]; return descriptor; }; } if (!Object.getOwnPropertyNames) { Object.getOwnPropertyNames = function getOwnPropertyNames(object) { return Object.keys(object); }; } if (!Object.create) { var createEmpty; if (Object.prototype.__proto__ === null) { createEmpty = function () { return { "__proto__": null }; }; } else { createEmpty = function () { var empty = {}; for (var i in empty) empty[i] = null; empty.constructor = empty.hasOwnProperty = empty.propertyIsEnumerable = empty.isPrototypeOf = empty.toLocaleString = empty.toString = empty.valueOf = empty.__proto__ = null; return empty; } } Object.create = function create(prototype, properties) { var object; if (prototype === null) { object = createEmpty(); } else { if (typeof prototype != "object") throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'"); var Type = function () {}; Type.prototype = prototype; object = new Type(); object.__proto__ = prototype; } if (properties !== void 0) Object.defineProperties(object, properties); return object; }; } function doesDefinePropertyWork(object) { try { Object.defineProperty(object, "sentinel", {}); return "sentinel" in object; } catch (exception) { } } if (Object.defineProperty) { var definePropertyWorksOnObject = doesDefinePropertyWork({}); var definePropertyWorksOnDom = typeof document == "undefined" || doesDefinePropertyWork(document.createElement("div")); if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) { var definePropertyFallback = Object.defineProperty; } } if (!Object.defineProperty || definePropertyFallback) { var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: "; var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: " var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " + "on this javascript engine"; Object.defineProperty = function defineProperty(object, property, descriptor) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT_TARGET + object); if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null) throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor); if (definePropertyFallback) { try { return definePropertyFallback.call(Object, object, property, descriptor); } catch (exception) { } } if (owns(descriptor, "value")) { if (supportsAccessors && (lookupGetter(object, property) || lookupSetter(object, property))) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; delete object[property]; object[property] = descriptor.value; object.__proto__ = prototype; } else { object[property] = descriptor.value; } } else { if (!supportsAccessors) throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED); if (owns(descriptor, "get")) defineGetter(object, property, descriptor.get); if (owns(descriptor, "set")) defineSetter(object, property, descriptor.set); } return object; }; } if (!Object.defineProperties) { Object.defineProperties = function defineProperties(object, properties) { for (var property in properties) { if (owns(properties, property)) Object.defineProperty(object, property, properties[property]); } return object; }; } if (!Object.seal) { Object.seal = function seal(object) { return object; }; } if (!Object.freeze) { Object.freeze = function freeze(object) { return object; }; } try { Object.freeze(function () {}); } catch (exception) { Object.freeze = (function freeze(freezeObject) { return function freeze(object) { if (typeof object == "function") { return object; } else { return freezeObject(object); } }; })(Object.freeze); } if (!Object.preventExtensions) { Object.preventExtensions = function preventExtensions(object) { return object; }; } if (!Object.isSealed) { Object.isSealed = function isSealed(object) { return false; }; } if (!Object.isFrozen) { Object.isFrozen = function isFrozen(object) { return false; }; } if (!Object.isExtensible) { Object.isExtensible = function isExtensible(object) { if (Object(object) === object) { throw new TypeError(); // TODO message } var name = ''; while (owns(object, name)) { name += '?'; } object[name] = true; var returnValue = owns(object, name); delete object[name]; return returnValue; }; } if (!Object.keys) { var hasDontEnumBug = true, dontEnums = [ "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor" ], dontEnumsLength = dontEnums.length; for (var key in {"toString": null}) { hasDontEnumBug = false; } Object.keys = function keys(object) { if ( (typeof object != "object" && typeof object != "function") || object === null ) { throw new TypeError("Object.keys called on a non-object"); } var keys = []; for (var name in object) { if (owns(object, name)) { keys.push(name); } } if (hasDontEnumBug) { for (var i = 0, ii = dontEnumsLength; i < ii; i++) { var dontEnum = dontEnums[i]; if (owns(object, dontEnum)) { keys.push(dontEnum); } } } return keys; }; } if (!Date.now) { Date.now = function now() { return new Date().getTime(); }; } var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + "\u2029\uFEFF"; if (!String.prototype.trim || ws.trim()) { ws = "[" + ws + "]"; var trimBeginRegexp = new RegExp("^" + ws + ws + "*"), trimEndRegexp = new RegExp(ws + ws + "*$"); String.prototype.trim = function trim() { return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, ""); }; } function toInteger(n) { n = +n; if (n !== n) { // isNaN n = 0; } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } return n; } function isPrimitive(input) { var type = typeof input; return ( input === null || type === "undefined" || type === "boolean" || type === "number" || type === "string" ); } function toPrimitive(input) { var val, valueOf, toString; if (isPrimitive(input)) { return input; } valueOf = input.valueOf; if (typeof valueOf === "function") { val = valueOf.call(input); if (isPrimitive(val)) { return val; } } toString = input.toString; if (typeof toString === "function") { val = toString.call(input); if (isPrimitive(val)) { return val; } } throw new TypeError(); } var toObject = function (o) { if (o == null) { // this matches both null and undefined throw new TypeError("can't convert "+o+" to object"); } return Object(o); }; }); ================================================ FILE: browser/plugins/ace/src-noconflict/worker-css.js ================================================ "no use strict"; ;(function(window) { if (typeof window.window != "undefined" && window.document) { return; } window.console = function() { var msgs = Array.prototype.slice.call(arguments, 0); postMessage({type: "log", data: msgs}); }; window.console.error = window.console.warn = window.console.log = window.console.trace = window.console; window.window = window; window.ace = window; window.onerror = function(message, file, line, col, err) { postMessage({type: "error", data: { message: message, file: file, line: line, col: col, stack: err.stack }}); }; window.normalizeModule = function(parentId, moduleName) { // normalize plugin requires if (moduleName.indexOf("!") !== -1) { var chunks = moduleName.split("!"); return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]); } // normalize relative requires if (moduleName.charAt(0) == ".") { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = (base ? base + "/" : "") + moduleName; while(moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } } return moduleName; }; window.require = function(parentId, id) { if (!id) { id = parentId; parentId = null; } if (!id.charAt) throw new Error("worker.js require() accepts only (parentId, id) as arguments"); id = window.normalizeModule(parentId, id); var module = window.require.modules[id]; if (module) { if (!module.initialized) { module.initialized = true; module.exports = module.factory().exports; } return module.exports; } var chunks = id.split("/"); if (!window.require.tlns) return console.log("unable to load " + id); chunks[0] = window.require.tlns[chunks[0]] || chunks[0]; var path = chunks.join("/") + ".js"; window.require.id = id; importScripts(path); return window.require(parentId, id); }; window.require.modules = {}; window.require.tlns = {}; window.define = function(id, deps, factory) { if (arguments.length == 2) { factory = deps; if (typeof id != "string") { deps = id; id = window.require.id; } } else if (arguments.length == 1) { factory = id; deps = []; id = window.require.id; } if (typeof factory != "function") { window.require.modules[id] = { exports: factory, initialized: true }; return; } if (!deps.length) // If there is no dependencies, we inject 'require', 'exports' and // 'module' as dependencies, to provide CommonJS compatibility. deps = ['require', 'exports', 'module']; var req = function(childId) { return window.require(id, childId); }; window.require.modules[id] = { exports: {}, factory: function() { var module = this; var returnExports = factory.apply(this, deps.map(function(dep) { switch(dep) { // Because 'require', 'exports' and 'module' aren't actual // dependencies, we must handle them seperately. case 'require': return req; case 'exports': return module.exports; case 'module': return module; // But for all other dependencies, we can just go ahead and // require them. default: return req(dep); } })); if (returnExports) module.exports = returnExports; return module; } }; }; window.define.amd = {}; window.initBaseUrls = function initBaseUrls(topLevelNamespaces) { require.tlns = topLevelNamespaces; }; window.initSender = function initSender() { var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter; var oop = window.require("ace/lib/oop"); var Sender = function() {}; (function() { oop.implement(this, EventEmitter); this.callback = function(data, callbackId) { postMessage({ type: "call", id: callbackId, data: data }); }; this.emit = function(name, data) { postMessage({ type: "event", name: name, data: data }); }; }).call(Sender.prototype); return new Sender(); }; var main = window.main = null; var sender = window.sender = null; window.onmessage = function(e) { var msg = e.data; if (msg.command) { if (main[msg.command]) main[msg.command].apply(main, msg.args); else throw new Error("Unknown command:" + msg.command); } else if (msg.init) { initBaseUrls(msg.tlns); require("ace/lib/es5-shim"); sender = window.sender = initSender(); var clazz = require(msg.module)[msg.classname]; main = window.main = new clazz(sender); } else if (msg.event && sender) { sender._signal(msg.event, msg.data); } }; })(this); ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module) { "use strict"; exports.inherits = function(ctor, superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; exports.mixin = function(obj, mixin) { for (var key in mixin) { obj[key] = mixin[key]; } return obj; }; exports.implement = function(proto, mixin) { exports.mixin(proto, mixin); }; }); ace.define("ace/lib/lang",["require","exports","module"], function(require, exports, module) { "use strict"; exports.last = function(a) { return a[a.length - 1]; }; exports.stringReverse = function(string) { return string.split("").reverse().join(""); }; exports.stringRepeat = function (string, count) { var result = ''; while (count > 0) { if (count & 1) result += string; if (count >>= 1) string += string; } return result; }; var trimBeginRegexp = /^\s\s*/; var trimEndRegexp = /\s\s*$/; exports.stringTrimLeft = function (string) { return string.replace(trimBeginRegexp, ''); }; exports.stringTrimRight = function (string) { return string.replace(trimEndRegexp, ''); }; exports.copyObject = function(obj) { var copy = {}; for (var key in obj) { copy[key] = obj[key]; } return copy; }; exports.copyArray = function(array){ var copy = []; for (var i=0, l=array.length; i [" + this.end.row + "/" + this.end.column + "]"); }; this.contains = function(row, column) { return this.compare(row, column) == 0; }; this.compareRange = function(range) { var cmp, end = range.end, start = range.start; cmp = this.compare(end.row, end.column); if (cmp == 1) { cmp = this.compare(start.row, start.column); if (cmp == 1) { return 2; } else if (cmp == 0) { return 1; } else { return 0; } } else if (cmp == -1) { return -2; } else { cmp = this.compare(start.row, start.column); if (cmp == -1) { return -1; } else if (cmp == 1) { return 42; } else { return 0; } } }; this.comparePoint = function(p) { return this.compare(p.row, p.column); }; this.containsRange = function(range) { return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; }; this.intersects = function(range) { var cmp = this.compareRange(range); return (cmp == -1 || cmp == 0 || cmp == 1); }; this.isEnd = function(row, column) { return this.end.row == row && this.end.column == column; }; this.isStart = function(row, column) { return this.start.row == row && this.start.column == column; }; this.setStart = function(row, column) { if (typeof row == "object") { this.start.column = row.column; this.start.row = row.row; } else { this.start.row = row; this.start.column = column; } }; this.setEnd = function(row, column) { if (typeof row == "object") { this.end.column = row.column; this.end.row = row.row; } else { this.end.row = row; this.end.column = column; } }; this.inside = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column) || this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.insideStart = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column)) { return false; } else { return true; } } return false; }; this.insideEnd = function(row, column) { if (this.compare(row, column) == 0) { if (this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.compare = function(row, column) { if (!this.isMultiLine()) { if (row === this.start.row) { return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); }; } if (row < this.start.row) return -1; if (row > this.end.row) return 1; if (this.start.row === row) return column >= this.start.column ? 0 : -1; if (this.end.row === row) return column <= this.end.column ? 0 : 1; return 0; }; this.compareStart = function(row, column) { if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.compareEnd = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else { return this.compare(row, column); } }; this.compareInside = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.clipRows = function(firstRow, lastRow) { if (this.end.row > lastRow) var end = {row: lastRow + 1, column: 0}; else if (this.end.row < firstRow) var end = {row: firstRow, column: 0}; if (this.start.row > lastRow) var start = {row: lastRow + 1, column: 0}; else if (this.start.row < firstRow) var start = {row: firstRow, column: 0}; return Range.fromPoints(start || this.start, end || this.end); }; this.extend = function(row, column) { var cmp = this.compare(row, column); if (cmp == 0) return this; else if (cmp == -1) var start = {row: row, column: column}; else var end = {row: row, column: column}; return Range.fromPoints(start || this.start, end || this.end); }; this.isEmpty = function() { return (this.start.row === this.end.row && this.start.column === this.end.column); }; this.isMultiLine = function() { return (this.start.row !== this.end.row); }; this.clone = function() { return Range.fromPoints(this.start, this.end); }; this.collapseRows = function() { if (this.end.column == 0) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0) else return new Range(this.start.row, 0, this.end.row, 0) }; this.toScreenRange = function(session) { var screenPosStart = session.documentToScreenPosition(this.start); var screenPosEnd = session.documentToScreenPosition(this.end); return new Range( screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column ); }; this.moveBy = function(row, column) { this.start.row += row; this.start.column += column; this.end.row += row; this.end.column += column; }; }).call(Range.prototype); Range.fromPoints = function(start, end) { return new Range(start.row, start.column, end.row, end.column); }; Range.comparePoints = comparePoints; Range.comparePoints = function(p1, p2) { return p1.row - p2.row || p1.column - p2.column; }; exports.Range = Range; }); ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Anchor = exports.Anchor = function(doc, row, column) { this.$onChange = this.onChange.bind(this); this.attach(doc); if (typeof column == "undefined") this.setPosition(row.row, row.column); else this.setPosition(row, column); }; (function() { oop.implement(this, EventEmitter); this.getPosition = function() { return this.$clipPositionToDocument(this.row, this.column); }; this.getDocument = function() { return this.document; }; this.$insertRight = false; this.onChange = function(e) { var delta = e.data; var range = delta.range; if (range.start.row == range.end.row && range.start.row != this.row) return; if (range.start.row > this.row) return; if (range.start.row == this.row && range.start.column > this.column) return; var row = this.row; var column = this.column; var start = range.start; var end = range.end; if (delta.action === "insertText") { if (start.row === row && start.column <= column) { if (start.column === column && this.$insertRight) { } else if (start.row === end.row) { column += end.column - start.column; } else { column -= start.column; row += end.row - start.row; } } else if (start.row !== end.row && start.row < row) { row += end.row - start.row; } } else if (delta.action === "insertLines") { if (start.row === row && column === 0 && this.$insertRight) { } else if (start.row <= row) { row += end.row - start.row; } } else if (delta.action === "removeText") { if (start.row === row && start.column < column) { if (end.column >= column) column = start.column; else column = Math.max(0, column - (end.column - start.column)); } else if (start.row !== end.row && start.row < row) { if (end.row === row) column = Math.max(0, column - end.column) + start.column; row -= (end.row - start.row); } else if (end.row === row) { row -= end.row - start.row; column = Math.max(0, column - end.column) + start.column; } } else if (delta.action == "removeLines") { if (start.row <= row) { if (end.row <= row) row -= end.row - start.row; else { row = start.row; column = 0; } } } this.setPosition(row, column, true); }; this.setPosition = function(row, column, noClip) { var pos; if (noClip) { pos = { row: row, column: column }; } else { pos = this.$clipPositionToDocument(row, column); } if (this.row == pos.row && this.column == pos.column) return; var old = { row: this.row, column: this.column }; this.row = pos.row; this.column = pos.column; this._signal("change", { old: old, value: pos }); }; this.detach = function() { this.document.removeEventListener("change", this.$onChange); }; this.attach = function(doc) { this.document = doc || this.document; this.document.on("change", this.$onChange); }; this.$clipPositionToDocument = function(row, column) { var pos = {}; if (row >= this.document.getLength()) { pos.row = Math.max(0, this.document.getLength() - 1); pos.column = this.document.getLine(pos.row).length; } else if (row < 0) { pos.row = 0; pos.column = 0; } else { pos.row = row; pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); } if (column < 0) pos.column = 0; return pos; }; }).call(Anchor.prototype); }); ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var Document = function(text) { this.$lines = []; if (text.length === 0) { this.$lines = [""]; } else if (Array.isArray(text)) { this._insertLines(0, text); } else { this.insert({row: 0, column:0}, text); } }; (function() { oop.implement(this, EventEmitter); this.setValue = function(text) { var len = this.getLength(); this.remove(new Range(0, 0, len, this.getLine(len-1).length)); this.insert({row: 0, column:0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); }; this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; if ("aaa".split(/a/).length === 0) this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; else this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; this.$detectNewLine = function(text) { var match = text.match(/^.*?(\r\n|\r|\n)/m); this.$autoNewLine = match ? match[1] : "\n"; this._signal("changeNewLineMode"); }; this.getNewLineCharacter = function() { switch (this.$newLineMode) { case "windows": return "\r\n"; case "unix": return "\n"; default: return this.$autoNewLine || "\n"; } }; this.$autoNewLine = ""; this.$newLineMode = "auto"; this.setNewLineMode = function(newLineMode) { if (this.$newLineMode === newLineMode) return; this.$newLineMode = newLineMode; this._signal("changeNewLineMode"); }; this.getNewLineMode = function() { return this.$newLineMode; }; this.isNewLine = function(text) { return (text == "\r\n" || text == "\r" || text == "\n"); }; this.getLine = function(row) { return this.$lines[row] || ""; }; this.getLines = function(firstRow, lastRow) { return this.$lines.slice(firstRow, lastRow + 1); }; this.getAllLines = function() { return this.getLines(0, this.getLength()); }; this.getLength = function() { return this.$lines.length; }; this.getTextRange = function(range) { if (range.start.row == range.end.row) { return this.getLine(range.start.row) .substring(range.start.column, range.end.column); } var lines = this.getLines(range.start.row, range.end.row); lines[0] = (lines[0] || "").substring(range.start.column); var l = lines.length - 1; if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column); return lines.join(this.getNewLineCharacter()); }; this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); position.column = this.getLine(length-1).length; } else if (position.row < 0) position.row = 0; return position; }; this.insert = function(position, text) { if (!text || text.length === 0) return position; position = this.$clipPosition(position); if (this.getLength() <= 1) this.$detectNewLine(text); var lines = this.$split(text); var firstLine = lines.splice(0, 1)[0]; var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0]; position = this.insertInLine(position, firstLine); if (lastLine !== null) { position = this.insertNewLine(position); // terminate first line position = this._insertLines(position.row, lines); position = this.insertInLine(position, lastLine || ""); } return position; }; this.insertLines = function(row, lines) { if (row >= this.getLength()) return this.insert({row: row, column: 0}, "\n" + lines.join("\n")); return this._insertLines(Math.max(row, 0), lines); }; this._insertLines = function(row, lines) { if (lines.length == 0) return {row: row, column: 0}; while (lines.length > 0xF000) { var end = this._insertLines(row, lines.slice(0, 0xF000)); lines = lines.slice(0xF000); row = end.row; } var args = [row, 0]; args.push.apply(args, lines); this.$lines.splice.apply(this.$lines, args); var range = new Range(row, 0, row + lines.length, 0); var delta = { action: "insertLines", range: range, lines: lines }; this._signal("change", { data: delta }); return range.end; }; this.insertNewLine = function(position) { position = this.$clipPosition(position); var line = this.$lines[position.row] || ""; this.$lines[position.row] = line.substring(0, position.column); this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length)); var end = { row : position.row + 1, column : 0 }; var delta = { action: "insertText", range: Range.fromPoints(position, end), text: this.getNewLineCharacter() }; this._signal("change", { data: delta }); return end; }; this.insertInLine = function(position, text) { if (text.length == 0) return position; var line = this.$lines[position.row] || ""; this.$lines[position.row] = line.substring(0, position.column) + text + line.substring(position.column); var end = { row : position.row, column : position.column + text.length }; var delta = { action: "insertText", range: Range.fromPoints(position, end), text: text }; this._signal("change", { data: delta }); return end; }; this.remove = function(range) { if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end); range.start = this.$clipPosition(range.start); range.end = this.$clipPosition(range.end); if (range.isEmpty()) return range.start; var firstRow = range.start.row; var lastRow = range.end.row; if (range.isMultiLine()) { var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1; var lastFullRow = lastRow - 1; if (range.end.column > 0) this.removeInLine(lastRow, 0, range.end.column); if (lastFullRow >= firstFullRow) this._removeLines(firstFullRow, lastFullRow); if (firstFullRow != firstRow) { this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length); this.removeNewLine(range.start.row); } } else { this.removeInLine(firstRow, range.start.column, range.end.column); } return range.start; }; this.removeInLine = function(row, startColumn, endColumn) { if (startColumn == endColumn) return; var range = new Range(row, startColumn, row, endColumn); var line = this.getLine(row); var removed = line.substring(startColumn, endColumn); var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length); this.$lines.splice(row, 1, newLine); var delta = { action: "removeText", range: range, text: removed }; this._signal("change", { data: delta }); return range.start; }; this.removeLines = function(firstRow, lastRow) { if (firstRow < 0 || lastRow >= this.getLength()) return this.remove(new Range(firstRow, 0, lastRow + 1, 0)); return this._removeLines(firstRow, lastRow); }; this._removeLines = function(firstRow, lastRow) { var range = new Range(firstRow, 0, lastRow + 1, 0); var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1); var delta = { action: "removeLines", range: range, nl: this.getNewLineCharacter(), lines: removed }; this._signal("change", { data: delta }); return removed; }; this.removeNewLine = function(row) { var firstLine = this.getLine(row); var secondLine = this.getLine(row+1); var range = new Range(row, firstLine.length, row+1, 0); var line = firstLine + secondLine; this.$lines.splice(row, 2, line); var delta = { action: "removeText", range: range, text: this.getNewLineCharacter() }; this._signal("change", { data: delta }); }; this.replace = function(range, text) { if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end); if (text.length == 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); if (text) { var end = this.insert(range.start, text); } else { end = range.start; } return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { var delta = deltas[i]; var range = Range.fromPoints(delta.range.start, delta.range.end); if (delta.action == "insertLines") this._removeLines(range.start.row, range.end.row - 1); else if (delta.action == "insertText") this.remove(range); else if (delta.action == "removeLines") this._insertLines(range.start.row, delta.lines); else if (delta.action == "removeText") this.insert(range.start, delta.text); } }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; for (var i = startRow || 0, l = lines.length; i < l; i++) { index -= lines[i].length + newlineLength; if (index < 0) return {row: i, column: index + lines[i].length + newlineLength}; } return {row: l-1, column: lines[l-1].length}; }; this.positionToIndex = function(pos, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; var index = 0; var row = Math.min(pos.row, lines.length); for (var i = startRow || 0; i < row; ++i) index += lines[i].length + newlineLength; return index + pos.column; }; }).call(Document.prototype); exports.Document = Document; }); ace.define("ace/worker/mirror",["require","exports","module","ace/document","ace/lib/lang"], function(require, exports, module) { "use strict"; var Document = require("../document").Document; var lang = require("../lib/lang"); var Mirror = exports.Mirror = function(sender) { this.sender = sender; var doc = this.doc = new Document(""); var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this)); var _self = this; sender.on("change", function(e) { doc.applyDeltas(e.data); if (_self.$timeout) return deferredUpdate.schedule(_self.$timeout); _self.onUpdate(); }); }; (function() { this.$timeout = 500; this.setTimeout = function(timeout) { this.$timeout = timeout; }; this.setValue = function(value) { this.doc.setValue(value); this.deferredUpdate.schedule(this.$timeout); }; this.getValue = function(callbackId) { this.sender.callback(this.doc.getValue(), callbackId); }; this.onUpdate = function() { }; this.isPending = function() { return this.deferredUpdate.isPending(); }; }).call(Mirror.prototype); }); ace.define("ace/mode/css/csslint",["require","exports","module"], function(require, exports, module) { var parserlib = {}; (function(){ function EventTarget(){ this._listeners = {}; } EventTarget.prototype = { constructor: EventTarget, addListener: function(type, listener){ if (!this._listeners[type]){ this._listeners[type] = []; } this._listeners[type].push(listener); }, fire: function(event){ if (typeof event == "string"){ event = { type: event }; } if (typeof event.target != "undefined"){ event.target = this; } if (typeof event.type == "undefined"){ throw new Error("Event object missing 'type' property."); } if (this._listeners[event.type]){ var listeners = this._listeners[event.type].concat(); for (var i=0, len=listeners.length; i < len; i++){ listeners[i].call(this, event); } } }, removeListener: function(type, listener){ if (this._listeners[type]){ var listeners = this._listeners[type]; for (var i=0, len=listeners.length; i < len; i++){ if (listeners[i] === listener){ listeners.splice(i, 1); break; } } } } }; function StringReader(text){ this._input = text.replace(/\n\r?/g, "\n"); this._line = 1; this._col = 1; this._cursor = 0; } StringReader.prototype = { constructor: StringReader, getCol: function(){ return this._col; }, getLine: function(){ return this._line ; }, eof: function(){ return (this._cursor == this._input.length); }, peek: function(count){ var c = null; count = (typeof count == "undefined" ? 1 : count); if (this._cursor < this._input.length){ c = this._input.charAt(this._cursor + count - 1); } return c; }, read: function(){ var c = null; if (this._cursor < this._input.length){ if (this._input.charAt(this._cursor) == "\n"){ this._line++; this._col=1; } else { this._col++; } c = this._input.charAt(this._cursor++); } return c; }, mark: function(){ this._bookmark = { cursor: this._cursor, line: this._line, col: this._col }; }, reset: function(){ if (this._bookmark){ this._cursor = this._bookmark.cursor; this._line = this._bookmark.line; this._col = this._bookmark.col; delete this._bookmark; } }, readTo: function(pattern){ var buffer = "", c; while (buffer.length < pattern.length || buffer.lastIndexOf(pattern) != buffer.length - pattern.length){ c = this.read(); if (c){ buffer += c; } else { throw new Error("Expected \"" + pattern + "\" at line " + this._line + ", col " + this._col + "."); } } return buffer; }, readWhile: function(filter){ var buffer = "", c = this.read(); while(c !== null && filter(c)){ buffer += c; c = this.read(); } return buffer; }, readMatch: function(matcher){ var source = this._input.substring(this._cursor), value = null; if (typeof matcher == "string"){ if (source.indexOf(matcher) === 0){ value = this.readCount(matcher.length); } } else if (matcher instanceof RegExp){ if (matcher.test(source)){ value = this.readCount(RegExp.lastMatch.length); } } return value; }, readCount: function(count){ var buffer = ""; while(count--){ buffer += this.read(); } return buffer; } }; function SyntaxError(message, line, col){ this.col = col; this.line = line; this.message = message; } SyntaxError.prototype = new Error(); function SyntaxUnit(text, line, col, type){ this.col = col; this.line = line; this.text = text; this.type = type; } SyntaxUnit.fromToken = function(token){ return new SyntaxUnit(token.value, token.startLine, token.startCol); }; SyntaxUnit.prototype = { constructor: SyntaxUnit, valueOf: function(){ return this.text; }, toString: function(){ return this.text; } }; function TokenStreamBase(input, tokenData){ this._reader = input ? new StringReader(input.toString()) : null; this._token = null; this._tokenData = tokenData; this._lt = []; this._ltIndex = 0; this._ltIndexCache = []; } TokenStreamBase.createTokenData = function(tokens){ var nameMap = [], typeMap = {}, tokenData = tokens.concat([]), i = 0, len = tokenData.length+1; tokenData.UNKNOWN = -1; tokenData.unshift({name:"EOF"}); for (; i < len; i++){ nameMap.push(tokenData[i].name); tokenData[tokenData[i].name] = i; if (tokenData[i].text){ typeMap[tokenData[i].text] = i; } } tokenData.name = function(tt){ return nameMap[tt]; }; tokenData.type = function(c){ return typeMap[c]; }; return tokenData; }; TokenStreamBase.prototype = { constructor: TokenStreamBase, match: function(tokenTypes, channel){ if (!(tokenTypes instanceof Array)){ tokenTypes = [tokenTypes]; } var tt = this.get(channel), i = 0, len = tokenTypes.length; while(i < len){ if (tt == tokenTypes[i++]){ return true; } } this.unget(); return false; }, mustMatch: function(tokenTypes, channel){ var token; if (!(tokenTypes instanceof Array)){ tokenTypes = [tokenTypes]; } if (!this.match.apply(this, arguments)){ token = this.LT(1); throw new SyntaxError("Expected " + this._tokenData[tokenTypes[0]].name + " at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol); } }, advance: function(tokenTypes, channel){ while(this.LA(0) !== 0 && !this.match(tokenTypes, channel)){ this.get(); } return this.LA(0); }, get: function(channel){ var tokenInfo = this._tokenData, reader = this._reader, value, i =0, len = tokenInfo.length, found = false, token, info; if (this._lt.length && this._ltIndex >= 0 && this._ltIndex < this._lt.length){ i++; this._token = this._lt[this._ltIndex++]; info = tokenInfo[this._token.type]; while((info.channel !== undefined && channel !== info.channel) && this._ltIndex < this._lt.length){ this._token = this._lt[this._ltIndex++]; info = tokenInfo[this._token.type]; i++; } if ((info.channel === undefined || channel === info.channel) && this._ltIndex <= this._lt.length){ this._ltIndexCache.push(i); return this._token.type; } } token = this._getToken(); if (token.type > -1 && !tokenInfo[token.type].hide){ token.channel = tokenInfo[token.type].channel; this._token = token; this._lt.push(token); this._ltIndexCache.push(this._lt.length - this._ltIndex + i); if (this._lt.length > 5){ this._lt.shift(); } if (this._ltIndexCache.length > 5){ this._ltIndexCache.shift(); } this._ltIndex = this._lt.length; } info = tokenInfo[token.type]; if (info && (info.hide || (info.channel !== undefined && channel !== info.channel))){ return this.get(channel); } else { return token.type; } }, LA: function(index){ var total = index, tt; if (index > 0){ if (index > 5){ throw new Error("Too much lookahead."); } while(total){ tt = this.get(); total--; } while(total < index){ this.unget(); total++; } } else if (index < 0){ if(this._lt[this._ltIndex+index]){ tt = this._lt[this._ltIndex+index].type; } else { throw new Error("Too much lookbehind."); } } else { tt = this._token.type; } return tt; }, LT: function(index){ this.LA(index); return this._lt[this._ltIndex+index-1]; }, peek: function(){ return this.LA(1); }, token: function(){ return this._token; }, tokenName: function(tokenType){ if (tokenType < 0 || tokenType > this._tokenData.length){ return "UNKNOWN_TOKEN"; } else { return this._tokenData[tokenType].name; } }, tokenType: function(tokenName){ return this._tokenData[tokenName] || -1; }, unget: function(){ if (this._ltIndexCache.length){ this._ltIndex -= this._ltIndexCache.pop();//--; this._token = this._lt[this._ltIndex - 1]; } else { throw new Error("Too much lookahead."); } } }; parserlib.util = { StringReader: StringReader, SyntaxError : SyntaxError, SyntaxUnit : SyntaxUnit, EventTarget : EventTarget, TokenStreamBase : TokenStreamBase }; })(); (function(){ var EventTarget = parserlib.util.EventTarget, TokenStreamBase = parserlib.util.TokenStreamBase, StringReader = parserlib.util.StringReader, SyntaxError = parserlib.util.SyntaxError, SyntaxUnit = parserlib.util.SyntaxUnit; var Colors = { aliceblue :"#f0f8ff", antiquewhite :"#faebd7", aqua :"#00ffff", aquamarine :"#7fffd4", azure :"#f0ffff", beige :"#f5f5dc", bisque :"#ffe4c4", black :"#000000", blanchedalmond :"#ffebcd", blue :"#0000ff", blueviolet :"#8a2be2", brown :"#a52a2a", burlywood :"#deb887", cadetblue :"#5f9ea0", chartreuse :"#7fff00", chocolate :"#d2691e", coral :"#ff7f50", cornflowerblue :"#6495ed", cornsilk :"#fff8dc", crimson :"#dc143c", cyan :"#00ffff", darkblue :"#00008b", darkcyan :"#008b8b", darkgoldenrod :"#b8860b", darkgray :"#a9a9a9", darkgrey :"#a9a9a9", darkgreen :"#006400", darkkhaki :"#bdb76b", darkmagenta :"#8b008b", darkolivegreen :"#556b2f", darkorange :"#ff8c00", darkorchid :"#9932cc", darkred :"#8b0000", darksalmon :"#e9967a", darkseagreen :"#8fbc8f", darkslateblue :"#483d8b", darkslategray :"#2f4f4f", darkslategrey :"#2f4f4f", darkturquoise :"#00ced1", darkviolet :"#9400d3", deeppink :"#ff1493", deepskyblue :"#00bfff", dimgray :"#696969", dimgrey :"#696969", dodgerblue :"#1e90ff", firebrick :"#b22222", floralwhite :"#fffaf0", forestgreen :"#228b22", fuchsia :"#ff00ff", gainsboro :"#dcdcdc", ghostwhite :"#f8f8ff", gold :"#ffd700", goldenrod :"#daa520", gray :"#808080", grey :"#808080", green :"#008000", greenyellow :"#adff2f", honeydew :"#f0fff0", hotpink :"#ff69b4", indianred :"#cd5c5c", indigo :"#4b0082", ivory :"#fffff0", khaki :"#f0e68c", lavender :"#e6e6fa", lavenderblush :"#fff0f5", lawngreen :"#7cfc00", lemonchiffon :"#fffacd", lightblue :"#add8e6", lightcoral :"#f08080", lightcyan :"#e0ffff", lightgoldenrodyellow :"#fafad2", lightgray :"#d3d3d3", lightgrey :"#d3d3d3", lightgreen :"#90ee90", lightpink :"#ffb6c1", lightsalmon :"#ffa07a", lightseagreen :"#20b2aa", lightskyblue :"#87cefa", lightslategray :"#778899", lightslategrey :"#778899", lightsteelblue :"#b0c4de", lightyellow :"#ffffe0", lime :"#00ff00", limegreen :"#32cd32", linen :"#faf0e6", magenta :"#ff00ff", maroon :"#800000", mediumaquamarine:"#66cdaa", mediumblue :"#0000cd", mediumorchid :"#ba55d3", mediumpurple :"#9370d8", mediumseagreen :"#3cb371", mediumslateblue :"#7b68ee", mediumspringgreen :"#00fa9a", mediumturquoise :"#48d1cc", mediumvioletred :"#c71585", midnightblue :"#191970", mintcream :"#f5fffa", mistyrose :"#ffe4e1", moccasin :"#ffe4b5", navajowhite :"#ffdead", navy :"#000080", oldlace :"#fdf5e6", olive :"#808000", olivedrab :"#6b8e23", orange :"#ffa500", orangered :"#ff4500", orchid :"#da70d6", palegoldenrod :"#eee8aa", palegreen :"#98fb98", paleturquoise :"#afeeee", palevioletred :"#d87093", papayawhip :"#ffefd5", peachpuff :"#ffdab9", peru :"#cd853f", pink :"#ffc0cb", plum :"#dda0dd", powderblue :"#b0e0e6", purple :"#800080", red :"#ff0000", rosybrown :"#bc8f8f", royalblue :"#4169e1", saddlebrown :"#8b4513", salmon :"#fa8072", sandybrown :"#f4a460", seagreen :"#2e8b57", seashell :"#fff5ee", sienna :"#a0522d", silver :"#c0c0c0", skyblue :"#87ceeb", slateblue :"#6a5acd", slategray :"#708090", slategrey :"#708090", snow :"#fffafa", springgreen :"#00ff7f", steelblue :"#4682b4", tan :"#d2b48c", teal :"#008080", thistle :"#d8bfd8", tomato :"#ff6347", turquoise :"#40e0d0", violet :"#ee82ee", wheat :"#f5deb3", white :"#ffffff", whitesmoke :"#f5f5f5", yellow :"#ffff00", yellowgreen :"#9acd32", activeBorder :"Active window border.", activecaption :"Active window caption.", appworkspace :"Background color of multiple document interface.", background :"Desktop background.", buttonface :"The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.", buttonhighlight :"The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.", buttonshadow :"The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.", buttontext :"Text on push buttons.", captiontext :"Text in caption, size box, and scrollbar arrow box.", graytext :"Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.", greytext :"Greyed (disabled) text. This color is set to #000 if the current display driver does not support a solid grey color.", highlight :"Item(s) selected in a control.", highlighttext :"Text of item(s) selected in a control.", inactiveborder :"Inactive window border.", inactivecaption :"Inactive window caption.", inactivecaptiontext :"Color of text in an inactive caption.", infobackground :"Background color for tooltip controls.", infotext :"Text color for tooltip controls.", menu :"Menu background.", menutext :"Text in menus.", scrollbar :"Scroll bar gray area.", threeddarkshadow :"The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedface :"The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedhighlight :"The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedlightshadow :"The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedshadow :"The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", window :"Window background.", windowframe :"Window frame.", windowtext :"Text in windows." }; function Combinator(text, line, col){ SyntaxUnit.call(this, text, line, col, Parser.COMBINATOR_TYPE); this.type = "unknown"; if (/^\s+$/.test(text)){ this.type = "descendant"; } else if (text == ">"){ this.type = "child"; } else if (text == "+"){ this.type = "adjacent-sibling"; } else if (text == "~"){ this.type = "sibling"; } } Combinator.prototype = new SyntaxUnit(); Combinator.prototype.constructor = Combinator; function MediaFeature(name, value){ SyntaxUnit.call(this, "(" + name + (value !== null ? ":" + value : "") + ")", name.startLine, name.startCol, Parser.MEDIA_FEATURE_TYPE); this.name = name; this.value = value; } MediaFeature.prototype = new SyntaxUnit(); MediaFeature.prototype.constructor = MediaFeature; function MediaQuery(modifier, mediaType, features, line, col){ SyntaxUnit.call(this, (modifier ? modifier + " ": "") + (mediaType ? mediaType : "") + (mediaType && features.length > 0 ? " and " : "") + features.join(" and "), line, col, Parser.MEDIA_QUERY_TYPE); this.modifier = modifier; this.mediaType = mediaType; this.features = features; } MediaQuery.prototype = new SyntaxUnit(); MediaQuery.prototype.constructor = MediaQuery; function Parser(options){ EventTarget.call(this); this.options = options || {}; this._tokenStream = null; } Parser.DEFAULT_TYPE = 0; Parser.COMBINATOR_TYPE = 1; Parser.MEDIA_FEATURE_TYPE = 2; Parser.MEDIA_QUERY_TYPE = 3; Parser.PROPERTY_NAME_TYPE = 4; Parser.PROPERTY_VALUE_TYPE = 5; Parser.PROPERTY_VALUE_PART_TYPE = 6; Parser.SELECTOR_TYPE = 7; Parser.SELECTOR_PART_TYPE = 8; Parser.SELECTOR_SUB_PART_TYPE = 9; Parser.prototype = function(){ var proto = new EventTarget(), //new prototype prop, additions = { constructor: Parser, DEFAULT_TYPE : 0, COMBINATOR_TYPE : 1, MEDIA_FEATURE_TYPE : 2, MEDIA_QUERY_TYPE : 3, PROPERTY_NAME_TYPE : 4, PROPERTY_VALUE_TYPE : 5, PROPERTY_VALUE_PART_TYPE : 6, SELECTOR_TYPE : 7, SELECTOR_PART_TYPE : 8, SELECTOR_SUB_PART_TYPE : 9, _stylesheet: function(){ var tokenStream = this._tokenStream, charset = null, count, token, tt; this.fire("startstylesheet"); this._charset(); this._skipCruft(); while (tokenStream.peek() == Tokens.IMPORT_SYM){ this._import(); this._skipCruft(); } while (tokenStream.peek() == Tokens.NAMESPACE_SYM){ this._namespace(); this._skipCruft(); } tt = tokenStream.peek(); while(tt > Tokens.EOF){ try { switch(tt){ case Tokens.MEDIA_SYM: this._media(); this._skipCruft(); break; case Tokens.PAGE_SYM: this._page(); this._skipCruft(); break; case Tokens.FONT_FACE_SYM: this._font_face(); this._skipCruft(); break; case Tokens.KEYFRAMES_SYM: this._keyframes(); this._skipCruft(); break; case Tokens.VIEWPORT_SYM: this._viewport(); this._skipCruft(); break; case Tokens.UNKNOWN_SYM: //unknown @ rule tokenStream.get(); if (!this.options.strict){ this.fire({ type: "error", error: null, message: "Unknown @ rule: " + tokenStream.LT(0).value + ".", line: tokenStream.LT(0).startLine, col: tokenStream.LT(0).startCol }); count=0; while (tokenStream.advance([Tokens.LBRACE, Tokens.RBRACE]) == Tokens.LBRACE){ count++; //keep track of nesting depth } while(count){ tokenStream.advance([Tokens.RBRACE]); count--; } } else { throw new SyntaxError("Unknown @ rule.", tokenStream.LT(0).startLine, tokenStream.LT(0).startCol); } break; case Tokens.S: this._readWhitespace(); break; default: if(!this._ruleset()){ switch(tt){ case Tokens.CHARSET_SYM: token = tokenStream.LT(1); this._charset(false); throw new SyntaxError("@charset not allowed here.", token.startLine, token.startCol); case Tokens.IMPORT_SYM: token = tokenStream.LT(1); this._import(false); throw new SyntaxError("@import not allowed here.", token.startLine, token.startCol); case Tokens.NAMESPACE_SYM: token = tokenStream.LT(1); this._namespace(false); throw new SyntaxError("@namespace not allowed here.", token.startLine, token.startCol); default: tokenStream.get(); //get the last token this._unexpectedToken(tokenStream.token()); } } } } catch(ex) { if (ex instanceof SyntaxError && !this.options.strict){ this.fire({ type: "error", error: ex, message: ex.message, line: ex.line, col: ex.col }); } else { throw ex; } } tt = tokenStream.peek(); } if (tt != Tokens.EOF){ this._unexpectedToken(tokenStream.token()); } this.fire("endstylesheet"); }, _charset: function(emit){ var tokenStream = this._tokenStream, charset, token, line, col; if (tokenStream.match(Tokens.CHARSET_SYM)){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); tokenStream.mustMatch(Tokens.STRING); token = tokenStream.token(); charset = token.value; this._readWhitespace(); tokenStream.mustMatch(Tokens.SEMICOLON); if (emit !== false){ this.fire({ type: "charset", charset:charset, line: line, col: col }); } } }, _import: function(emit){ var tokenStream = this._tokenStream, tt, uri, importToken, mediaList = []; tokenStream.mustMatch(Tokens.IMPORT_SYM); importToken = tokenStream.token(); this._readWhitespace(); tokenStream.mustMatch([Tokens.STRING, Tokens.URI]); uri = tokenStream.token().value.replace(/^(?:url\()?["']?([^"']+?)["']?\)?$/, "$1"); this._readWhitespace(); mediaList = this._media_query_list(); tokenStream.mustMatch(Tokens.SEMICOLON); this._readWhitespace(); if (emit !== false){ this.fire({ type: "import", uri: uri, media: mediaList, line: importToken.startLine, col: importToken.startCol }); } }, _namespace: function(emit){ var tokenStream = this._tokenStream, line, col, prefix, uri; tokenStream.mustMatch(Tokens.NAMESPACE_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); if (tokenStream.match(Tokens.IDENT)){ prefix = tokenStream.token().value; this._readWhitespace(); } tokenStream.mustMatch([Tokens.STRING, Tokens.URI]); uri = tokenStream.token().value.replace(/(?:url\()?["']([^"']+)["']\)?/, "$1"); this._readWhitespace(); tokenStream.mustMatch(Tokens.SEMICOLON); this._readWhitespace(); if (emit !== false){ this.fire({ type: "namespace", prefix: prefix, uri: uri, line: line, col: col }); } }, _media: function(){ var tokenStream = this._tokenStream, line, col, mediaList;// = []; tokenStream.mustMatch(Tokens.MEDIA_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); mediaList = this._media_query_list(); tokenStream.mustMatch(Tokens.LBRACE); this._readWhitespace(); this.fire({ type: "startmedia", media: mediaList, line: line, col: col }); while(true) { if (tokenStream.peek() == Tokens.PAGE_SYM){ this._page(); } else if (tokenStream.peek() == Tokens.FONT_FACE_SYM){ this._font_face(); } else if (tokenStream.peek() == Tokens.VIEWPORT_SYM){ this._viewport(); } else if (!this._ruleset()){ break; } } tokenStream.mustMatch(Tokens.RBRACE); this._readWhitespace(); this.fire({ type: "endmedia", media: mediaList, line: line, col: col }); }, _media_query_list: function(){ var tokenStream = this._tokenStream, mediaList = []; this._readWhitespace(); if (tokenStream.peek() == Tokens.IDENT || tokenStream.peek() == Tokens.LPAREN){ mediaList.push(this._media_query()); } while(tokenStream.match(Tokens.COMMA)){ this._readWhitespace(); mediaList.push(this._media_query()); } return mediaList; }, _media_query: function(){ var tokenStream = this._tokenStream, type = null, ident = null, token = null, expressions = []; if (tokenStream.match(Tokens.IDENT)){ ident = tokenStream.token().value.toLowerCase(); if (ident != "only" && ident != "not"){ tokenStream.unget(); ident = null; } else { token = tokenStream.token(); } } this._readWhitespace(); if (tokenStream.peek() == Tokens.IDENT){ type = this._media_type(); if (token === null){ token = tokenStream.token(); } } else if (tokenStream.peek() == Tokens.LPAREN){ if (token === null){ token = tokenStream.LT(1); } expressions.push(this._media_expression()); } if (type === null && expressions.length === 0){ return null; } else { this._readWhitespace(); while (tokenStream.match(Tokens.IDENT)){ if (tokenStream.token().value.toLowerCase() != "and"){ this._unexpectedToken(tokenStream.token()); } this._readWhitespace(); expressions.push(this._media_expression()); } } return new MediaQuery(ident, type, expressions, token.startLine, token.startCol); }, _media_type: function(){ return this._media_feature(); }, _media_expression: function(){ var tokenStream = this._tokenStream, feature = null, token, expression = null; tokenStream.mustMatch(Tokens.LPAREN); feature = this._media_feature(); this._readWhitespace(); if (tokenStream.match(Tokens.COLON)){ this._readWhitespace(); token = tokenStream.LT(1); expression = this._expression(); } tokenStream.mustMatch(Tokens.RPAREN); this._readWhitespace(); return new MediaFeature(feature, (expression ? new SyntaxUnit(expression, token.startLine, token.startCol) : null)); }, _media_feature: function(){ var tokenStream = this._tokenStream; tokenStream.mustMatch(Tokens.IDENT); return SyntaxUnit.fromToken(tokenStream.token()); }, _page: function(){ var tokenStream = this._tokenStream, line, col, identifier = null, pseudoPage = null; tokenStream.mustMatch(Tokens.PAGE_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); if (tokenStream.match(Tokens.IDENT)){ identifier = tokenStream.token().value; if (identifier.toLowerCase() === "auto"){ this._unexpectedToken(tokenStream.token()); } } if (tokenStream.peek() == Tokens.COLON){ pseudoPage = this._pseudo_page(); } this._readWhitespace(); this.fire({ type: "startpage", id: identifier, pseudo: pseudoPage, line: line, col: col }); this._readDeclarations(true, true); this.fire({ type: "endpage", id: identifier, pseudo: pseudoPage, line: line, col: col }); }, _margin: function(){ var tokenStream = this._tokenStream, line, col, marginSym = this._margin_sym(); if (marginSym){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; this.fire({ type: "startpagemargin", margin: marginSym, line: line, col: col }); this._readDeclarations(true); this.fire({ type: "endpagemargin", margin: marginSym, line: line, col: col }); return true; } else { return false; } }, _margin_sym: function(){ var tokenStream = this._tokenStream; if(tokenStream.match([Tokens.TOPLEFTCORNER_SYM, Tokens.TOPLEFT_SYM, Tokens.TOPCENTER_SYM, Tokens.TOPRIGHT_SYM, Tokens.TOPRIGHTCORNER_SYM, Tokens.BOTTOMLEFTCORNER_SYM, Tokens.BOTTOMLEFT_SYM, Tokens.BOTTOMCENTER_SYM, Tokens.BOTTOMRIGHT_SYM, Tokens.BOTTOMRIGHTCORNER_SYM, Tokens.LEFTTOP_SYM, Tokens.LEFTMIDDLE_SYM, Tokens.LEFTBOTTOM_SYM, Tokens.RIGHTTOP_SYM, Tokens.RIGHTMIDDLE_SYM, Tokens.RIGHTBOTTOM_SYM])) { return SyntaxUnit.fromToken(tokenStream.token()); } else { return null; } }, _pseudo_page: function(){ var tokenStream = this._tokenStream; tokenStream.mustMatch(Tokens.COLON); tokenStream.mustMatch(Tokens.IDENT); return tokenStream.token().value; }, _font_face: function(){ var tokenStream = this._tokenStream, line, col; tokenStream.mustMatch(Tokens.FONT_FACE_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); this.fire({ type: "startfontface", line: line, col: col }); this._readDeclarations(true); this.fire({ type: "endfontface", line: line, col: col }); }, _viewport: function(){ var tokenStream = this._tokenStream, line, col; tokenStream.mustMatch(Tokens.VIEWPORT_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); this.fire({ type: "startviewport", line: line, col: col }); this._readDeclarations(true); this.fire({ type: "endviewport", line: line, col: col }); }, _operator: function(inFunction){ var tokenStream = this._tokenStream, token = null; if (tokenStream.match([Tokens.SLASH, Tokens.COMMA]) || (inFunction && tokenStream.match([Tokens.PLUS, Tokens.STAR, Tokens.MINUS]))){ token = tokenStream.token(); this._readWhitespace(); } return token ? PropertyValuePart.fromToken(token) : null; }, _combinator: function(){ var tokenStream = this._tokenStream, value = null, token; if(tokenStream.match([Tokens.PLUS, Tokens.GREATER, Tokens.TILDE])){ token = tokenStream.token(); value = new Combinator(token.value, token.startLine, token.startCol); this._readWhitespace(); } return value; }, _unary_operator: function(){ var tokenStream = this._tokenStream; if (tokenStream.match([Tokens.MINUS, Tokens.PLUS])){ return tokenStream.token().value; } else { return null; } }, _property: function(){ var tokenStream = this._tokenStream, value = null, hack = null, tokenValue, token, line, col; if (tokenStream.peek() == Tokens.STAR && this.options.starHack){ tokenStream.get(); token = tokenStream.token(); hack = token.value; line = token.startLine; col = token.startCol; } if(tokenStream.match(Tokens.IDENT)){ token = tokenStream.token(); tokenValue = token.value; if (tokenValue.charAt(0) == "_" && this.options.underscoreHack){ hack = "_"; tokenValue = tokenValue.substring(1); } value = new PropertyName(tokenValue, hack, (line||token.startLine), (col||token.startCol)); this._readWhitespace(); } return value; }, _ruleset: function(){ var tokenStream = this._tokenStream, tt, selectors; try { selectors = this._selectors_group(); } catch (ex){ if (ex instanceof SyntaxError && !this.options.strict){ this.fire({ type: "error", error: ex, message: ex.message, line: ex.line, col: ex.col }); tt = tokenStream.advance([Tokens.RBRACE]); if (tt == Tokens.RBRACE){ } else { throw ex; } } else { throw ex; } return true; } if (selectors){ this.fire({ type: "startrule", selectors: selectors, line: selectors[0].line, col: selectors[0].col }); this._readDeclarations(true); this.fire({ type: "endrule", selectors: selectors, line: selectors[0].line, col: selectors[0].col }); } return selectors; }, _selectors_group: function(){ var tokenStream = this._tokenStream, selectors = [], selector; selector = this._selector(); if (selector !== null){ selectors.push(selector); while(tokenStream.match(Tokens.COMMA)){ this._readWhitespace(); selector = this._selector(); if (selector !== null){ selectors.push(selector); } else { this._unexpectedToken(tokenStream.LT(1)); } } } return selectors.length ? selectors : null; }, _selector: function(){ var tokenStream = this._tokenStream, selector = [], nextSelector = null, combinator = null, ws = null; nextSelector = this._simple_selector_sequence(); if (nextSelector === null){ return null; } selector.push(nextSelector); do { combinator = this._combinator(); if (combinator !== null){ selector.push(combinator); nextSelector = this._simple_selector_sequence(); if (nextSelector === null){ this._unexpectedToken(tokenStream.LT(1)); } else { selector.push(nextSelector); } } else { if (this._readWhitespace()){ ws = new Combinator(tokenStream.token().value, tokenStream.token().startLine, tokenStream.token().startCol); combinator = this._combinator(); nextSelector = this._simple_selector_sequence(); if (nextSelector === null){ if (combinator !== null){ this._unexpectedToken(tokenStream.LT(1)); } } else { if (combinator !== null){ selector.push(combinator); } else { selector.push(ws); } selector.push(nextSelector); } } else { break; } } } while(true); return new Selector(selector, selector[0].line, selector[0].col); }, _simple_selector_sequence: function(){ var tokenStream = this._tokenStream, elementName = null, modifiers = [], selectorText= "", components = [ function(){ return tokenStream.match(Tokens.HASH) ? new SelectorSubPart(tokenStream.token().value, "id", tokenStream.token().startLine, tokenStream.token().startCol) : null; }, this._class, this._attrib, this._pseudo, this._negation ], i = 0, len = components.length, component = null, found = false, line, col; line = tokenStream.LT(1).startLine; col = tokenStream.LT(1).startCol; elementName = this._type_selector(); if (!elementName){ elementName = this._universal(); } if (elementName !== null){ selectorText += elementName; } while(true){ if (tokenStream.peek() === Tokens.S){ break; } while(i < len && component === null){ component = components[i++].call(this); } if (component === null){ if (selectorText === ""){ return null; } else { break; } } else { i = 0; modifiers.push(component); selectorText += component.toString(); component = null; } } return selectorText !== "" ? new SelectorPart(elementName, modifiers, selectorText, line, col) : null; }, _type_selector: function(){ var tokenStream = this._tokenStream, ns = this._namespace_prefix(), elementName = this._element_name(); if (!elementName){ if (ns){ tokenStream.unget(); if (ns.length > 1){ tokenStream.unget(); } } return null; } else { if (ns){ elementName.text = ns + elementName.text; elementName.col -= ns.length; } return elementName; } }, _class: function(){ var tokenStream = this._tokenStream, token; if (tokenStream.match(Tokens.DOT)){ tokenStream.mustMatch(Tokens.IDENT); token = tokenStream.token(); return new SelectorSubPart("." + token.value, "class", token.startLine, token.startCol - 1); } else { return null; } }, _element_name: function(){ var tokenStream = this._tokenStream, token; if (tokenStream.match(Tokens.IDENT)){ token = tokenStream.token(); return new SelectorSubPart(token.value, "elementName", token.startLine, token.startCol); } else { return null; } }, _namespace_prefix: function(){ var tokenStream = this._tokenStream, value = ""; if (tokenStream.LA(1) === Tokens.PIPE || tokenStream.LA(2) === Tokens.PIPE){ if(tokenStream.match([Tokens.IDENT, Tokens.STAR])){ value += tokenStream.token().value; } tokenStream.mustMatch(Tokens.PIPE); value += "|"; } return value.length ? value : null; }, _universal: function(){ var tokenStream = this._tokenStream, value = "", ns; ns = this._namespace_prefix(); if(ns){ value += ns; } if(tokenStream.match(Tokens.STAR)){ value += "*"; } return value.length ? value : null; }, _attrib: function(){ var tokenStream = this._tokenStream, value = null, ns, token; if (tokenStream.match(Tokens.LBRACKET)){ token = tokenStream.token(); value = token.value; value += this._readWhitespace(); ns = this._namespace_prefix(); if (ns){ value += ns; } tokenStream.mustMatch(Tokens.IDENT); value += tokenStream.token().value; value += this._readWhitespace(); if(tokenStream.match([Tokens.PREFIXMATCH, Tokens.SUFFIXMATCH, Tokens.SUBSTRINGMATCH, Tokens.EQUALS, Tokens.INCLUDES, Tokens.DASHMATCH])){ value += tokenStream.token().value; value += this._readWhitespace(); tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]); value += tokenStream.token().value; value += this._readWhitespace(); } tokenStream.mustMatch(Tokens.RBRACKET); return new SelectorSubPart(value + "]", "attribute", token.startLine, token.startCol); } else { return null; } }, _pseudo: function(){ var tokenStream = this._tokenStream, pseudo = null, colons = ":", line, col; if (tokenStream.match(Tokens.COLON)){ if (tokenStream.match(Tokens.COLON)){ colons += ":"; } if (tokenStream.match(Tokens.IDENT)){ pseudo = tokenStream.token().value; line = tokenStream.token().startLine; col = tokenStream.token().startCol - colons.length; } else if (tokenStream.peek() == Tokens.FUNCTION){ line = tokenStream.LT(1).startLine; col = tokenStream.LT(1).startCol - colons.length; pseudo = this._functional_pseudo(); } if (pseudo){ pseudo = new SelectorSubPart(colons + pseudo, "pseudo", line, col); } } return pseudo; }, _functional_pseudo: function(){ var tokenStream = this._tokenStream, value = null; if(tokenStream.match(Tokens.FUNCTION)){ value = tokenStream.token().value; value += this._readWhitespace(); value += this._expression(); tokenStream.mustMatch(Tokens.RPAREN); value += ")"; } return value; }, _expression: function(){ var tokenStream = this._tokenStream, value = ""; while(tokenStream.match([Tokens.PLUS, Tokens.MINUS, Tokens.DIMENSION, Tokens.NUMBER, Tokens.STRING, Tokens.IDENT, Tokens.LENGTH, Tokens.FREQ, Tokens.ANGLE, Tokens.TIME, Tokens.RESOLUTION, Tokens.SLASH])){ value += tokenStream.token().value; value += this._readWhitespace(); } return value.length ? value : null; }, _negation: function(){ var tokenStream = this._tokenStream, line, col, value = "", arg, subpart = null; if (tokenStream.match(Tokens.NOT)){ value = tokenStream.token().value; line = tokenStream.token().startLine; col = tokenStream.token().startCol; value += this._readWhitespace(); arg = this._negation_arg(); value += arg; value += this._readWhitespace(); tokenStream.match(Tokens.RPAREN); value += tokenStream.token().value; subpart = new SelectorSubPart(value, "not", line, col); subpart.args.push(arg); } return subpart; }, _negation_arg: function(){ var tokenStream = this._tokenStream, args = [ this._type_selector, this._universal, function(){ return tokenStream.match(Tokens.HASH) ? new SelectorSubPart(tokenStream.token().value, "id", tokenStream.token().startLine, tokenStream.token().startCol) : null; }, this._class, this._attrib, this._pseudo ], arg = null, i = 0, len = args.length, elementName, line, col, part; line = tokenStream.LT(1).startLine; col = tokenStream.LT(1).startCol; while(i < len && arg === null){ arg = args[i].call(this); i++; } if (arg === null){ this._unexpectedToken(tokenStream.LT(1)); } if (arg.type == "elementName"){ part = new SelectorPart(arg, [], arg.toString(), line, col); } else { part = new SelectorPart(null, [arg], arg.toString(), line, col); } return part; }, _declaration: function(){ var tokenStream = this._tokenStream, property = null, expr = null, prio = null, error = null, invalid = null, propertyName= ""; property = this._property(); if (property !== null){ tokenStream.mustMatch(Tokens.COLON); this._readWhitespace(); expr = this._expr(); if (!expr || expr.length === 0){ this._unexpectedToken(tokenStream.LT(1)); } prio = this._prio(); propertyName = property.toString(); if (this.options.starHack && property.hack == "*" || this.options.underscoreHack && property.hack == "_") { propertyName = property.text; } try { this._validateProperty(propertyName, expr); } catch (ex) { invalid = ex; } this.fire({ type: "property", property: property, value: expr, important: prio, line: property.line, col: property.col, invalid: invalid }); return true; } else { return false; } }, _prio: function(){ var tokenStream = this._tokenStream, result = tokenStream.match(Tokens.IMPORTANT_SYM); this._readWhitespace(); return result; }, _expr: function(inFunction){ var tokenStream = this._tokenStream, values = [], value = null, operator = null; value = this._term(inFunction); if (value !== null){ values.push(value); do { operator = this._operator(inFunction); if (operator){ values.push(operator); } /*else { values.push(new PropertyValue(valueParts, valueParts[0].line, valueParts[0].col)); valueParts = []; }*/ value = this._term(inFunction); if (value === null){ break; } else { values.push(value); } } while(true); } return values.length > 0 ? new PropertyValue(values, values[0].line, values[0].col) : null; }, _term: function(inFunction){ var tokenStream = this._tokenStream, unary = null, value = null, endChar = null, token, line, col; unary = this._unary_operator(); if (unary !== null){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; } if (tokenStream.peek() == Tokens.IE_FUNCTION && this.options.ieFilters){ value = this._ie_function(); if (unary === null){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; } } else if (inFunction && tokenStream.match([Tokens.LPAREN, Tokens.LBRACE, Tokens.LBRACKET])){ token = tokenStream.token(); endChar = token.endChar; value = token.value + this._expr(inFunction).text; if (unary === null){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; } tokenStream.mustMatch(Tokens.type(endChar)); value += endChar; this._readWhitespace(); } else if (tokenStream.match([Tokens.NUMBER, Tokens.PERCENTAGE, Tokens.LENGTH, Tokens.ANGLE, Tokens.TIME, Tokens.FREQ, Tokens.STRING, Tokens.IDENT, Tokens.URI, Tokens.UNICODE_RANGE])){ value = tokenStream.token().value; if (unary === null){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; } this._readWhitespace(); } else { token = this._hexcolor(); if (token === null){ if (unary === null){ line = tokenStream.LT(1).startLine; col = tokenStream.LT(1).startCol; } if (value === null){ if (tokenStream.LA(3) == Tokens.EQUALS && this.options.ieFilters){ value = this._ie_function(); } else { value = this._function(); } } } else { value = token.value; if (unary === null){ line = token.startLine; col = token.startCol; } } } return value !== null ? new PropertyValuePart(unary !== null ? unary + value : value, line, col) : null; }, _function: function(){ var tokenStream = this._tokenStream, functionText = null, expr = null, lt; if (tokenStream.match(Tokens.FUNCTION)){ functionText = tokenStream.token().value; this._readWhitespace(); expr = this._expr(true); functionText += expr; if (this.options.ieFilters && tokenStream.peek() == Tokens.EQUALS){ do { if (this._readWhitespace()){ functionText += tokenStream.token().value; } if (tokenStream.LA(0) == Tokens.COMMA){ functionText += tokenStream.token().value; } tokenStream.match(Tokens.IDENT); functionText += tokenStream.token().value; tokenStream.match(Tokens.EQUALS); functionText += tokenStream.token().value; lt = tokenStream.peek(); while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){ tokenStream.get(); functionText += tokenStream.token().value; lt = tokenStream.peek(); } } while(tokenStream.match([Tokens.COMMA, Tokens.S])); } tokenStream.match(Tokens.RPAREN); functionText += ")"; this._readWhitespace(); } return functionText; }, _ie_function: function(){ var tokenStream = this._tokenStream, functionText = null, expr = null, lt; if (tokenStream.match([Tokens.IE_FUNCTION, Tokens.FUNCTION])){ functionText = tokenStream.token().value; do { if (this._readWhitespace()){ functionText += tokenStream.token().value; } if (tokenStream.LA(0) == Tokens.COMMA){ functionText += tokenStream.token().value; } tokenStream.match(Tokens.IDENT); functionText += tokenStream.token().value; tokenStream.match(Tokens.EQUALS); functionText += tokenStream.token().value; lt = tokenStream.peek(); while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){ tokenStream.get(); functionText += tokenStream.token().value; lt = tokenStream.peek(); } } while(tokenStream.match([Tokens.COMMA, Tokens.S])); tokenStream.match(Tokens.RPAREN); functionText += ")"; this._readWhitespace(); } return functionText; }, _hexcolor: function(){ var tokenStream = this._tokenStream, token = null, color; if(tokenStream.match(Tokens.HASH)){ token = tokenStream.token(); color = token.value; if (!/#[a-f0-9]{3,6}/i.test(color)){ throw new SyntaxError("Expected a hex color but found '" + color + "' at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol); } this._readWhitespace(); } return token; }, _keyframes: function(){ var tokenStream = this._tokenStream, token, tt, name, prefix = ""; tokenStream.mustMatch(Tokens.KEYFRAMES_SYM); token = tokenStream.token(); if (/^@\-([^\-]+)\-/.test(token.value)) { prefix = RegExp.$1; } this._readWhitespace(); name = this._keyframe_name(); this._readWhitespace(); tokenStream.mustMatch(Tokens.LBRACE); this.fire({ type: "startkeyframes", name: name, prefix: prefix, line: token.startLine, col: token.startCol }); this._readWhitespace(); tt = tokenStream.peek(); while(tt == Tokens.IDENT || tt == Tokens.PERCENTAGE) { this._keyframe_rule(); this._readWhitespace(); tt = tokenStream.peek(); } this.fire({ type: "endkeyframes", name: name, prefix: prefix, line: token.startLine, col: token.startCol }); this._readWhitespace(); tokenStream.mustMatch(Tokens.RBRACE); }, _keyframe_name: function(){ var tokenStream = this._tokenStream, token; tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]); return SyntaxUnit.fromToken(tokenStream.token()); }, _keyframe_rule: function(){ var tokenStream = this._tokenStream, token, keyList = this._key_list(); this.fire({ type: "startkeyframerule", keys: keyList, line: keyList[0].line, col: keyList[0].col }); this._readDeclarations(true); this.fire({ type: "endkeyframerule", keys: keyList, line: keyList[0].line, col: keyList[0].col }); }, _key_list: function(){ var tokenStream = this._tokenStream, token, key, keyList = []; keyList.push(this._key()); this._readWhitespace(); while(tokenStream.match(Tokens.COMMA)){ this._readWhitespace(); keyList.push(this._key()); this._readWhitespace(); } return keyList; }, _key: function(){ var tokenStream = this._tokenStream, token; if (tokenStream.match(Tokens.PERCENTAGE)){ return SyntaxUnit.fromToken(tokenStream.token()); } else if (tokenStream.match(Tokens.IDENT)){ token = tokenStream.token(); if (/from|to/i.test(token.value)){ return SyntaxUnit.fromToken(token); } tokenStream.unget(); } this._unexpectedToken(tokenStream.LT(1)); }, _skipCruft: function(){ while(this._tokenStream.match([Tokens.S, Tokens.CDO, Tokens.CDC])){ } }, _readDeclarations: function(checkStart, readMargins){ var tokenStream = this._tokenStream, tt; this._readWhitespace(); if (checkStart){ tokenStream.mustMatch(Tokens.LBRACE); } this._readWhitespace(); try { while(true){ if (tokenStream.match(Tokens.SEMICOLON) || (readMargins && this._margin())){ } else if (this._declaration()){ if (!tokenStream.match(Tokens.SEMICOLON)){ break; } } else { break; } this._readWhitespace(); } tokenStream.mustMatch(Tokens.RBRACE); this._readWhitespace(); } catch (ex) { if (ex instanceof SyntaxError && !this.options.strict){ this.fire({ type: "error", error: ex, message: ex.message, line: ex.line, col: ex.col }); tt = tokenStream.advance([Tokens.SEMICOLON, Tokens.RBRACE]); if (tt == Tokens.SEMICOLON){ this._readDeclarations(false, readMargins); } else if (tt != Tokens.RBRACE){ throw ex; } } else { throw ex; } } }, _readWhitespace: function(){ var tokenStream = this._tokenStream, ws = ""; while(tokenStream.match(Tokens.S)){ ws += tokenStream.token().value; } return ws; }, _unexpectedToken: function(token){ throw new SyntaxError("Unexpected token '" + token.value + "' at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol); }, _verifyEnd: function(){ if (this._tokenStream.LA(1) != Tokens.EOF){ this._unexpectedToken(this._tokenStream.LT(1)); } }, _validateProperty: function(property, value){ Validation.validate(property, value); }, parse: function(input){ this._tokenStream = new TokenStream(input, Tokens); this._stylesheet(); }, parseStyleSheet: function(input){ return this.parse(input); }, parseMediaQuery: function(input){ this._tokenStream = new TokenStream(input, Tokens); var result = this._media_query(); this._verifyEnd(); return result; }, parsePropertyValue: function(input){ this._tokenStream = new TokenStream(input, Tokens); this._readWhitespace(); var result = this._expr(); this._readWhitespace(); this._verifyEnd(); return result; }, parseRule: function(input){ this._tokenStream = new TokenStream(input, Tokens); this._readWhitespace(); var result = this._ruleset(); this._readWhitespace(); this._verifyEnd(); return result; }, parseSelector: function(input){ this._tokenStream = new TokenStream(input, Tokens); this._readWhitespace(); var result = this._selector(); this._readWhitespace(); this._verifyEnd(); return result; }, parseStyleAttribute: function(input){ input += "}"; // for error recovery in _readDeclarations() this._tokenStream = new TokenStream(input, Tokens); this._readDeclarations(); } }; for (prop in additions){ if (additions.hasOwnProperty(prop)){ proto[prop] = additions[prop]; } } return proto; }(); var Properties = { "align-items" : "flex-start | flex-end | center | baseline | stretch", "align-content" : "flex-start | flex-end | center | space-between | space-around | stretch", "align-self" : "auto | flex-start | flex-end | center | baseline | stretch", "-webkit-align-items" : "flex-start | flex-end | center | baseline | stretch", "-webkit-align-content" : "flex-start | flex-end | center | space-between | space-around | stretch", "-webkit-align-self" : "auto | flex-start | flex-end | center | baseline | stretch", "alignment-adjust" : "auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | | ", "alignment-baseline" : "baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical", "animation" : 1, "animation-delay" : { multi: "